paste:{\r
paste_text_desc:"Inds\u00E6t ikke-formatteret tekst",\r
paste_word_desc:"Inds\u00E6t fra Word",\r
-selectall_desc:"V\u00E6lg alle"\r
+selectall_desc:"V\u00E6lg alle",\r
+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.",\r
+plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode."\r
},\r
paste_dlg:{\r
text_title:"Anvend CTRL+V p\u00E5 tastaturet for at inds\u00E6tte teksten.",\r
cell:"Celle"\r
},\r
autosave:{\r
-unload_msg:"Har du foretaget nogle \u00E6ndringer, vil de g\u00E5 tabt, hvis du navigerer v\u00E6k fra denne side."\r
+unload_msg:"Har du foretaget nogle \u00E6ndringer, vil de g\u00E5 tabt, hvis du navigerer v\u00E6k fra denne side.",\r
+restore_content:"Restore auto-saved content.",\r
+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?."\r
},\r
fullscreen:{\r
desc:"Vis/skjul fuldsk\u00E6rmstilstand"\r
},\r
pagebreak:{\r
desc:"Inds\u00E6t sideskift."\r
+},\r
+advlist:{\r
+types:"Types",\r
+def:"Default",\r
+lower_alpha:"Lower alpha",\r
+lower_greek:"Lower greek",\r
+lower_roman:"Lower roman",\r
+upper_alpha:"Upper alpha",\r
+upper_roman:"Upper roman",\r
+circle:"Circle",\r
+disc:"Disc",\r
+square:"Square"\r
}}});
\ No newline at end of file
tinyMCE.addI18n({de:{\r
common:{\r
-edit_confirm:"Wollen Sie diesen Textbereich mit WYSIWYG bearbeiten?",\r
+edit_confirm:"M\u00F6chten Sie diesen Text jetzt bearbeiten?",\r
apply:"\u00DCbernehmen",\r
insert:"Einf\u00FCgen",\r
update:"Aktualisieren",\r
cancel:"Abbrechen",\r
close:"Schlie\u00DFen",\r
browse:"Durchsuchen",\r
-class_name:"Klasse",\r
-not_set:"-- Nicht gesetzt --",\r
+class_name:"CSS-Klasse",\r
+not_set:"- unbestimmt -",\r
clipboard_msg:"Kopieren, Ausschneiden und Einf\u00FCgen sind im Mozilla Firefox nicht m\u00F6glich.\nM\u00F6chten Sie mehr \u00FCber dieses Problem erfahren?",\r
clipboard_no_support:"Wird derzeit in Ihrem Browser nicht unterst\u00FCtzt. Bitte benutzen Sie stattdessen die Tastenk\u00FCrzel.",\r
-popup_blocked:"Leider hat Ihr Popup-Blocker ein Fenster unterbunden, das f\u00FCr den Betrieb dieses Programms n\u00F6tig ist. Bitte deaktivieren Sie den Popup-Blocker, um die volle Funktionalit\u00E4t zu erlangen.",\r
+popup_blocked:"Leider hat Ihr Popup-Blocker ein Fenster unterbunden, das f\u00FCr den Betrieb dieses Programms n\u00F6tig ist. Bitte deaktivieren Sie den Popup-Blocker f\u00FCr diese Seite.",\r
invalid_data:"Fehler: Sie haben ung\u00FCltige Werte eingegeben (rot markiert).",\r
more_colors:"Weitere Farben"\r
},\r
contextmenu:{\r
align:"Ausrichtung",\r
-left:"Links",\r
-center:"Mittig",\r
-right:"Rechts",\r
+left:"Linksb\u00FCndig",\r
+center:"Zentriert",\r
+right:"Rechtsb\u00FCndig",\r
full:"Blocksatz"\r
},\r
insertdatetime:{\r
insertdate_desc:"Datum einf\u00FCgen",\r
inserttime_desc:"Zeit einf\u00FCgen",\r
months_long:"Januar,Februar,M\u00E4rz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember",\r
-months_short:"Jan,Feb,M\u00E4rz,Apr,Mai,Juni,Juli,Aug,Sept,Okt,Nov,Dez",\r
+months_short:"Jan,Feb,M\u00E4r,Apr,Mai,Juni,Juli,Aug,Sept,Okt,Nov,Dez",\r
day_long:"Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag",\r
day_short:"So,Mo,Di,Mi,Do,Fr,Sa,So"\r
},\r
},\r
layer:{\r
insertlayer_desc:"Neue Ebene einf\u00FCgen",\r
-forward_desc:"Vor verschieben",\r
-backward_desc:"Zur\u00FCck verschieben",\r
+forward_desc:"Nach vorne holen",\r
+backward_desc:"Nach hinten legen",\r
absolute_desc:"Absolute Positionierung",\r
content:"Neue Ebene..."\r
},\r
desc:"CSS-Styles bearbeiten"\r
},\r
paste:{\r
-paste_text_desc:"Als normalen Text einf\u00FCgen",\r
+paste_text_desc:"Als einfachen Text einf\u00FCgen",\r
paste_word_desc:"Mit Formatierungen (aus Word) einf\u00FCgen",\r
-selectall_desc:"Alles ausw\u00E4hlen"\r
+selectall_desc:"Alles ausw\u00E4hlen",\r
+plaintext_mode_sticky:"Einf\u00FCgemodus ist nun \"Nur Text\". Erneut klicken (oder das Einf\u00FCgen aus der Zwischenablage) stellt den Normalmodus wieder her.",\r
+plaintext_mode:"Einf\u00FCgemodus ist nun \"Nur Text\". Erneut klicken stellt den Normalmodus wieder her."\r
},\r
paste_dlg:{\r
text_title:"Dr\u00FCcken Sie auf Ihrer Tastatur Strg+V, um den Text einzuf\u00FCgen.",\r
word_title:"Dr\u00FCcken Sie auf Ihrer Tastatur Strg+V, um den Text einzuf\u00FCgen."\r
},\r
table:{\r
-desc:"Tabelle erstellen",\r
+desc:"Tabelle erstellen/bearbeiten",\r
row_before_desc:"Zeile oberhalb einf\u00FCgen",\r
row_after_desc:"Zeile unterhalb einf\u00FCgen",\r
-delete_row_desc:"Zeile entfernen",\r
+delete_row_desc:"Zeile l\u00F6schen",\r
col_before_desc:"Spalte links einf\u00FCgen",\r
col_after_desc:"Spalte rechts einf\u00FCgen",\r
delete_col_desc:"Spalte l\u00F6schen",\r
-split_cells_desc:"Vereinte Zellen trennen",\r
-merge_cells_desc:"Zellen vereinen",\r
+split_cells_desc:"Verbundene Zellen trennen",\r
+merge_cells_desc:"Zellen verbinden",\r
row_desc:"Eigenschaften der Zeile",\r
cell_desc:"Eigenschaften der Zelle",\r
props_desc:"Eigenschaften der Tabelle",\r
paste_row_after_desc:"Zeile unterhalb aus der Zwischenablage einf\u00FCgen",\r
cut_row_desc:"Zeile ausschneiden",\r
copy_row_desc:"Zeile kopieren",\r
-del:"Tabelle entfernen",\r
+del:"Tabelle l\u00F6schen",\r
row:"Zeile",\r
col:"Spalte",\r
cell:"Zelle",\r
cellprops_delta_width:"150"\r
},\r
autosave:{\r
-unload_msg:"Ihre \u00C4nderungen werden verloren gehen, wenn Sie die Seite verlassen."\r
+unload_msg:"Ihre \u00C4nderungen werden verloren gehen, wenn Sie die Seite verlassen.",\r
+restore_content:"Automatisch gespeicherten Inhalt wiederherstellen.",\r
+warning_message:"Wenn Sie den Inhalt wiederherstellen, gehen die aktuellen Daten im Editor verloren.\n\nSind sie sicher, dass Sie den Inhalt wiederherstellen m\u00F6chten?"\r
},\r
fullscreen:{\r
desc:"Vollbildschirm"\r
desc:"Dokument-Eigenschaften"\r
},\r
template:{\r
-desc:"Vorgefertigten Vorlageninhalt einf\u00FCgen"\r
+desc:"Inhalt aus Vorlage einf\u00FCgen"\r
},\r
visualchars:{\r
-desc:"Sichtbarkeit der Steuerzeichen an/aus."\r
+desc:"Sichtbarkeit der Steuerzeichen an/aus"\r
},\r
spellchecker:{\r
desc:"Rechtschreibpr\u00FCfung an/aus",\r
no_mpell:"Keine Rechtschreibfehler gefunden."\r
},\r
pagebreak:{\r
-desc:"Seitenumbruch Einf\u00FCgen."\r
+desc:"Seitenumbruch einf\u00FCgen"\r
+},\r
+advlist:{\r
+types:"Typen",\r
+def:"Standard",\r
+lower_alpha:"a. b. c.",\r
+lower_greek:"1. 2. 3.",\r
+lower_roman:"i. ii. iii.",\r
+upper_alpha:"A. B. C.",\r
+upper_roman:"I. II. III.",\r
+circle:"Kreis",\r
+disc:"Punkt",\r
+square:"Quadrat"\r
}}});
\ No newline at end of file
paste:{\r
paste_text_desc:"Paste as Plain Text",\r
paste_word_desc:"Paste from Word",\r
-selectall_desc:"Select All"\r
+selectall_desc:"Select All",\r
+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.",\r
+plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode."\r
},\r
paste_dlg:{\r
text_title:"Use CTRL+V on your keyboard to paste the text into the window.",\r
cell:"Cell"\r
},\r
autosave:{\r
-unload_msg:"The changes you made will be lost if you navigate away from this page."\r
+unload_msg:"The changes you made will be lost if you navigate away from this page.",\r
+restore_content:"Restore auto-saved content.",\r
+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?."\r
},\r
fullscreen:{\r
desc:"Toggle fullscreen mode"\r
},\r
pagebreak:{\r
desc:"Insert page break."\r
+},\r
+advlist:{\r
+types:"Types",\r
+def:"Default",\r
+lower_alpha:"Lower alpha",\r
+lower_greek:"Lower greek",\r
+lower_roman:"Lower roman",\r
+upper_alpha:"Upper alpha",\r
+upper_roman:"Upper roman",\r
+circle:"Circle",\r
+disc:"Disc",\r
+square:"Square"\r
}}});
\ No newline at end of file
paste:{\r
paste_text_desc:"Pegar como texto plano",\r
paste_word_desc:"Pegar desde Word",\r
-selectall_desc:"Seleccionar todo"\r
+selectall_desc:"Elegir todo",\r
+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.",\r
+plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode."\r
},\r
paste_dlg:{\r
text_title:"Use CTRL+V en su teclado para pegar el texto en la ventana.",\r
cell:"Celda"\r
},\r
autosave:{\r
-unload_msg:"Los cambios realizados se perder\u00E1n si sale de esta p\u00E1gina."\r
+unload_msg:"Los cambios realizados se perder\u00E1n si sale de esta p\u00E1gina.",\r
+restore_content:"Reestablecer contenido guardado autom\u00E1ticamente",\r
+warning_message:"Se reestablece en contenido guardado, perder\u00E1 todo el contenido que est\u00E1 actualmente en el editor.\n\nEst\u00E1 seguro de que quiere reestablecer el contenido guardado."\r
},\r
fullscreen:{\r
desc:"Cambiar a modo Pantalla Completa"\r
edit:"Editar medio embebido"\r
},\r
fullpage:{\r
-desc:"Propiedades del documento"\r
+desc:"Propiedades del documento",\r
+delta_width:"Ancho",\r
+delta_height:"Alto"\r
},\r
template:{\r
desc:"Insertar contenido de plantilla predefinida"\r
},\r
pagebreak:{\r
desc:"Insertar fin de p\u00E1gina"\r
+},\r
+advlist:{\r
+types:"Tipo",\r
+def:"Preestablecido",\r
+lower_alpha:"Menos opaco",\r
+lower_greek:"Menos greek",\r
+lower_roman:"Menos roman",\r
+upper_alpha:"M\u00E1s opaco",\r
+upper_roman:"M\u00E1s roman",\r
+circle:"Circulo",\r
+disc:"Disc",\r
+square:"Cuadro"\r
}}});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n({et:{\r
+common:{\r
+edit_confirm:"Kas soovite kasutada WYSIWYG re\u017Eiimi sellel tekstialal?",\r
+apply:"Rakenda",\r
+insert:"Sisesta",\r
+update:"Uuenda",\r
+cancel:"T\u00FChista",\r
+close:"Sule",\r
+browse:"Sirvi",\r
+class_name:"Klass",\r
+not_set:"-- Seadmata --",\r
+clipboard_msg:"Kopeeri/L\u00F5ika/Kleebi ei ole saadaval Mozillas ja Firefoxis.\nKas soovite rohkem infot selle probleemi kohta?",\r
+clipboard_no_support:"Hetkel ei ole toetatud Teie lehitseja poolt, kasutage klaviatuuri otseteid selle asemel.",\r
+popup_blocked:"Vabandust, aga Teie h\u00FCpikakna t\u00F5kestaja on blokeerinud akna, mis varustab rakenduse funktsionaalsust. Palun lubage h\u00FCpikaknad sellel kodulehel, et t\u00E4ielikult kasutada seda vahendit.",\r
+invalid_data:"Viga: Kehtetud v\u00E4\u00E4rtused sisestatud, need on m\u00E4rgitud punasega.",\r
+more_colors:"Rohkem v\u00E4rve"\r
+},\r
+contextmenu:{\r
+align:"Joondus",\r
+left:"Vasak",\r
+center:"Kesk",\r
+right:"Parem",\r
+full:"T\u00E4is"\r
+},\r
+insertdatetime:{\r
+date_fmt:"%A-%k-%p",\r
+time_fmt:"%T:%M:%S",\r
+insertdate_desc:"Sisesta kuup\u00E4ev",\r
+inserttime_desc:"Sisesta aeg",\r
+months_long:"Jaanuar,Veebruar,M\u00E4rts,Aprill,Mai,Juuni,Juuli,August,September,Oktoober,November,Detsember",\r
+months_short:"Jaan,Veeb,M\u00E4rts,Apr,Mai,Juuni,Juuli,Aug,Sept,Okt,Nov,Dets",\r
+day_long:"P\u00FChap\u00E4ev,Esmasp\u00E4ev,Teisip\u00E4ev,Kolmap\u00E4ev,Neljap\u00E4ev,Reede,Laup\u00E4ev,P\u00FChap\u00E4ev",\r
+day_short:"P,E,T,K,N,R,L,P"\r
+},\r
+print:{\r
+print_desc:"Print"\r
+},\r
+preview:{\r
+preview_desc:"Eelvaade"\r
+},\r
+directionality:{\r
+ltr_desc:"Suund vasakult paremale",\r
+rtl_desc:"Suund paremalt vasakule"\r
+},\r
+layer:{\r
+insertlayer_desc:"Sisesta uus kiht",\r
+forward_desc:"Liiguta edasi",\r
+backward_desc:"Liiguta tagasi",\r
+absolute_desc:"L\u00FClita \u00FCmber absoluutne positsioneerimine",\r
+content:"Uus kiht..."\r
+},\r
+save:{\r
+save_desc:"Salvesta",\r
+cancel_desc:"T\u00FChista k\u00F5ik muudatused"\r
+},\r
+nonbreaking:{\r
+nonbreaking_desc:"Sisesta mittekatkestav t\u00FChik"\r
+},\r
+iespell:{\r
+iespell_desc:"\u00D5igekirja kontroll",\r
+download:"ie\u00D5igekiri tuvastamata. Kas soovite paigaldada n\u00FC\u00FCd?"\r
+},\r
+advhr:{\r
+advhr_desc:"Horisontaalne joonlaud"\r
+},\r
+emotions:{\r
+emotions_desc:"Emotsioonid"\r
+},\r
+searchreplace:{\r
+search_desc:"Otsi",\r
+replace_desc:"Otsi/Asenda"\r
+},\r
+advimage:{\r
+image_desc:"Sisesta/redigeeri pilt"\r
+},\r
+advlink:{\r
+link_desc:"Sisesta/redigeeri link"\r
+},\r
+xhtmlxtras:{\r
+cite_desc:"Tsitaat",\r
+abbr_desc:"L\u00FChend",\r
+acronym_desc:"Akron\u00FC\u00FCm",\r
+del_desc:"Kustutus",\r
+ins_desc:"Lisandus",\r
+attribs_desc:"Sisesta muuda atribuute"\r
+},\r
+style:{\r
+desc:"Redigeeri CSS stiili"\r
+},\r
+paste:{\r
+paste_text_desc:"Kleebi tavalise tekstina",\r
+paste_word_desc:"Kleebi Wordist",\r
+selectall_desc:"Vali k\u00F5ik",\r
+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.",\r
+plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode."\r
+},\r
+paste_dlg:{\r
+text_title:"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks.",\r
+text_linebreaks:"J\u00E4ta reavahetused",\r
+word_title:"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks."\r
+},\r
+table:{\r
+desc:"Sisestab uue tabeli",\r
+row_before_desc:"Sisesta rida ette",\r
+row_after_desc:"Sisesta rida j\u00E4rgi",\r
+delete_row_desc:"Kustuta rida",\r
+col_before_desc:"Sisesta veerg ette",\r
+col_after_desc:"Sisesta veerg j\u00E4rgi",\r
+delete_col_desc:"Kustuta veerg",\r
+split_cells_desc:"Eralda \u00FChendatud tabeli lahtrid",\r
+merge_cells_desc:"\u00DChenda tabeli lahtrid",\r
+row_desc:"Tabeli rea omadused",\r
+cell_desc:"Tabeli lahtri omadused",\r
+props_desc:"Tabeli omadused",\r
+paste_row_before_desc:"Kleebi tabeli rida ette",\r
+paste_row_after_desc:"Kleebi tabeli rida j\u00E4rgi",\r
+cut_row_desc:"L\u00F5ika tabeli rida",\r
+copy_row_desc:"Kopeeri tabeli rida",\r
+del:"Kustuta tabel",\r
+row:"Rida",\r
+col:"Veerg",\r
+cell:"Lahter"\r
+},\r
+autosave:{\r
+unload_msg:"Tehtud muudatused kaovad, kui lahkute siit lehelt.",\r
+restore_content:"Restore auto-saved content.",\r
+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?."\r
+},\r
+fullscreen:{\r
+desc:"L\u00FClita \u00FCmber t\u00E4isekraani re\u017Eiim"\r
+},\r
+media:{\r
+desc:"Sisesta / redigeeri manustatud meedia",\r
+edit:"Redigeeri manustatud meedia"\r
+},\r
+fullpage:{\r
+desc:"Dokumendi omadused"\r
+},\r
+template:{\r
+desc:"Sisesta eeldefineeritud \u0161ablooni sisu"\r
+},\r
+visualchars:{\r
+desc:"Visuaalsed kontrollt\u00E4hem\u00E4rgid sisse/v\u00E4lja"\r
+},\r
+spellchecker:{\r
+desc:"L\u00FClita \u00FCmber \u00F5igekirja kontroll",\r
+menu:"\u00D5igekirja kontrolli seaded",\r
+ignore_word:"J\u00E4ta s\u00F5na vahele",\r
+ignore_words:"J\u00E4ra k\u00F5ik vahele",\r
+langs:"Keeled",\r
+wait:"Palun oota...",\r
+sug:"Soovitused",\r
+no_sug:"Soovitusi pole",\r
+no_mpell:"Valesti kirjutamisi ei leitud."\r
+},\r
+pagebreak:{\r
+desc:"Sisesta lehevahetus."\r
+},\r
+advlist:{\r
+types:"Types",\r
+def:"Default",\r
+lower_alpha:"Lower alpha",\r
+lower_greek:"Lower greek",\r
+lower_roman:"Lower roman",\r
+upper_alpha:"Upper alpha",\r
+upper_roman:"Upper roman",\r
+circle:"Circle",\r
+disc:"Disc",\r
+square:"Square"\r
+}}});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n({fr:{\r
+common:{\r
+edit_confirm:"Souhaitez-vous utiliser le mode WYSIWYG pour cette zone de texte ?",\r
+apply:"Appliquer",\r
+insert:"Ins\u00E9rer",\r
+update:"Mettre \u00E0 jour",\r
+cancel:"Annuler",\r
+close:"Fermer",\r
+browse:"parcourir",\r
+class_name:"Classe",\r
+not_set:"-- non d\u00E9fini --",\r
+clipboard_msg:"Les fonctions Copier/Couper/Coller ne sont pas valables sur Mozilla et Firefox.\nSouhaitez-vous avoir plus d'informations sur ce sujet ?",\r
+clipboard_no_support:"Actuellement non support\u00E9 par votre navigateur.\n Veuillez utiliser les raccourcis clavier \u00E0 la place.",\r
+popup_blocked:"D\u00E9sol\u00E9, nous avons d\u00E9tect\u00E9 que votre bloqueur de popup a bloqu\u00E9 une fen\u00EAtre dont l'application a besoin. Vous devez d\u00E9sactiver votre bloqueur de popup pour pouvoir utiliser cet outil.",\r
+invalid_data:"Erreur : saisie de valeurs incorrectes. Elles sont mises en \u00E9vidence en rouge.",\r
+more_colors:"Plus de couleurs"\r
+},\r
+contextmenu:{\r
+align:"Alignement",\r
+left:"Gauche",\r
+center:"Centr\u00E9",\r
+right:"Droite",\r
+full:"Justifi\u00E9"\r
+},\r
+insertdatetime:{\r
+date_fmt:"%d-%m-%Y",\r
+time_fmt:"%H:%M:%S",\r
+insertdate_desc:"Ins\u00E9rer la date",\r
+inserttime_desc:"Ins\u00E9rer l'heure",\r
+months_long:"Janvier,F\u00E9vrier,Mars,Avril,Mai,Juin,Juillet,Ao\u00FBt,Septembre,Octobre,Novembre,D\u00E9cembre",\r
+months_short:"Jan,F\u00E9v,Mar,Avr,Mai,Juin,Juil,Ao\u00FBt,Sep,Oct,Nov,D\u00E9c",\r
+day_long:"Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche",\r
+day_short:"Dim,Lun,Mar,Mer,Jeu,Ven,Sam,Dim"\r
+},\r
+print:{\r
+print_desc:"Imprimer"\r
+},\r
+preview:{\r
+preview_desc:"Pr\u00E9visualiser"\r
+},\r
+directionality:{\r
+ltr_desc:"\u00C9criture de gauche \u00E0 droite",\r
+rtl_desc:"\u00C9criture de droite \u00E0 gauche"\r
+},\r
+layer:{\r
+insertlayer_desc:"Ins\u00E9rer une nouvelle couche",\r
+forward_desc:"D\u00E9placer vers l'avant",\r
+backward_desc:"D\u00E9placer vers l'arri\u00E8re",\r
+absolute_desc:"Activer le positionnement absolu",\r
+content:"Nouvelle couche\u2026"\r
+},\r
+save:{\r
+save_desc:"Enregistrer",\r
+cancel_desc:"Annuler toutes les modifications"\r
+},\r
+nonbreaking:{\r
+nonbreaking_desc:"Ins\u00E9rer une espace ins\u00E9cable"\r
+},\r
+iespell:{\r
+iespell_desc:"Lancer le v\u00E9rificateur d'orthographe",\r
+download:"ieSpell n'est pas install\u00E9. Souhaitez-vous l'installer maintenant ?"\r
+},\r
+advhr:{\r
+advhr_desc:"Ins\u00E9rer un trait horizontal"\r
+},\r
+emotions:{\r
+emotions_desc:"\u00C9motic\u00F4nes"\r
+},\r
+searchreplace:{\r
+search_desc:"Rechercher",\r
+replace_desc:"Rechercher / remplacer"\r
+},\r
+advimage:{\r
+image_desc:"Ins\u00E9rer / \u00E9diter une image"\r
+},\r
+advlink:{\r
+link_desc:"Ins\u00E9rer / \u00E9diter un lien"\r
+},\r
+xhtmlxtras:{\r
+cite_desc:"Citation",\r
+abbr_desc:"Abr\u00E9viation",\r
+acronym_desc:"Acronyme",\r
+del_desc:"Barr\u00E9",\r
+ins_desc:"Ins\u00E9r\u00E9",\r
+attribs_desc:"Ins\u00E9rer / \u00E9diter les attributs"\r
+},\r
+style:{\r
+desc:"\u00C9diter la feuille de style (CSS)"\r
+},\r
+paste:{\r
+paste_text_desc:"Coller comme texte brut",\r
+paste_word_desc:"Coller un texte cr\u00E9\u00E9 sous Word",\r
+selectall_desc:"Tout s\u00E9lectionner",\r
+plaintext_mode_sticky:"Le collage est actuellement en mode texte non format\u00E9. Cliquez \u00E0 nouveau pour revenir en mode de collage ordinaire. Apr\u00E8s avoir coll\u00E9 quelque chose, vous retournerez en mode de collage ordinaire.",\r
+plaintext_mode:"Le collage est actuellement en mode texte non format\u00E9. Cliquez \u00E0 nouveau pour revenir en mode de collage ordinaire."\r
+},\r
+paste_dlg:{\r
+text_title:"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00EAtre.",\r
+text_linebreaks:"Conserver les retours \u00E0 la ligne",\r
+word_title:"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00EAtre."\r
+},\r
+table:{\r
+desc:"Ins\u00E9rer un nouveau tableau",\r
+row_before_desc:"Ins\u00E9rer une ligne avant",\r
+row_after_desc:"Ins\u00E9rer une ligne apr\u00E8s",\r
+delete_row_desc:"Effacer la ligne",\r
+col_before_desc:"Ins\u00E9rer une colonne avant",\r
+col_after_desc:"Ins\u00E9rer une colonne apr\u00E8s",\r
+delete_col_desc:"Effacer la colonne",\r
+split_cells_desc:"Scinder les cellules fusionn\u00E9es",\r
+merge_cells_desc:"Fusionner les cellules",\r
+row_desc:"Propri\u00E9t\u00E9s de la ligne",\r
+cell_desc:"Propri\u00E9t\u00E9s de la cellule",\r
+props_desc:"Propri\u00E9t\u00E9s du tableau",\r
+paste_row_before_desc:"Coller la ligne avant",\r
+paste_row_after_desc:"Coller la ligne apr\u00E8s",\r
+cut_row_desc:"Couper la ligne",\r
+copy_row_desc:"Copier la ligne",\r
+del:"Effacer le tableau",\r
+row:"Ligne",\r
+col:"Colonne",\r
+cell:"Cellule"\r
+},\r
+autosave:{\r
+unload_msg:"Les modifications apport\u00E9es seront perdus si vous quittez cette page.",\r
+restore_content:"Restaurer le contenu auto-sauvegard\u00E9.",\r
+warning_message:"Si vous restaurez le contenu sauv\u00E9, vous perdrez le contenu qui est actuellement dans l'\u00E9diteur.\n\n\u00CAtes-vous s\u00FBr de vouloir restaurer le contenu sauv\u00E9 ?"\r
+},\r
+fullscreen:{\r
+desc:"Passer en mode plein \u00E9cran"\r
+},\r
+media:{\r
+desc:"Ins\u00E9rer / \u00E9diter un m\u00E9dia incorpor\u00E9",\r
+edit:"\u00C9diter un m\u00E9dia incorpor\u00E9"\r
+},\r
+fullpage:{\r
+desc:"Propri\u00E9t\u00E9s du document"\r
+},\r
+template:{\r
+desc:"Ins\u00E9rer un mod\u00E8le pr\u00E9d\u00E9fini."\r
+},\r
+visualchars:{\r
+desc:"Activer les caract\u00E8res de mise en page."\r
+},\r
+spellchecker:{\r
+desc:"Activer le v\u00E9rificateur d'orthographe",\r
+menu:"Param\u00E8tres du v\u00E9rificateur d'orthographe",\r
+ignore_word:"Ignorer le mot",\r
+ignore_words:"Tout ignorer",\r
+langs:"Langues",\r
+wait:"Veuillez patienter\u2026",\r
+sug:"Suggestions",\r
+no_sug:"Aucune suggestion",\r
+no_mpell:"Aucune erreur trouv\u00E9e."\r
+},\r
+pagebreak:{\r
+desc:"Ins\u00E9rer un saut de page."\r
+},\r
+advlist:{\r
+types:"Types",\r
+def:"Defaut",\r
+lower_alpha:"Alpha minuscule",\r
+lower_greek:"Grec minuscule",\r
+lower_roman:"Romain minuscule",\r
+upper_alpha:"Alpha majuscule",\r
+upper_roman:"Romain majuscule",\r
+circle:"Cercle",\r
+disc:"Disque",\r
+square:"Carr\u00E9"\r
+}}});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n({hu:{\r
+common:{\r
+edit_confirm:"Haszn\u00E1lni k\u00EDv\u00E1nja a sz\u00F6vegszerkeszt\u0151 m\u00F3dot ebben a sz\u00F6vegdobozban?",\r
+apply:"Alkalmaz\u00E1s",\r
+insert:"Besz\u00FAr\u00E1s",\r
+update:"Friss\u00EDt\u00E9s",\r
+cancel:"M\u00E9gsem",\r
+close:"Bez\u00E1r\u00E1s",\r
+browse:"Tall\u00F3z\u00E1s",\r
+class_name:"Oszt\u00E1ly",\r
+not_set:"-- Nincs megadva --",\r
+clipboard_msg:"A M\u00E1sol\u00E1s/Kiv\u00E1g\u00E1s/Besz\u00FAr\u00E1s funkci\u00F3k nem \u00E9rhet\u0151ek el Mozilla \u00E9s Firefox alatt.\nK\u00EDv\u00E1n t\u00F6bbet tudni err\u0151l a t\u00E9m\u00E1r\u00F3l?",\r
+clipboard_no_support:"Jelenleg nem t\u00E1mogatja a b\u00F6ng\u00E9sz\u0151je, haszn\u00E1lja a billenty\u0171kombin\u00E1ci\u00F3kat helyette.",\r
+popup_blocked:"A felugr\u00F3 ablakok tilt\u00E1sa miatt nem siker\u00FClt megjelen\u00EDteni egy, az alkalmaz\u00E1shoz sz\u00FCks\u00E9ges ablakot. Enged\u00E9lyezze a b\u00F6ng\u00E9sz\u0151j\u00E9ben a felugr\u00F3 ablakokat, hogy minden funkci\u00F3t haszn\u00E1lhasson.",\r
+invalid_data:"Hiba: \u00C9rv\u00E9nytelen adatok, pirossal jel\u00F6lve.",\r
+more_colors:"T\u00F6bb sz\u00EDn"\r
+},\r
+contextmenu:{\r
+align:"Igaz\u00EDt\u00E1s",\r
+left:"Balra",\r
+center:"K\u00F6z\u00E9pre",\r
+right:"Jobbra",\r
+full:"Sorkiz\u00E1r\u00E1s"\r
+},\r
+insertdatetime:{\r
+date_fmt:"%Y.%m.%d.",\r
+time_fmt:"%H:%M:%S",\r
+insertdate_desc:"D\u00E1tum besz\u00FAr\u00E1sa",\r
+inserttime_desc:"Id\u0151 besz\u00FAr\u00E1sa",\r
+months_long:"janu\u00E1r,febru\u00E1r,m\u00E1rcius,\u00E1prilis,m\u00E1jus,j\u00FAnius,j\u00FAlius,augusztus,szeptember,okt\u00F3ber,november,december",\r
+months_short:"jan,feb,m\u00E1r,\u00E1pr,m\u00E1j,j\u00FAn,j\u00FAl,aug,szept,okt,nov,dec",\r
+day_long:"vas\u00E1rnap,h\u00E9tf\u0151,kedd,szerda,cs\u00FCt\u00F6rt\u00F6k,p\u00E9ntek,szombat,vas\u00E1rnap",\r
+day_short:"V,H,K,Sze,Cs,P,Szo,V"\r
+},\r
+print:{\r
+print_desc:"Nyomtat\u00E1s"\r
+},\r
+preview:{\r
+preview_desc:"El\u0151n\u00E9zet"\r
+},\r
+directionality:{\r
+ltr_desc:"Balr\u00F3l jobbra",\r
+rtl_desc:"Jobbr\u00F3l balra"\r
+},\r
+layer:{\r
+insertlayer_desc:"\u00DAj r\u00E9teg besz\u00FAr\u00E1sa",\r
+forward_desc:"Mozgat\u00E1s el\u0151re",\r
+backward_desc:"Mozgat\u00E1s h\u00E1tra",\r
+absolute_desc:"Abszol\u00FAt poz\u00EDci\u00F3 ki-/bekapcsol\u00E1sa",\r
+content:"\u00DAj r\u00E9teg..."\r
+},\r
+save:{\r
+save_desc:"Ment\u00E9s",\r
+cancel_desc:"\u00D6sszes v\u00E1ltoz\u00E1s visszavon\u00E1sa"\r
+},\r
+nonbreaking:{\r
+nonbreaking_desc:"Nemsort\u00F6r\u0151 sz\u00F3k\u00F6z besz\u00FAr\u00E1sa"\r
+},\r
+iespell:{\r
+iespell_desc:"Helyes\u00EDr\u00E1s-ellen\u0151rz\u00E9s futtat\u00E1sa",\r
+download:"ieSpell nem tal\u00E1lhat\u00F3. Telep\u00EDti most?"\r
+},\r
+advhr:{\r
+advhr_desc:"V\u00EDzszintes vonal"\r
+},\r
+emotions:{\r
+emotions_desc:"Hangulatjelek"\r
+},\r
+searchreplace:{\r
+search_desc:"Keres\u00E9s",\r
+replace_desc:"Keres\u00E9s/Csere"\r
+},\r
+advimage:{\r
+image_desc:"K\u00E9p besz\u00FAr\u00E1sa/szerkeszt\u00E9se"\r
+},\r
+advlink:{\r
+link_desc:"Link besz\u00FAr\u00E1sa/szerkeszt\u00E9s"\r
+},\r
+xhtmlxtras:{\r
+cite_desc:"Id\u00E9zet",\r
+abbr_desc:"R\u00F6vid\u00EDt\u00E9s",\r
+acronym_desc:"Bet\u0171sz\u00F3",\r
+del_desc:"T\u00F6r\u00F6lt",\r
+ins_desc:"Besz\u00FArt",\r
+attribs_desc:"Tulajdons\u00E1gok besz\u00FAr\u00E1sa/szerkeszt\u00E9se"\r
+},\r
+style:{\r
+desc:"CSS st\u00EDlus szerkeszt\u00E9se"\r
+},\r
+paste:{\r
+paste_text_desc:"Besz\u00FAr\u00E1s sz\u00F6vegk\u00E9nt",\r
+paste_word_desc:"Besz\u00FAr\u00E1s Wordb\u0151l",\r
+selectall_desc:"Mindent kijel\u00F6l",\r
+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.",\r
+plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode."\r
+},\r
+paste_dlg:{\r
+text_title:"Haszn\u00E1lja a Ctrl+V-t a billenty\u0171zet\u00E9n a beilleszt\u00E9shez.",\r
+text_linebreaks:"Sort\u00F6r\u00E9sek megtart\u00E1sa",\r
+word_title:"Haszn\u00E1lja a Ctrl+V-t a billenty\u0171zet\u00E9n a beilleszt\u00E9shez."\r
+},\r
+table:{\r
+desc:"T\u00E1bl\u00E1zat besz\u00FAr\u00E1sa/szerkeszt\u00E9se",\r
+row_before_desc:"Sor besz\u00FAr\u00E1sa el\u00E9",\r
+row_after_desc:"Sor besz\u00FAr\u00E1sa ut\u00E1na",\r
+delete_row_desc:"Sor t\u00F6rl\u00E9se",\r
+col_before_desc:"Oszlop besz\u00FAr\u00E1sa el\u00E9",\r
+col_after_desc:"Oszlop besz\u00FAr\u00E1sa ut\u00E1na",\r
+delete_col_desc:"Oszlop t\u00F6rl\u00E9se",\r
+split_cells_desc:"Cell\u00E1k feloszt\u00E1sa",\r
+merge_cells_desc:"Cell\u00E1k \u00F6sszevon\u00E1sa",\r
+row_desc:"Sor tulajdons\u00E1gai",\r
+cell_desc:"Cella tulajdons\u00E1gai",\r
+props_desc:"T\u00E1bl\u00E1zat tulajdons\u00E1gai",\r
+paste_row_before_desc:"Sor bem\u00E1sol\u00E1sa el\u00E9",\r
+paste_row_after_desc:"Sor bem\u00E1sol\u00E1sa ut\u00E1na",\r
+cut_row_desc:"Sor kiv\u00E1g\u00E1sa",\r
+copy_row_desc:"Sor m\u00E1sol\u00E1sa",\r
+del:"T\u00E1bl\u00E1zat t\u00F6rl\u00E9se",\r
+row:"Sor",\r
+col:"Oszlop",\r
+cell:"Cella"\r
+},\r
+autosave:{\r
+unload_msg:"A m\u00F3dos\u00EDt\u00E1sok nem lesznek mentve, ha elhagyja az oldalt.",\r
+restore_content:"Restore auto-saved content.",\r
+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?."\r
+},\r
+fullscreen:{\r
+desc:"Teljesk\u00E9perny\u0151s m\u00F3d ki-/bekapcsol\u00E1sa"\r
+},\r
+media:{\r
+desc:"Be\u00E1gyazott m\u00E9dia besz\u00FAr\u00E1sa/szerkeszt\u00E9se",\r
+edit:"Be\u00E1gyazott m\u00E9dia szerkeszt\u00E9se"\r
+},\r
+fullpage:{\r
+desc:"Dokumentum tulajdons\u00E1gai"\r
+},\r
+template:{\r
+desc:"Sablon beilleszt\u00E9se"\r
+},\r
+visualchars:{\r
+desc:"Vizu\u00E1lis vez\u00E9rl\u0151karakterek be/ki."\r
+},\r
+spellchecker:{\r
+desc:"Helyes\u00EDr\u00E1s-ellen\u0151rz\u0151 ki-/bekapcsol\u00E1sa",\r
+menu:"Helyes\u00EDr\u00E1s-ellen\u0151rz\u0151 tulajdons\u00E1gai",\r
+ignore_word:"Sz\u00F3 kihagy\u00E1sa",\r
+ignore_words:"Mindet kihagy",\r
+langs:"Nyelvek",\r
+wait:"K\u00E9rem, v\u00E1rjon...",\r
+sug:"Aj\u00E1nl\u00E1sok",\r
+no_sug:"Nincs aj\u00E1nl\u00E1s",\r
+no_mpell:"Nem tal\u00E1ltam helyes\u00EDr\u00E1si hib\u00E1t."\r
+},\r
+pagebreak:{\r
+desc:"Oldalt\u00F6r\u00E9s besz\u00FAr\u00E1sa."\r
+},\r
+advlist:{\r
+types:"Types",\r
+def:"Default",\r
+lower_alpha:"Lower alpha",\r
+lower_greek:"Lower greek",\r
+lower_roman:"Lower roman",\r
+upper_alpha:"Upper alpha",\r
+upper_roman:"Upper roman",\r
+circle:"K\u00F6r",\r
+disc:"Lemez",\r
+square:"Square"\r
+}}});
\ No newline at end of file
not_set:"-- Non impostato --",\r
clipboard_msg:"Copia/Taglia/Incolla non \u00E8 disponibile in Mozilla e Firefox.\nSi desidera avere maggiori informazioni su questo problema?",\r
clipboard_no_support:"Attualmente non supportato dal browser in uso, usare le scorciatoie da tastiera.",\r
-popup_blocked:"Spiacente, ma il blocco delle popup ha disabilitato una finestra che fornisce funzionalit\u00E0 dell'applicazione. Si deve disabilitare il blocco delle popup per questo sito per poter utlizzare appieno questo strumento.",\r
+popup_blocked:"Spiacente, ma il blocco popup ha disabilitato una finestra che fornisce funzionalit\u00E0 dell'applicazione. Si deve disabilitare il blocco popup per questo sito per poter utlizzare appieno questo strumento.",\r
invalid_data:"Errore: valori inseriti non validi, sono marcati in rosso.",\r
more_colors:"Colori aggiuntivi"\r
},\r
content:"Nuovo layer..."\r
},\r
save:{\r
-save_desc:"Save",\r
+save_desc:"Salva",\r
cancel_desc:"Cancella tutte le modifiche"\r
},\r
nonbreaking:{\r
paste:{\r
paste_text_desc:"Incolla come testo semplice",\r
paste_word_desc:"Incolla da Word",\r
-selectall_desc:"Seleziona tutto"\r
+selectall_desc:"Seleziona tutto",\r
+plaintext_mode_sticky:"Incolla adesso e in modalit\u00E0 testo. Clicca nuovamente per tornare alla modalit\u00E0 normale. Dopo che avrai incollato qualcosa tornerai alla modalit\u00E0 normale",\r
+plaintext_mode:"Incolla adesso e in modalit\u00E0 testo. Clicca nuovamente per tornare alla modalit\u00E0 normale."\r
},\r
paste_dlg:{\r
text_title:"Premere CTRL+V sulla tastiera per incollare il testo nella finestra.",\r
cell:"Cella"\r
},\r
autosave:{\r
-unload_msg:"I cambiamenti effettuati saranno persi se si abbandona la pagina corrente."\r
+unload_msg:"I cambiamenti effettuati saranno persi se si abbandona la pagina corrente.",\r
+restore_content:"Ripristina i dati salvati automaticamente",\r
+warning_message:"Se ripristini i dati salvati automaticamente perderai i dati attuali dell'editor\n\nSei sicuro di voler ripristinare i dati?."\r
},\r
fullscreen:{\r
desc:"Attiva/disattiva modalit\u00E0 a tutto schermo"\r
},\r
pagebreak:{\r
desc:"Inserisci intterruzione di pagina."\r
+},\r
+advlist:{\r
+types:"Tipi",\r
+def:"Default",\r
+lower_alpha:"Minuscolo alfanumerico",\r
+lower_greek:"Minuscolo lettera greca",\r
+lower_roman:"Minuscolo lettere romane",\r
+upper_alpha:"Maiuscolo alfanumerico",\r
+upper_roman:"Maiuscolo lettere romane",\r
+circle:"Cerchio",\r
+disc:"Punto",\r
+square:"Quadrato"\r
}}});
\ No newline at end of file
not_set:"- Standaard -",\r
clipboard_msg:"Kopi\u00EBren/knippen/plakken is niet beschikbaar in Mozilla en Firefox.\nWilt u meer informatie over deze beperking?",\r
clipboard_no_support:"Kopi\u00EBren/knippen/plakken wordt niet ondersteund door uw browser, gebruik hiervoor de sneltoetsen.",\r
-popup_blocked:"U zult uw popup-blocker tijdelijk moeten uitschakelen voor deze website om gebruik te kunnen maken van alle fucties van deze teksteditor.",\r
+popup_blocked:"U zult uw popup-blocker tijdelijk moeten uitschakelen voor deze website om gebruik te kunnen maken van alle functies van deze teksteditor.",\r
invalid_data:"Fout: Er zijn ongeldige waardes ingevoerd, deze zijn rood gemarkeerd.",\r
more_colors:"Meer kleuren"\r
},\r
months_long:"Januari,Februari,Maart,April,Mei,Juni,Juli,Augustus,September,Oktober,November,December",\r
months_short:"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Aug,Sep,Okt,Nov,Dec",\r
day_long:"Zondag,Maandag,Dinsdag,Woensdag,Donderdag,Vrijdag,Zaterdag,Zondag",\r
-day_short:"Zo,Ma,Di,Wo,Do,Vr,Zat,Zon"\r
+day_short:"zo,ma,di,wo,do,vr,za,zo"\r
},\r
print:{\r
print_desc:"Afdrukken"\r
paste:{\r
paste_text_desc:"Als platte tekst plakken",\r
paste_word_desc:"Vanuit Word plakken",\r
-selectall_desc:"Alles selecteren"\r
+selectall_desc:"Alles selecteren",\r
+plaintext_mode_sticky:"Plakken is nu in plattetekstmodus. Klik nog een keer om terug te gaan naar normaal plakken. Nadat u iets plakt, keert u terug naar normaal plakken.",\r
+plaintext_mode:"Plakken is nu in plattetekstmoduse. Klik nog een keer om terug te gaan naar normaal plakken."\r
},\r
paste_dlg:{\r
text_title:"Gebruik Ctrl+V om tekst in het venster te plakken.",\r
cell:"Cel"\r
},\r
autosave:{\r
-unload_msg:"De wijzigingen zullen verloren gaan als u nu deze pagina verlaat."\r
+unload_msg:"De wijzigingen zullen verloren gaan als u nu deze pagina verlaat.",\r
+restore_content:"Automatisch opgeslagen inhoud laden.",\r
+warning_message:"Als u de opgeslagen inhoud laadt, verliest u de inhoud die zich momenteel in de editor bevindt.\n\nWeet u zeker dat u de opgeslagen inhoud wilt laden?"\r
},\r
fullscreen:{\r
desc:"Volledig scherm"\r
desc:"Documenteigenschappen"\r
},\r
template:{\r
-desc:"Voorgedefineerd sjabloon invoegen"\r
+desc:"Voorgedefinieerd sjabloon invoegen"\r
},\r
visualchars:{\r
desc:"Zichtbare symbolen"\r
ignore_word:"Woord negeren",\r
ignore_words:"Alles negeren",\r
langs:"Talen",\r
-wait:"Een ogenblik geduld...",\r
+wait:"Een ogenblik geduld\u2026",\r
sug:"Suggesties",\r
no_sug:"Geen suggesties",\r
no_mpell:"Geen spelfouten gevonden."\r
},\r
pagebreak:{\r
desc:"Pagina-einde invoegen"\r
+},\r
+advlist:{\r
+types:"Types",\r
+def:"Standaard",\r
+lower_alpha:"Alfa (klein)",\r
+lower_greek:"Griekse letters (klein)",\r
+lower_roman:"Romeinse letters (klein)",\r
+upper_alpha:"Alfa (groot)",\r
+upper_roman:"Romeinse letters (groot)",\r
+circle:"Cirkel",\r
+disc:"Schijf",\r
+square:"Vierkant"\r
}}});
\ No newline at end of file
tinyMCE.addI18n({pt:{\r
common:{\r
-edit_confirm:"Deseja usar o modo de edi\u00C3\u00A7\u00C3\u00A3o avan\u00C3\u00A7ado neste campo de texto?",\r
+edit_confirm:"Deseja usar o modo de edi\u00E7\u00E3o avan\u00E7ado neste campo de texto?",\r
apply:"Aplicar",\r
insert:"Inserir",\r
update:"Atualizar",\r
close:"Fechar",\r
browse:"Procurar",\r
class_name:"Classe",\r
-not_set:"-- N\u00C3\u00A3o especificado --",\r
-clipboard_msg:"Copiar/cortar/colar n\u00C3\u00A3o est\u00C3\u00A1 dispon\u00C3\u00ADvel no Mozilla/Firefox.\nDeseja mais informa\u00C3\u00A7\u00C3\u00B5es sobre este problema?",\r
-clipboard_no_support:"O seu navegador n\u00C3\u00A3o tem suporte para esta fun\u00C3\u00A7\u00C3\u00A3o, use os atalhos do teclado.",\r
-popup_blocked:"Detectamos que o seu bloqueador de popups bloqueou uma janela que \u00C3\u00A9 essencial para o aplicativo. Voc\u00C3\u00AA precisa desativar o bloqueador de popups para utilizar esta ferramenta.",\r
-invalid_data:"Erro: Valores inv\u00C3\u00A1lidos est\u00C3\u00A3o marcados em vermelho.",\r
+not_set:"-- N/A --",\r
+clipboard_msg:"Copiar/recortar/colar n\u00E3o est\u00E1 dispon\u00EDvel no Mozilla e Firefox.\nDeseja mais informa\u00E7\u00F5es sobre este problema?",\r
+clipboard_no_support:"O seu browser n\u00E3o suporta esta fun\u00E7\u00E3o, use os atalhos do teclado.",\r
+popup_blocked:"Detectamos que o seu bloqueador de popups bloqueou uma janela que \u00E9 essencial para a aplica\u00E7\u00E3o. Voc\u00EA precisa desativar o bloqueador de janelas de popups para utilizar esta ferramenta.",\r
+invalid_data:"Erro: Valores inv\u00E1lidos marcados em vermelho.",\r
more_colors:"Mais Cores"\r
},\r
contextmenu:{\r
left:"Esquerda",\r
center:"Centro",\r
right:"Direita",\r
-full:"Justificar"\r
+full:"Justificado"\r
},\r
insertdatetime:{\r
date_fmt:"%d-%m-%Y",\r
time_fmt:"%H:%M:%S",\r
insertdate_desc:"Inserir data",\r
inserttime_desc:"Inserir hora",\r
-months_long:"Janeiro,Fevereiro,Mar\u00C3\u00A7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro",\r
+months_long:"Janeiro,Fevereiro,Mar\u00E7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro",\r
months_short:"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez",\r
-day_long:"Domingo,Segunda-Feira,Ter\u00C3\u00A7a-Feira,Quarta-Feira,Quinta-Feira,Sexta-Feira,S\u00C3\u00A1bado,Domingo",\r
+day_long:"Domingo,Segunda-feira,Ter\u00E7a-feira,Quarta-feira,Quinta-feira,Sexta-feira,S\u00E1bado,Domingo",\r
day_short:"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom"\r
},\r
print:{\r
print_desc:"Imprimir"\r
},\r
preview:{\r
-preview_desc:"Pr\u00C3\u00A9-Visualizar"\r
+preview_desc:"Pr\u00E9-visualizar"\r
},\r
directionality:{\r
ltr_desc:"Da esquerda para direita",\r
layer:{\r
insertlayer_desc:"Inserir nova camada",\r
forward_desc:"Mover para frente",\r
-backward_desc:"Mover para tr\u00C3\u00A1s",\r
-absolute_desc:"Alternar posicionamento absoluto",\r
+backward_desc:"Mover para tr\u00E1s",\r
+absolute_desc:"Alternar o posicionamento absoluto",\r
content:"Nova camada..."\r
},\r
save:{\r
save_desc:"Salvar",\r
-cancel_desc:"Cancelar todas as altera\u00C3\u00A7\u00C3\u00B5es"\r
+cancel_desc:"Cancelar todas as altera\u00E7\u00F5es"\r
},\r
nonbreaking:{\r
-nonbreaking_desc:"Inserir um espa\u00C3\u00A7o"\r
+nonbreaking_desc:"Inserir um espa\u00E7o \"sem quebra\""\r
},\r
iespell:{\r
iespell_desc:"Verificar ortografia",\r
-download:"Aplicativo de ortografia n\u00C3\u00A3o-detectado. Deseja instal\u00C3\u00A1-lo agora?"\r
+download:"Plugin de ortografia n\u00E3o-detectado. Deseja instalar agora?"\r
},\r
advhr:{\r
advhr_desc:"Separador horizontal"\r
link_desc:"Inserir/editar hyperlink"\r
},\r
xhtmlxtras:{\r
-cite_desc:"Cita\u00C3\u00A7\u00C3\u00A3o",\r
-abbr_desc:"Abrevia\u00C3\u00A7\u00C3\u00A3o",\r
-acronym_desc:"Acr\u00C3\u00B4nimo",\r
+cite_desc:"Cita\u00E7\u00E3o",\r
+abbr_desc:"Abrevia\u00E7\u00E3o",\r
+acronym_desc:"Acr\u00F4nimo",\r
del_desc:"Apagar",\r
ins_desc:"Inserir",\r
attribs_desc:"Inserir/Editar atributos"\r
paste:{\r
paste_text_desc:"Colar como texto simples",\r
paste_word_desc:"Colar (copiado do WORD)",\r
-selectall_desc:"Selecionar tudo"\r
+selectall_desc:"Selecionar tudo",\r
+plaintext_mode_sticky:"Comando colar est\u00E1 em modo texto simples. Clique novamente para voltar para o modo normal. Depois de colar alguma coisa retornar\u00E1 para o modo normal.",\r
+plaintext_mode:"Comando colar est\u00E1 em modo texto simples. Clique novamente para voltar para o modo normal."\r
},\r
paste_dlg:{\r
text_title:"Use CTRL+V para colar o texto na janela.",\r
col_before_desc:"Inserir coluna antes",\r
col_after_desc:"Inserir coluna depois",\r
delete_col_desc:"Remover coluna",\r
-split_cells_desc:"Dividir c\u00C3\u00A9lulas",\r
-merge_cells_desc:"Unir c\u00C3\u00A9lulas",\r
+split_cells_desc:"Dividir c\u00E9lulas",\r
+merge_cells_desc:"Unir c\u00E9lulas",\r
row_desc:"Propriedades das linhas",\r
-cell_desc:"Propriedades das c\u00C3\u00A9lulas",\r
+cell_desc:"Propriedades das c\u00E9lulas",\r
props_desc:"Propriedades da tabela",\r
paste_row_before_desc:"Colar linha antes",\r
paste_row_after_desc:"Colar linha depois",\r
-cut_row_desc:"Cortar linha",\r
+cut_row_desc:"Recortar linha",\r
copy_row_desc:"Copiar linha",\r
del:"Apagar tabela",\r
row:"Linha",\r
col:"Coluna",\r
-cell:"C\u00C3\u00A9lula"\r
+cell:"C\u00E9lula"\r
},\r
autosave:{\r
-unload_msg:"As mudan\u00C3\u00A7as efetuadas ser\u00C3\u00A3o perdidas se sair desta p\u00C3\u00A1gina."\r
+unload_msg:"As mudan\u00E7as efetuadas ser\u00E3o perdidas se sair desta p\u00E1gina.",\r
+restore_content:"Restaura conte\u00FAdo salvo automaticamente.",\r
+warning_message:"Se restaurar o conte\u00FAdo, voc\u00EA ir\u00E1 perder tudo que est\u00E1 atualmente no editor.\n\nTem certeza que quer restaurar o conte\u00FAdo salvo?"\r
},\r
fullscreen:{\r
desc:"Tela Inteira"\r
},\r
media:{\r
-desc:"Inserir/Editar m\u00C3\u00ADdia incorporada",\r
-edit:"Editar m\u00C3\u00ADdia incorporada"\r
+desc:"Inserir/Editar m\u00EDdia incorporada",\r
+edit:"Editar m\u00EDdia incorporada"\r
},\r
fullpage:{\r
desc:"Propriedades do Documento"\r
desc:"Caracteres de controle visual ligado/desligado"\r
},\r
spellchecker:{\r
-desc:"Alternar verifica\u00C3\u00A7\u00C3\u00A3o ortogr\u00C3\u00A1fica",\r
-menu:"Configura\u00C3\u00A7\u00C3\u00B5es de ortografia",\r
+desc:"Alternar verifica\u00E7\u00E3o ortogr\u00E1fica",\r
+menu:"Configura\u00E7\u00F5es de ortografia",\r
ignore_word:"Ignorar palavra",\r
ignore_words:"Ignorar tudo",\r
langs:"Linguagens",\r
wait:"Aguarde...",\r
-sug:"Sugest\u00C3\u00B5es",\r
-no_sug:"Sem sugest\u00C3\u00B5es",\r
-no_mpell:"N\u00C3\u00A3o foram detectados erros de ortografia."\r
+sug:"Sugest\u00F5es",\r
+no_sug:"Sem sugest\u00F5es",\r
+no_mpell:"N\u00E3o foram detectados erros de ortografia."\r
},\r
pagebreak:{\r
-desc:"Inserir quebra de p\u00C3\u00A1gina."\r
+desc:"Inserir quebra de p\u00E1gina."\r
+},\r
+advlist:{\r
+types:"Tipos",\r
+def:"Padr\u00E3o",\r
+lower_alpha:"Alfabeto min\u00FAsculo",\r
+lower_greek:"Alfabeto grego",\r
+lower_roman:"Num. romanos min\u00FAsculos",\r
+upper_alpha:"Alfabeto mai\u00FAsculos",\r
+upper_roman:"Num. romanos mai\u00FAsculos",\r
+circle:"C\u00EDrculo",\r
+disc:"Disco",\r
+square:"Quadrado"\r
}}});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n({ru:{\r
+common:{\r
+edit_confirm:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C WYSIWYG \u0440\u0435\u0436\u0438\u043C \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u043E\u043B\u044F?",\r
+apply:"\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C",\r
+insert:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C",\r
+update:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C",\r
+cancel:"\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C",\r
+close:"\u0417\u0430\u043A\u0440\u044B\u0442\u044C",\r
+browse:"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440",\r
+class_name:"\u041A\u043B\u0430\u0441\u0441",\r
+not_set:"- \u041D\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E -",\r
+clipboard_msg:"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435, \u0432\u044B\u0440\u0435\u0437\u043A\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0430 \u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442 \u0432 Firefox.\r\n\u0425\u043E\u0442\u0438\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E?",\r
+clipboard_no_support:"\u041D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0412\u0430\u0448\u0438\u043C \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043E\u043C, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0433\u043E\u0440\u044F\u0447\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0438.",\r
+popup_blocked:"\u0411\u043B\u043E\u043A\u0438\u0440\u0430\u0442\u043E\u0440 \u0432\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0438\u0445 \u043E\u043A\u043E\u043D \u0437\u0430\u043A\u0440\u044B\u043B \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0435 \u043E\u043A\u043D\u043E. \u0414\u043B\u044F \u043F\u043E\u043B\u043D\u043E\u0446\u0435\u043D\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B, \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0443 \u043D\u0430 \u044D\u0442\u043E\u043C \u0441\u0430\u0439\u0442\u0435.",\r
+invalid_data:"\u041E\u0448\u0438\u0431\u043A\u0430: \u0412\u0432\u0435\u0434\u0435\u043D\u043E \u043D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435, \u043E\u043D\u043E \u043E\u0442\u043C\u0435\u0447\u0435\u043D\u043E \u043A\u0440\u0430\u0441\u043D\u044B\u043C.",\r
+more_colors:"\u0414\u0440\u0443\u0433\u0438\u0435 \u0446\u0432\u0435\u0442\u0430..."\r
+},\r
+contextmenu:{\r
+align:"\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435",\r
+left:"\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+center:"\u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443",\r
+right:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+full:"\u041F\u043E \u0448\u0438\u0440\u0438\u043D\u0435"\r
+},\r
+insertdatetime:{\r
+date_fmt:"%d.%m.%Y",\r
+time_fmt:"%H:%M:%S",\r
+insertdate_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0434\u0430\u0442\u0443",\r
+inserttime_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u0440\u0435\u043C\u044F",\r
+months_long:"\u044F\u043D\u0432\u0430\u0440\u044C,\u0444\u0435\u0432\u0440\u0430\u043B\u044C,\u043C\u0430\u0440\u0442,\u0430\u043F\u0440\u0435\u043B\u044C,\u043C\u0430\u0439,\u0438\u044E\u043D\u044C,\u0438\u044E\u043B\u044C,\u0430\u0432\u0433\u0443\u0441\u0442,\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044C,\u043E\u043A\u0442\u044F\u0431\u0440\u044C,\u043D\u043E\u044F\u0431\u0440\u044C,\u0434\u0435\u043A\u0430\u0431\u0440\u044C",\r
+months_short:"\u044F\u043D\u0432,\u0444\u0435\u0432,\u043C\u0430\u0440\u0442,\u0430\u043F\u0440,\u043C\u0430\u0439,\u0438\u044E\u043D\u044C,\u0438\u044E\u043B\u044C,\u0430\u0432\u0433,\u0441\u0435\u043D,\u043E\u043A\u0442,\u043D\u043E\u044F,\u0434\u0435\u043A",\r
+day_long:"\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435,\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A,\u0432\u0442\u043E\u0440\u043D\u0438\u043A,\u0441\u0440\u0435\u0434\u0430,\u0447\u0435\u0442\u0432\u0435\u0440\u0433,\u043F\u044F\u0442\u043D\u0438\u0446\u0430,\u0441\u0443\u0431\u0431\u043E\u0442\u0430,\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435",\r
+day_short:"\u0432\u0441,\u043F\u043D,\u0432\u0442,\u0441\u0440,\u0447\u0442,\u043F\u0442,\u0441\u0431,\u0432\u0441"\r
+},\r
+print:{\r
+print_desc:"\u041F\u0435\u0447\u0430\u0442\u044C"\r
+},\r
+preview:{\r
+preview_desc:"\u041F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440"\r
+},\r
+directionality:{\r
+ltr_desc:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E",\r
+rtl_desc:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E"\r
+},\r
+layer:{\r
+insertlayer_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u043B\u043E\u0439",\r
+forward_desc:"\u041D\u0430 \u043F\u0435\u0440\u0435\u0434\u043D\u0438\u0439 \u043F\u043B\u0430\u043D",\r
+backward_desc:"\u041D\u0430 \u0437\u0430\u0434\u043D\u0438\u0439 \u043F\u043B\u0430\u043D",\r
+absolute_desc:"\u0410\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u043E\u0435 \u043F\u043E\u0437\u0438\u0446\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435",\r
+content:"\u041D\u043E\u0432\u044B\u0439 \u0441\u043B\u043E\u0439"\r
+},\r
+save:{\r
+save_desc:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C",\r
+cancel_desc:"\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F"\r
+},\r
+nonbreaking:{\r
+nonbreaking_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u0435\u0440\u0430\u0437\u0440\u044B\u0432\u043D\u044B\u0439 \u043F\u0440\u043E\u0431\u0435\u043B"\r
+},\r
+iespell:{\r
+iespell_desc:"\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043E\u0440\u0444\u043E\u0433\u0440\u0430\u0444\u0438\u044E",\r
+download:"ieSpell \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D. \u0416\u0435\u043B\u0430\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C?"\r
+},\r
+advhr:{\r
+advhr_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C"\r
+},\r
+emotions:{\r
+emotions_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u043C\u0430\u0439\u043B"\r
+},\r
+searchreplace:{\r
+search_desc:"\u041D\u0430\u0439\u0442\u0438",\r
+replace_desc:"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C"\r
+},\r
+advimage:{\r
+image_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C/\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435",\r
+delta_width:"200"\r
+},\r
+advlink:{\r
+link_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C/\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443",\r
+delta_width:"200"\r
+},\r
+xhtmlxtras:{\r
+cite_desc:"\u0426\u0438\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435",\r
+abbr_desc:"\u0421\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u0438\u0435",\r
+acronym_desc:"\u0410\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0446\u0438\u044F",\r
+del_desc:"\u0423\u0434\u0430\u043B\u0435\u043D\u0438\u0435",\r
+ins_desc:"\u0417\u0430\u043C\u0435\u043D\u0430",\r
+attribs_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C/\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442"\r
+},\r
+style:{\r
+desc:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C CSS \u0441\u0442\u0438\u043B\u044C"\r
+},\r
+paste:{\r
+paste_text_desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u043A \u0442\u0435\u043A\u0441\u0442",\r
+paste_word_desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0438\u0437 Word",\r
+selectall_desc:"\u0412\u044B\u0434\u0435\u043B\u0438\u0442\u044C \u0432\u0441\u0435",\r
+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.",\r
+plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode."\r
+},\r
+paste_dlg:{\r
+text_title:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0442\u0435\u043A\u0441\u0442\u0430 \u0432 \u043E\u043A\u043D\u043E.",\r
+text_linebreaks:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u044B \u0441\u0442\u0440\u043E\u043A",\r
+word_title:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0442\u0435\u043A\u0441\u0442\u0430 \u0432 \u043E\u043A\u043D\u043E."\r
+},\r
+table:{\r
+desc:"\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435/\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0442\u0430\u0431\u043B\u0438\u0446\u044B",\r
+row_before_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0441\u0432\u0435\u0440\u0445\u0443",\r
+row_after_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0441\u043D\u0438\u0437\u0443",\r
+delete_row_desc:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443",\r
+col_before_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u043E\u043B\u0431\u0435\u0446 \u0441\u043B\u0435\u0432\u0430",\r
+col_after_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u043E\u043B\u0431\u0435\u0446 \u0441\u043F\u0440\u0430\u0432\u0430",\r
+delete_col_desc:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0442\u043E\u043B\u0431\u0435\u0446",\r
+split_cells_desc:"\u0420\u0430\u0437\u0431\u0438\u0442\u044C \u044F\u0447\u0435\u0439\u043A\u0443",\r
+merge_cells_desc:"\u041E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u044F\u0447\u0435\u0439\u043A\u0438",\r
+row_desc:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u0442\u0440\u043E\u043A\u0438",\r
+cell_desc:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u044F\u0447\u0435\u0439\u043A\u0438",\r
+props_desc:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0442\u0430\u0431\u043B\u0438\u0446\u044B",\r
+paste_row_before_desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0441\u0432\u0435\u0440\u0445\u0443",\r
+paste_row_after_desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0441\u043D\u0438\u0437\u0443",\r
+cut_row_desc:"\u0412\u044B\u0440\u0435\u0437\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443",\r
+copy_row_desc:"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443",\r
+del:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0442\u0430\u0431\u043B\u0438\u0446\u0443",\r
+row:"\u0421\u0442\u0440\u043E\u043A\u0430",\r
+col:"\u0421\u0442\u043E\u043B\u0431\u0435\u0446",\r
+cell:"\u042F\u0447\u0435\u0439\u043A\u0430",\r
+cellprops_delta_width:"30"\r
+},\r
+autosave:{\r
+unload_msg:"\u041F\u0440\u043E\u0438\u0437\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044F\u043D\u044B, \u0435\u0441\u043B\u0438 \u0412\u044B \u0443\u0439\u0434\u0435\u0442\u0435 \u0441 \u044D\u0442\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B.",\r
+restore_content:"\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435",\r
+warning_message:"\u0412\u0441\u0435 \u043F\u0440\u043E\u0438\u0437\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044F\u043D\u044B.\n\n\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0432\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F?"\r
+},\r
+fullscreen:{\r
+desc:"\u041F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C"\r
+},\r
+media:{\r
+desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C/\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043A\u043B\u0438",\r
+edit:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u043A\u043B\u0438\u043F\u0430"\r
+},\r
+fullpage:{\r
+desc:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430"\r
+},\r
+template:{\r
+desc:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D"\r
+},\r
+visualchars:{\r
+desc:"\u0412\u0441\u0435 \u0437\u043D\u0430\u043A\u0438"\r
+},\r
+spellchecker:{\r
+desc:"\u041F\u0440\u0430\u0432\u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",\r
+menu:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u043F\u0440\u0430\u0432\u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F",\r
+ignore_word:"\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C",\r
+ignore_words:"\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0432\u0441\u0435",\r
+langs:"\u042F\u0437\u044B\u043A\u0438",\r
+wait:"\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435...",\r
+sug:"\u0412\u0430\u0440\u0438\u0430\u043D\u0442\u044B",\r
+no_sug:"\u041D\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432",\r
+no_mpell:"\u041E\u0448\u0438\u0431\u043E\u043A \u043D\u0435 \u043E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u043E."\r
+},\r
+pagebreak:{\r
+desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u0440\u044B\u0432 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B"\r
+},\r
+advlist:{\r
+types:"\u0421\u0438\u043C\u0432\u043E\u043B\u044B",\r
+def:"\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0435",\r
+lower_alpha:"\u0421\u0442\u0440\u043E\u0447\u043D\u044B\u0435 \u043B\u0430\u0442\u0438\u043D\u0441\u043A\u0438\u0435 \u0431\u0443\u043A\u0432\u044B",\r
+lower_greek:"\u0421\u0442\u0440\u043E\u0447\u043D\u044B\u0435 \u0433\u0440\u0435\u0447\u0435\u0441\u043A\u0438\u0435 \u0431\u0443\u043A\u0432\u044B",\r
+lower_roman:"\u0421\u0442\u0440\u043E\u0447\u043D\u044B\u0435 \u0440\u0438\u043C\u0441\u043A\u0438\u0435 \u0446\u0438\u0444\u0440\u044B",\r
+upper_alpha:"\u0417\u0430\u0433\u043B\u0430\u0432\u043D\u044B\u0435 \u043B\u0430\u0442\u0438\u043D\u0441\u043A\u0438\u0435 \u0431\u0443\u043A\u0432\u044B",\r
+upper_roman:"\u0417\u0430\u0433\u043B\u0430\u0432\u043D\u044B\u0435 \u0440\u0438\u043C\u0441\u043A\u0438\u0435 \u0446\u0438\u0444\u0440\u044B",\r
+circle:"\u041A\u0440\u0443\u0433\u0438",\r
+disc:"\u041E\u043A\u0440\u0443\u0436\u043D\u043E\u0441\u0442\u0438",\r
+square:"\u041A\u0432\u0430\u0434\u0440\u0430\u0442\u044B"\r
+}}});
\ No newline at end of file
-(function(){tinymce.create('tinymce.plugins.AdvancedHRPlugin',{init:function(ed,url){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});});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};}});tinymce.PluginManager.add('advhr',tinymce.plugins.AdvancedHRPlugin);})();
\ No newline at end of file
+(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)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin);\r
-})();\r
+})();
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('et.advhr_dlg',{\r
+width:"Laius",\r
+size:"K\u00F5rgus",\r
+noshade:"Ilma varjuta"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.advhr_dlg',{\r
+width:"Largeur",\r
+size:"Hauteur",\r
+noshade:"Pas d'ombre"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.advhr_dlg',{\r
+width:"Sz\u00E9less\u00E9g",\r
+size:"Magass\u00E1g",\r
+noshade:"\u00C1rny\u00E9k n\u00E9lk\u00FCl"\r
+});
\ No newline at end of file
tinyMCE.addI18n('it.advhr_dlg',{\r
-width:"Width",\r
-size:"Height",\r
+width:"Larghezza",\r
+size:"Altezza",\r
noshade:"Senza ombreggiatura"\r
});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('ru.advhr_dlg',{\r
+width:"\u0428\u0438\u0440\u0438\u043D\u0430",\r
+size:"\u0412\u044B\u0441\u043E\u0442\u0430",\r
+noshade:"\u0411\u0435\u0437 \u0442\u0435\u043D\u0438"\r
+});
\ No newline at end of file
<script type="text/javascript" src="../../utils/mctabs.js"></script>\r
<script type="text/javascript" src="../../utils/form_utils.js"></script>\r
<link href="css/advhr.css" rel="stylesheet" type="text/css" />\r
- <base target="_self" />\r
</head>\r
<body>\r
<form onsubmit="AdvHRDialog.update();return false;" action="#">\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
<td><label for="width">{#advhr_dlg.width}</label></td>\r
- <td nowrap="nowrap">\r
+ <td class="nowrap">\r
<input id="width" name="width" type="text" value="" class="mceFocus" />\r
<select name="width2" id="width2">\r
<option value="">px</option>\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#insert}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
-(function(){tinymce.create('tinymce.plugins.AdvancedImagePlugin',{init:function(ed,url){ed.addCommand('mceAdvImage',function(){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});});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};}});tinymce.PluginManager.add('advimage',tinymce.plugins.AdvancedImagePlugin);})();
\ No newline at end of file
+(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)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin);\r
-})();\r
+})();
\ No newline at end of file
<script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
<script type="text/javascript" src="js/image.js"></script>\r
<link href="css/advimage.css" rel="stylesheet" type="text/css" />\r
- <base target="_self" />\r
</head>\r
<body id="advimage" style="display: none">\r
<form onsubmit="ImageDialog.insert();return false;" action="#"> \r
</tr>\r
<tr>\r
<td><label for="src_list">{#advimage_dlg.image_list}</label></td>\r
- <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);"></select></td>\r
+ <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>\r
</tr>\r
<tr> \r
<td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td> \r
\r
<tr>\r
<td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>\r
- <td nowrap="nowrap">\r
+ <td class="nowrap">\r
<input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" /> x \r
<input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" /> px\r
</td>\r
\r
<tr>\r
<td><label for="class_list">{#class_name}</label></td>\r
- <td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"></select></td>\r
+ <td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td>\r
</tr>\r
\r
<tr>\r
</tr>\r
<tr>\r
<td><label for="over_list">{#advimage_dlg.image_list}</label></td>\r
- <td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"></select></td>\r
+ <td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>\r
</tr>\r
<tr> \r
<td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td> \r
</tr>\r
<tr>\r
<td><label for="out_list">{#advimage_dlg.image_list}</label></td>\r
- <td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"></select></td>\r
+ <td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>\r
</tr>\r
</table>\r
</fieldset>\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#insert}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body> \r
cl = tinyMCEPopup.editor.dom.getClasses();\r
\r
if (cl.length > 0) {\r
+ lst.options.length = 0;\r
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');\r
\r
tinymce.each(cl, function(o) {\r
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
\r
l = window[l];\r
+ lst.options.length = 0;\r
\r
if (l && l.length > 0) {\r
lst.options[lst.options.length] = new Option('', '');\r
}\r
\r
// Merge\r
- dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText));\r
+ dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img');\r
}\r
},\r
\r
general:"Allgemein",\r
title:"Titel",\r
preview:"Vorschau",\r
-constrain_proportions:"Ausma\u00DFe",\r
+constrain_proportions:"Seitenverh\u00E4ltnis beibehalten",\r
langdir:"Schriftrichtung",\r
langcode:"Sprachcode",\r
long_desc:"Ausf\u00FChrliche Beschreibung",\r
mouseout:"bei keinem Mauskontakt",\r
misc:"Verschiedenes",\r
example_img:"Aussehen der Vorschau",\r
-missing_alt:"Wollen Sie wirklich keine Beschreibung eingeben? Bestimmte Benutzer mit k\u00F6rperlichen Einschr\u00E4nkungen k\u00F6nnen so nicht darauf zugrifen, ebenso solche, die einen Textbrowser benutzen oder die Anzeige von Bildern deaktiviert haben.",\r
+missing_alt:"Wollen Sie wirklich keine Beschreibung eingeben? Bestimmte Benutzer mit k\u00F6rperlichen Einschr\u00E4nkungen k\u00F6nnen so nicht darauf zugreifen, ebenso solche, die einen Textbrowser benutzen oder die Anzeige von Bildern deaktiviert haben.",\r
dialog_title:"Bild einf\u00FCgen/bearbeiten",\r
src:"Adresse",\r
alt:"Beschreibung",\r
--- /dev/null
+tinyMCE.addI18n('et.advimage_dlg',{\r
+tab_general:"\u00DCldine",\r
+tab_appearance:"V\u00E4limus",\r
+tab_advanced:"P\u00F5hjalikum",\r
+general:"\u00DCldine",\r
+title:"Pealkiri",\r
+preview:"Eelvaade",\r
+constrain_proportions:"Piira proportioone",\r
+langdir:"Keele suund",\r
+langcode:"Keele kood",\r
+long_desc:"Pikk kirjelduse link",\r
+style:"Stiil",\r
+classes:"Klassid",\r
+ltr:"Vasakult paremale",\r
+rtl:"Paremalt vasakule",\r
+id:"ID",\r
+map:"Pildi kaart",\r
+swap_image:"Vaheta pilti",\r
+alt_image:"Alternatiivne pilt",\r
+mouseover:"\u201EKursor peal\u201C",\r
+mouseout:"\u201EKursor maas\u201C",\r
+misc:"Mitmesugune",\r
+example_img:"Eelvaate pildi v\u00E4limus",\r
+missing_alt:"Oled kindel, et soovid j\u00E4tkata pildile kirjeldust lisamata?",\r
+dialog_title:"Sisesta/muuda pilti",\r
+src:"Pildi URL",\r
+alt:"Pildi kirjeldus",\r
+list:"Piltide nimekiri",\r
+border:"Raam",\r
+dimensions:"M\u00F5\u00F5tmed",\r
+vspace:"Vertikaalne vahe",\r
+hspace:"Horisontaalne vahe",\r
+align:"Joondus",\r
+align_baseline:"Baas",\r
+align_top:"\u00DCleval",\r
+align_middle:"Keskel",\r
+align_bottom:"All",\r
+align_texttop:"Tekst \u00FCleval",\r
+align_textbottom:"Tekst all",\r
+align_left:"Vasakul",\r
+align_right:"Paremal",\r
+image_list:"Piltide nimekiri"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.advimage_dlg',{\r
+tab_general:"G\u00E9n\u00E9ral",\r
+tab_appearance:"Apparence",\r
+tab_advanced:"Avanc\u00E9",\r
+general:"G\u00E9n\u00E9ral",\r
+title:"Titre",\r
+preview:"Pr\u00E9visualisation",\r
+constrain_proportions:"Conserver les proportions",\r
+langdir:"Sens de lecture",\r
+langcode:"Code de la langue",\r
+long_desc:"Description longue du lien",\r
+style:"Style",\r
+classes:"Classes",\r
+ltr:"De gauche \u00E0 droite",\r
+rtl:"De droite \u00E0 gauche",\r
+id:"Id",\r
+map:"Image cliquable",\r
+swap_image:"Image de remplacement",\r
+alt_image:"Image alternative",\r
+mouseover:"au survol de la souris",\r
+mouseout:"\u00E0 la sortie de la souris",\r
+misc:"Divers",\r
+example_img:"Apparence de l'image",\r
+missing_alt:"\u00CAtes-vous s\u00FBr de vouloir continuer sans d\u00E9finir de description pour l'image ? Sans elle, l'image peut ne pas \u00EAtre accessible \u00E0 certains utilisateurs handicap\u00E9s, ceux utilisant un navigateur texte ou ceux qui naviguent sans affichage des images.",\r
+dialog_title:"Ins\u00E9rer / \u00E9diter une image",\r
+src:"URL de l'image",\r
+alt:"Description de l'image",\r
+list:"Liste d'images",\r
+border:"Bordure",\r
+dimensions:"Dimensions",\r
+vspace:"Espacement vertical",\r
+hspace:"Espacement horizontal",\r
+align:"Alignement",\r
+align_baseline:"Normal",\r
+align_top:"En haut",\r
+align_middle:"Au milieu",\r
+align_bottom:"En bas",\r
+align_texttop:"Texte en haut",\r
+align_textbottom:"Texte en bas",\r
+align_left:"Gauche (flottant)",\r
+align_right:"Droite (flottant)",\r
+image_list:"Liste d'images"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.advimage_dlg',{\r
+tab_general:"\u00C1ltal\u00E1nos",\r
+tab_appearance:"Megjelen\u00E9s",\r
+tab_advanced:"Halad\u00F3",\r
+general:"\u00C1ltal\u00E1nos",\r
+title:"C\u00EDm",\r
+preview:"El\u0151n\u00E9zet",\r
+constrain_proportions:"Ar\u00E1nytart\u00E1s",\r
+langdir:"Nyelv \u00EDr\u00E1s ir\u00E1ny",\r
+langcode:"Nyelv k\u00F3d",\r
+long_desc:"B\u0151vebb le\u00EDr\u00E1s link",\r
+style:"Style",\r
+classes:"Class-ok",\r
+ltr:"Balr\u00F3l jobbra",\r
+rtl:"Jobbr\u00F3l balra",\r
+id:"Id",\r
+map:"K\u00E9p t\u00E9rk\u00E9p",\r
+swap_image:"K\u00E9pcsere",\r
+alt_image:"Alternat\u00EDv k\u00E9p",\r
+mouseover:"K\u00E9p az eg\u00E9rkurzor f\u00F6l\u00E9vitelekor",\r
+mouseout:"K\u00E9p az eg\u00E9rkurzor lev\u00E9telekor",\r
+misc:"Vegyes",\r
+example_img:"El\u0151n\u00E9zeti k\u00E9p",\r
+missing_alt:"Biztosan folytatja helyettes\u00EDt\u0151 sz\u00F6veg n\u00E9lk\u00FCl? En\u00E9lk\u00FCl a korl\u00E1toz\u00E1ssal \u00E9l\u0151k, sz\u00F6veges b\u00F6ng\u00E9sz\u0151t haszn\u00E1l\u00F3k \u00E9s a k\u00E9pek megjelen\u00EDt\u00E9s\u00E9t letilt\u00F3 felhaszn\u00E1l\u00F3k h\u00E1tr\u00E1nyban lesznek.",\r
+dialog_title:"K\u00E9p besz\u00FAr\u00E1s/szerkeszt\u00E9s",\r
+src:"K\u00E9p URL",\r
+alt:"K\u00E9p helyettes\u00EDt\u0151 sz\u00F6vege",\r
+list:"K\u00E9plista",\r
+border:"Keret",\r
+dimensions:"Dimenzi\u00F3k",\r
+vspace:"F\u00FCgg\u0151leges t\u00E1vols\u00E1g",\r
+hspace:"V\u00EDzszintes t\u00E1vols\u00E1g",\r
+align:"Igaz\u00EDt\u00E1s",\r
+align_baseline:"Alapvonalhoz",\r
+align_top:"Fentre",\r
+align_middle:"K\u00F6z\u00E9pre",\r
+align_bottom:"Lentre",\r
+align_texttop:"Sz\u00F6veg tetej\u00E9hez",\r
+align_textbottom:"Sz\u00F6veg alj\u00E1hoz",\r
+align_left:"Balra",\r
+align_right:"Jobbra",\r
+image_list:"K\u00E9plista"\r
+});
\ No newline at end of file
tinyMCE.addI18n('pt.advimage_dlg',{\r
tab_general:"Geral",\r
-tab_appearance:"Apar\u00C3\u00AAncia",\r
-tab_advanced:"Avan\u00C3\u00A7ado",\r
+tab_appearance:"Apar\u00EAncia",\r
+tab_advanced:"Avan\u00E7ado",\r
general:"Geral",\r
-title:"T\u00C3\u00ADtulo",\r
-preview:"Pr\u00C3\u00A9-Visualiza\u00C3\u00A7\u00C3\u00A3o",\r
-constrain_proportions:"Manter propor\u00C3\u00A7\u00C3\u00B5es",\r
-langdir:"Dire\u00C3\u00A7\u00C3\u00A3o do texto",\r
-langcode:"C\u00C3\u00B3digo de idioma",\r
-long_desc:"Descri\u00C3\u00A7\u00C3\u00A3o extensa",\r
+title:"T\u00EDtulo",\r
+preview:"Pr\u00E9-Visualiza\u00E7\u00E3o",\r
+constrain_proportions:"Manter propor\u00E7\u00F5es",\r
+langdir:"Dire\u00E7\u00E3o do texto",\r
+langcode:"C\u00F3digo do idioma",\r
+long_desc:"Descri\u00E7\u00E3o extensa",\r
style:"Estilo",\r
classes:"Classes",\r
ltr:"Da esquerda para a direita",\r
mouseover:"mouseover",\r
mouseout:"mouseout",\r
misc:"Misto",\r
-example_img:"Pr\u00C3\u00A9-visualiza\u00C3\u00A7\u00C3\u00A3o",\r
-missing_alt:"Tem certeza que deseja continuar sem acrescentar uma descri\u00C3\u00A7\u00C3\u00A3o \u00C3\u00A0\u00C3\u0082 imagem? (Isto pode gerar problemas de acessibilidade em alguns navegadores)",\r
+example_img:"Pr\u00E9-Visualiza\u00E7\u00E3o",\r
+missing_alt:"Tem certeza que deseja continuar sem acrescentar uma descri\u00E7\u00E3o \u00E0 imagem? (Isto pode gerar problemas de acessibilidade em alguns navegadores)",\r
dialog_title:"Inserir/editar imagem",\r
-src:"Endere\u00C3\u00A7o da imagem",\r
-alt:"Descri\u00C3\u00A7\u00C3\u00A3o da imagem",\r
+src:"Endere\u00E7o da imagem",\r
+alt:"Descri\u00E7\u00E3o da imagem",\r
list:"Lista de imagens",\r
border:"Limite",\r
-dimensions:"Dimens\u00C3\u00B5es",\r
-vspace:"Espa\u00C3\u00A7o vertical",\r
-hspace:"Espa\u00C3\u00A7o horizontal",\r
+dimensions:"Dimens\u00F5es",\r
+vspace:"Espa\u00E7o vertical",\r
+hspace:"Espa\u00E7o horizontal",\r
align:"Alinhamento",\r
align_baseline:"Sobre a linha de texto",\r
align_top:"Topo",\r
--- /dev/null
+tinyMCE.addI18n('ru.advimage_dlg',{\r
+tab_general:"\u041E\u0431\u0449\u0435\u0435",\r
+tab_appearance:"\u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435",\r
+tab_advanced:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E",\r
+general:"\u041E\u0431\u0449\u0438\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B",\r
+title:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",\r
+preview:"\u041F\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440",\r
+constrain_proportions:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043F\u0440\u043E\u043F\u043E\u0440\u0446\u0438\u0438",\r
+langdir:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430",\r
+langcode:"\u041A\u043E\u0434 \u044F\u0437\u044B\u043A\u0430",\r
+long_desc:"\u0421\u0441\u044B\u043B\u043A\u0430 \u043D\u0430 \u043F\u043E\u043B\u043D\u043E\u0435 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",\r
+style:"\u0421\u0442\u0438\u043B\u044C",\r
+classes:"\u041A\u043B\u0430\u0441\u0441\u044B",\r
+ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E",\r
+rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E",\r
+id:"\u0418\u043C\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430",\r
+map:"\u041A\u0430\u0440\u0442\u0430 \u0441\u0441\u044B\u043B\u043E\u043A",\r
+swap_image:"\u0414\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435",\r
+alt_image:"\u0410\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435",\r
+mouseover:"\u041F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438",\r
+mouseout:"\u0412 \u043F\u043E\u043A\u043E\u0435",\r
+misc:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B",\r
+example_img:"\u041F\u0440\u0438\u043C\u0435\u0440 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F",\r
+missing_alt:"\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0431\u0435\u0437 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F? \u0411\u0435\u0437 \u044D\u0442\u043E\u0433\u043E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u043C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\u043C.",\r
+dialog_title:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F",\r
+src:"\u0410\u0434\u0440\u0435\u0441",\r
+alt:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",\r
+list:"\u0421\u043F\u0438\u0441\u043E\u043A",\r
+border:"\u0413\u0440\u0430\u043D\u0438\u0446\u0430",\r
+dimensions:"\u0420\u0430\u0437\u043C\u0435\u0440",\r
+vspace:"\u0412\u0435\u0440\u0442. \u043E\u0442\u0441\u0442\u0443\u043F",\r
+hspace:"\u0413\u043E\u0440\u0438\u0437. \u043E\u0442\u0441\u0442\u0443\u043F",\r
+align:"\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435",\r
+align_baseline:"\u041F\u043E \u0431\u0430\u0437\u043E\u0432\u043E\u0439 \u043B\u0438\u043D\u0438\u0438",\r
+align_top:"\u041F\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_middle:"\u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443",\r
+align_bottom:"\u041F\u043E \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_texttop:"\u041F\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E \u0442\u0435\u043A\u0441\u0442\u0430",\r
+align_textbottom:"\u041F\u043E \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E \u0442\u0435\u043A\u0441\u0442\u0430",\r
+align_left:"\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_right:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+image_list:"\u0421\u043F\u0438\u0441\u043E\u043A \u043A\u0430\u0440\u0442\u0438\u043D\u043E\u043A"\r
+});
\ No newline at end of file
-(function(){tinymce.create('tinymce.plugins.AdvancedLinkPlugin',{init:function(ed,url){this.editor=ed;ed.addCommand('mceAdvLink',function(){var se=ed.selection;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});});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};}});tinymce.PluginManager.add('advlink',tinymce.plugins.AdvancedLinkPlugin);})();
\ No newline at end of file
+(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)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin);\r
-})();\r
+})();
\ No newline at end of file
if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email')))\r
n.value = 'mailto:' + n.value;\r
\r
- if (/^\s*www./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))\r
+ if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))\r
n.value = 'http://' + n.value;\r
}\r
\r
\r
// Clean up the style\r
if (attrib == 'style')\r
- value = dom.serializeStyle(dom.parseStyle(value));\r
+ value = dom.serializeStyle(dom.parseStyle(value), 'a');\r
\r
dom.setAttrib(elm, attrib, value);\r
}\r
\r
// Create new anchor elements\r
if (elm == null) {\r
+ inst.getDoc().execCommand("unlink", false, null);\r
tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});\r
\r
elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});\r
url:"Adresse",\r
target:"Fenster",\r
titlefield:"Titel",\r
-is_email:"Bei der Adresse scheint es sich um eine E-Mail-Adresse zu handeln. Wollen Sie das dazu ben\u00F6tigte mailto: voranstellen?",\r
-is_external:"Bei der Adresse scheint es sich um einen externen Link zu handeln. M\u00F6chten Sie, dass zur korrekten Verlinkung ein http:// vorangestellt wird?",\r
+is_email:"Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00F6chten Sie das dazu ben\u00F6tigte \"mailto:\" voranstellen?",\r
+is_external:"Diese Adresse scheint ein externer Link zu sein. M\u00F6chten Sie das dazu ben\u00F6tigte \"http://\" voranstellen?",\r
list:"Linkliste",\r
general_tab:"Allgemein",\r
popup_tab:"Popup",\r
--- /dev/null
+tinyMCE.addI18n('et.advlink_dlg',{\r
+title:"Sisesta muuda linki",\r
+url:" URL\u2019i link",\r
+target:"Sihtm\u00E4rk",\r
+titlefield:"Pealkiri",\r
+is_email:" URL, mille sisestasid, tundub olevat e-posti aadress, kas soovid sellele lisada mailto: funktsiooni?",\r
+is_external:"URL, mille sisestasid, tundub olevat v\u00E4line link, kas soovid sellele lisada http://?",\r
+list:"Linkide nimekiri",\r
+general_tab:"\u00DCldine",\r
+popup_tab:"Pop-up",\r
+events_tab:"S\u00FCndmused",\r
+advanced_tab:"P\u00F5hjalikum",\r
+general_props:"\u00DCldised seadistused",\r
+popup_props:"Pop-up\u2019i seadistus",\r
+event_props:"S\u00FCndmused",\r
+advanced_props:"\u00DCldised seadistused",\r
+popup_opts:"Valikud",\r
+anchor_names:"Ankrud",\r
+target_same:"Ava selles aknas/raamis",\r
+target_parent:"Ava pea-aknas/raamis",\r
+target_top:"Ava k\u00F5rgeimas raamis (asenda k\u00F5ik raamid)",\r
+target_blank:"Ava uues aknas",\r
+popup:"Javascript\u2019i pop-up",\r
+popup_url:"Pop-up\u2019i URL",\r
+popup_name:"Akna nimi",\r
+popup_return:"Sisesta 'tagasiminek eba\u00F5nnestus'",\r
+popup_scrollbars:"N\u00E4ita kerimisribasid",\r
+popup_statusbar:"N\u00E4ita staatuse riba",\r
+popup_toolbar:"N\u00E4ita seadistusriba",\r
+popup_menubar:"N\u00E4ita men\u00FC\u00FCriba",\r
+popup_location:"N\u00E4ita asukohariba",\r
+popup_resizable:"Muuda akna suurus muudetavaks",\r
+popup_dependent:"S\u00F5ltuv (ainult Mozilla/Firefox)",\r
+popup_size:"Suurus",\r
+popup_position:"Positsioon (X/Y)",\r
+id:"ID",\r
+style:"Stiil",\r
+classes:"Klassid",\r
+target_name:"Sihtm\u00E4rgi nimi",\r
+langdir:"Keele suund",\r
+target_langcode:"Sihtm\u00E4rgi keel",\r
+langcode:"Keele kood",\r
+encoding:"Sihtm\u00E4rgi kodeering",\r
+mime:"M\u00E4rgista MIME t\u00FC\u00FCp",\r
+rel:"Seo leht sihtm\u00E4rgiga",\r
+rev:"Seo sihtm\u00E4rk lehega",\r
+tabindex:"Sisujuht",\r
+accesskey:"Ligip\u00E4\u00E4suklahv",\r
+ltr:"Vasakult paremale",\r
+rtl:"Paremalt vasakule",\r
+link_list:"Linkide list"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.advlink_dlg',{\r
+title:"Ins\u00E9rer / \u00E9diter un lien",\r
+url:"URL du lien",\r
+target:"Cible",\r
+titlefield:"Titre",\r
+is_email:"L'URL que vous avez saisie semble \u00EAtre une adresse e-mail, souhaitez-vous ajouter le pr\u00E9fixe \u00AB mailto: \u00BB ?",\r
+is_external:"L'URL que vous avez saisie semble \u00EAtre une adresse web externe. Souhaitez-vous ajouter le pr\u00E9fixe \u00AB http:// \u00BB ?",\r
+list:"Liste de liens",\r
+general_tab:"G\u00E9n\u00E9ral",\r
+popup_tab:"Popup",\r
+events_tab:"\u00C9v\u00E8nements",\r
+advanced_tab:"Avanc\u00E9",\r
+general_props:"Propri\u00E9t\u00E9s g\u00E9n\u00E9rales",\r
+popup_props:"Propri\u00E9t\u00E9s de la popup",\r
+event_props:"\u00C9v\u00E8nements",\r
+advanced_props:"Propri\u00E9t\u00E9s avanc\u00E9es",\r
+popup_opts:"Options",\r
+anchor_names:"Ancres",\r
+target_same:"Ouvrir dans cette fen\u00EAtre / dans ce cadre",\r
+target_parent:"Ouvrir dans la fen\u00EAtre / le cadre parent",\r
+target_top:"Ouvrir dans le cadre principal (remplace tous les cadres)",\r
+target_blank:"Ouvrir dans une nouvelle fen\u00EAtre",\r
+popup:"Popup Javascript",\r
+popup_url:"URL de la popup",\r
+popup_name:"Nom de la fen\u00EAtre",\r
+popup_return:"Ins\u00E9rer 'return false'",\r
+popup_scrollbars:"Afficher les ascenseurs",\r
+popup_statusbar:"Afficher la barre d'\u00E9tat",\r
+popup_toolbar:"Afficher la barre d'outils",\r
+popup_menubar:"Afficher la barre de menu",\r
+popup_location:"Afficher la barre d'adresse",\r
+popup_resizable:"Autoriser le redimensionnement de la fen\u00EAtre",\r
+popup_dependent:"D\u00E9pendante (seulement sous Mozilla/Firefox)",\r
+popup_size:"Taille",\r
+popup_position:"Position (X/Y)",\r
+id:"Id",\r
+style:"Style",\r
+classes:"Classes",\r
+target_name:"Nom de la cible",\r
+langdir:"Sens de lecture",\r
+target_langcode:"Langue de la cible",\r
+langcode:"Code de la langue",\r
+encoding:"Encodage de la cible",\r
+mime:"Type MIME de la cible",\r
+rel:"Relation de la page \u00E0 la cible",\r
+rev:"Relation de la cible \u00E0 la page",\r
+tabindex:"Tabindex",\r
+accesskey:"Touche d'acc\u00E8s rapide",\r
+ltr:"Gauche \u00E0 droite",\r
+rtl:"Droite \u00E0 gauche",\r
+link_list:"Liste des liens"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.advlink_dlg',{\r
+title:"Link besz\u00FAr\u00E1s/szerkeszt\u00E9s",\r
+url:"Link URL",\r
+target:"Target",\r
+titlefield:"C\u00EDm",\r
+is_email:"A be\u00EDrt URL e-mail c\u00EDmnek t\u0171nik, k\u00EDv\u00E1nja a sz\u00FCks\u00E9ges mailto:-t el\u00E9 tenni?",\r
+is_external:"A be\u00EDrt URL k\u00FCls\u0151 hivatkoz\u00E1snak t\u0171nik, k\u00EDv\u00E1nja a sz\u00FCks\u00E9ges http://-t el\u00E9 tenni?",\r
+list:"Link lista",\r
+general_tab:"\u00C1ltal\u00E1nos",\r
+popup_tab:"Felugr\u00F3 ablak",\r
+events_tab:"Esem\u00E9nyek",\r
+advanced_tab:"Halad\u00F3",\r
+general_props:"\u00C1ltal\u00E1nos tulajdons\u00E1gok",\r
+popup_props:"Felugr\u00F3 ablak tulajdons\u00E1gai",\r
+event_props:"Esem\u00E9nyek",\r
+advanced_props:"Halad\u00F3 tulajdons\u00E1gok",\r
+popup_opts:"Be\u00E1ll\u00EDt\u00E1sok",\r
+anchor_names:"Horgonyok",\r
+target_same:"Azonos ablakban/keretben megnyit\u00E1s",\r
+target_parent:"Sz\u00FCl\u0151 ablakban/keretben megnyit\u00E1s",\r
+target_top:"Azonos ablakban/keretben megnyit\u00E1s legfel\u00FCl",\r
+target_blank:"\u00DAj ablakban megnyit\u00E1s",\r
+popup:"JavaScript felugr\u00F3 ablak",\r
+popup_url:"Felugr\u00F3 ablak URL",\r
+popup_name:"Ablakn\u00E9v",\r
+popup_return:"'return false' besz\u00FAr\u00E1sa",\r
+popup_scrollbars:"G\u00F6rget\u0151s\u00E1vok mutat\u00E1sa",\r
+popup_statusbar:"St\u00E1tuszsor mutat\u00E1sa",\r
+popup_toolbar:"Eszk\u00F6zsor mutat\u00E1sa",\r
+popup_menubar:"Men\u00FCsor mutat\u00E1sa",\r
+popup_location:"C\u00EDm mez\u0151 mutat\u00E1sa",\r
+popup_resizable:"\u00C1tm\u00E9retezhet\u0151 ablak",\r
+popup_dependent:"F\u00FCgg\u0151 (csak Mozilla/Firefox)",\r
+popup_size:"M\u00E9ret",\r
+popup_position:"Poz\u00EDci\u00F3 (X/Y)",\r
+id:"Id",\r
+style:"Style",\r
+classes:"Class-ok",\r
+target_name:"C\u00E9l neve",\r
+langdir:"Nyelv \u00EDr\u00E1s ir\u00E1ny",\r
+target_langcode:"C\u00E9l nyelv",\r
+langcode:"Nyelv k\u00F3d",\r
+encoding:"C\u00E9l karakterk\u00F3dol\u00E1s",\r
+mime:"C\u00E9l MIME t\u00EDpus",\r
+rel:"Oldal kapcsolata a c\u00E9llal",\r
+rev:"C\u00E9l kapcsolata az oldallal",\r
+tabindex:"Tabindex",\r
+accesskey:"Gyorsgomb",\r
+ltr:"Balr\u00F3l jobbra",\r
+rtl:"Jobbr\u00F3l balra",\r
+link_list:"Link lista"\r
+});
\ No newline at end of file
popup_position:"Positie (X/Y)",\r
id:"Id",\r
style:"Stijl",\r
-classes:"Klasses",\r
+classes:"Klassen",\r
target_name:"Doel",\r
langdir:"Taalrichting",\r
target_langcode:"Taal",\r
title:"Inserir/editar hyperlink",\r
url:"URL do hyperlink",\r
target:"Alvo",\r
-titlefield:"T\u00C3\u00ADtulo",\r
-is_email:"A URL digitada parece ser um endere\u00C3\u00A7o de e-mail. Deseja acrescentar o (necess\u00C3\u00A1rio) prefixo mailto:?",\r
-is_external:"A URL digitada parece conduzir a um link externo. Deseja acrescentar o (necess\u00C3\u00A1rio) prefixo http://?",\r
+titlefield:"T\u00EDtulo",\r
+is_email:"A URL digitada parece ser um endere\u00E7o de e-mail. Deseja acrescentar o prefixo necess\u00E1rio mailto:?",\r
+is_external:"A URL digitada parece conduzir a um link externo. Deseja acrescentar o prefixo necess\u00E1rio http://?",\r
list:"Lista de hyperlinks",\r
general_tab:"Geral",\r
popup_tab:"Popup",\r
events_tab:"Eventos",\r
-advanced_tab:"Avan\u00C3\u00A7ado",\r
+advanced_tab:"Avan\u00E7ado",\r
general_props:"Propriedades gerais",\r
popup_props:"Propriedades de popup",\r
event_props:"Eventos",\r
-advanced_props:"Propriedades avan\u00C3\u00A7adas",\r
-popup_opts:"Op\u00C3\u00A7\u00C3\u00B5es",\r
-anchor_names:"\u00C3\u0082ncoras",\r
+advanced_props:"Propriedades avan\u00E7adas",\r
+popup_opts:"Op\u00E7\u00F5es",\r
+anchor_names:"\u00C2ncoras",\r
target_same:"Abrir nesta janela/quadro",\r
target_parent:"Abrir na janela/quadro pai",\r
-target_top:"Abrir na p\u00C3\u00A1gina inteira (substitui todos os quadros)",\r
+target_top:"Abrir na p\u00E1gina inteira (substitui todos os quadros)",\r
target_blank:"Abrir numa nova janela",\r
popup:"Popup javascript",\r
popup_url:"URL do popup",\r
popup_name:"Nome da janela",\r
popup_return:"Inserir \"return false\"",\r
-popup_scrollbars:"Mostrar barras de scroll",\r
-popup_statusbar:"Mostrar barra de status",\r
-popup_toolbar:"Mostrar barras de ferramentas",\r
-popup_menubar:"Mostrar barra de menu",\r
-popup_location:"Mostrar barra de endere\u00C3\u00A7os",\r
-popup_resizable:"Permitir altera\u00C3\u00A7\u00C3\u00A3o do tamanho da janela",\r
+popup_scrollbars:"Mostrar as barras de scroll",\r
+popup_statusbar:"Mostrar a barra de status",\r
+popup_toolbar:"Mostrar a barra de ferramentas",\r
+popup_menubar:"Mostrar a barra de menu",\r
+popup_location:"Mostrar a barra de endere\u00E7os",\r
+popup_resizable:"Permitir altera\u00E7\u00E3o do tamanho da janela",\r
popup_dependent:"Dependente (Mozilla/Firefox apenas)",\r
popup_size:"Tamanho",\r
-popup_position:"Posi\u00C3\u00A7\u00C3\u00A3o (X/Y)",\r
+popup_position:"Posi\u00E7\u00E3o (X/Y)",\r
id:"Id",\r
style:"Estilo",\r
classes:"Classes",\r
target_name:"Nome do alvo",\r
-langdir:"Dire\u00C3\u00A7\u00C3\u00A3o do texto",\r
-target_langcode:"linguagem alvo",\r
-langcode:"C\u00C3\u00B3digo da linguagem",\r
-encoding:"Codifica\u00C3\u00A7\u00C3\u00A3o de caracteres",\r
+langdir:"Dire\u00E7\u00E3o do texto",\r
+target_langcode:"Idioma alvo",\r
+langcode:"C\u00F3digo do idioma",\r
+encoding:"Codifica\u00E7\u00E3o de caracteres",\r
mime:"Tipo MIME alvo",\r
-rel:"Rela\u00C3\u00A7\u00C3\u00A3o p\u00C3\u00A1gina/alvo",\r
-rev:"Rela\u00C3\u00A7\u00C3\u00A3o alvo/p\u00C3\u00A1gina",\r
+rel:"Rela\u00E7\u00E3o p\u00E1gina/alvo",\r
+rev:"Rela\u00E7\u00E3o alvo/p\u00E1gina",\r
tabindex:"Tabindex",\r
accesskey:"Chave de acesso",\r
ltr:"Da esquerda para a direita",\r
--- /dev/null
+tinyMCE.addI18n('ru.advlink_dlg',{\r
+title:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u0441\u044B\u043B\u043A\u0438",\r
+url:"\u0410\u0434\u0440\u0435\u0441",\r
+target:"\u0426\u0435\u043B\u044C",\r
+titlefield:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",\r
+is_email:"\u0412\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0439 \u0430\u0434\u0440\u0435\u0441 \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u0435\u0442 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0443\u044E \u043F\u043E\u0447\u0442\u0443, \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u0440\u0435\u0444\u0438\u043A\u0441 mailto:?",\r
+is_external:"\u0412\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0439 \u0430\u0434\u0440\u0435\u0441 \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u0435\u0442 \u0432\u043D\u0435\u0448\u043D\u044E\u044E \u0441\u0441\u044B\u043B\u043A\u0443, \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u0440\u0435\u0444\u0438\u043A\u0441 http://?",\r
+list:"\u0421\u043F\u0438\u0441\u043E\u043A",\r
+general_tab:"\u041E\u0431\u0449\u0435\u0435",\r
+popup_tab:"\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u0435",\r
+events_tab:"\u0421\u043E\u0431\u044B\u0442\u0438\u044F",\r
+advanced_tab:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E",\r
+general_props:"\u041E\u0431\u0449\u0438\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B",\r
+popup_props:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u044F",\r
+event_props:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u043E\u0431\u044B\u0442\u0438\u0439",\r
+advanced_props:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B",\r
+popup_opts:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430",\r
+anchor_names:"\u042F\u043A\u043E\u0440\u044F",\r
+target_same:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u044D\u0442\u043E\u043C \u043E\u043A\u043D\u0435/\u043A\u0430\u0434\u0440\u0435",\r
+target_parent:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u043C \u043E\u043A\u043D\u0435/\u043A\u0430\u0434\u0440\u0435",\r
+target_top:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u0432\u0435\u0440\u0445\u043D\u0435\u043C \u043A\u0430\u0434\u0440\u0435 (\u0437\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0434\u0440\u044B)",\r
+target_blank:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043D\u043E\u0432\u043E\u043C \u043E\u043A\u043D\u0435",\r
+popup:"\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u0435 \u0441 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043C Java",\r
+popup_url:"\u0410\u0434\u0440\u0435\u0441",\r
+popup_name:"\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u043A\u043D\u0430",\r
+popup_return:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C 'return false'",\r
+popup_scrollbars:"\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043F\u043E\u043B\u043E\u0441\u044B \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438",\r
+popup_statusbar:"\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F",\r
+popup_toolbar:"\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u0438 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432",\r
+popup_menubar:"\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043C\u0435\u043D\u044E",\r
+popup_location:"\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F",\r
+popup_resizable:"\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u044F\u0442\u044C \u0440\u0430\u0437\u043C\u0435\u0440",\r
+popup_dependent:"\u0417\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u044C (\u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F Firefox)",\r
+popup_size:"\u0420\u0430\u0437\u043C\u0435\u0440",\r
+popup_position:"\u041F\u043E\u0437\u0438\u0446\u0438\u044F (X/Y)",\r
+id:"\u0418\u043C\u044F",\r
+style:"\u0421\u0442\u0438\u043B\u044C",\r
+classes:"\u041A\u043B\u0430\u0441\u0441\u044B",\r
+target_name:"\u0418\u043C\u044F \u0446\u0435\u043B\u0438",\r
+langdir:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430",\r
+target_langcode:"\u042F\u0437\u044B\u043A \u0446\u0435\u043B\u0438",\r
+langcode:"\u041A\u043E\u0434 \u044F\u0437\u044B\u043A\u0430",\r
+encoding:"\u041A\u043E\u0434\u0438\u0440\u043E\u0432\u043A\u0430 \u0446\u0435\u043B\u0438",\r
+mime:"MIME \u0442\u0438\u043F \u0446\u0435\u043B\u0438",\r
+rel:"\u041E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u043A \u0446\u0435\u043B\u0438",\r
+rev:"\u041E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u0435 \u0446\u0435\u043B\u0438 \u043A \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435",\r
+tabindex:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",\r
+accesskey:"\u041A\u043B\u044E\u0447 \u0434\u043E\u0441\u0442\u0443\u043F\u0430",\r
+ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E",\r
+rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E",\r
+link_list:"\u0421\u043F\u0438\u0441\u043E\u043A \u0441\u0441\u044B\u043B\u043E\u043A"\r
+});
\ No newline at end of file
<script type="text/javascript" src="../../utils/validate.js"></script>\r
<script type="text/javascript" src="js/advlink.js"></script>\r
<link href="css/advlink.css" rel="stylesheet" type="text/css" />\r
- <base target="_self" />\r
</head>\r
<body id="advlink" style="display: none">\r
<form onsubmit="insertAction();return false;" action="#">\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td nowrap="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>\r
+ <td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>\r
<td><table border="0" cellspacing="0" cellpadding="0">\r
<tr>\r
<td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" /></td>\r
</tr>\r
<tr id="linklisthrefrow">\r
<td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td>\r
- <td colspan="2" id="linklisthrefcontainer"> </td>\r
+ <td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td>\r
</tr>\r
<tr>\r
<td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td>\r
- <td colspan="2" id="anchorlistcontainer"> </td>\r
+ <td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td>\r
</tr>\r
<tr>\r
<td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td>\r
- <td id="targetlistcontainer"> </td>\r
+ <td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>\r
+ <td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>\r
<td><input id="title" name="title" type="text" value="" /></td>\r
</tr>\r
<tr>\r
<td><label id="classlabel" for="classlist">{#class_name}</label></td>\r
<td>\r
<select id="classlist" name="classlist" onchange="changeClass();">\r
- <option value="" selected>{#not_set}</option>\r
+ <option value="" selected="selected">{#not_set}</option>\r
</select>\r
</td>\r
</tr>\r
\r
<table border="0" cellpadding="0" cellspacing="4">\r
<tr>\r
- <td nowrap="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label> </td>\r
+ <td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label> </td>\r
<td>\r
<table border="0" cellspacing="0" cellpadding="0">\r
<tr>\r
</td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label> </td>\r
+ <td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label> </td>\r
<td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label>{#advlink_dlg.popup_size}</label> </td>\r
- <td nowrap="nowrap">\r
+ <td class="nowrap"><label>{#advlink_dlg.popup_size}</label> </td>\r
+ <td class="nowrap">\r
<input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" /> x\r
<input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" /> px\r
</td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap" id="labelleft"><label>{#advlink_dlg.popup_position}</label> </td>\r
- <td nowrap="nowrap">\r
+ <td class="nowrap" id="labelleft"><label>{#advlink_dlg.popup_position}</label> </td>\r
+ <td class="nowrap">\r
<input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" /> / \r
<input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" /> (c /c = center)\r
</td>\r
<table border="0" cellpadding="0" cellspacing="4">\r
<tr>\r
<td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td>\r
- <td nowrap="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>\r
+ <td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>\r
<td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td>\r
- <td nowrap="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>\r
+ <td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>\r
</tr>\r
<tr>\r
<td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td>\r
- <td nowrap="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>\r
+ <td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>\r
<td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td>\r
- <td nowrap="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>\r
+ <td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>\r
</tr>\r
<tr>\r
<td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td>\r
- <td nowrap="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>\r
+ <td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>\r
<td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td>\r
- <td nowrap="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>\r
+ <td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>\r
</tr>\r
<tr>\r
<td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td>\r
- <td nowrap="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>\r
+ <td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>\r
<td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td>\r
- <td nowrap="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>\r
+ <td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>\r
</tr>\r
</table>\r
</fieldset>\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#insert}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
--- /dev/null
+(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)})();
\ No newline at end of file
--- /dev/null
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+ var each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.plugins.AdvListPlugin', {\r
+ init : function(ed, url) {\r
+ var t = this;\r
+\r
+ t.editor = ed;\r
+\r
+ function buildFormats(str) {\r
+ var formats = [];\r
+\r
+ each(str.split(/,/), function(type) {\r
+ formats.push({\r
+ title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')),\r
+ styles : {\r
+ listStyleType : type == 'default' ? '' : type\r
+ }\r
+ });\r
+ });\r
+\r
+ return formats;\r
+ };\r
+\r
+ // Setup number formats from config or default\r
+ t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");\r
+ t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square");\r
+ },\r
+\r
+ createControl: function(name, cm) {\r
+ var t = this, btn, format;\r
+\r
+ if (name == 'numlist' || name == 'bullist') {\r
+ // Default to first item if it's a default item\r
+ if (t[name][0].title == 'advlist.def')\r
+ format = t[name][0];\r
+\r
+ function hasFormat(node, format) {\r
+ var state = true;\r
+\r
+ each(format.styles, function(value, name) {\r
+ // Format doesn't match\r
+ if (t.editor.dom.getStyle(node, name) != value) {\r
+ state = false;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ return state;\r
+ };\r
+\r
+ function applyListFormat() {\r
+ var list, ed = t.editor, dom = ed.dom, sel = ed.selection;\r
+\r
+ // Check for existing list element\r
+ list = dom.getParent(sel.getNode(), 'ol,ul');\r
+\r
+ // Switch/add list type if needed\r
+ if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format))\r
+ ed.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');\r
+\r
+ // Append styles to new list element\r
+ if (format) {\r
+ list = dom.getParent(sel.getNode(), 'ol,ul');\r
+\r
+ if (list) {\r
+ dom.setStyles(list, format.styles);\r
+ list.removeAttribute('_mce_style');\r
+ }\r
+ }\r
+ };\r
+\r
+ btn = cm.createSplitButton(name, {\r
+ title : 'advanced.' + name + '_desc',\r
+ 'class' : 'mce_' + name,\r
+ onclick : function() {\r
+ applyListFormat();\r
+ }\r
+ });\r
+\r
+ btn.onRenderMenu.add(function(btn, menu) {\r
+ menu.onShowMenu.add(function() {\r
+ var dom = t.editor.dom, list = dom.getParent(t.editor.selection.getNode(), 'ol,ul'), fmtList;\r
+\r
+ if (list || format) {\r
+ fmtList = t[name];\r
+\r
+ // Unselect existing items\r
+ each(menu.items, function(item) {\r
+ var state = true;\r
+\r
+ item.setSelected(0);\r
+\r
+ if (list && !item.isDisabled()) {\r
+ each(fmtList, function(fmt) {\r
+ if (fmt.id == item.id) {\r
+ if (!hasFormat(list, fmt)) {\r
+ state = false;\r
+ return false;\r
+ }\r
+ }\r
+ });\r
+\r
+ if (state)\r
+ item.setSelected(1);\r
+ }\r
+ });\r
+\r
+ // Select the current format\r
+ if (!list)\r
+ menu.items[format.id].setSelected(1);\r
+ }\r
+ });\r
+\r
+ menu.add({id : t.editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
+\r
+ each(t[name], function(item) {\r
+ item.id = t.editor.dom.uniqueId();\r
+\r
+ menu.add({id : item.id, title : item.title, onclick : function() {\r
+ format = item;\r
+ applyListFormat();\r
+ }});\r
+ });\r
+ });\r
+\r
+ return btn;\r
+ }\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Advanced lists',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ }\r
+ });\r
+\r
+ // Register plugin\r
+ tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin);\r
+})();
\ No newline at end of file
--- /dev/null
+(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)})();
\ No newline at end of file
--- /dev/null
+/**
+ * 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);
+})();
\ No newline at end of file
-(function(){tinymce.create('tinymce.plugins.AutoSavePlugin',{init:function(ed,url){var t=this;t.editor=ed;window.onbeforeunload=tinymce.plugins.AutoSavePlugin._beforeUnloadHandler;},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};},'static':{_beforeUnloadHandler:function(){var msg;tinymce.each(tinyMCE.editors,function(ed){if(ed.getParam("fullscreen_is_enabled"))return;if(ed.isDirty()){msg=ed.getLang("autosave.unload_msg");return false;}});return msg;}}});tinymce.PluginManager.add('autosave',tinymce.plugins.AutoSavePlugin);})();
\ No newline at end of file
+(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);
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ *\r
+ * Adds auto-save capability to the TinyMCE text editor to rescue content\r
+ * inadvertently lost. This plugin was originally developed by Speednet\r
+ * and that project can be found here: http://code.google.com/p/tinyautosave/\r
+ *\r
+ * TECHNOLOGY DISCUSSION:\r
+ * \r
+ * The plugin attempts to use the most advanced features available in the current browser to save\r
+ * as much content as possible. There are a total of four different methods used to autosave the\r
+ * content. In order of preference, they are:\r
+ * \r
+ * 1. localStorage - A new feature of HTML 5, localStorage can store megabytes of data per domain\r
+ * on the client computer. Data stored in the localStorage area has no expiration date, so we must\r
+ * manage expiring the data ourselves. localStorage is fully supported by IE8, and it is supposed\r
+ * to be working in Firefox 3 and Safari 3.2, but in reality is is flaky in those browsers. As\r
+ * HTML 5 gets wider support, the AutoSave plugin will use it automatically. In Windows Vista/7,\r
+ * localStorage is stored in the following folder:\r
+ * C:\Users\[username]\AppData\Local\Microsoft\Internet Explorer\DOMStore\[tempFolder]\r
+ * \r
+ * 2. sessionStorage - A new feature of HTML 5, sessionStorage works similarly to localStorage,\r
+ * except it is designed to expire after a certain amount of time. Because the specification\r
+ * around expiration date/time is very loosely-described, it is preferrable to use locaStorage and\r
+ * manage the expiration ourselves. sessionStorage has similar storage characteristics to\r
+ * localStorage, although it seems to have better support by Firefox 3 at the moment. (That will\r
+ * certainly change as Firefox continues getting better at HTML 5 adoption.)\r
+ * \r
+ * 3. UserData - A very under-exploited feature of Microsoft Internet Explorer, UserData is a\r
+ * way to store up to 128K of data per "document", or up to 1MB of data per domain, on the client\r
+ * computer. The feature is available for IE 5+, which makes it available for every version of IE\r
+ * supported by TinyMCE. The content is persistent across browser restarts and expires on the\r
+ * date/time specified, just like a cookie. However, the data is not cleared when the user clears\r
+ * cookies on the browser, which makes it well-suited for rescuing autosaved content. UserData,\r
+ * like other Microsoft IE browser technologies, is implemented as a behavior attached to a\r
+ * specific DOM object, so in this case we attach the behavior to the same DOM element that the\r
+ * TinyMCE editor instance is attached to.\r
*/\r
\r
-(function() {\r
- tinymce.create('tinymce.plugins.AutoSavePlugin', {\r
+(function(tinymce) {\r
+ // Setup constants to help the compressor to reduce script size\r
+ var PLUGIN_NAME = 'autosave',\r
+ RESTORE_DRAFT = 'restoredraft',\r
+ TRUE = true,\r
+ undefined,\r
+ unloadHandlerAdded,\r
+ Dispatcher = tinymce.util.Dispatcher;\r
+\r
+ /**\r
+ * This plugin adds auto-save capability to the TinyMCE text editor to rescue content\r
+ * inadvertently lost. By using localStorage.\r
+ *\r
+ * @class tinymce.plugins.AutoSave\r
+ */\r
+ tinymce.create('tinymce.plugins.AutoSave', {\r
+ /**\r
+ * Initializes the plugin, this will be executed after the plugin has been created.\r
+ * This call is done before the editor instance has finished it's initialization so use the onInit event\r
+ * of the editor instance to intercept that event.\r
+ *\r
+ * @method init\r
+ * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.\r
+ * @param {string} url Absolute URL to where the plugin is located.\r
+ */\r
init : function(ed, url) {\r
- var t = this;\r
+ var self = this, settings = ed.settings;\r
+\r
+ self.editor = ed;\r
+\r
+ // Parses the specified time string into a milisecond number 10m, 10s etc.\r
+ function parseTime(time) {\r
+ var multipels = {\r
+ s : 1000,\r
+ m : 60000\r
+ };\r
+\r
+ time = /^(\d+)([ms]?)$/.exec('' + time);\r
+\r
+ return (time[2] ? multipels[time[2]] : 1) * parseInt(time);\r
+ };\r
+\r
+ // Default config\r
+ tinymce.each({\r
+ ask_before_unload : TRUE,\r
+ interval : '30s',\r
+ retention : '20m',\r
+ minlength : 50\r
+ }, function(value, key) {\r
+ key = PLUGIN_NAME + '_' + key;\r
+\r
+ if (settings[key] === undefined)\r
+ settings[key] = value;\r
+ });\r
+\r
+ // Parse times\r
+ settings.autosave_interval = parseTime(settings.autosave_interval);\r
+ settings.autosave_retention = parseTime(settings.autosave_retention);\r
\r
- t.editor = ed;\r
+ // Register restore button\r
+ ed.addButton(RESTORE_DRAFT, {\r
+ title : PLUGIN_NAME + ".restore_content",\r
+ onclick : function() {\r
+ if (ed.getContent({draft: true}).replace(/\s| |<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {\r
+ // Show confirm dialog if the editor isn't empty\r
+ ed.windowManager.confirm(\r
+ PLUGIN_NAME + ".warning_message",\r
+ function(ok) {\r
+ if (ok)\r
+ self.restoreDraft();\r
+ }\r
+ );\r
+ } else\r
+ self.restoreDraft();\r
+ }\r
+ });\r
\r
- window.onbeforeunload = tinymce.plugins.AutoSavePlugin._beforeUnloadHandler;\r
+ // Enable/disable restoredraft button depending on if there is a draft stored or not\r
+ ed.onNodeChange.add(function() {\r
+ var controlManager = ed.controlManager;\r
+\r
+ if (controlManager.get(RESTORE_DRAFT))\r
+ controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft());\r
+ });\r
+\r
+ ed.onInit.add(function() {\r
+ // Check if the user added the restore button, then setup auto storage logic\r
+ if (ed.controlManager.get(RESTORE_DRAFT)) {\r
+ // Setup storage engine\r
+ self.setupStorage(ed);\r
+\r
+ // Auto save contents each interval time\r
+ setInterval(function() {\r
+ self.storeDraft();\r
+ ed.nodeChanged();\r
+ }, settings.autosave_interval);\r
+ }\r
+ });\r
+\r
+ /**\r
+ * This event gets fired when a draft is stored to local storage.\r
+ *\r
+ * @event onStoreDraft\r
+ * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.\r
+ * @param {Object} draft Draft object containing the HTML contents of the editor.\r
+ */\r
+ self.onStoreDraft = new Dispatcher(self);\r
+\r
+ /**\r
+ * This event gets fired when a draft is restored from local storage.\r
+ *\r
+ * @event onStoreDraft\r
+ * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.\r
+ * @param {Object} draft Draft object containing the HTML contents of the editor.\r
+ */\r
+ self.onRestoreDraft = new Dispatcher(self);\r
+\r
+ /**\r
+ * This event gets fired when a draft removed/expired.\r
+ *\r
+ * @event onRemoveDraft\r
+ * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.\r
+ * @param {Object} draft Draft object containing the HTML contents of the editor.\r
+ */\r
+ self.onRemoveDraft = new Dispatcher(self);\r
+\r
+ // Add ask before unload dialog only add one unload handler\r
+ if (!unloadHandlerAdded) {\r
+ window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler;\r
+ unloadHandlerAdded = TRUE;\r
+ }\r
},\r
\r
+ /**\r
+ * Returns information about the plugin as a name/value array.\r
+ * The current keys are longname, author, authorurl, infourl and version.\r
+ *\r
+ * @method getInfo\r
+ * @return {Object} Name/value array containing information about the plugin.\r
+ */\r
getInfo : function() {\r
return {\r
longname : 'Auto save',\r
};\r
},\r
\r
- // Private plugin internal methods\r
+ /**\r
+ * Returns an expiration date UTC string.\r
+ *\r
+ * @method getExpDate\r
+ * @return {String} Expiration date UTC string.\r
+ */\r
+ getExpDate : function() {\r
+ return new Date(\r
+ new Date().getTime() + this.editor.settings.autosave_retention\r
+ ).toUTCString();\r
+ },\r
+\r
+ /**\r
+ * This method will setup the storage engine. If the browser has support for it.\r
+ *\r
+ * @method setupStorage\r
+ */\r
+ setupStorage : function(ed) {\r
+ var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK";\r
+\r
+ self.key = PLUGIN_NAME + ed.id;\r
+\r
+ // Loop though each storage engine type until we find one that works\r
+ tinymce.each([\r
+ function() {\r
+ // Try HTML5 Local Storage\r
+ if (localStorage) {\r
+ localStorage.setItem(testKey, testVal);\r
+\r
+ if (localStorage.getItem(testKey) === testVal) {\r
+ localStorage.removeItem(testKey);\r
+\r
+ return localStorage;\r
+ }\r
+ }\r
+ },\r
+\r
+ function() {\r
+ // Try HTML5 Session Storage\r
+ if (sessionStorage) {\r
+ sessionStorage.setItem(testKey, testVal);\r
+\r
+ if (sessionStorage.getItem(testKey) === testVal) {\r
+ sessionStorage.removeItem(testKey);\r
+\r
+ return sessionStorage;\r
+ }\r
+ }\r
+ },\r
+\r
+ function() {\r
+ // Try IE userData\r
+ if (tinymce.isIE) {\r
+ ed.getElement().style.behavior = "url('#default#userData')";\r
+\r
+ // Fake localStorage on old IE\r
+ return {\r
+ autoExpires : TRUE,\r
+\r
+ setItem : function(key, value) {\r
+ var userDataElement = ed.getElement();\r
+\r
+ userDataElement.setAttribute(key, value);\r
+ userDataElement.expires = self.getExpDate();\r
+ userDataElement.save("TinyMCE");\r
+ },\r
+\r
+ getItem : function(key) {\r
+ var userDataElement = ed.getElement();\r
+\r
+ userDataElement.load("TinyMCE");\r
\r
- 'static' : {\r
- _beforeUnloadHandler : function() {\r
+ return userDataElement.getAttribute(key);\r
+ },\r
+\r
+ removeItem : function(key) {\r
+ ed.getElement().removeAttribute(key);\r
+ }\r
+ };\r
+ }\r
+ },\r
+ ], function(setup) {\r
+ // Try executing each function to find a suitable storage engine\r
+ try {\r
+ self.storage = setup();\r
+\r
+ if (self.storage)\r
+ return false;\r
+ } catch (e) {\r
+ // Ignore\r
+ }\r
+ });\r
+ },\r
+\r
+ /**\r
+ * This method will store the current contents in the the storage engine.\r
+ *\r
+ * @method storeDraft\r
+ */\r
+ storeDraft : function() {\r
+ var self = this, storage = self.storage, editor = self.editor, expires, content;\r
+\r
+ // Is the contents dirty\r
+ if (storage) {\r
+ // If there is no existing key and the contents hasn't been changed since\r
+ // it's original value then there is no point in saving a draft\r
+ if (!storage.getItem(self.key) && !editor.isDirty())\r
+ return;\r
+\r
+ // Store contents if the contents if longer than the minlength of characters\r
+ content = editor.getContent({draft: true});\r
+ if (content.length > editor.settings.autosave_minlength) {\r
+ expires = self.getExpDate();\r
+\r
+ // Store expiration date if needed IE userData has auto expire built in\r
+ if (!self.storage.autoExpires)\r
+ self.storage.setItem(self.key + "_expires", expires);\r
+\r
+ self.storage.setItem(self.key, content);\r
+ self.onStoreDraft.dispatch(self, {\r
+ expires : expires,\r
+ content : content\r
+ });\r
+ }\r
+ }\r
+ },\r
+\r
+ /**\r
+ * This method will restore the contents from the storage engine back to the editor.\r
+ *\r
+ * @method restoreDraft\r
+ */\r
+ restoreDraft : function() {\r
+ var self = this, storage = self.storage;\r
+\r
+ if (storage) {\r
+ content = storage.getItem(self.key);\r
+\r
+ if (content) {\r
+ self.editor.setContent(content);\r
+ self.onRestoreDraft.dispatch(self, {\r
+ content : content\r
+ });\r
+ }\r
+ }\r
+ },\r
+\r
+ /**\r
+ * This method will return true/false if there is a local storage draft available.\r
+ *\r
+ * @method hasDraft\r
+ * @return {boolean} true/false state if there is a local draft.\r
+ */\r
+ hasDraft : function() {\r
+ var self = this, storage = self.storage, expDate, exists;\r
+\r
+ if (storage) {\r
+ // Does the item exist at all\r
+ exists = !!storage.getItem(self.key);\r
+ if (exists) {\r
+ // Storage needs autoexpire\r
+ if (!self.storage.autoExpires) {\r
+ expDate = new Date(storage.getItem(self.key + "_expires"));\r
+\r
+ // Contents hasn't expired\r
+ if (new Date().getTime() < expDate.getTime())\r
+ return TRUE;\r
+\r
+ // Remove it if it has\r
+ self.removeDraft();\r
+ } else\r
+ return TRUE;\r
+ }\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ /**\r
+ * Removes the currently stored draft.\r
+ *\r
+ * @method removeDraft\r
+ */\r
+ removeDraft : function() {\r
+ var self = this, storage = self.storage, key = self.key, content;\r
+\r
+ if (storage) {\r
+ // Get current contents and remove the existing draft\r
+ content = storage.getItem(key);\r
+ storage.removeItem(key);\r
+ storage.removeItem(key + "_expires");\r
+\r
+ // Dispatch remove event if we had any contents\r
+ if (content) {\r
+ self.onRemoveDraft.dispatch(self, {\r
+ content : content\r
+ });\r
+ }\r
+ }\r
+ },\r
+\r
+ "static" : {\r
+ // Internal unload handler will be called before the page is unloaded\r
+ _beforeUnloadHandler : function(e) {\r
var msg;\r
\r
tinymce.each(tinyMCE.editors, function(ed) {\r
+ // Store a draft for each editor instance\r
+ if (ed.plugins.autosave)\r
+ ed.plugins.autosave.storeDraft();\r
+\r
+ // Never ask in fullscreen mode\r
if (ed.getParam("fullscreen_is_enabled"))\r
return;\r
\r
- if (ed.isDirty()) {\r
+ // Setup a return message if the editor is dirty\r
+ if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload"))\r
msg = ed.getLang("autosave.unload_msg");\r
- return false;\r
- }\r
});\r
\r
return msg;\r
}\r
});\r
\r
- // Register plugin\r
- tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSavePlugin);\r
-})();\r
+ tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave);\r
+})(tinymce);\r
--- /dev/null
+tinyMCE.addI18n('en.autosave',{\r
+restore_content: "Restore auto-saved content",\r
+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?"\r
+});
\ No newline at end of file
-(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};},_punbb_html2bbcode:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str);};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;},_punbb_bbcode2html:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str);};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;}});tinymce.PluginManager.add('bbcode',tinymce.plugins.BBCodePlugin);})();
\ No newline at end of file
+(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)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);\r
-})();\r
+})();
\ No newline at end of file
+++ /dev/null
-(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,is=tinymce.is;tinymce.create('tinymce.plugins.Compat2x',{getInfo:function(){return{longname:'Compat2x',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};}});(function(){tinymce.extend(tinyMCE,{addToLang:function(p,l){each(l,function(v,k){tinyMCE.i18n[(tinyMCE.settings.language||'en')+'.'+(p?p+'_':'')+k]=v;});},getInstanceById:function(n){return this.get(n);}});})();(function(){var EditorManager=tinymce.EditorManager;tinyMCE.instances={};tinyMCE.plugins={};tinymce.PluginManager.onAdd.add(function(pm,n,p){tinyMCE.plugins[n]=p;});tinyMCE.majorVersion=tinymce.majorVersion;tinyMCE.minorVersion=tinymce.minorVersion;tinyMCE.releaseDate=tinymce.releaseDate;tinyMCE.baseURL=tinymce.baseURL;tinyMCE.isIE=tinyMCE.isMSIE=tinymce.isIE||tinymce.isOpera;tinyMCE.isMSIE5=tinymce.isIE;tinyMCE.isMSIE5_0=tinymce.isIE;tinyMCE.isMSIE7=tinymce.isIE;tinyMCE.isGecko=tinymce.isGecko;tinyMCE.isSafari=tinymce.isWebKit;tinyMCE.isOpera=tinymce.isOpera;tinyMCE.isMac=false;tinyMCE.isNS7=false;tinyMCE.isNS71=false;tinyMCE.compat=true;TinyMCE_Engine=tinyMCE;tinymce.extend(tinyMCE,{getParam:function(n,dv){return this.activeEditor.getParam(n,dv);},addEvent:function(e,na,f,sc){tinymce.dom.Event.add(e,na,f,sc||this);},getControlHTML:function(n){return EditorManager.activeEditor.controlManager.createControl(n);},loadCSS:function(u){tinymce.DOM.loadCSS(u);},importCSS:function(doc,u){if(doc==document)this.loadCSS(u);else new tinymce.dom.DOMUtils(doc).loadCSS(u);},log:function(){console.debug.apply(console,arguments);},getLang:function(n,dv){var v=EditorManager.activeEditor.getLang(n.replace(/^lang_/g,''),dv);if(/^[0-9\-.]+$/g.test(v))return parseInt(v);return v;},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.execCommand;},triggerNodeChange:function(){EditorManager.activeEditor.nodeChanged();},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str);},trim:function(s){return tinymce.trim(s);},xmlEncode:function(s){return tinymce.DOM.encode(s);},explode:function(s,d){var o=[];tinymce.each(s.split(d),function(v){if(v!='')o.push(v);});return o;},switchClass:function(id,cls){var b;if(/^mceButton/.test(cls)){b=EditorManager.activeEditor.controlManager.get(id);if(!b)return;switch(cls){case"mceButtonNormal":b.setDisabled(false);b.setActive(false);return;case"mceButtonDisabled":b.setDisabled(true);return;case"mceButtonSelected":b.setActive(true);b.setDisabled(false);return;}}},addCSSClass:function(e,n,b){return tinymce.DOM.addClass(e,n,b);},hasCSSClass:function(e,n){return tinymce.DOM.hasClass(e,n);},removeCSSClass:function(e,n){return tinymce.DOM.removeClass(e,n);},getCSSClasses:function(){var cl=EditorManager.activeEditor.dom.getClasses(),o=[];each(cl,function(c){o.push(c['class']);});return o;},setWindowArg:function(n,v){EditorManager.activeEditor.windowManager.params[n]=v;},getWindowArg:function(n,dv){var wm=EditorManager.activeEditor.windowManager,v;v=wm.getParam(n);if(v==='')return'';return v||wm.getFeature(n)||dv;},getParentNode:function(n,f){return this._getDOM().getParent(n,f);},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a;},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn);},na?na:[]);},getAttrib:function(e,n,dv){return this._getDOM().getAttrib(e,n,dv);},setAttrib:function(e,n,v){return this._getDOM().setAttrib(e,n,v);},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i];}return o;},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a);}return a;},getContent:function(){return EditorManager.activeEditor.getContent();},getParentElement:function(n,na,f){if(na)na=new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$','g');return this._getDOM().getParent(n,function(n){return n.nodeType==1&&(!na||na.test(n.nodeName))&&(!f||f(n));},this.activeEditor.getBody());},importPluginLanguagePack:function(n){tinymce.PluginManager.requireLangPack(n);},getButtonHTML:function(cn,lang,img,c,u,v){var ed=EditorManager.activeEditor;img=img.replace(/\{\$pluginurl\}/g,tinyMCE.pluginURL);img=img.replace(/\{\$themeurl\}/g,tinyMCE.themeURL);lang=lang.replace(/^lang_/g,'');return ed.controlManager.createButton(cn,{title:lang,command:c,ui:u,value:v,scope:this,'class':'compat',image:img});},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w;}return false;},accessibleEventHandler:function(e){var elm,win=this._win;e=tinymce.isIE?win.event:e;elm=tinymce.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null;}return true;}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null;}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false;}return true;},cancelEvent:function(e){return tinymce.dom.Event.cancel(e);},handleVisualAid:function(e){EditorManager.activeEditor.addVisual(e);},getAbsPosition:function(n,r){return tinymce.DOM.getPos(n,r);},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s;},getVisualAidClass:function(s){return s;},parseStyle:function(s){return this._getDOM().parseStyle(s);},serializeStyle:function(s){return this._getDOM().serializeStyle(s);},openWindow:function(tpl,args){var ed=EditorManager.activeEditor,o={},n;for(n in tpl)o[n]=tpl[n];tpl=o;args=args||{};tpl.url=new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);tpl.inline=tpl.inline||args.inline;ed.windowManager.open(tpl,args);},closeWindow:function(win){EditorManager.activeEditor.windowManager.close(win);},getOuterHTML:function(e){return tinymce.DOM.getOuterHTML(e);},setOuterHTML:function(e,h,d){return tinymce.DOM.setOuterHTML(e,h,d);},hasPlugin:function(n){return tinymce.PluginManager.get(n)!=null;},_setEventsEnabled:function(){},addPlugin:function(pn,f){var t=this;function PluginWrapper(ed){tinyMCE.selectedInstance=ed;ed.onInit.add(function(){t.settings=ed.settings;t.settings['base_href']=tinyMCE.documentBasePath;tinyMCE.settings=t.settings;tinyMCE.documentBasePath=ed.documentBasePath;if(f.initInstance)f.initInstance(ed);ed.contentDocument=ed.getDoc();ed.contentWindow=ed.getWin();ed.undoRedo=ed.undoManager;ed.startContent=ed.getContent({format:'raw'});tinyMCE.instances[ed.id]=ed;tinyMCE.loadedFiles=[];});ed.onActivate.add(function(){tinyMCE.settings=ed.settings;tinyMCE.selectedInstance=ed;});if(f.handleNodeChange){ed.onNodeChange.add(function(ed,cm,n){f.handleNodeChange(ed.id,n,0,0,false,!ed.selection.isCollapsed());});}if(f.onChange){ed.onChange.add(function(ed,n){return f.onChange(ed);});}if(f.cleanup){ed.onGetContent.add(function(){});}this.getInfo=function(){return f.getInfo();};this.createControl=function(n){tinyMCE.pluginURL=tinymce.baseURL+'/plugins/'+pn;tinyMCE.themeURL=tinymce.baseURL+'/themes/'+tinyMCE.activeEditor.settings.theme;if(f.getControlHTML)return f.getControlHTML(n);return null;};this.execCommand=function(cmd,ui,val){if(f.execCommand)return f.execCommand(ed.id,ed.getBody(),cmd,ui,val);return false;};};tinymce.PluginManager.add(pn,PluginWrapper);},_getDOM:function(){return tinyMCE.activeEditor?tinyMCE.activeEditor.dom:tinymce.DOM;},convertRelativeToAbsoluteURL:function(b,u){return new tinymce.util.URI(b).toAbsolute(u);},convertAbsoluteURLToRelativeURL:function(b,u){return new tinymce.util.URI(b).toRelative(u);}});tinymce.extend(tinymce.Editor.prototype,{getFocusElement:function(){return this.selection.getNode();},getData:function(n){if(!this.data)this.data=[];if(!this.data[n])this.data[n]=[];return this.data[n];},hasPlugin:function(n){return this.plugins[n]!=null;},getContainerWin:function(){return window;},getHTML:function(raw){return this.getContent({format:raw?'raw':'html'});},setHTML:function(h){this.setContent(h);},getSel:function(){return this.selection.getSel();},getRng:function(){return this.selection.getRng();},isHidden:function(){var s;if(!tinymce.isGecko)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},translate:function(s){var c=this.settings.language,o;if(!s)return s;o=tinymce.EditorManager.i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{#'+b+'}';});o=o.replace(/{\$lang_([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{$lang_'+b+'}';});return o;},repaint:function(){this.execCommand('mceRepaint');}});tinymce.extend(tinymce.dom.Selection.prototype,{getSelectedText:function(){return this.getContent({format:'text'});},getSelectedHTML:function(){return this.getContent({format:'html'});},getFocusElement:function(){return this.getNode();},selectNode:function(node,collapse,select_text_node,to_start){var t=this;t.select(node,select_text_node||0);if(!is(collapse))collapse=true;if(collapse){if(!is(to_start))to_start=true;t.collapse(to_start);}}});}).call(this);tinymce.PluginManager.add('compat2x',tinymce.plugins.Compat2x);})();
\ No newline at end of file
+++ /dev/null
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-(function() {\r
- var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;\r
-\r
- tinymce.create('tinymce.plugins.Compat2x', {\r
- getInfo : function() {\r
- return {\r
- longname : 'Compat2x',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',\r
- version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
- };\r
- }\r
- });\r
-\r
- (function() {\r
- // Extend tinyMCE/EditorManager\r
- tinymce.extend(tinyMCE, {\r
- addToLang : function(p, l) {\r
- each(l, function(v, k) {\r
- tinyMCE.i18n[(tinyMCE.settings.language || 'en') + '.' + (p ? p + '_' : '') + k] = v;\r
- });\r
- },\r
-\r
- getInstanceById : function(n) {\r
- return this.get(n);\r
- }\r
- });\r
- })();\r
-\r
- (function() {\r
- var EditorManager = tinymce.EditorManager;\r
-\r
- tinyMCE.instances = {};\r
- tinyMCE.plugins = {};\r
- tinymce.PluginManager.onAdd.add(function(pm, n, p) {\r
- tinyMCE.plugins[n] = p;\r
- });\r
-\r
- tinyMCE.majorVersion = tinymce.majorVersion;\r
- tinyMCE.minorVersion = tinymce.minorVersion;\r
- tinyMCE.releaseDate = tinymce.releaseDate;\r
- tinyMCE.baseURL = tinymce.baseURL;\r
- tinyMCE.isIE = tinyMCE.isMSIE = tinymce.isIE || tinymce.isOpera;\r
- tinyMCE.isMSIE5 = tinymce.isIE;\r
- tinyMCE.isMSIE5_0 = tinymce.isIE;\r
- tinyMCE.isMSIE7 = tinymce.isIE;\r
- tinyMCE.isGecko = tinymce.isGecko;\r
- tinyMCE.isSafari = tinymce.isWebKit;\r
- tinyMCE.isOpera = tinymce.isOpera;\r
- tinyMCE.isMac = false;\r
- tinyMCE.isNS7 = false;\r
- tinyMCE.isNS71 = false;\r
- tinyMCE.compat = true;\r
-\r
- // Extend tinyMCE class\r
- TinyMCE_Engine = tinyMCE;\r
- tinymce.extend(tinyMCE, {\r
- getParam : function(n, dv) {\r
- return this.activeEditor.getParam(n, dv);\r
- },\r
-\r
- addEvent : function(e, na, f, sc) {\r
- tinymce.dom.Event.add(e, na, f, sc || this);\r
- },\r
-\r
- getControlHTML : function(n) {\r
- return EditorManager.activeEditor.controlManager.createControl(n);\r
- },\r
-\r
- loadCSS : function(u) {\r
- tinymce.DOM.loadCSS(u);\r
- },\r
-\r
- importCSS : function(doc, u) {\r
- if (doc == document)\r
- this.loadCSS(u);\r
- else\r
- new tinymce.dom.DOMUtils(doc).loadCSS(u);\r
- },\r
-\r
- log : function() {\r
- console.debug.apply(console, arguments);\r
- },\r
-\r
- getLang : function(n, dv) {\r
- var v = EditorManager.activeEditor.getLang(n.replace(/^lang_/g, ''), dv);\r
-\r
- // Is number\r
- if (/^[0-9\-.]+$/g.test(v))\r
- return parseInt(v);\r
-\r
- return v;\r
- },\r
-\r
- isInstance : function(o) {\r
- return o != null && typeof(o) == "object" && o.execCommand;\r
- },\r
-\r
- triggerNodeChange : function() {\r
- EditorManager.activeEditor.nodeChanged();\r
- },\r
-\r
- regexpReplace : function(in_str, reg_exp, replace_str, opts) {\r
- var re;\r
-\r
- if (in_str == null)\r
- return in_str;\r
-\r
- if (typeof(opts) == "undefined")\r
- opts = 'g';\r
-\r
- re = new RegExp(reg_exp, opts);\r
-\r
- return in_str.replace(re, replace_str);\r
- },\r
-\r
- trim : function(s) {\r
- return tinymce.trim(s);\r
- },\r
-\r
- xmlEncode : function(s) {\r
- return tinymce.DOM.encode(s);\r
- },\r
-\r
- explode : function(s, d) {\r
- var o = [];\r
-\r
- tinymce.each(s.split(d), function(v) {\r
- if (v != '')\r
- o.push(v);\r
- });\r
-\r
- return o;\r
- },\r
-\r
- switchClass : function(id, cls) {\r
- var b;\r
-\r
- if (/^mceButton/.test(cls)) {\r
- b = EditorManager.activeEditor.controlManager.get(id);\r
-\r
- if (!b)\r
- return;\r
-\r
- switch (cls) {\r
- case "mceButtonNormal":\r
- b.setDisabled(false);\r
- b.setActive(false);\r
- return;\r
-\r
- case "mceButtonDisabled":\r
- b.setDisabled(true);\r
- return;\r
-\r
- case "mceButtonSelected":\r
- b.setActive(true);\r
- b.setDisabled(false);\r
- return;\r
- }\r
- }\r
- },\r
-\r
- addCSSClass : function(e, n, b) {\r
- return tinymce.DOM.addClass(e, n, b);\r
- },\r
-\r
- hasCSSClass : function(e, n) {\r
- return tinymce.DOM.hasClass(e, n);\r
- },\r
-\r
- removeCSSClass : function(e, n) {\r
- return tinymce.DOM.removeClass(e, n);\r
- },\r
-\r
- getCSSClasses : function() {\r
- var cl = EditorManager.activeEditor.dom.getClasses(), o = [];\r
-\r
- each(cl, function(c) {\r
- o.push(c['class']);\r
- });\r
-\r
- return o;\r
- },\r
-\r
- setWindowArg : function(n, v) {\r
- EditorManager.activeEditor.windowManager.params[n] = v;\r
- },\r
-\r
- getWindowArg : function(n, dv) {\r
- var wm = EditorManager.activeEditor.windowManager, v;\r
-\r
- v = wm.getParam(n);\r
- if (v === '')\r
- return '';\r
-\r
- return v || wm.getFeature(n) || dv;\r
- },\r
-\r
- getParentNode : function(n, f) {\r
- return this._getDOM().getParent(n, f);\r
- },\r
-\r
- selectElements : function(n, na, f) {\r
- var i, a = [], nl, x;\r
-\r
- for (x=0, na = na.split(','); x<na.length; x++)\r
- for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)\r
- (!f || f(nl[i])) && a.push(nl[i]);\r
-\r
- return a;\r
- },\r
-\r
- getNodeTree : function(n, na, t, nn) {\r
- return this.selectNodes(n, function(n) {\r
- return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);\r
- }, na ? na : []);\r
- },\r
-\r
- getAttrib : function(e, n, dv) {\r
- return this._getDOM().getAttrib(e, n, dv);\r
- },\r
-\r
- setAttrib : function(e, n, v) {\r
- return this._getDOM().setAttrib(e, n, v);\r
- },\r
-\r
- getElementsByAttributeValue : function(n, e, a, v) {\r
- var i, nl = n.getElementsByTagName(e), o = [];\r
-\r
- for (i=0; i<nl.length; i++) {\r
- if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)\r
- o[o.length] = nl[i];\r
- }\r
-\r
- return o;\r
- },\r
-\r
- selectNodes : function(n, f, a) {\r
- var i;\r
-\r
- if (!a)\r
- a = [];\r
-\r
- if (f(n))\r
- a[a.length] = n;\r
-\r
- if (n.hasChildNodes()) {\r
- for (i=0; i<n.childNodes.length; i++)\r
- tinyMCE.selectNodes(n.childNodes[i], f, a);\r
- }\r
-\r
- return a;\r
- },\r
-\r
- getContent : function() {\r
- return EditorManager.activeEditor.getContent();\r
- },\r
-\r
- getParentElement : function(n, na, f) {\r
- if (na)\r
- na = new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$', 'g');\r
-\r
- return this._getDOM().getParent(n, function(n) {\r
- return n.nodeType == 1 && (!na || na.test(n.nodeName)) && (!f || f(n));\r
- }, this.activeEditor.getBody());\r
- },\r
-\r
- importPluginLanguagePack : function(n) {\r
- tinymce.PluginManager.requireLangPack(n);\r
- },\r
-\r
- getButtonHTML : function(cn, lang, img, c, u, v) {\r
- var ed = EditorManager.activeEditor;\r
-\r
- img = img.replace(/\{\$pluginurl\}/g, tinyMCE.pluginURL);\r
- img = img.replace(/\{\$themeurl\}/g, tinyMCE.themeURL);\r
- lang = lang.replace(/^lang_/g, '');\r
-\r
- return ed.controlManager.createButton(cn, {\r
- title : lang,\r
- command : c,\r
- ui : u,\r
- value : v,\r
- scope : this,\r
- 'class' : 'compat',\r
- image : img\r
- });\r
- },\r
-\r
- addSelectAccessibility : function(e, s, w) {\r
- // Add event handlers \r
- if (!s._isAccessible) {\r
- s.onkeydown = tinyMCE.accessibleEventHandler;\r
- s.onblur = tinyMCE.accessibleEventHandler;\r
- s._isAccessible = true;\r
- s._win = w;\r
- }\r
-\r
- return false;\r
- },\r
-\r
- accessibleEventHandler : function(e) {\r
- var elm, win = this._win;\r
-\r
- e = tinymce.isIE ? win.event : e;\r
- elm = tinymce.isIE ? e.srcElement : e.target;\r
-\r
- // Unpiggyback onchange on blur\r
- if (e.type == "blur") {\r
- if (elm.oldonchange) {\r
- elm.onchange = elm.oldonchange;\r
- elm.oldonchange = null;\r
- }\r
-\r
- return true;\r
- }\r
-\r
- // Piggyback onchange\r
- if (elm.nodeName == "SELECT" && !elm.oldonchange) {\r
- elm.oldonchange = elm.onchange;\r
- elm.onchange = null;\r
- }\r
-\r
- // Execute onchange and remove piggyback\r
- if (e.keyCode == 13 || e.keyCode == 32) {\r
- elm.onchange = elm.oldonchange;\r
- elm.onchange();\r
- elm.oldonchange = null;\r
-\r
- tinyMCE.cancelEvent(e);\r
- return false;\r
- }\r
-\r
- return true;\r
- },\r
-\r
- cancelEvent : function(e) {\r
- return tinymce.dom.Event.cancel(e);\r
- },\r
-\r
- handleVisualAid : function(e) {\r
- EditorManager.activeEditor.addVisual(e);\r
- },\r
-\r
- getAbsPosition : function(n, r) {\r
- return tinymce.DOM.getPos(n, r);\r
- },\r
-\r
- cleanupEventStr : function(s) {\r
- s = "" + s;\r
- s = s.replace('function anonymous()\n{\n', '');\r
- s = s.replace('\n}', '');\r
- s = s.replace(/^return true;/gi, ''); // Remove event blocker\r
-\r
- return s;\r
- },\r
-\r
- getVisualAidClass : function(s) {\r
- // TODO: Implement\r
- return s;\r
- },\r
-\r
- parseStyle : function(s) {\r
- return this._getDOM().parseStyle(s);\r
- },\r
-\r
- serializeStyle : function(s) {\r
- return this._getDOM().serializeStyle(s);\r
- },\r
-\r
- openWindow : function(tpl, args) {\r
- var ed = EditorManager.activeEditor, o = {}, n;\r
-\r
- // Convert name/value array to object\r
- for (n in tpl)\r
- o[n] = tpl[n];\r
-\r
- tpl = o;\r
-\r
- args = args || {};\r
- tpl.url = new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);\r
- tpl.inline = tpl.inline || args.inline;\r
-\r
- ed.windowManager.open(tpl, args);\r
- },\r
-\r
- closeWindow : function(win) {\r
- EditorManager.activeEditor.windowManager.close(win);\r
- },\r
-\r
- getOuterHTML : function(e) {\r
- return tinymce.DOM.getOuterHTML(e);\r
- },\r
-\r
- setOuterHTML : function(e, h, d) {\r
- return tinymce.DOM.setOuterHTML(e, h, d);\r
- },\r
-\r
- hasPlugin : function(n) {\r
- return tinymce.PluginManager.get(n) != null;\r
- },\r
-\r
- _setEventsEnabled : function() {\r
- // Ignore it!!\r
- },\r
-\r
- addPlugin : function(pn, f) {\r
- var t = this;\r
-\r
- function PluginWrapper(ed) {\r
- tinyMCE.selectedInstance = ed;\r
-\r
- ed.onInit.add(function() {\r
- t.settings = ed.settings;\r
- t.settings['base_href'] = tinyMCE.documentBasePath;\r
- tinyMCE.settings = t.settings;\r
- tinyMCE.documentBasePath = ed.documentBasePath;\r
- //ed.formElement = DOM.get(ed.id);\r
-\r
- if (f.initInstance)\r
- f.initInstance(ed);\r
-\r
- ed.contentDocument = ed.getDoc();\r
- ed.contentWindow = ed.getWin();\r
- ed.undoRedo = ed.undoManager;\r
- ed.startContent = ed.getContent({format : 'raw'});\r
-\r
- tinyMCE.instances[ed.id] = ed;\r
- tinyMCE.loadedFiles = [];\r
- });\r
-\r
- ed.onActivate.add(function() {\r
- tinyMCE.settings = ed.settings;\r
- tinyMCE.selectedInstance = ed;\r
- });\r
-\r
- /* if (f.removeInstance) {\r
- ed.onDestroy.add(function() {\r
- return f.removeInstance(ed.id);\r
- });\r
- }*/\r
-\r
- if (f.handleNodeChange) {\r
- ed.onNodeChange.add(function(ed, cm, n) {\r
- f.handleNodeChange(ed.id, n, 0, 0, false, !ed.selection.isCollapsed());\r
- });\r
- }\r
-\r
- if (f.onChange) {\r
- ed.onChange.add(function(ed, n) {\r
- return f.onChange(ed);\r
- });\r
- }\r
-\r
- if (f.cleanup) {\r
- ed.onGetContent.add(function() {\r
- //f.cleanup(type, content, inst);\r
- });\r
- }\r
-\r
- this.getInfo = function() {\r
- return f.getInfo();\r
- };\r
-\r
- this.createControl = function(n) {\r
- tinyMCE.pluginURL = tinymce.baseURL + '/plugins/' + pn;\r
- tinyMCE.themeURL = tinymce.baseURL + '/themes/' + tinyMCE.activeEditor.settings.theme;\r
-\r
- if (f.getControlHTML)\r
- return f.getControlHTML(n);\r
-\r
- return null;\r
- };\r
-\r
- this.execCommand = function(cmd, ui, val) {\r
- if (f.execCommand)\r
- return f.execCommand(ed.id, ed.getBody(), cmd, ui, val);\r
-\r
- return false;\r
- };\r
- };\r
-\r
- tinymce.PluginManager.add(pn, PluginWrapper);\r
- },\r
-\r
- _getDOM : function() {\r
- return tinyMCE.activeEditor ? tinyMCE.activeEditor.dom : tinymce.DOM;\r
- },\r
-\r
- convertRelativeToAbsoluteURL : function(b, u) {\r
- return new tinymce.util.URI(b).toAbsolute(u);\r
- },\r
-\r
- convertAbsoluteURLToRelativeURL : function(b, u) {\r
- return new tinymce.util.URI(b).toRelative(u);\r
- }\r
- });\r
-\r
- // Extend Editor class\r
- tinymce.extend(tinymce.Editor.prototype, {\r
- getFocusElement : function() {\r
- return this.selection.getNode();\r
- },\r
-\r
- getData : function(n) {\r
- if (!this.data)\r
- this.data = [];\r
-\r
- if (!this.data[n])\r
- this.data[n] = [];\r
-\r
- return this.data[n];\r
- },\r
-\r
- hasPlugin : function(n) {\r
- return this.plugins[n] != null;\r
- },\r
-\r
- getContainerWin : function() {\r
- return window;\r
- },\r
-\r
- getHTML : function(raw) {\r
- return this.getContent({ format : raw ? 'raw' : 'html'});\r
- },\r
-\r
- setHTML : function(h) {\r
- this.setContent(h);\r
- },\r
-\r
- getSel : function() {\r
- return this.selection.getSel();\r
- },\r
-\r
- getRng : function() {\r
- return this.selection.getRng();\r
- },\r
-\r
- isHidden : function() {\r
- var s;\r
-\r
- if (!tinymce.isGecko)\r
- return false;\r
-\r
- s = this.getSel();\r
-\r
- // Weird, wheres that cursor selection?\r
- return (!s || !s.rangeCount || s.rangeCount == 0);\r
- },\r
-\r
- translate : function(s) {\r
- var c = this.settings.language, o;\r
-\r
- if (!s)\r
- return s;\r
-\r
- o = tinymce.EditorManager.i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {\r
- return tinymce.EditorManager.i18n[c + '.' + b] || '{#' + b + '}';\r
- });\r
-\r
- o = o.replace(/{\$lang_([^}]+)\}/g, function(a, b) {\r
- return tinymce.EditorManager.i18n[c + '.' + b] || '{$lang_' + b + '}';\r
- });\r
-\r
- return o;\r
- },\r
-\r
- repaint : function() {\r
- this.execCommand('mceRepaint');\r
- }\r
- });\r
-\r
- // Extend selection\r
- tinymce.extend(tinymce.dom.Selection.prototype, {\r
- getSelectedText : function() {\r
- return this.getContent({format : 'text'});\r
- },\r
-\r
- getSelectedHTML : function() {\r
- return this.getContent({format : 'html'});\r
- },\r
-\r
- getFocusElement : function() {\r
- return this.getNode();\r
- },\r
-\r
- selectNode : function(node, collapse, select_text_node, to_start) {\r
- var t = this;\r
-\r
- t.select(node, select_text_node || 0);\r
-\r
- if (!is(collapse))\r
- collapse = true;\r
-\r
- if (collapse) {\r
- if (!is(to_start))\r
- to_start = true;\r
-\r
- t.collapse(to_start);\r
- }\r
- }\r
- });\r
- }).call(this);\r
-\r
- // Register plugin\r
- tinymce.PluginManager.add('compat2x', tinymce.plugins.Compat2x);\r
-})();\r
-\r
-(function(){var Event=tinymce.dom.Event,each=tinymce.each,DOM=tinymce.DOM;tinymce.create('tinymce.plugins.ContextMenu',{init:function(ed){var t=this;t.editor=ed;t.onContextMenu=new tinymce.util.Dispatcher(this);ed.onContextMenu.add(function(ed,e){if(!e.ctrlKey){t._getMenu(ed).showMenu(e.clientX,e.clientY);Event.add(ed.getDoc(),'click',hide);Event.cancel(e);}});function hide(){if(t._menu){t._menu.removeAll();t._menu.destroy();Event.remove(ed.getDoc(),'click',hide);}};ed.onMouseDown.add(hide);ed.onKeyDown.add(hide);},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;}});tinymce.PluginManager.add('contextmenu',tinymce.plugins.ContextMenu);})();
\ No newline at end of file
+(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)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;\r
\r
+ /**\r
+ * This plugin a context menu to TinyMCE editor instances.\r
+ *\r
+ * @class tinymce.plugins.ContextMenu\r
+ */\r
tinymce.create('tinymce.plugins.ContextMenu', {\r
+ /**\r
+ * Initializes the plugin, this will be executed after the plugin has been created.\r
+ * This call is done before the editor instance has finished it's initialization so use the onInit event\r
+ * of the editor instance to intercept that event.\r
+ *\r
+ * @method init\r
+ * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.\r
+ * @param {string} url Absolute URL to where the plugin is located.\r
+ */\r
init : function(ed) {\r
- var t = this;\r
+ var t = this, lastRng;\r
\r
t.editor = ed;\r
+\r
+ /**\r
+ * This event gets fired when the context menu is shown.\r
+ *\r
+ * @event onContextMenu\r
+ * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event.\r
+ * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed.\r
+ */\r
t.onContextMenu = new tinymce.util.Dispatcher(this);\r
\r
ed.onContextMenu.add(function(ed, e) {\r
if (!e.ctrlKey) {\r
+ // Restore the last selection since it was removed\r
+ if (lastRng)\r
+ ed.selection.setRng(lastRng);\r
+\r
t._getMenu(ed).showMenu(e.clientX, e.clientY);\r
- Event.add(ed.getDoc(), 'click', hide);\r
+ Event.add(ed.getDoc(), 'click', function(e) {\r
+ hide(ed, e);\r
+ });\r
Event.cancel(e);\r
}\r
});\r
\r
- function hide() {\r
+ ed.onRemove.add(function() {\r
+ if (t._menu)\r
+ t._menu.removeAll();\r
+ });\r
+\r
+ function hide(ed, e) {\r
+ lastRng = null;\r
+\r
+ // Since the contextmenu event moves\r
+ // the selection we need to store it away\r
+ if (e && e.button == 2) {\r
+ lastRng = ed.selection.getRng();\r
+ return;\r
+ }\r
+\r
if (t._menu) {\r
t._menu.removeAll();\r
t._menu.destroy();\r
ed.onKeyDown.add(hide);\r
},\r
\r
+ /**\r
+ * Returns information about the plugin as a name/value array.\r
+ * The current keys are longname, author, authorurl, infourl and version.\r
+ *\r
+ * @method getInfo\r
+ * @return {Object} Name/value array containing information about the plugin.\r
+ */\r
getInfo : function() {\r
return {\r
longname : 'Contextmenu',\r
\r
// Register plugin\r
tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);\r
-})();\r
+})();
\ No newline at end of file
-(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};},_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);}});tinymce.PluginManager.add('directionality',tinymce.plugins.Directionality);})();
\ No newline at end of file
+(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)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);\r
-})();\r
+})();
\ No newline at end of file
-(function(){tinymce.create('tinymce.plugins.EmotionsPlugin',{init:function(ed,url){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});});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};}});tinymce.PluginManager.add('emotions',tinymce.plugins.EmotionsPlugin);})();
\ No newline at end of file
+(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);
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
-(function() {\r
+(function(tinymce) {\r
tinymce.create('tinymce.plugins.EmotionsPlugin', {\r
init : function(ed, url) {\r
// Register commands\r
\r
// Register plugin\r
tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);\r
-})();\r
+})(tinymce);
\ No newline at end of file
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
<title>{#emotions_dlg.title}</title>\r
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
<script type="text/javascript" src="js/emotions.js"></script>\r
- <base target="_self" />\r
</head>\r
<body style="display: none">\r
<div align="center">\r
desc:"Emoticones",\r
cool:"Todo bien",\r
cry:"Llora",\r
-embarassed:"Verg\u00C3\u0083\u00C2\u00BCenza",\r
+embarassed:"Verg\u00FCenza",\r
foot_in_mouth:"Pie en la boca",\r
frown:"Triste",\r
innocent:"Inocente",\r
--- /dev/null
+tinyMCE.addI18n('et.emotions_dlg',{\r
+title:"Sisesta emotsioon",\r
+desc:"Emotsioonid",\r
+cool:"Lahe",\r
+cry:"Nutt",\r
+embarassed:"H\u00E4bitunne",\r
+foot_in_mouth:"Jalg suus",\r
+frown:"Kulmu kortsutamine",\r
+innocent:"S\u00FC\u00FCtu",\r
+kiss:"Suudlus",\r
+laughing:"Naermine",\r
+money_mouth:"Rahasuu",\r
+sealed:"Suletud",\r
+smile:"Naeratus",\r
+surprised:"\u00DCllatunud",\r
+tongue_out:"Keel v\u00E4ljas",\r
+undecided:"K\u00F5hklev",\r
+wink:"Silmapilgutus",\r
+yell:"Karje"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.emotions_dlg',{\r
+title:"Ins\u00E9rer une \u00E9motic\u00F4ne",\r
+desc:"\u00C9motic\u00F4nes",\r
+cool:"Cool",\r
+cry:"En pleurs",\r
+embarassed:"Embarrass\u00E9",\r
+foot_in_mouth:"Pied de nez",\r
+frown:"D\u00E9\u00E7u",\r
+innocent:"Innocent",\r
+kiss:"Bisou",\r
+laughing:"Rigolant",\r
+money_mouth:"Avare",\r
+sealed:"Bouche cousue",\r
+smile:"Sourire",\r
+surprised:"Surpris",\r
+tongue_out:"Langue tir\u00E9e",\r
+undecided:"Incertain",\r
+wink:"Clin d'\u0153il",\r
+yell:"Criant"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.emotions_dlg',{\r
+title:"Hangulatjel besz\u00FAr\u00E1sa",\r
+desc:"Hangulatjelek",\r
+cool:"Kir\u00E1ly",\r
+cry:"S\u00EDr\u00F3s",\r
+embarassed:"Zavarban van",\r
+foot_in_mouth:"L\u00E1b a sz\u00E1jban",\r
+frown:"Rosszall",\r
+innocent:"\u00C1rtatlan",\r
+kiss:"Cs\u00F3k",\r
+laughing:"Nevet\u00E9s",\r
+money_mouth:"P\u00E9nz besz\u00E9l",\r
+sealed:"Lakat a sz\u00E1j\u00E1n",\r
+smile:"Vigyor",\r
+surprised:"Meglepett",\r
+tongue_out:"Nyelv\u00F6lt\u00E9s",\r
+undecided:"Hat\u00E1rozatlan",\r
+wink:"Kacsint\u00E1s",\r
+yell:"\u00DCv\u00F6lt\u00E9s"\r
+});
\ No newline at end of file
cry:"Huilen",\r
embarassed:"Schamen",\r
foot_in_mouth:"Verstomd",\r
-frown:"Wenkbrouw ophalen",\r
+frown:"Wenkbrauw ophalen",\r
innocent:"Onschuldig",\r
kiss:"Zoenen",\r
laughing:"Lachen",\r
title:"Inserir emoticon",\r
desc:"Emoticons",\r
cool:"Fixe",\r
-cry:"Chor\u00C3\u00A3o",\r
-embarassed:"Embara\u00C3\u00A7ado",\r
+cry:"Chor\u00E3o",\r
+embarassed:"Embara\u00E7ado",\r
foot_in_mouth:"Disse asneira",\r
-frown:"Decep\u00C3\u00A7\u00C3\u00A3o",\r
+frown:"Decep\u00E7\u00E3o",\r
innocent:"Inocente",\r
kiss:"Beijo",\r
laughing:"Riso",\r
sealed:"Boca Fechada",\r
smile:"Sorriso",\r
surprised:"Surpresa",\r
-tongue_out:"L\u00C3\u00ADngua de fora",\r
+tongue_out:"L\u00EDngua de fora",\r
undecided:"Indeciso",\r
wink:"Piscadela",\r
yell:"Irado"\r
--- /dev/null
+tinyMCE.addI18n('ru.emotions_dlg',{\r
+title:"\u0412\u044B\u0431\u043E\u0440 \u0441\u043C\u0430\u0439\u043B\u0430",\r
+desc:"\u0421\u043C\u0430\u0439\u043B\u044B",\r
+cool:"Cool",\r
+cry:"Cry",\r
+embarassed:"Embarassed",\r
+foot_in_mouth:"Foot in mouth",\r
+frown:"Frown",\r
+innocent:"Innocent",\r
+kiss:"Kiss",\r
+laughing:"Laughing",\r
+money_mouth:"Money mouth",\r
+sealed:"Sealed",\r
+smile:"Smile",\r
+surprised:"Surprised",\r
+tongue_out:"Tongue out",\r
+undecided:"Undecided",\r
+wink:"Wink",\r
+yell:"Yell"\r
+});
\ No newline at end of file
<p>Custom arg: <input id="somearg" name="somearg" type="text" class="text" /></p>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="button" id="insert" name="insert" value="{#insert}" onclick="ExampleDialog.insert();" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="button" id="insert" name="insert" value="{#insert}" onclick="ExampleDialog.insert();" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
\r
-(function(){tinymce.PluginManager.requireLangPack('example');tinymce.create('tinymce.plugins.ExamplePlugin',{init:function(ed,url){ed.addCommand('mceExample',function(){ed.windowManager.open({file:url+'/dialog.htm',width:320+parseInt(ed.getLang('example.delta_width',0)),height:120+parseInt(ed.getLang('example.delta_height',0)),inline:1},{plugin_url:url,some_custom_arg:'custom arg'});});ed.addButton('example',{title:'example.desc',cmd:'mceExample',image:url+'/img/example.gif'});ed.onNodeChange.add(function(ed,cm,n){cm.setActive('example',n.nodeName=='IMG');});},createControl:function(n,cm){return null;},getInfo:function(){return{longname:'Example plugin',author:'Some author',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',version:"1.0"};}});tinymce.PluginManager.add('example',tinymce.plugins.ExamplePlugin);})();
\ No newline at end of file
+(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin);\r
-})();\r
+})();
\ No newline at end of file
-(function(){tinymce.create('tinymce.plugins.FullPagePlugin',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceFullPageProperties',function(){ed.windowManager.open({file:url+'/fullpage.htm',width:430+parseInt(ed.getLang('fullpage.delta_width',0)),height:495+parseInt(ed.getLang('fullpage.delta_height',0)),inline:1},{plugin_url:url,head_html:t.head});});ed.addButton('fullpage',{title:'fullpage.desc',cmd:'mceFullPageProperties'});ed.onBeforeSetContent.add(t._setContent,t);ed.onSetContent.add(t._setBodyAttribs,t);ed.onGetContent.add(t._getContent,t);},getInfo:function(){return{longname:'Fullpage',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_setBodyAttribs:function(ed,o){var bdattr,i,len,kv,k,v,t,attr=this.head.match(/body(.*?)>/i);if(attr&&attr[1]){bdattr=attr[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);if(bdattr){for(i=0,len=bdattr.length;i<len;i++){kv=bdattr[i].split('=');k=kv[0].replace(/\s/,'');v=kv[1];if(v){v=v.replace(/^\s+/,'').replace(/\s+$/,'');t=v.match(/^["'](.*)["']$/);if(t)v=t[1];}else v=k;ed.dom.setAttrib(ed.getBody(),'style',v);}}}},_createSerializer:function(){return new tinymce.dom.Serializer({dom:this.editor.dom,apply_source_formatting:true});},_setContent:function(ed,o){var t=this,sp,ep,c=o.content,v,st='';c=c.replace(/<(\/?)BODY/gi,'<$1body');sp=c.indexOf('<body');if(sp!=-1){sp=c.indexOf('>',sp);t.head=c.substring(0,sp+1);ep=c.indexOf('</body',sp);if(ep==-1)ep=c.indexOf('</body',ep);o.content=c.substring(sp+1,ep);t.foot=c.substring(ep);function low(s){return s.replace(/<\/?[A-Z]+/g,function(a){return a.toLowerCase();})};t.head=low(t.head);t.foot=low(t.foot);}else{t.head='';if(ed.getParam('fullpage_default_xml_pi'))t.head+='<?xml version="1.0" encoding="'+ed.getParam('fullpage_default_encoding','ISO-8859-1')+'" ?>\n';t.head+=ed.getParam('fullpage_default_doctype','<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');t.head+='\n<html>\n<head>\n<title>'+ed.getParam('fullpage_default_title','Untitled document')+'</title>\n';if(v=ed.getParam('fullpage_default_encoding'))t.head+='<meta http-equiv="Content-Type" content="'+v+'" />\n';if(v=ed.getParam('fullpage_default_font_family'))st+='font-family: '+v+';';if(v=ed.getParam('fullpage_default_font_size'))st+='font-size: '+v+';';if(v=ed.getParam('fullpage_default_text_color'))st+='color: '+v+';';t.head+='</head>\n<body'+(st?' style="'+st+'"':'')+'>\n';t.foot='\n</body>\n</html>';}},_getContent:function(ed,o){var t=this;o.content=tinymce.trim(t.head)+'\n'+tinymce.trim(o.content)+'\n'+tinymce.trim(t.foot);}});tinymce.PluginManager.add('fullpage',tinymce.plugins.FullPagePlugin);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceFullPageProperties",function(){a.windowManager.open({file:b+"/fullpage.htm",width:430+parseInt(a.getLang("fullpage.delta_width",0)),height:495+parseInt(a.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:b,head_html:c.head})});a.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});a.onBeforeSetContent.add(c._setContent,c);a.onSetContent.add(c._setBodyAttribs,c);a.onGetContent.add(c._getContent,c)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_setBodyAttribs:function(d,a){var l,c,e,g,b,h,j,f=this.head.match(/body(.*?)>/i);if(f&&f[1]){l=f[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);if(l){for(c=0,e=l.length;c<e;c++){g=l[c].split("=");b=g[0].replace(/\s/,"");h=g[1];if(h){h=h.replace(/^\s+/,"").replace(/\s+$/,"");j=h.match(/^["'](.*)["']$/);if(j){h=j[1]}}else{h=b}d.dom.setAttrib(d.getBody(),"style",h)}}}},_createSerializer:function(){return new tinymce.dom.Serializer({dom:this.editor.dom,apply_source_formatting:true})},_setContent:function(d,b){var h=this,a,j,f=b.content,g,i="";if(b.format=="raw"&&h.head){return}if(b.source_view&&d.getParam("fullpage_hide_in_source_view")){return}f=f.replace(/<(\/?)BODY/gi,"<$1body");a=f.indexOf("<body");if(a!=-1){a=f.indexOf(">",a);h.head=f.substring(0,a+1);j=f.indexOf("</body",a);if(j==-1){j=f.indexOf("</body",j)}b.content=f.substring(a+1,j);h.foot=f.substring(j);function e(c){return c.replace(/<\/?[A-Z]+/g,function(k){return k.toLowerCase()})}h.head=e(h.head);h.foot=e(h.foot)}else{h.head="";if(d.getParam("fullpage_default_xml_pi")){h.head+='<?xml version="1.0" encoding="'+d.getParam("fullpage_default_encoding","ISO-8859-1")+'" ?>\n'}h.head+=d.getParam("fullpage_default_doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');h.head+="\n<html>\n<head>\n<title>"+d.getParam("fullpage_default_title","Untitled document")+"</title>\n";if(g=d.getParam("fullpage_default_encoding")){h.head+='<meta http-equiv="Content-Type" content="'+g+'" />\n'}if(g=d.getParam("fullpage_default_font_family")){i+="font-family: "+g+";"}if(g=d.getParam("fullpage_default_font_size")){i+="font-size: "+g+";"}if(g=d.getParam("fullpage_default_text_color")){i+="color: "+g+";"}h.head+="</head>\n<body"+(i?' style="'+i+'"':"")+">\n";h.foot="\n</body>\n</html>"}},_getContent:function(a,c){var b=this;if(!c.source_view||!a.getParam("fullpage_hide_in_source_view")){c.content=tinymce.trim(b.head)+"\n"+tinymce.trim(c.content)+"\n"+tinymce.trim(b.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
_setContent : function(ed, o) {\r
var t = this, sp, ep, c = o.content, v, st = '';\r
\r
+ // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate\r
+ if (o.format == 'raw' && t.head)\r
+ return;\r
+\r
+ if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))\r
+ return;\r
+\r
// Parse out head, body and footer\r
c = c.replace(/<(\/?)BODY/gi, '<$1body');\r
sp = c.indexOf('<body');\r
_getContent : function(ed, o) {\r
var t = this;\r
\r
- o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot);\r
+ if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))\r
+ o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot);\r
}\r
});\r
\r
// Register plugin\r
tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin);\r
-})();\r
+})();
\ No newline at end of file
<script type="text/javascript" src="../../utils/form_utils.js"></script>\r
<script type="text/javascript" src="js/fullpage.js"></script>\r
<link href="css/fullpage.css" rel="stylesheet" type="text/css" />\r
- <base target="_self" />\r
</head>\r
<body id="advlink" style="display: none">\r
<form onsubmit="updateAction();return false;" name="fullpage" action="#">\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td nowrap="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label> </td>\r
+ <td class="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label> </td>\r
<td><input type="text" id="metatitle" name="metatitle" value="" class="mceFocus" /></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label> </td>\r
+ <td class="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label> </td>\r
<td><textarea id="metakeywords" name="metakeywords" rows="4"></textarea></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label> </td>\r
+ <td class="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label> </td>\r
<td><textarea id="metadescription" name="metadescription" rows="4"></textarea></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label> </td>\r
+ <td class="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label> </td>\r
<td><input type="text" id="metaauthor" name="metaauthor" value="" /></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label> </td>\r
+ <td class="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label> </td>\r
<td><input type="text" id="metacopyright" name="metacopyright" value="" /></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label> </td>\r
+ <td class="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label> </td>\r
<td>\r
<select id="metarobots" name="metarobots">\r
<option value="">{#not_set}</option> \r
</td> \r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="doctypes">{#fullpage_dlg.doctypes}</label> </td>\r
+ <td class="nowrap"><label for="doctypes">{#fullpage_dlg.doctypes}</label> </td>\r
<td>\r
<select id="doctypes" name="doctypes">\r
<option value="">{#not_set}</option>\r
</td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label> </td>\r
+ <td class="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label> </td>\r
<td><input type="text" id="langcode" name="langcode" value="" /></td>\r
</tr>\r
<tr>\r
</td> \r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="xml_pi">{#fullpage_dlg.xml_pi}</label> </td>\r
+ <td class="nowrap"><label for="xml_pi">{#fullpage_dlg.xml_pi}</label> </td>\r
<td><input type="checkbox" id="xml_pi" name="xml_pi" class="checkbox" /></td>\r
</tr>\r
</table>\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="update" value="{#update}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="update" value="{#update}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
+/**\r
+ * fullpage.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
tinyMCEPopup.requireLangPack();\r
\r
var doc;\r
// Preprocess the HTML disable scripts and urls\r
h = h.replace(/<script>/gi, '<script type="text/javascript">');\r
h = h.replace(/type=([\"\'])?/gi, 'type=$1-mce-');\r
- h = h.replace(/(src=|href=)/g, 'mce_$1');\r
+ h = h.replace(/(src=|href=)/g, '_mce_$1');\r
\r
// Write in the content in the iframe\r
doc.write(h + '</body></html>');\r
// Parse xml and doctype\r
xmlVer = getReItem(/<\?\s*?xml.*?version\s*?=\s*?"(.*?)".*?\?>/gi, h, 1);\r
xmlEnc = getReItem(/<\?\s*?xml.*?encoding\s*?=\s*?"(.*?)".*?\?>/gi, h, 1);\r
- docType = getReItem(/<\!DOCTYPE.*?>/gi, h, 0);\r
+ docType = getReItem(/<\!DOCTYPE.*?>/gi, h.replace(/\n/g, ''), 0).replace(/ +/g, ' ');\r
f.langcode.value = getReItem(/lang="(.*?)"/gi, h, 1);\r
\r
// Parse title\r
var m = l.getAttribute('media', 2) || '', t = l.getAttribute('type', 2) || '';\r
\r
if (t == "-mce-text/css" && (m == "" || m == "screen" || m == "all") && (l.getAttribute('rel', 2) || '') == "stylesheet") {\r
- f.stylesheet.value = l.getAttribute('mce_href', 2) || '';\r
+ f.stylesheet.value = l.getAttribute('_mce_href', 2) || '';\r
return false;\r
}\r
});\r
// Fix scripts without a type\r
nl = doc.getElementsByTagName('script');\r
for (i=0; i<nl.length; i++) {\r
- if (tinyMCEPopup.dom.getAttrib(nl[i], 'mce_type') == '')\r
- nl[i].setAttribute('mce_type', 'text/javascript');\r
+ if (tinyMCEPopup.dom.getAttrib(nl[i], '_mce_type') == '')\r
+ nl[i].setAttribute('_mce_type', 'text/javascript');\r
}\r
\r
// Get primary stylesheet\r
\r
tmp = tinyMCEPopup.dom.getAttrib(l, 'media');\r
\r
- if (tinyMCEPopup.dom.getAttrib(l, 'mce_type') == "text/css" && (tmp == "" || tmp == "screen" || tmp == "all") && tinyMCEPopup.dom.getAttrib(l, 'rel') == "stylesheet") {\r
+ if (tinyMCEPopup.dom.getAttrib(l, '_mce_type') == "text/css" && (tmp == "" || tmp == "screen" || tmp == "all") && tinyMCEPopup.dom.getAttrib(l, 'rel') == "stylesheet") {\r
addlink = false;\r
\r
if (f.stylesheet.value == '')\r
l.parentNode.removeChild(l);\r
else\r
- l.setAttribute('mce_href', f.stylesheet.value);\r
+ l.setAttribute('_mce_href', f.stylesheet.value);\r
\r
break;\r
}\r
l = doc.createElement('link');\r
\r
l.setAttribute('type', 'text/css');\r
- l.setAttribute('mce_href', f.stylesheet.value);\r
+ l.setAttribute('_mce_href', f.stylesheet.value);\r
l.setAttribute('rel', 'stylesheet');\r
\r
head.appendChild(l);\r
langdir:"Sprachrichtung",\r
ltr:"Links nach Rechts",\r
rtl:"Rechts nach Links",\r
-xml_pi:"XML declaration",\r
+xml_pi:"XML Deklaration",\r
encoding:"Zeichencodierung",\r
appearance_bgprops:"Hintergrund-Eigenschaften",\r
appearance_marginprops:"Abst\u00E4nde des Body",\r
--- /dev/null
+tinyMCE.addI18n('et.fullpage_dlg',{\r
+title:"Dokumendi omadused",\r
+meta_tab:"\u00DCldine",\r
+appearance_tab:"V\u00E4limus",\r
+advanced_tab:"P\u00F5hjalikum",\r
+meta_props:"\u201EMeta\u201C informatioon",\r
+langprops:"Keel ja kodeering",\r
+meta_title:"Pealkiri",\r
+meta_keywords:"M\u00E4rks\u00F5nad",\r
+meta_description:"Kirjeldus",\r
+meta_robots:"Robotid",\r
+doctypes:"Dokumendi t\u00FC\u00FCp",\r
+langcode:"Keele kood",\r
+langdir:"Keele suund",\r
+ltr:"Vasakult paremale",\r
+rtl:"Paremalt vasakule",\r
+xml_pi:"XML avaldus",\r
+encoding:"Karakteri kodeering",\r
+appearance_bgprops:"Tausta seadistus",\r
+appearance_marginprops:"Sisu piir",\r
+appearance_linkprops:"Lingi v\u00E4rv",\r
+appearance_textprops:"Teksti seaded",\r
+bgcolor:"Tausta v\u00E4rv",\r
+bgimage:"Tausta pilt",\r
+left_margin:"Vasak piir",\r
+right_margin:"Parem piir",\r
+top_margin:"\u00DClemine piir",\r
+bottom_margin:"Alumine piir",\r
+text_color:"Teksti v\u00E4rv",\r
+font_size:"Fondi suurus",\r
+font_face:"Fondi n\u00E4gu",\r
+link_color:"Lingi v\u00E4rv",\r
+hover_color:"\u00DCle-v\u00E4rv",\r
+visited_color:"K\u00FClastatud-v\u00E4rv",\r
+active_color:"Aktiivne-v\u00E4rv",\r
+textcolor:"V\u00F6rv",\r
+fontsize:"Fondi suurus",\r
+fontface:"Font",\r
+meta_index_follow:"M\u00E4rgi ja j\u00E4rgi linki",\r
+meta_index_nofollow:"M\u00E4rgi ja \u00E4ra j\u00E4rgi linki",\r
+meta_noindex_follow:"\u00C4ra m\u00E4rgi linki, aga j\u00E4rgi linki",\r
+meta_noindex_nofollow:"\u00C4ra m\u00E4rgi linki ja \u00E4ra j\u00E4rgi linki",\r
+appearance_style:"Stiilileht ja stiili seaded",\r
+stylesheet:"Stiilileht",\r
+style:"Stiil",\r
+author:"Autor",\r
+copyright:"Autorikaitse",\r
+add:"Lisa uus element",\r
+remove:"Eemalda valitud element",\r
+moveup:"Liiguta valitud element \u00FClesse",\r
+movedown:"Liiguta valitud element alla",\r
+head_elements:"P\u00F5hielemendid",\r
+info:"Informatioon",\r
+add_title:"Pealkirja element",\r
+add_meta:"\u201EMeta\u201C element",\r
+add_script:"Skript\u2019i element",\r
+add_style:"Stiili element",\r
+add_link:"Lingi element",\r
+add_base:"Baaselement",\r
+add_comment:"Kommentaar",\r
+title_element:"Pealkirja element",\r
+script_element:"Skript\u2019i element",\r
+style_element:"Stiili element",\r
+base_element:"Baaselement",\r
+link_element:"Lingi element",\r
+meta_element:"\u201EMeta\u201C element",\r
+comment_element:"kommentaar",\r
+src:"Src",\r
+language:"Keel",\r
+href:"Href",\r
+target:"Sihtm\u00E4rk",\r
+type:"T\u00FC\u00FCp",\r
+charset:"Charset",\r
+defer:"Edasi l\u00FCkkamine",\r
+media:"Meedia",\r
+properties:"Seaded",\r
+name:"Nimi",\r
+value:"V\u00E4\u00E4rtus",\r
+content:"Sisu",\r
+rel:"Rel",\r
+rev:"Rev",\r
+hreflang:"Href lang",\r
+general_props:"\u00DCldine",\r
+advanced_props:"T\u00E4psustatud"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.fullpage_dlg',{\r
+title:"Propri\u00E9t\u00E9s du document",\r
+meta_tab:"G\u00E9n\u00E9ral",\r
+appearance_tab:"Apparence",\r
+advanced_tab:"Avanc\u00E9",\r
+meta_props:"Metadonn\u00E9es",\r
+langprops:"Langue et encodage",\r
+meta_title:"Titre",\r
+meta_keywords:"Mots-cl\u00E9s",\r
+meta_description:"Description",\r
+meta_robots:"Robots",\r
+doctypes:"Doctype",\r
+langcode:"Code de la langue",\r
+langdir:"Sens de lecture",\r
+ltr:"De gauche \u00E0 droite",\r
+rtl:"De droite \u00E0 gauche",\r
+xml_pi:"D\u00E9claration XML",\r
+encoding:"Encodage des caract\u00E8res",\r
+appearance_bgprops:"Propri\u00E9t\u00E9s du fond",\r
+appearance_marginprops:"Marge du corps de la page",\r
+appearance_linkprops:"Couleurs des liens",\r
+appearance_textprops:"Propri\u00E9t\u00E9s du texte",\r
+bgcolor:"Couleur de fond",\r
+bgimage:"Image de fond",\r
+left_margin:"Marge de gauche",\r
+right_margin:"Marge de droite",\r
+top_margin:"Marge du haut",\r
+bottom_margin:"Marge du bas",\r
+text_color:"Couleur du texte",\r
+font_size:"Taille de la police",\r
+font_face:"Nom de la police",\r
+link_color:"Couleur des liens",\r
+hover_color:"Couleur au survol",\r
+visited_color:"Couleur des liens visit\u00E9s",\r
+active_color:"Couleur du lien actif",\r
+textcolor:"Couleur",\r
+fontsize:"Taille de police",\r
+fontface:"Nom de la police",\r
+meta_index_follow:"Indexer et suivre les liens",\r
+meta_index_nofollow:"Indexer et ne pas suivre les liens",\r
+meta_noindex_follow:"Ne pas indexer et suivre les liens",\r
+meta_noindex_nofollow:"Ne pas indexer et ne pas suivre les liens",\r
+appearance_style:"Propri\u00E9t\u00E9s de la feuille de style et du style",\r
+stylesheet:"Feuille de style",\r
+style:"Style",\r
+author:"Auteur",\r
+copyright:"Copyright",\r
+add:"Ajouter un nouvel \u00E9l\u00E9ment",\r
+remove:"Retirer l'\u00E9l\u00E9ment s\u00E9lectionn\u00E9",\r
+moveup:"D\u00E9placer l'\u00E9l\u00E9ment s\u00E9lectionn\u00E9 vers le haut",\r
+movedown:"D\u00E9placer l'\u00E9l\u00E9ment s\u00E9lectionn\u00E9 vers le bas",\r
+head_elements:"\u00C9l\u00E9ments d'en-t\u00EAte",\r
+info:"Information",\r
+add_title:"\u00C9l\u00E9ment de titre",\r
+add_meta:"\u00C9l\u00E9ment Meta",\r
+add_script:"\u00C9l\u00E9ment de script",\r
+add_style:"\u00C9l\u00E9ment de style",\r
+add_link:"\u00C9l\u00E9ment de lien",\r
+add_base:"\u00C9l\u00E9ment de base",\r
+add_comment:"Commentaire",\r
+title_element:"\u00C9l\u00E9ment de titre",\r
+script_element:"\u00C9l\u00E9ment de script",\r
+style_element:"\u00C9l\u00E9ment de style",\r
+base_element:"\u00C9l\u00E9ment de base",\r
+link_element:"\u00C9l\u00E9ment de lien",\r
+meta_element:"\u00C9l\u00E9ment Meta",\r
+comment_element:"Commentaire",\r
+src:"Source",\r
+language:"Langue",\r
+href:"Href",\r
+target:"Cible",\r
+type:"Type",\r
+charset:"Charset",\r
+defer:"D\u00E9f\u00E9rer",\r
+media:"M\u00E9dia",\r
+properties:"Propri\u00E9t\u00E9s",\r
+name:"Nom",\r
+value:"Valeur",\r
+content:"Contenu",\r
+rel:"Rel",\r
+rev:"Rev",\r
+hreflang:"langue Href",\r
+general_props:"G\u00E9n\u00E9ral",\r
+advanced_props:"Avanc\u00E9"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.fullpage_dlg',{\r
+title:"Dokumentum tulajdons\u00E1gai",\r
+meta_tab:"\u00C1ltal\u00E1nos",\r
+appearance_tab:"Megjelen\u00E9s",\r
+advanced_tab:"Halad\u00F3",\r
+meta_props:"Meta inform\u00E1ci\u00F3",\r
+langprops:"Nyelv \u00E9s k\u00F3dol\u00E1s",\r
+meta_title:"C\u00EDm",\r
+meta_keywords:"Kulcsszavak",\r
+meta_description:"Le\u00EDr\u00E1s",\r
+meta_robots:"Robotok",\r
+doctypes:"Doctype",\r
+langcode:"Nyelvk\u00F3d",\r
+langdir:"\u00CDr\u00E1s ir\u00E1nya",\r
+ltr:"Balr\u00F3l jobra",\r
+rtl:"Jobbr\u00F3l balra",\r
+xml_pi:"XML deklar\u00E1ci\u00F3",\r
+encoding:"Karakterk\u00F3dol\u00E1s",\r
+appearance_bgprops:"H\u00E1tt\u00E9r tulajdons\u00E1gai",\r
+appearance_marginprops:"Test keret",\r
+appearance_linkprops:"Link sz\u00EDnek",\r
+appearance_textprops:"Sz\u00F6veg tulajdons\u00E1gai",\r
+bgcolor:"H\u00E1tt\u00E9rsz\u00EDn",\r
+bgimage:"H\u00E1tt\u00E9rk\u00E9p",\r
+left_margin:"Bal marg\u00F3",\r
+right_margin:"Jobb marg\u00F3",\r
+top_margin:"Fels\u0151 marg\u00F3",\r
+bottom_margin:"Als\u00F3 marg\u00F3",\r
+text_color:"Sz\u00F6vegsz\u00EDn",\r
+font_size:"Bet\u0171m\u00E9ret",\r
+font_face:"Bet\u0171t\u00EDpus",\r
+link_color:"Link sz\u00EDn",\r
+hover_color:"F\u00F6l\u00E9vitt sz\u00EDn",\r
+visited_color:"L\u00E1togatva sz\u00EDn",\r
+active_color:"Akt\u00EDv sz\u00EDn",\r
+textcolor:"Sz\u00EDn",\r
+fontsize:"Bet\u0171m\u00E9ret",\r
+fontface:"Bet\u0171t\u00EDpus",\r
+meta_index_follow:"Indexel \u00E9s k\u00F6veti a linkeket",\r
+meta_index_nofollow:"Indexel, de nem k\u00F6veti a linkeket",\r
+meta_noindex_follow:"Nem indexel, de k\u00F6veti a linkeket",\r
+meta_noindex_nofollow:"Nem indexel \u00E9s nem k\u00F6veti a linkeket",\r
+appearance_style:"Stylesheet \u00E9s style tulajdons\u00E1gok",\r
+stylesheet:"Stylesheet",\r
+style:"Style",\r
+author:"Szerz\u0151",\r
+copyright:"Copyright",\r
+add:"\u00DAj elem hozz\u00E1ad\u00E1sa",\r
+remove:"Kijel\u00F6lt elem t\u00F6rl\u00E9se",\r
+moveup:"Kijel\u00F6lt elem felfel\u00E9 mozgat\u00E1sa",\r
+movedown:"Kijel\u00F6lt elem lefel\u00E9 mozgat\u00E1sa",\r
+head_elements:"Fej elemek",\r
+info:"Inform\u00E1ci\u00F3",\r
+add_title:"C\u00EDm elem",\r
+add_meta:"Meta elem",\r
+add_script:"Script elem",\r
+add_style:"Style elem",\r
+add_link:"Link elem",\r
+add_base:"Base elem",\r
+add_comment:"Comment elem",\r
+title_element:"Title elem",\r
+script_element:"Script elem",\r
+style_element:"Style elem",\r
+base_element:"Base elem",\r
+link_element:"Link elem",\r
+meta_element:"Meta elem",\r
+comment_element:"Megjegyz\u00E9s",\r
+src:"Src",\r
+language:"Language",\r
+href:"Href",\r
+target:"Target",\r
+type:"Type",\r
+charset:"Charset",\r
+defer:"Defer",\r
+media:"Media",\r
+properties:"Properties",\r
+name:"Name",\r
+value:"Value",\r
+content:"Content",\r
+rel:"Rel",\r
+rev:"Rev",\r
+hreflang:"Href lang",\r
+general_props:"\u00C1ltal\u00E1nos",\r
+advanced_props:"Halad\u00F3"\r
+});
\ No newline at end of file
tinyMCE.addI18n('pt.fullpage_dlg',{\r
title:"Propriedades do documento",\r
meta_tab:"Geral",\r
-appearance_tab:"Apar\u00C3\u00AAncia",\r
-advanced_tab:"Avan\u00C3\u00A7ado",\r
-meta_props:"Meta-informa\u00C3\u00A7\u00C3\u00A3o",\r
-langprops:"Linguagem e codifica\u00C3\u00A7\u00C3\u00A3o",\r
-meta_title:"T\u00C3\u00ADtulo",\r
+appearance_tab:"Apar\u00EAncia",\r
+advanced_tab:"Avan\u00E7ado",\r
+meta_props:"Meta-informa\u00E7\u00E3o",\r
+langprops:"Idioma e codifica\u00E7\u00E3o",\r
+meta_title:"T\u00EDtulo",\r
meta_keywords:"Palavras-chave",\r
-meta_description:"Descri\u00C3\u00A7\u00C3\u00A3o",\r
+meta_description:"Descri\u00E7\u00E3o",\r
meta_robots:"Robots",\r
doctypes:"Doctype",\r
-langcode:"C\u00C3\u00B3digo de linguagem",\r
-langdir:"Dire\u00C3\u00A7\u00C3\u00A3o do texto",\r
+langcode:"C\u00F3digo do idioma",\r
+langdir:"Dire\u00E7\u00E3o do texto",\r
ltr:"Esquerda para direita",\r
rtl:"Direita para esquerda",\r
-xml_pi:"Declara\u00C3\u00A7\u00C3\u00A3o XML",\r
-encoding:"Codifica\u00C3\u00A7\u00C3\u00A3o de caracteres",\r
+xml_pi:"Declara\u00E7\u00E3o XML",\r
+encoding:"Codifica\u00E7\u00E3o de caracteres",\r
appearance_bgprops:"Propriedades do plano de fundo",\r
appearance_marginprops:"Margens (BODY)",\r
appearance_linkprops:"Cores dos links",\r
fontsize:"Tamanho fonte",\r
fontface:"Fonte",\r
meta_index_follow:"Indexar e seguir os hyperlinks",\r
-meta_index_nofollow:"Indexar e n\u00C3\u00A3o seguir os hyperlinks",\r
-meta_noindex_follow:"Seguir hyperlinks, mas n\u00C3\u00A3o indexar",\r
-meta_noindex_nofollow:"N\u00C3\u00A3o indexar / n\u00C3\u00A3o seguir hyperlinks.",\r
+meta_index_nofollow:"Indexar e n\u00E3o seguir os hyperlinks",\r
+meta_noindex_follow:"Seguir hyperlinks, mas n\u00E3o indexar",\r
+meta_noindex_nofollow:"N\u00E3o indexar / n\u00E3o seguir hyperlinks.",\r
appearance_style:"Propriedades de folhas de estilo",\r
stylesheet:"Folha de estilo",\r
style:"Estilo",\r
author:"Autor",\r
copyright:"Copyright",\r
-add:"Acrescentar Novo elemento",\r
+add:"Acrescentar novo elemento",\r
remove:"Remover elemento selecionado",\r
moveup:"Subir elemento selecionado",\r
movedown:"Descer elemento selecionado",\r
head_elements:"Elementos HEAD",\r
-info:"Informa\u00C3\u00A7\u00C3\u00A3o",\r
+info:"Informa\u00E7\u00E3o",\r
add_title:"TITLE",\r
add_meta:"META",\r
add_script:"SCRIPT",\r
add_style:"STYLE",\r
add_link:"LINK",\r
add_base:"BASE",\r
-add_comment:"Coment\u00C3\u00A1rio",\r
+add_comment:"Coment\u00E1rio",\r
title_element:"TITLE",\r
script_element:"SCRIPT",\r
style_element:"STYLE",\r
base_element:"BASE",\r
link_element:"LINK",\r
meta_element:"META",\r
-comment_element:"Coment\u00C3\u00A1rio",\r
+comment_element:"Coment\u00E1rio",\r
src:"src",\r
language:"Idioma",\r
href:"href",\r
properties:"Propriedades",\r
name:"Nome",\r
value:"Valor",\r
-content:"Conte\u00C3\u00BAdo",\r
+content:"Conte\u00FAdo",\r
rel:"rel",\r
rev:"rev",\r
hreflang:"href lang",\r
general_props:"Geral",\r
-advanced_props:"Avan\u00C3\u00A7ado"\r
+advanced_props:"Avan\u00E7ado"\r
});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('ru.fullpage_dlg',{\r
+title:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430",\r
+meta_tab:"\u041E\u0431\u0449\u0435\u0435",\r
+appearance_tab:"\u0412\u0438\u0434",\r
+advanced_tab:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E",\r
+meta_props:"\u0426\u0435\u043B\u044C \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438",\r
+langprops:"\u042F\u0437\u044B\u043A \u0438 \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F",\r
+meta_title:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",\r
+meta_keywords:"\u041A\u043B\u044E\u0447\u0435\u0432\u044B\u0435 \u0441\u043B\u043E\u0432\u0430",\r
+meta_description:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",\r
+meta_robots:"\u0420\u0430\u0431\u043E\u0442\u044B",\r
+doctypes:"\u0422\u0438\u043F",\r
+langcode:"\u041A\u043E\u0434 \u044F\u0437\u044B\u043A\u0430",\r
+langdir:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430",\r
+ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E",\r
+rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E",\r
+xml_pi:"\u041E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u0435 XML",\r
+encoding:"\u041A\u043E\u0434\u0438\u0440\u043E\u0432\u043A\u0430",\r
+appearance_bgprops:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0444\u043E\u043D\u0430",\r
+appearance_marginprops:"\u041E\u0442\u0441\u0442\u0443\u043F\u044B",\r
+appearance_linkprops:"\u0426\u0432\u0435\u0442 \u0441\u0441\u044B\u043B\u043E\u043A",\r
+appearance_textprops:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0442\u0435\u043A\u0441\u0442\u0430",\r
+bgcolor:"\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430",\r
+bgimage:"\u0424\u043E\u043D\u043E\u0432\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435",\r
+left_margin:"\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u043B\u0435\u0432\u0430",\r
+right_margin:"\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u043F\u0440\u0430\u0432\u0430",\r
+top_margin:"\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u0432\u0435\u0440\u0445\u0443",\r
+bottom_margin:"\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u043D\u0438\u0437\u0443",\r
+text_color:"\u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430",\r
+font_size:"\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",\r
+font_face:"\u0428\u0440\u0438\u0444\u0442",\r
+link_color:"\u0426\u0432\u0435\u0442 \u0441\u0441\u044B\u043B\u043A\u0438",\r
+hover_color:"\u0426\u0432\u0435\u0442 \u0441\u0441\u044B\u043B\u043A\u0438 \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438",\r
+visited_color:"\u0426\u0432\u0435\u0442 \u043D\u0430\u0436\u0430\u0442\u043E\u0439 \u0441\u0441\u044B\u043B\u043A\u0438",\r
+active_color:"\u0426\u0432\u0435\u0442 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0439 \u0441\u0441\u044B\u043B\u043A\u0438",\r
+textcolor:"\u0426\u0432\u0435\u0442",\r
+fontsize:"\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",\r
+fontface:"\u0421\u0435\u043C\u0435\u0439\u0441\u0442\u0432\u043E \u0448\u0440\u0438\u0444\u0442\u043E\u0432",\r
+meta_index_follow:"Index and follow the links",\r
+meta_index_nofollow:"Index and don't follow the links",\r
+meta_noindex_follow:"Do not index but follow the links",\r
+meta_noindex_nofollow:"Do not index and don \ 't follow the links",\r
+appearance_style:"\u041B\u0438\u0441\u0442 \u0438 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0438\u043B\u0435\u0439",\r
+stylesheet:"\u041B\u0438\u0441\u0442 \u0441\u0442\u0438\u043B\u0435\u0439",\r
+style:"\u0421\u0442\u0438\u043B\u044C",\r
+author:"\u0410\u0432\u0442\u043E\u0440",\r
+copyright:"\u041A\u043E\u043F\u0438\u0440\u0430\u0439\u0442",\r
+add:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442",\r
+remove:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442",\r
+moveup:"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0432\u0432\u0435\u0440\u0445",\r
+movedown:"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0432\u043D\u0438\u0437",\r
+head_elements:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Header",\r
+info:"\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F",\r
+add_title:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Title",\r
+add_meta:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Meta",\r
+add_script:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Script",\r
+add_style:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Style",\r
+add_link:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Link",\r
+add_base:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Base",\r
+add_comment:"\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439",\r
+title_element:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Title",\r
+script_element:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Script",\r
+style_element:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Style",\r
+base_element:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Base",\r
+link_element:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Link",\r
+meta_element:"\u042D\u043B\u0435\u043C\u0435\u043D\u0442 Meta",\r
+comment_element:"\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439",\r
+src:"Src",\r
+language:"\u042F\u0437\u044B\u043A",\r
+href:"\u0441\u0441\u044B\u043B\u043A\u0430",\r
+target:"\u0426\u0435\u043B\u044C",\r
+type:"Type",\r
+charset:"\u041A\u043E\u0434\u0438\u0440\u043E\u0432\u043A\u0430",\r
+defer:"\u041E\u0442\u0441\u0440\u043E\u0447\u043A\u0430",\r
+media:"\u041C\u0435\u0434\u0438\u0430",\r
+properties:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B",\r
+name:"\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435",\r
+value:"\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435",\r
+content:"\u0421\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435",\r
+rel:"Rel",\r
+rev:"Rev",\r
+hreflang:"\u042F\u0437\u044B\u043A \u0441\u0441\u044B\u043B\u043A\u0438",\r
+general_props:"\u041E\u0431\u0449\u0435\u0435",\r
+advanced_props:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E"\r
+});
\ No newline at end of file
-(function(){var DOM=tinymce.DOM;tinymce.create('tinymce.plugins.FullScreenPlugin',{init:function(ed,url){var t=this,s={},vp;t.editor=ed;ed.addCommand('mceFullScreen',function(){var win,de=DOM.doc.documentElement;if(ed.getParam('fullscreen_is_enabled')){if(ed.getParam('fullscreen_new_window'))closeFullscreen();else{DOM.win.setTimeout(function(){tinymce.dom.Event.remove(DOM.win,'resize',t.resizeFunc);tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent({format:'raw'}),{format:'raw'});tinyMCE.remove(ed);DOM.remove('mce_fullscreen_container');de.style.overflow=ed.getParam('fullscreen_html_overflow');DOM.setStyle(DOM.doc.body,'overflow',ed.getParam('fullscreen_overflow'));DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'),ed.getParam('fullscreen_scrolly'));tinyMCE.settings=tinyMCE.oldSettings;},10);}return;}if(ed.getParam('fullscreen_new_window')){win=DOM.win.open(url+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{win.resizeTo(screen.availWidth,screen.availHeight);}catch(e){}}else{tinyMCE.oldSettings=tinyMCE.settings;s.fullscreen_overflow=DOM.getStyle(DOM.doc.body,'overflow',1)||'auto';s.fullscreen_html_overflow=DOM.getStyle(de,'overflow',1);vp=DOM.getViewPort();s.fullscreen_scrollx=vp.x;s.fullscreen_scrolly=vp.y;if(tinymce.isOpera&&s.fullscreen_overflow=='visible')s.fullscreen_overflow='auto';if(tinymce.isIE&&s.fullscreen_overflow=='scroll')s.fullscreen_overflow='auto';if(tinymce.isIE&&(s.fullscreen_html_overflow=='visible'||s.fullscreen_html_overflow=='scroll'))s.fullscreen_html_overflow='auto';if(s.fullscreen_overflow=='0px')s.fullscreen_overflow='';DOM.setStyle(DOM.doc.body,'overflow','hidden');de.style.overflow='hidden';vp=DOM.getViewPort();DOM.win.scrollTo(0,0);if(tinymce.isIE)vp.h-=1;n=DOM.add(DOM.doc.body,'div',{id:'mce_fullscreen_container',style:'position:'+(tinymce.isIE6||(tinymce.isIE&&!DOM.boxModel)?'absolute':'fixed')+';top:0;left:0;width:'+vp.w+'px;height:'+vp.h+'px;z-index:200000;'});DOM.add(n,'div',{id:'mce_fullscreen'});tinymce.each(ed.settings,function(v,n){s[n]=v;});s.id='mce_fullscreen';s.width=n.clientWidth;s.height=n.clientHeight-15;s.fullscreen_is_enabled=true;s.fullscreen_editor_id=ed.id;s.theme_advanced_resizing=false;s.save_onsavecallback=function(){ed.setContent(tinyMCE.get(s.id).getContent({format:'raw'}),{format:'raw'});ed.execCommand('mceSave');};tinymce.each(ed.getParam('fullscreen_settings'),function(v,k){s[k]=v;});if(s.theme_advanced_toolbar_location==='external')s.theme_advanced_toolbar_location='top';t.fullscreenEditor=new tinymce.Editor('mce_fullscreen',s);t.fullscreenEditor.onInit.add(function(){t.fullscreenEditor.setContent(ed.getContent());t.fullscreenEditor.focus();});t.fullscreenEditor.render();tinyMCE.add(t.fullscreenEditor);t.fullscreenElement=new tinymce.dom.Element('mce_fullscreen_container');t.fullscreenElement.update();t.resizeFunc=tinymce.dom.Event.add(DOM.win,'resize',function(){var vp=tinymce.DOM.getViewPort();t.fullscreenEditor.theme.resizeTo(vp.w,vp.h);});}});ed.addButton('fullscreen',{title:'fullscreen.desc',cmd:'mceFullScreen'});ed.onNodeChange.add(function(ed,cm){cm.setActive('fullscreen',ed.getParam('fullscreen_is_enabled'));});},getInfo:function(){return{longname:'Fullscreen',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('fullscreen',tinymce.plugins.FullScreenPlugin);})();
\ No newline at end of file
+(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(c,d){var e=this,f={},b;e.editor=c;c.addCommand("mceFullScreen",function(){var h,i=a.doc.documentElement;if(c.getParam("fullscreen_is_enabled")){if(c.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",e.resizeFunc);tinyMCE.get(c.getParam("fullscreen_editor_id")).setContent(c.getContent({format:"raw"}),{format:"raw"});tinyMCE.remove(c);a.remove("mce_fullscreen_container");i.style.overflow=c.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",c.getParam("fullscreen_overflow"));a.win.scrollTo(c.getParam("fullscreen_scrollx"),c.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(c.getParam("fullscreen_new_window")){h=a.win.open(d+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{h.resizeTo(screen.availWidth,screen.availHeight)}catch(g){}}else{tinyMCE.oldSettings=tinyMCE.settings;f.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";f.fullscreen_html_overflow=a.getStyle(i,"overflow",1);b=a.getViewPort();f.fullscreen_scrollx=b.x;f.fullscreen_scrolly=b.y;if(tinymce.isOpera&&f.fullscreen_overflow=="visible"){f.fullscreen_overflow="auto"}if(tinymce.isIE&&f.fullscreen_overflow=="scroll"){f.fullscreen_overflow="auto"}if(tinymce.isIE&&(f.fullscreen_html_overflow=="visible"||f.fullscreen_html_overflow=="scroll")){f.fullscreen_html_overflow="auto"}if(f.fullscreen_overflow=="0px"){f.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");i.style.overflow="hidden";b=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){b.h-=1}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+(tinymce.isIE6||(tinymce.isIE&&!a.boxModel)?"absolute":"fixed")+";top:0;left:0;width:"+b.w+"px;height:"+b.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(c.settings,function(j,k){f[k]=j});f.id="mce_fullscreen";f.width=n.clientWidth;f.height=n.clientHeight-15;f.fullscreen_is_enabled=true;f.fullscreen_editor_id=c.id;f.theme_advanced_resizing=false;f.save_onsavecallback=function(){c.setContent(tinyMCE.get(f.id).getContent({format:"raw"}),{format:"raw"});c.execCommand("mceSave")};tinymce.each(c.getParam("fullscreen_settings"),function(l,j){f[j]=l});if(f.theme_advanced_toolbar_location==="external"){f.theme_advanced_toolbar_location="top"}e.fullscreenEditor=new tinymce.Editor("mce_fullscreen",f);e.fullscreenEditor.onInit.add(function(){e.fullscreenEditor.setContent(c.getContent());e.fullscreenEditor.focus()});e.fullscreenEditor.render();e.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");e.fullscreenElement.update();e.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var m=tinymce.DOM.getViewPort(),k=e.fullscreenEditor,j,l;j=k.dom.getSize(k.getContainer().firstChild);l=k.dom.getSize(k.getContainer().getElementsByTagName("iframe")[0]);k.theme.resizeTo(m.w-j.w+l.w,m.h-j.h+l.h)})}});c.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});c.onNodeChange.add(function(h,g){g.setActive("fullscreen",h.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
});\r
\r
t.fullscreenEditor.render();\r
- tinyMCE.add(t.fullscreenEditor);\r
\r
t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container');\r
t.fullscreenElement.update();\r
//document.body.overflow = 'hidden';\r
\r
t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() {\r
- var vp = tinymce.DOM.getViewPort();\r
+ var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize;\r
\r
- t.fullscreenEditor.theme.resizeTo(vp.w, vp.h);\r
+ // Get outer/inner size to get a delta size that can be used to calc the new iframe size\r
+ outerSize = fed.dom.getSize(fed.getContainer().firstChild);\r
+ innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]);\r
+\r
+ fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h);\r
});\r
}\r
});\r
\r
// Register plugin\r
tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin);\r
-})();\r
+})();
\ No newline at end of file
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
<title></title>\r
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\r
<script type="text/javascript" src="../../tiny_mce.js"></script>\r
<script type="text/javascript">\r
function patchCallback(settings, key) {\r
// Add onunload\r
tinymce.dom.Event.add(window, "beforeunload", unloadHandler);\r
</script>\r
- <base target="_self" />\r
</head>\r
<body style="margin:0;overflow:hidden;width:100%;height:100%" scrolling="no" scroll="no">\r
<form onsubmit="doParentSubmit();">\r
-(function(){tinymce.create('tinymce.plugins.IESpell',{init:function(ed,url){var t=this,sp;if(!tinymce.isIE)return;t.editor=ed;ed.addCommand('mceIESpell',function(){try{sp=new ActiveXObject("ieSpell.ieSpellExtension");sp.CheckDocumentNode(ed.getDoc().documentElement);}catch(e){if(e.number==-2146827859){ed.windowManager.confirm(ed.getLang("iespell.download"),function(s){if(s)window.open('http://www.iespell.com/download.php','ieSpellDownload','');});}else ed.windowManager.alert("Error Loading ieSpell: Exception "+e.number);}});ed.addButton('iespell',{title:'iespell.iespell_desc',cmd:'mceIESpell'});},getInfo:function(){return{longname:'IESpell (IE Only)',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('iespell',tinymce.plugins.IESpell);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell);\r
-})();\r
+})();
\ No newline at end of file
-(function(){var DOM=tinymce.DOM,Element=tinymce.dom.Element,Event=tinymce.dom.Event,each=tinymce.each,is=tinymce.is;tinymce.create('tinymce.plugins.InlinePopups',{init:function(ed,url){ed.onBeforeRenderUI.add(function(){ed.windowManager=new tinymce.InlineWindowManager(ed);DOM.loadCSS(url+'/skins/'+(ed.settings.inlinepopups_skin||'clearlooks2')+"/window.css");});},getInfo:function(){return{longname:'InlinePopups',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager',{InlineWindowManager:function(ed){var t=this;t.parent(ed);t.zIndex=300000;t.count=0;t.windows={};},open:function(f,p){var t=this,id,opt='',ed=t.editor,dw=0,dh=0,vp,po,mdf,clf,we,w,u;f=f||{};p=p||{};if(!f.inline)return t.parent(f,p);if(!f.type)t.bookmark=ed.selection.getBookmark('simple');id=DOM.uniqueId();vp=DOM.getViewPort();f.width=parseInt(f.width||320);f.height=parseInt(f.height||240)+(tinymce.isIE?8:0);f.min_width=parseInt(f.min_width||150);f.min_height=parseInt(f.min_height||100);f.max_width=parseInt(f.max_width||2000);f.max_height=parseInt(f.max_height||2000);f.left=f.left||Math.round(Math.max(vp.x,vp.x+(vp.w/ 2.0) - (f.width /2.0)));f.top=f.top||Math.round(Math.max(vp.y,vp.y+(vp.h/ 2.0) - (f.height /2.0)));f.movable=f.resizable=true;p.mce_width=f.width;p.mce_height=f.height;p.mce_inline=true;p.mce_window_id=id;p.mce_auto_focus=f.auto_focus;t.features=f;t.params=p;t.onOpen.dispatch(t,f,p);if(f.type){opt+=' mceModal';if(f.type)opt+=' mce'+f.type.substring(0,1).toUpperCase()+f.type.substring(1);f.resizable=false;}if(f.statusbar)opt+=' mceStatusbar';if(f.resizable)opt+=' mceResizable';if(f.minimizable)opt+=' mceMinimizable';if(f.maximizable)opt+=' mceMaximizable';if(f.movable)opt+=' mceMovable';t._addAll(DOM.doc.body,['div',{id:id,'class':ed.settings.inlinepopups_skin||'clearlooks2',style:'width:100px;height:100px'},['div',{id:id+'_wrapper','class':'mceWrapper'+opt},['div',{id:id+'_top','class':'mceTop'},['div',{'class':'mceLeft'}],['div',{'class':'mceCenter'}],['div',{'class':'mceRight'}],['span',{id:id+'_title'},f.title||'']],['div',{id:id+'_middle','class':'mceMiddle'},['div',{id:id+'_left','class':'mceLeft'}],['span',{id:id+'_content'}],['div',{id:id+'_right','class':'mceRight'}]],['div',{id:id+'_bottom','class':'mceBottom'},['div',{'class':'mceLeft'}],['div',{'class':'mceCenter'}],['div',{'class':'mceRight'}],['span',{id:id+'_status'},'Content']],['a',{'class':'mceMove',tabindex:'-1',href:'javascript:;'}],['a',{'class':'mceMin',tabindex:'-1',href:'javascript:;',onmousedown:'return false;'}],['a',{'class':'mceMax',tabindex:'-1',href:'javascript:;',onmousedown:'return false;'}],['a',{'class':'mceMed',tabindex:'-1',href:'javascript:;',onmousedown:'return false;'}],['a',{'class':'mceClose',tabindex:'-1',href:'javascript:;',onmousedown:'return false;'}],['a',{id:id+'_resize_n','class':'mceResize mceResizeN',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_s','class':'mceResize mceResizeS',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_w','class':'mceResize mceResizeW',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_e','class':'mceResize mceResizeE',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_nw','class':'mceResize mceResizeNW',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_ne','class':'mceResize mceResizeNE',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_sw','class':'mceResize mceResizeSW',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_se','class':'mceResize mceResizeSE',tabindex:'-1',href:'javascript:;'}]]]);DOM.setStyles(id,{top:-10000,left:-10000});if(tinymce.isGecko)DOM.setStyle(id,'overflow','auto');if(!f.type){dw+=DOM.get(id+'_left').clientWidth;dw+=DOM.get(id+'_right').clientWidth;dh+=DOM.get(id+'_top').clientHeight;dh+=DOM.get(id+'_bottom').clientHeight;}DOM.setStyles(id,{top:f.top,left:f.left,width:f.width+dw,height:f.height+dh});u=f.url||f.file;if(u){if(tinymce.relaxedDomain)u+=(u.indexOf('?')==-1?'?':'&')+'mce_rdomain='+tinymce.relaxedDomain;u=tinymce._addVer(u);}if(!f.type){DOM.add(id+'_content','iframe',{id:id+'_ifr',src:'javascript:""',frameBorder:0,style:'border:0;width:10px;height:10px'});DOM.setStyles(id+'_ifr',{width:f.width,height:f.height});DOM.setAttrib(id+'_ifr','src',u);}else{DOM.add(id+'_wrapper','a',{id:id+'_ok','class':'mceButton mceOk',href:'javascript:;',onmousedown:'return false;'},'Ok');if(f.type=='confirm')DOM.add(id+'_wrapper','a',{'class':'mceButton mceCancel',href:'javascript:;',onmousedown:'return false;'},'Cancel');DOM.add(id+'_middle','div',{'class':'mceIcon'});DOM.setHTML(id+'_content',f.content.replace('\n','<br />'));}mdf=Event.add(id,'mousedown',function(e){var n=e.target,w,vp;w=t.windows[id];t.focus(id);if(n.nodeName=='A'||n.nodeName=='a'){if(n.className=='mceMax'){w.oldPos=w.element.getXY();w.oldSize=w.element.getSize();vp=DOM.getViewPort();vp.w-=2;vp.h-=2;w.element.moveTo(vp.x,vp.y);w.element.resizeTo(vp.w,vp.h);DOM.setStyles(id+'_ifr',{width:vp.w-w.deltaWidth,height:vp.h-w.deltaHeight});DOM.addClass(id+'_wrapper','mceMaximized');}else if(n.className=='mceMed'){w.element.moveTo(w.oldPos.x,w.oldPos.y);w.element.resizeTo(w.oldSize.w,w.oldSize.h);w.iframeElement.resizeTo(w.oldSize.w-w.deltaWidth,w.oldSize.h-w.deltaHeight);DOM.removeClass(id+'_wrapper','mceMaximized');}else if(n.className=='mceMove')return t._startDrag(id,e,n.className);else if(DOM.hasClass(n,'mceResize'))return t._startDrag(id,e,n.className.substring(13));}});clf=Event.add(id,'click',function(e){var n=e.target;t.focus(id);if(n.nodeName=='A'||n.nodeName=='a'){switch(n.className){case'mceClose':t.close(null,id);return Event.cancel(e);case'mceButton mceOk':case'mceButton mceCancel':f.button_func(n.className=='mceButton mceOk');return Event.cancel(e);}}});w=t.windows[id]={id:id,mousedown_func:mdf,click_func:clf,element:new Element(id,{blocker:1,container:ed.getContainer()}),iframeElement:new Element(id+'_ifr'),features:f,deltaWidth:dw,deltaHeight:dh};w.iframeElement.on('focus',function(){t.focus(id);});if(t.count==0&&t.editor.getParam('dialog_type','modal')=='modal'){DOM.add(DOM.doc.body,'div',{id:'mceModalBlocker','class':(t.editor.settings.inlinepopups_skin||'clearlooks2')+'_modalBlocker',style:{zIndex:t.zIndex-1}});DOM.show('mceModalBlocker');}else DOM.setStyle('mceModalBlocker','z-index',t.zIndex-1);if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!DOM.boxModel))DOM.setStyles('mceModalBlocker',{position:'absolute',width:vp.w-2,height:vp.h-2});t.focus(id);t._fixIELayout(id,1);if(DOM.get(id+'_ok'))DOM.get(id+'_ok').focus();t.count++;return w;},focus:function(id){var t=this,w;if(w=t.windows[id]){w.zIndex=this.zIndex++;w.element.setStyle('zIndex',w.zIndex);w.element.update();id=id+'_wrapper';DOM.removeClass(t.lastId,'mceFocus');DOM.addClass(id,'mceFocus');t.lastId=id;}},_addAll:function(te,ne){var i,n,t=this,dom=tinymce.DOM;if(is(ne,'string'))te.appendChild(dom.doc.createTextNode(ne));else if(ne.length){te=te.appendChild(dom.create(ne[0],ne[1]));for(i=2;i<ne.length;i++)t._addAll(te,ne[i]);}},_startDrag:function(id,se,ac){var t=this,mu,mm,d=DOM.doc,eb,w=t.windows[id],we=w.element,sp=we.getXY(),p,sz,ph,cp,vp,sx,sy,sex,sey,dx,dy,dw,dh;cp={x:0,y:0};vp=DOM.getViewPort();vp.w-=2;vp.h-=2;sex=se.screenX;sey=se.screenY;dx=dy=dw=dh=0;mu=Event.add(d,'mouseup',function(e){Event.remove(d,'mouseup',mu);Event.remove(d,'mousemove',mm);if(eb)eb.remove();we.moveBy(dx,dy);we.resizeBy(dw,dh);sz=we.getSize();DOM.setStyles(id+'_ifr',{width:sz.w-w.deltaWidth,height:sz.h-w.deltaHeight});t._fixIELayout(id,1);return Event.cancel(e);});if(ac!='Move')startMove();function startMove(){if(eb)return;t._fixIELayout(id,0);DOM.add(d.body,'div',{id:'mceEventBlocker','class':'mceEventBlocker '+(t.editor.settings.inlinepopups_skin||'clearlooks2'),style:{zIndex:t.zIndex+1}});if(tinymce.isIE6||(tinymce.isIE&&!DOM.boxModel))DOM.setStyles('mceEventBlocker',{position:'absolute',width:vp.w-2,height:vp.h-2});eb=new Element('mceEventBlocker');eb.update();p=we.getXY();sz=we.getSize();sx=cp.x+p.x-vp.x;sy=cp.y+p.y-vp.y;DOM.add(eb.get(),'div',{id:'mcePlaceHolder','class':'mcePlaceHolder',style:{left:sx,top:sy,width:sz.w,height:sz.h}});ph=new Element('mcePlaceHolder');};mm=Event.add(d,'mousemove',function(e){var x,y,v;startMove();x=e.screenX-sex;y=e.screenY-sey;switch(ac){case'ResizeW':dx=x;dw=0-x;break;case'ResizeE':dw=x;break;case'ResizeN':case'ResizeNW':case'ResizeNE':if(ac=="ResizeNW"){dx=x;dw=0-x;}else if(ac=="ResizeNE")dw=x;dy=y;dh=0-y;break;case'ResizeS':case'ResizeSW':case'ResizeSE':if(ac=="ResizeSW"){dx=x;dw=0-x;}else if(ac=="ResizeSE")dw=x;dh=y;break;case'mceMove':dx=x;dy=y;break;}if(dw<(v=w.features.min_width-sz.w)){if(dx!==0)dx+=dw-v;dw=v;}if(dh<(v=w.features.min_height-sz.h)){if(dy!==0)dy+=dh-v;dh=v;}dw=Math.min(dw,w.features.max_width-sz.w);dh=Math.min(dh,w.features.max_height-sz.h);dx=Math.max(dx,vp.x-(sx+vp.x));dy=Math.max(dy,vp.y-(sy+vp.y));dx=Math.min(dx,(vp.w+vp.x)-(sx+sz.w+vp.x));dy=Math.min(dy,(vp.h+vp.y)-(sy+sz.h+vp.y));if(dx+dy!==0){if(sx+dx<0)dx=0;if(sy+dy<0)dy=0;ph.moveTo(sx+dx,sy+dy);}if(dw+dh!==0)ph.resizeTo(sz.w+dw,sz.h+dh);return Event.cancel(e);});return Event.cancel(se);},resizeBy:function(dw,dh,id){var w=this.windows[id];if(w){w.element.resizeBy(dw,dh);w.iframeElement.resizeBy(dw,dh);}},close:function(win,id){var t=this,w,d=DOM.doc,ix=0,fw,id;id=t._findId(id||win);if(!t.windows[id]){t.parent(win);return;}t.count--;if(t.count==0)DOM.remove('mceModalBlocker');if(w=t.windows[id]){t.onClose.dispatch(t);Event.remove(d,'mousedown',w.mousedownFunc);Event.remove(d,'click',w.clickFunc);Event.clear(id);Event.clear(id+'_ifr');DOM.setAttrib(id+'_ifr','src','javascript:""');w.element.remove();delete t.windows[id];each(t.windows,function(w){if(w.zIndex>ix){fw=w;ix=w.zIndex;}});if(fw)t.focus(fw.id);}},setTitle:function(w,ti){var e;w=this._findId(w);if(e=DOM.get(w+'_title'))e.innerHTML=DOM.encode(ti);},alert:function(txt,cb,s){var t=this,w;w=t.open({title:t,type:'alert',button_func:function(s){if(cb)cb.call(s||t,s);t.close(null,w.id);},content:DOM.encode(t.editor.getLang(txt,txt)),inline:1,width:400,height:130});},confirm:function(txt,cb,s){var t=this,w;w=t.open({title:t,type:'confirm',button_func:function(s){if(cb)cb.call(s||t,s);t.close(null,w.id);},content:DOM.encode(t.editor.getLang(txt,txt)),inline:1,width:400,height:130});},_findId:function(w){var t=this;if(typeof(w)=='string')return w;each(t.windows,function(wo){var ifr=DOM.get(wo.id+'_ifr');if(ifr&&w==ifr.contentWindow){w=wo.id;return false;}});return w;},_fixIELayout:function(id,s){var w,img;if(!tinymce.isIE6)return;each(['n','s','w','e','nw','ne','sw','se'],function(v){var e=DOM.get(id+'_resize_'+v);DOM.setStyles(e,{width:s?e.clientWidth:'',height:s?e.clientHeight:'',cursor:DOM.getStyle(e,'cursor',1)});DOM.setStyle(id+"_bottom",'bottom','-1px');e=0;});if(w=this.windows[id]){w.element.hide();w.element.show();each(DOM.select('div,a',id),function(e,i){if(e.currentStyle.backgroundImage!='none'){img=new Image();img.src=e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,'$1');}});DOM.get(id).style.filter='';}}});tinymce.PluginManager.add('inlinepopups',tinymce.plugins.InlinePopups);})();
\ No newline at end of file
+(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(r,j){var y=this,i,k="",q=y.editor,g=0,s=0,h,m,n,o,l,v,x;r=r||{};j=j||{};if(!r.inline){return y.parent(r,j)}if(!r.type){y.bookmark=q.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();r.width=parseInt(r.width||320);r.height=parseInt(r.height||240)+(tinymce.isIE?8:0);r.min_width=parseInt(r.min_width||150);r.min_height=parseInt(r.min_height||100);r.max_width=parseInt(r.max_width||2000);r.max_height=parseInt(r.max_height||2000);r.left=r.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(r.width/2)));r.top=r.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(r.height/2)));r.movable=r.resizable=true;j.mce_width=r.width;j.mce_height=r.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=r.auto_focus;y.features=r;y.params=j;y.onOpen.dispatch(y,r,j);if(r.type){k+=" mceModal";if(r.type){k+=" mce"+r.type.substring(0,1).toUpperCase()+r.type.substring(1)}r.resizable=false}if(r.statusbar){k+=" mceStatusbar"}if(r.resizable){k+=" mceResizable"}if(r.minimizable){k+=" mceMinimizable"}if(r.maximizable){k+=" mceMaximizable"}if(r.movable){k+=" mceMovable"}y._addAll(d.doc.body,["div",{id:i,"class":(q.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},r.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!r.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;s+=d.get(i+"_top").clientHeight;s+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:r.top,left:r.left,width:r.width+g,height:r.height+s});x=r.url||r.file;if(x){if(tinymce.relaxedDomain){x+=(x.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}x=tinymce._addVer(x)}if(!r.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:r.width,height:r.height});d.setAttrib(i+"_ifr","src",x)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(r.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",r.content.replace("\n","<br />"))}n=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=y.windows[i];y.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return y._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return y._startDrag(i,t,u.className.substring(13))}}}}}});o=a.add(i,"click",function(f){var p=f.target;y.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":y.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":r.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});v=y.windows[i]={id:i,mousedown_func:n,click_func:o,element:new b(i,{blocker:1,container:q.getContainer()}),iframeElement:new b(i+"_ifr"),features:r,deltaWidth:g,deltaHeight:s};v.iframeElement.on("focus",function(){y.focus(i)});if(y.count==0&&y.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(y.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:y.zIndex-1}});d.show("mceModalBlocker")}else{d.setStyle("mceModalBlocker","z-index",y.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}y.focus(i);y._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}y.count++;return v},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;g<h.length;g++){f._addAll(k,h[g])}}}},_startDrag:function(v,G,E){var o=this,u,z,C=d.doc,f,l=o.windows[v],h=l.element,y=h.getXY(),x,q,F,g,A,s,r,j,i,m,k,n,B;g={x:0,y:0};A=d.getViewPort();A.w-=2;A.h-=2;j=G.screenX;i=G.screenY;m=k=n=B=0;u=a.add(C,"mouseup",function(p){a.remove(C,"mouseup",u);a.remove(C,"mousemove",z);if(f){f.remove()}h.moveBy(m,k);h.resizeBy(n,B);q=h.getSize();d.setStyles(v+"_ifr",{width:q.w-l.deltaWidth,height:q.h-l.deltaHeight});o._fixIELayout(v,1);return a.cancel(p)});if(E!="Move"){D()}function D(){if(f){return}o._fixIELayout(v,0);d.add(C.body,"div",{id:"mceEventBlocker","class":"mceEventBlocker "+(o.editor.settings.inlinepopups_skin||"clearlooks2"),style:{zIndex:o.zIndex+1}});if(tinymce.isIE6||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceEventBlocker",{position:"absolute",left:A.x,top:A.y,width:A.w-2,height:A.h-2})}f=new b("mceEventBlocker");f.update();x=h.getXY();q=h.getSize();s=g.x+x.x-A.x;r=g.y+x.y-A.y;d.add(f.get(),"div",{id:"mcePlaceHolder","class":"mcePlaceHolder",style:{left:s,top:r,width:q.w,height:q.h}});F=new b("mcePlaceHolder")}z=a.add(C,"mousemove",function(w){var p,H,t;D();p=w.screenX-j;H=w.screenY-i;switch(E){case"ResizeW":m=p;n=0-p;break;case"ResizeE":n=p;break;case"ResizeN":case"ResizeNW":case"ResizeNE":if(E=="ResizeNW"){m=p;n=0-p}else{if(E=="ResizeNE"){n=p}}k=H;B=0-H;break;case"ResizeS":case"ResizeSW":case"ResizeSE":if(E=="ResizeSW"){m=p;n=0-p}else{if(E=="ResizeSE"){n=p}}B=H;break;case"mceMove":m=p;k=H;break}if(n<(t=l.features.min_width-q.w)){if(m!==0){m+=n-t}n=t}if(B<(t=l.features.min_height-q.h)){if(k!==0){k+=B-t}B=t}n=Math.min(n,l.features.max_width-q.w);B=Math.min(B,l.features.max_height-q.h);m=Math.max(m,A.x-(s+A.x));k=Math.max(k,A.y-(r+A.y));m=Math.min(m,(A.w+A.x)-(s+q.w+A.x));k=Math.min(k,(A.h+A.y)-(r+q.h+A.y));if(m+k!==0){if(s+m<0){m=0}if(r+k<0){k=0}F.moveTo(s+m,r+k)}if(n+B!==0){F.resizeTo(q.w+n,q.h+B)}return a.cancel(w)});return a.cancel(G)},resizeBy:function(g,h,i){var f=this.windows[i];if(f){f.element.resizeBy(g,h);f.iframeElement.resizeBy(g,h)}},close:function(j,l){var h=this,g,k=d.doc,f=0,i,l;l=h._findId(l||j);if(!h.windows[l]){h.parent(j);return}h.count--;if(h.count==0){d.remove("mceModalBlocker")}if(g=h.windows[l]){h.onClose.dispatch(h);a.remove(k,"mousedown",g.mousedownFunc);a.remove(k,"click",g.clickFunc);a.clear(l);a.clear(l+"_ifr");d.setAttrib(l+"_ifr","src",'javascript:""');g.element.remove();delete h.windows[l];e(h.windows,function(m){if(m.zIndex>f){i=m;f=m.zIndex}});if(i){h.focus(i.id)}}},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Only store selection if the type is a normal window\r
if (!f.type)\r
- t.bookmark = ed.selection.getBookmark('simple');\r
+ t.bookmark = ed.selection.getBookmark(1);\r
\r
id = DOM.uniqueId();\r
vp = DOM.getViewPort();\r
\r
// Create DOM objects\r
t._addAll(DOM.doc.body, \r
- ['div', {id : id, 'class' : ed.settings.inlinepopups_skin || 'clearlooks2', style : 'width:100px;height:100px'}, \r
+ ['div', {id : id, 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'}, \r
['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt},\r
['div', {id : id + '_top', 'class' : 'mceTop'}, \r
['div', {'class' : 'mceLeft'}],\r
DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1);\r
\r
if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel))\r
- DOM.setStyles('mceModalBlocker', {position : 'absolute', width : vp.w - 2, height : vp.h - 2});\r
+ DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});\r
\r
t.focus(id);\r
t._fixIELayout(id, 1);\r
});\r
\r
if (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel))\r
- DOM.setStyles('mceEventBlocker', {position : 'absolute', width : vp.w - 2, height : vp.h - 2});\r
+ DOM.setStyles('mceEventBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});\r
\r
eb = new Element('mceEventBlocker');\r
eb.update();\r
.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)}
.clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px}
.clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto}
-.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)}
\ No newline at end of file
+.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)}
+
+/* IE9 fixes */
+.clearlooks2.ie9 .mceTop .mceCenter {clip:auto;}
+.clearlooks2.ie9 .mceMiddle {clip:auto;}
+.clearlooks2.ie9 .mceMiddle .mceLeft, .clearlooks2.ie9 .mceMiddle .mceRight {top: 23px;}
+.clearlooks2.ie9 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {top:13px;}
+.clearlooks2.ie9 .mceModal .mceMiddle {top:23px}
+.clearlooks2.ie9 .mceModal .mceMiddle .mceLeft, .clearlooks2.ie9 .mceModal .mceMiddle .mceRight {top: 0}
+.clearlooks2.ie9 .mceMiddle .mceIcon {top:13px}
+.clearlooks2.ie9 .mceTop .mceCenter {top:0; right:auto; left:6px; width:calc(100%-12px)}
-(function(){tinymce.create('tinymce.plugins.InsertDateTime',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceInsertDate',function(){var str=t._getDateTime(new Date(),ed.getParam("plugin_insertdate_dateFormat",ed.getLang('insertdatetime.date_fmt')));ed.execCommand('mceInsertContent',false,str);});ed.addCommand('mceInsertTime',function(){var str=t._getDateTime(new Date(),ed.getParam("plugin_insertdate_timeFormat",ed.getLang('insertdatetime.time_fmt')));ed.execCommand('mceInsertContent',false,str);});ed.addButton('insertdate',{title:'insertdatetime.insertdate_desc',cmd:'mceInsertDate'});ed.addButton('inserttime',{title:'insertdatetime.inserttime_desc',cmd:'mceInsertTime'});},getInfo:function(){return{longname:'Insert date/time',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_getDateTime:function(d,fmt){var ed=this.editor;function addZeros(value,len){value=""+value;if(value.length<len){for(var i=0;i<(len-value.length);i++)value="0"+value;}return value;};fmt=fmt.replace("%D","%m/%d/%y");fmt=fmt.replace("%r","%I:%M:%S %p");fmt=fmt.replace("%Y",""+d.getFullYear());fmt=fmt.replace("%y",""+d.getYear());fmt=fmt.replace("%m",addZeros(d.getMonth()+1,2));fmt=fmt.replace("%d",addZeros(d.getDate(),2));fmt=fmt.replace("%H",""+addZeros(d.getHours(),2));fmt=fmt.replace("%M",""+addZeros(d.getMinutes(),2));fmt=fmt.replace("%S",""+addZeros(d.getSeconds(),2));fmt=fmt.replace("%I",""+((d.getHours()+11)%12+1));fmt=fmt.replace("%p",""+(d.getHours()<12?"AM":"PM"));fmt=fmt.replace("%B",""+ed.getLang("insertdatetime.months_long").split(',')[d.getMonth()]);fmt=fmt.replace("%b",""+ed.getLang("insertdatetime.months_short").split(',')[d.getMonth()]);fmt=fmt.replace("%A",""+ed.getLang("insertdatetime.day_long").split(',')[d.getDay()]);fmt=fmt.replace("%a",""+ed.getLang("insertdatetime.day_short").split(',')[d.getDay()]);fmt=fmt.replace("%%","%");return fmt;}});tinymce.PluginManager.add('insertdatetime',tinymce.plugins.InsertDateTime);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length<d){for(var f=0;f<(d-g.length);f++){g="0"+g}}return g}a=a.replace("%D","%m/%d/%y");a=a.replace("%r","%I:%M:%S %p");a=a.replace("%Y",""+e.getFullYear());a=a.replace("%y",""+e.getYear());a=a.replace("%m",b(e.getMonth()+1,2));a=a.replace("%d",b(e.getDate(),2));a=a.replace("%H",""+b(e.getHours(),2));a=a.replace("%M",""+b(e.getMinutes(),2));a=a.replace("%S",""+b(e.getSeconds(),2));a=a.replace("%I",""+((e.getHours()+11)%12+1));a=a.replace("%p",""+(e.getHours()<12?"AM":"PM"));a=a.replace("%B",""+c.getLang("insertdatetime.months_long").split(",")[e.getMonth()]);a=a.replace("%b",""+c.getLang("insertdatetime.months_short").split(",")[e.getMonth()]);a=a.replace("%A",""+c.getLang("insertdatetime.day_long").split(",")[e.getDay()]);a=a.replace("%a",""+c.getLang("insertdatetime.day_short").split(",")[e.getDay()]);a=a.replace("%%","%");return a}});tinymce.PluginManager.add("insertdatetime",tinymce.plugins.InsertDateTime)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('insertdatetime', tinymce.plugins.InsertDateTime);\r
-})();\r
+})();
\ No newline at end of file
-(function(){tinymce.create('tinymce.plugins.Layer',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceInsertLayer',t._insertLayer,t);ed.addCommand('mceMoveForward',function(){t._move(1);});ed.addCommand('mceMoveBackward',function(){t._move(-1);});ed.addCommand('mceMakeAbsolute',function(){t._toggleAbsolute();});ed.addButton('moveforward',{title:'layer.forward_desc',cmd:'mceMoveForward'});ed.addButton('movebackward',{title:'layer.backward_desc',cmd:'mceMoveBackward'});ed.addButton('absolute',{title:'layer.absolute_desc',cmd:'mceMakeAbsolute'});ed.addButton('insertlayer',{title:'layer.insertlayer_desc',cmd:'mceInsertLayer'});ed.onInit.add(function(){if(tinymce.isIE)ed.getDoc().execCommand('2D-Position',false,true);});ed.onNodeChange.add(t._nodeChange,t);ed.onVisualAid.add(t._visualAid,t);},getInfo:function(){return{longname:'Layer',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_nodeChange:function(ed,cm,n){var le,p;le=this._getParentLayer(n);p=ed.dom.getParent(n,'DIV,P,IMG');if(!p){cm.setDisabled('absolute',1);cm.setDisabled('moveforward',1);cm.setDisabled('movebackward',1);}else{cm.setDisabled('absolute',0);cm.setDisabled('moveforward',!le);cm.setDisabled('movebackward',!le);cm.setActive('absolute',le&&le.style.position.toLowerCase()=="absolute");}},_visualAid:function(ed,e,s){var dom=ed.dom;tinymce.each(dom.select('div,p',e),function(e){if(/^(absolute|relative|static)$/i.test(e.style.position)){if(s)dom.addClass(e,'mceItemVisualAid');else dom.removeClass(e,'mceItemVisualAid');}});},_move:function(d){var ed=this.editor,i,z=[],le=this._getParentLayer(ed.selection.getNode()),ci=-1,fi=-1,nl;nl=[];tinymce.walk(ed.getBody(),function(n){if(n.nodeType==1&&/^(absolute|relative|static)$/i.test(n.style.position))nl.push(n);},'childNodes');for(i=0;i<nl.length;i++){z[i]=nl[i].style.zIndex?parseInt(nl[i].style.zIndex):0;if(ci<0&&nl[i]==le)ci=i;}if(d<0){for(i=0;i<z.length;i++){if(z[i]<z[ci]){fi=i;break;}}if(fi>-1){nl[ci].style.zIndex=z[fi];nl[fi].style.zIndex=z[ci];}else{if(z[ci]>0)nl[ci].style.zIndex=z[ci]-1;}}else{for(i=0;i<z.length;i++){if(z[i]>z[ci]){fi=i;break;}}if(fi>-1){nl[ci].style.zIndex=z[fi];nl[fi].style.zIndex=z[ci];}else nl[ci].style.zIndex=z[ci]+1;}ed.execCommand('mceRepaint');},_getParentLayer:function(n){return this.editor.dom.getParent(n,function(n){return n.nodeType==1&&/^(absolute|relative|static)$/i.test(n.style.position);});},_insertLayer:function(){var ed=this.editor,p=ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(),'*'));ed.dom.add(ed.getBody(),'div',{style:{position:'absolute',left:p.x,top:(p.y>20?p.y:20),width:100,height:100},'class':'mceItemVisualAid'},ed.selection.getContent()||ed.getLang('layer.content'));},_toggleAbsolute:function(){var ed=this.editor,le=this._getParentLayer(ed.selection.getNode());if(!le)le=ed.dom.getParent(ed.selection.getNode(),'DIV,P,IMG');if(le){if(le.style.position.toLowerCase()=="absolute"){ed.dom.setStyles(le,{position:'',left:'',top:'',width:'',height:''});ed.dom.removeClass(le,'mceItemVisualAid');}else{if(le.style.left=="")le.style.left=20+'px';if(le.style.top=="")le.style.top=20+'px';if(le.style.width=="")le.style.width=le.width?(le.width+'px'):'100px';if(le.style.height=="")le.style.height=le.height?(le.height+'px'):'100px';le.style.position="absolute";ed.addVisual(ed.getBody());}ed.execCommand('mceRepaint');ed.nodeChanged();}}});tinymce.PluginManager.add('layer',tinymce.plugins.Layer);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.Layer",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertLayer",c._insertLayer,c);a.addCommand("mceMoveForward",function(){c._move(1)});a.addCommand("mceMoveBackward",function(){c._move(-1)});a.addCommand("mceMakeAbsolute",function(){c._toggleAbsolute()});a.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});a.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});a.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});a.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});a.onInit.add(function(){if(tinymce.isIE){a.getDoc().execCommand("2D-Position",false,true)}});a.onNodeChange.add(c._nodeChange,c);a.onVisualAid.add(c._visualAid,c)},getInfo:function(){return{longname:"Layer",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var c,d;c=this._getParentLayer(e);d=b.dom.getParent(e,"DIV,P,IMG");if(!d){a.setDisabled("absolute",1);a.setDisabled("moveforward",1);a.setDisabled("movebackward",1)}else{a.setDisabled("absolute",0);a.setDisabled("moveforward",!c);a.setDisabled("movebackward",!c);a.setActive("absolute",c&&c.style.position.toLowerCase()=="absolute")}},_visualAid:function(a,c,b){var d=a.dom;tinymce.each(d.select("div,p",c),function(f){if(/^(absolute|relative|static)$/i.test(f.style.position)){if(b){d.addClass(f,"mceItemVisualAid")}else{d.removeClass(f,"mceItemVisualAid")}}})},_move:function(h){var b=this.editor,f,g=[],e=this._getParentLayer(b.selection.getNode()),c=-1,j=-1,a;a=[];tinymce.walk(b.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){a.push(d)}},"childNodes");for(f=0;f<a.length;f++){g[f]=a[f].style.zIndex?parseInt(a[f].style.zIndex):0;if(c<0&&a[f]==e){c=f}}if(h<0){for(f=0;f<g.length;f++){if(g[f]<g[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{if(g[c]>0){a[c].style.zIndex=g[c]-1}}}else{for(f=0;f<g.length;f++){if(g[f]>g[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{a[c].style.zIndex=g[c]+1}}b.execCommand("mceRepaint")},_getParentLayer:function(a){return this.editor.dom.getParent(a,function(b){return b.nodeType==1&&/^(absolute|relative|static)$/i.test(b.style.position)})},_insertLayer:function(){var a=this.editor,b=a.dom.getPos(a.dom.getParent(a.selection.getNode(),"*"));a.dom.add(a.getBody(),"div",{style:{position:"absolute",left:b.x,top:(b.y>20?b.y:20),width:100,height:100},"class":"mceItemVisualAid"},a.selection.getContent()||a.getLang("layer.content"))},_toggleAbsolute:function(){var a=this.editor,b=this._getParentLayer(a.selection.getNode());if(!b){b=a.dom.getParent(a.selection.getNode(),"DIV,P,IMG")}if(b){if(b.style.position.toLowerCase()=="absolute"){a.dom.setStyles(b,{position:"",left:"",top:"",width:"",height:""});a.dom.removeClass(b,"mceItemVisualAid")}else{if(b.style.left==""){b.style.left=20+"px"}if(b.style.top==""){b.style.top=20+"px"}if(b.style.width==""){b.style.width=b.width?(b.width+"px"):"100px"}if(b.style.height==""){b.style.height=b.height?(b.height+"px"):"100px"}b.style.position="absolute";a.addVisual(a.getBody())}a.execCommand("mceRepaint");a.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('layer', tinymce.plugins.Layer);\r
-})();\r
+})();
\ No newline at end of file
--- /dev/null
+(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.serializer;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"full"}},bold:{inline:"b"},italic:{inline:"i"},underline:{inline:"u"},strikethrough:{inline:"strike"},fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",styles:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});d._setup();a.each("b,i,u,strike".split(","),function(f){var g=d.rules[f];if(!g){d.addRules(f)}});if(!d.rules.font){d.addRules("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.rules[f],g;if(h){a.each(h.attribs,function(j,i){if(i.name=="align"){g=true;return false}});if(!g){h.attribs.push({name:"align"})}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce);
\ No newline at end of file
--- /dev/null
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ *\r
+ * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align\r
+ * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash\r
+ *\r
+ * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are\r
+ * not apart of the newer specifications for HTML and XHTML.\r
+ */\r
+\r
+(function(tinymce) {\r
+ // Override inline_styles setting to force TinyMCE to produce deprecated contents\r
+ tinymce.onAddEditor.addToTop(function(tinymce, editor) {\r
+ editor.settings.inline_styles = false;\r
+ });\r
+\r
+ // Create the legacy ouput plugin\r
+ tinymce.create('tinymce.plugins.LegacyOutput', {\r
+ init : function(editor) {\r
+ editor.onInit.add(function() {\r
+ var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img',\r
+ fontSizes = tinymce.explode(editor.settings.font_size_style_values),\r
+ serializer = editor.serializer;\r
+\r
+ // Override some internal formats to produce legacy elements and attributes\r
+ editor.formatter.register({\r
+ // Change alignment formats to use the deprecated align attribute\r
+ alignleft : {selector : alignElements, attributes : {align : 'left'}},\r
+ aligncenter : {selector : alignElements, attributes : {align : 'center'}},\r
+ alignright : {selector : alignElements, attributes : {align : 'right'}},\r
+ alignfull : {selector : alignElements, attributes : {align : 'full'}},\r
+\r
+ // Change the basic formatting elements to use deprecated element types\r
+ bold : {inline : 'b'},\r
+ italic : {inline : 'i'},\r
+ underline : {inline : 'u'},\r
+ strikethrough : {inline : 'strike'},\r
+\r
+ // Change font size and font family to use the deprecated font element\r
+ fontname : {inline : 'font', attributes : {face : '%value'}},\r
+ fontsize : {\r
+ inline : 'font',\r
+ attributes : {\r
+ size : function(vars) {\r
+ return tinymce.inArray(fontSizes, vars.value) + 1;\r
+ }\r
+ }\r
+ },\r
+\r
+ // Setup font elements for colors as well\r
+ forecolor : {inline : 'font', styles : {color : '%value'}},\r
+ hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}}\r
+ });\r
+\r
+ // Force parsing of the serializer rules\r
+ serializer._setup();\r
+\r
+ // Check that deprecated elements are allowed if not add them\r
+ tinymce.each('b,i,u,strike'.split(','), function(name) {\r
+ var rule = serializer.rules[name];\r
+\r
+ if (!rule)\r
+ serializer.addRules(name);\r
+ });\r
+\r
+ // Add font element if it's missing\r
+ if (!serializer.rules["font"])\r
+ serializer.addRules("font[face|size|color|style]");\r
+\r
+ // Add the missing and depreacted align attribute for the serialization engine\r
+ tinymce.each(alignElements.split(','), function(name) {\r
+ var rule = serializer.rules[name], found;\r
+\r
+ if (rule) {\r
+ tinymce.each(rule.attribs, function(name, attr) {\r
+ if (attr.name == 'align') {\r
+ found = true;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ if (!found)\r
+ rule.attribs.push({name : 'align'});\r
+ }\r
+ });\r
+\r
+ // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes\r
+ editor.onNodeChange.add(function(editor, control_manager) {\r
+ var control, fontElm, fontName, fontSize;\r
+\r
+ // Find font element get it's name and size\r
+ fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');\r
+ if (fontElm) {\r
+ fontName = fontElm.face;\r
+ fontSize = fontElm.size;\r
+ }\r
+\r
+ // Select/unselect the font name in droplist\r
+ if (control = control_manager.get('fontselect')) {\r
+ control.select(function(value) {\r
+ return value == fontName;\r
+ });\r
+ }\r
+\r
+ // Select/unselect the font size in droplist\r
+ if (control = control_manager.get('fontsizeselect')) {\r
+ control.select(function(value) {\r
+ var index = tinymce.inArray(fontSizes, value.fontSize);\r
+\r
+ return index + 1 == fontSize;\r
+ });\r
+ }\r
+ });\r
+ });\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'LegacyOutput',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ }\r
+ });\r
+\r
+ // Register plugin\r
+ tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput);\r
+})(tinymce);
\ No newline at end of file
-(function(){var each=tinymce.each;tinymce.create('tinymce.plugins.MediaPlugin',{init:function(ed,url){var t=this;t.editor=ed;t.url=url;function isMediaElm(n){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);};ed.onPreInit.add(function(){ed.serializer.addRules('param[name|value|_mce_value]');});ed.addCommand('mceMedia',function(){ed.windowManager.open({file:url+'/media.htm',width:430+parseInt(ed.getLang('media.delta_width',0)),height:470+parseInt(ed.getLang('media.delta_height',0)),inline:1},{plugin_url:url});});ed.addButton('media',{title:'media.desc',cmd:'mceMedia'});ed.onNodeChange.add(function(ed,cm,n){cm.setActive('media',n.nodeName=='IMG'&&isMediaElm(n));});ed.onInit.add(function(){var lo={mceItemFlash:'flash',mceItemShockWave:'shockwave',mceItemWindowsMedia:'windowsmedia',mceItemQuickTime:'quicktime',mceItemRealMedia:'realmedia'};ed.selection.onSetContent.add(function(){t._spansToImgs(ed.getBody());});ed.selection.onBeforeSetContent.add(t._objectsToSpans,t);if(ed.settings.content_css!==false)ed.dom.loadCSS(url+"/css/content.css");if(ed.theme.onResolveName){ed.theme.onResolveName.add(function(th,o){if(o.name=='img'){each(lo,function(v,k){if(ed.dom.hasClass(o.node,k)){o.name=v;o.title=ed.dom.getAttrib(o.node,'title');return false;}});}});}if(ed&&ed.plugins.contextmenu){ed.plugins.contextmenu.onContextMenu.add(function(th,m,e){if(e.nodeName=='IMG'&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(e.className)){m.add({title:'media.edit',icon:'media',cmd:'mceMedia'});}});}});ed.onBeforeSetContent.add(t._objectsToSpans,t);ed.onSetContent.add(function(){t._spansToImgs(ed.getBody());});ed.onPreProcess.add(function(ed,o){var dom=ed.dom;if(o.set){t._spansToImgs(o.node);each(dom.select('IMG',o.node),function(n){var p;if(isMediaElm(n)){p=t._parse(n.title);dom.setAttrib(n,'width',dom.getAttrib(n,'width',p.width||100));dom.setAttrib(n,'height',dom.getAttrib(n,'height',p.height||100));}});}if(o.get){each(dom.select('IMG',o.node),function(n){var ci,cb,mt;if(ed.getParam('media_use_script')){if(isMediaElm(n))n.className=n.className.replace(/mceItem/g,'mceTemp');return;}switch(n.className){case'mceItemFlash':ci='d27cdb6e-ae6d-11cf-96b8-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='application/x-shockwave-flash';break;case'mceItemShockWave':ci='166b1bca-3f9c-11cf-8075-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';mt='application/x-director';break;case'mceItemWindowsMedia':ci=ed.getParam('media_wmp6_compatible')?'05589fa1-c356-11ce-bf01-00aa0055595a':'6bf52a52-394a-11d3-b153-00c04f79faa6';cb='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';mt='application/x-mplayer2';break;case'mceItemQuickTime':ci='02bf25d5-8c17-4b23-bc80-d3488abddc6b';cb='http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';mt='video/quicktime';break;case'mceItemRealMedia':ci='cfcdaa03-8be4-11cf-b84b-0020afbbccfa';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='audio/x-pn-realaudio-plugin';break;}if(ci){dom.replace(t._buildObj({classid:ci,codebase:cb,type:mt},n),n);}});}});ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/_mce_value=/g,'value=');});if(ed.getParam('media_use_script')){function getAttr(s,n){n=new RegExp(n+'=\"([^\"]+)\"','g').exec(s);return n?ed.dom.decode(n[1]):'';};ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/<img[^>]+>/g,function(im){var cl=getAttr(im,'class');if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(cl)){at=t._parse(getAttr(im,'title'));at.width=getAttr(im,'width');at.height=getAttr(im,'height');im='<script type="text/javascript">write'+cl.substring(7)+'({'+t._serialize(at)+'});</script>';}return im;});});}},getInfo:function(){return{longname:'Media',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_objectsToSpans:function(ed,o){var t=this,h=o.content;h=h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,function(a,b,c){var o=t._parse(c);return'<img class="mceItem'+b+'" title="'+ed.dom.encode(c)+'" src="'+t.url+'/img/trans.gif" width="'+o.width+'" height="'+o.height+'" />'});h=h.replace(/<object([^>]*)>/gi,'<span class="mceItemObject" $1>');h=h.replace(/<embed([^>]*)\/?>/gi,'<span class="mceItemEmbed" $1></span>');h=h.replace(/<embed([^>]*)>/gi,'<span class="mceItemEmbed" $1>');h=h.replace(/<\/(object)([^>]*)>/gi,'</span>');h=h.replace(/<\/embed>/gi,'');h=h.replace(/<param([^>]*)>/gi,function(a,b){return'<span '+b.replace(/value=/gi,'_mce_value=')+' class="mceItemParam"></span>'});h=h.replace(/\/ class=\"mceItemParam\"><\/span>/gi,'class="mceItemParam"></span>');o.content=h;},_buildObj:function(o,n){var ob,ed=this.editor,dom=ed.dom,p=this._parse(n.title),stc;stc=ed.getParam('media_strict',true)&&o.type=='application/x-shockwave-flash';p.width=o.width=dom.getAttrib(n,'width')||100;p.height=o.height=dom.getAttrib(n,'height')||100;if(p.src)p.src=ed.convertURL(p.src,'src',n);if(stc){ob=dom.create('span',{mce_name:'object',type:'application/x-shockwave-flash',data:p.src,width:o.width,height:o.height});}else{ob=dom.create('span',{mce_name:'object',classid:"clsid:"+o.classid,codebase:o.codebase,width:o.width,height:o.height});}each(p,function(v,k){if(!/^(width|height|codebase|classid|_cx|_cy)$/.test(k)){if(o.type=='application/x-mplayer2'&&k=='src')k='url';if(v)dom.add(ob,'span',{mce_name:'param',name:k,'_mce_value':v});}});if(!stc)dom.add(ob,'span',tinymce.extend({mce_name:'embed',type:o.type},p));return ob;},_spansToImgs:function(p){var t=this,dom=t.editor.dom,im,ci;each(dom.select('span',p),function(n){if(dom.getAttrib(n,'class')=='mceItemObject'){ci=dom.getAttrib(n,"classid").toLowerCase().replace(/\s+/g,'');switch(ci){case'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':dom.replace(t._createImg('mceItemFlash',n),n);break;case'clsid:166b1bca-3f9c-11cf-8075-444553540000':dom.replace(t._createImg('mceItemShockWave',n),n);break;case'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':case'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':case'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':dom.replace(t._createImg('mceItemWindowsMedia',n),n);break;case'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':dom.replace(t._createImg('mceItemQuickTime',n),n);break;case'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':dom.replace(t._createImg('mceItemRealMedia',n),n);break;default:dom.replace(t._createImg('mceItemFlash',n),n);}return;}if(dom.getAttrib(n,'class')=='mceItemEmbed'){switch(dom.getAttrib(n,'type')){case'application/x-shockwave-flash':dom.replace(t._createImg('mceItemFlash',n),n);break;case'application/x-director':dom.replace(t._createImg('mceItemShockWave',n),n);break;case'application/x-mplayer2':dom.replace(t._createImg('mceItemWindowsMedia',n),n);break;case'video/quicktime':dom.replace(t._createImg('mceItemQuickTime',n),n);break;case'audio/x-pn-realaudio-plugin':dom.replace(t._createImg('mceItemRealMedia',n),n);break;default:dom.replace(t._createImg('mceItemFlash',n),n);}}});},_createImg:function(cl,n){var im,dom=this.editor.dom,pa={},ti='',args;args=['id','name','width','height','bgcolor','align','flashvars','src','wmode','allowfullscreen','quality'];im=dom.create('img',{src:this.url+'/img/trans.gif',width:dom.getAttrib(n,'width')||100,height:dom.getAttrib(n,'height')||100,'class':cl});each(args,function(na){var v=dom.getAttrib(n,na);if(v)pa[na]=v;});each(dom.select('span',n),function(n){if(dom.hasClass(n,'mceItemParam'))pa[dom.getAttrib(n,'name')]=dom.getAttrib(n,'_mce_value');});if(pa.movie){pa.src=pa.movie;delete pa.movie;}n=dom.select('.mceItemEmbed',n)[0];if(n){each(args,function(na){var v=dom.getAttrib(n,na);if(v&&!pa[na])pa[na]=v;});}delete pa.width;delete pa.height;im.title=this._serialize(pa);return im;},_parse:function(s){return tinymce.util.JSON.parse('{'+s+'}');},_serialize:function(o){return tinymce.util.JSON.serialize(o).replace(/[{}]/g,'');}});tinymce.PluginManager.add('media',tinymce.plugins.MediaPlugin);})();
\ No newline at end of file
+(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.MediaPlugin",{init:function(b,c){var e=this;e.editor=b;e.url=c;function f(g){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(g.className)}b.onPreInit.add(function(){b.serializer.addRules("param[name|value|_mce_value]")});b.addCommand("mceMedia",function(){b.windowManager.open({file:c+"/media.htm",width:430+parseInt(b.getLang("media.delta_width",0)),height:470+parseInt(b.getLang("media.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("media",{title:"media.desc",cmd:"mceMedia"});b.onNodeChange.add(function(h,g,i){g.setActive("media",i.nodeName=="IMG"&&f(i))});b.onInit.add(function(){var g={mceItemFlash:"flash",mceItemShockWave:"shockwave",mceItemWindowsMedia:"windowsmedia",mceItemQuickTime:"quicktime",mceItemRealMedia:"realmedia"};b.selection.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.selection.onBeforeSetContent.add(e._objectsToSpans,e);if(b.settings.content_css!==false){b.dom.loadCSS(c+"/css/content.css")}if(b.theme&&b.theme.onResolveName){b.theme.onResolveName.add(function(h,i){if(i.name=="img"){a(g,function(l,j){if(b.dom.hasClass(i.node,j)){i.name=l;i.title=b.dom.getAttrib(i.node,"title");return false}})}})}if(b&&b.plugins.contextmenu){b.plugins.contextmenu.onContextMenu.add(function(i,h,j){if(j.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(j.className)){h.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});b.onBeforeSetContent.add(e._objectsToSpans,e);b.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.onPreProcess.add(function(g,i){var h=g.dom;if(i.set){e._spansToImgs(i.node);a(h.select("IMG",i.node),function(k){var j;if(f(k)){j=e._parse(k.title);h.setAttrib(k,"width",h.getAttrib(k,"width",j.width||100));h.setAttrib(k,"height",h.getAttrib(k,"height",j.height||100))}})}if(i.get){a(h.select("IMG",i.node),function(m){var l,j,k;if(g.getParam("media_use_script")){if(f(m)){m.className=m.className.replace(/mceItem/g,"mceTemp")}return}switch(m.className){case"mceItemFlash":l="d27cdb6e-ae6d-11cf-96b8-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="application/x-shockwave-flash";break;case"mceItemShockWave":l="166b1bca-3f9c-11cf-8075-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0";k="application/x-director";break;case"mceItemWindowsMedia":l=g.getParam("media_wmp6_compatible")?"05589fa1-c356-11ce-bf01-00aa0055595a":"6bf52a52-394a-11d3-b153-00c04f79faa6";j="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701";k="application/x-mplayer2";break;case"mceItemQuickTime":l="02bf25d5-8c17-4b23-bc80-d3488abddc6b";j="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0";k="video/quicktime";break;case"mceItemRealMedia":l="cfcdaa03-8be4-11cf-b84b-0020afbbccfa";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="audio/x-pn-realaudio-plugin";break}if(l){h.replace(e._buildObj({classid:l,codebase:j,type:k},m),m)}})}});b.onPostProcess.add(function(g,h){h.content=h.content.replace(/_mce_value=/g,"value=")});function d(g,h){h=new RegExp(h+'="([^"]+)"',"g").exec(g);return h?b.dom.decode(h[1]):""}b.onPostProcess.add(function(g,h){if(g.getParam("media_use_script")){h.content=h.content.replace(/<img[^>]+>/g,function(j){var i=d(j,"class");if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(i)){at=e._parse(d(j,"title"));at.width=d(j,"width");at.height=d(j,"height");j='<script type="text/javascript">write'+i.substring(7)+"({"+e._serialize(at)+"});<\/script>"}return j})}})},getInfo:function(){return{longname:"Media",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_objectsToSpans:function(b,e){var c=this,d=e.content;d=d.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,function(g,f,i){var h=c._parse(i);return'<img class="mceItem'+f+'" title="'+b.dom.encode(i)+'" src="'+c.url+'/img/trans.gif" width="'+h.width+'" height="'+h.height+'" />'});d=d.replace(/<object([^>]*)>/gi,'<span class="mceItemObject" $1>');d=d.replace(/<embed([^>]*)\/?>/gi,'<span class="mceItemEmbed" $1></span>');d=d.replace(/<embed([^>]*)>/gi,'<span class="mceItemEmbed" $1>');d=d.replace(/<\/(object)([^>]*)>/gi,"</span>");d=d.replace(/<\/embed>/gi,"");d=d.replace(/<param([^>]*)>/gi,function(g,f){return"<span "+f.replace(/value=/gi,"_mce_value=")+' class="mceItemParam"></span>'});d=d.replace(/\/ class=\"mceItemParam\"><\/span>/gi,'class="mceItemParam"></span>');e.content=d},_buildObj:function(g,h){var d,c=this.editor,f=c.dom,e=this._parse(h.title),b;b=c.getParam("media_strict",true)&&g.type=="application/x-shockwave-flash";e.width=g.width=f.getAttrib(h,"width")||100;e.height=g.height=f.getAttrib(h,"height")||100;if(e.src){e.src=c.convertURL(e.src,"src",h)}if(b){d=f.create("span",{id:e.id,_mce_name:"object",type:"application/x-shockwave-flash",data:e.src,style:f.getAttrib(h,"style"),width:g.width,height:g.height})}else{d=f.create("span",{id:e.id,_mce_name:"object",classid:"clsid:"+g.classid,style:f.getAttrib(h,"style"),codebase:g.codebase,width:g.width,height:g.height})}a(e,function(j,i){if(!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(i)){if(g.type=="application/x-mplayer2"&&i=="src"&&!e.url){i="url"}if(j){f.add(d,"span",{_mce_name:"param",name:i,_mce_value:j})}}});if(!b){f.add(d,"span",tinymce.extend({_mce_name:"embed",type:g.type,style:f.getAttrib(h,"style")},e))}return d},_spansToImgs:function(e){var d=this,f=d.editor.dom,b,c;a(f.select("span",e),function(g){if(f.getAttrib(g,"class")=="mceItemObject"){c=f.getAttrib(g,"classid").toLowerCase().replace(/\s+/g,"");switch(c){case"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000":f.replace(d._createImg("mceItemFlash",g),g);break;case"clsid:166b1bca-3f9c-11cf-8075-444553540000":f.replace(d._createImg("mceItemShockWave",g),g);break;case"clsid:6bf52a52-394a-11d3-b153-00c04f79faa6":case"clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95":case"clsid:05589fa1-c356-11ce-bf01-00aa0055595a":f.replace(d._createImg("mceItemWindowsMedia",g),g);break;case"clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b":f.replace(d._createImg("mceItemQuickTime",g),g);break;case"clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa":f.replace(d._createImg("mceItemRealMedia",g),g);break;default:f.replace(d._createImg("mceItemFlash",g),g)}return}if(f.getAttrib(g,"class")=="mceItemEmbed"){switch(f.getAttrib(g,"type")){case"application/x-shockwave-flash":f.replace(d._createImg("mceItemFlash",g),g);break;case"application/x-director":f.replace(d._createImg("mceItemShockWave",g),g);break;case"application/x-mplayer2":f.replace(d._createImg("mceItemWindowsMedia",g),g);break;case"video/quicktime":f.replace(d._createImg("mceItemQuickTime",g),g);break;case"audio/x-pn-realaudio-plugin":f.replace(d._createImg("mceItemRealMedia",g),g);break;default:f.replace(d._createImg("mceItemFlash",g),g)}}})},_createImg:function(c,h){var b,g=this.editor.dom,f={},e="",d;d=["id","name","width","height","bgcolor","align","flashvars","src","wmode","allowfullscreen","quality","data"];b=g.create("img",{src:this.url+"/img/trans.gif",width:g.getAttrib(h,"width")||100,height:g.getAttrib(h,"height")||100,style:g.getAttrib(h,"style"),"class":c});a(d,function(i){var j=g.getAttrib(h,i);if(j){f[i]=j}});a(g.select("span",h),function(i){if(g.hasClass(i,"mceItemParam")){f[g.getAttrib(i,"name")]=g.getAttrib(i,"_mce_value")}});if(f.movie){f.src=f.movie;delete f.movie}if(!f.src){f.src=f.data;delete f.data}h=g.select(".mceItemEmbed",h)[0];if(h){a(d,function(i){var j=g.getAttrib(h,i);if(j&&!f[i]){f[i]=j}})}delete f.width;delete f.height;b.title=this._serialize(f);return b},_parse:function(b){return tinymce.util.JSON.parse("{"+b+"}")},_serialize:function(b){return tinymce.util.JSON.serialize(b).replace(/[{}]/g,"")}});tinymce.PluginManager.add("media",tinymce.plugins.MediaPlugin)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
if (ed.settings.content_css !== false)\r
ed.dom.loadCSS(url + "/css/content.css");\r
\r
- if (ed.theme.onResolveName) {\r
+ if (ed.theme && ed.theme.onResolveName) {\r
ed.theme.onResolveName.add(function(th, o) {\r
if (o.name == 'img') {\r
each(lo, function(v, k) {\r
o.content = o.content.replace(/_mce_value=/g, 'value=');\r
});\r
\r
- if (ed.getParam('media_use_script')) {\r
- function getAttr(s, n) {\r
- n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);\r
+ function getAttr(s, n) {\r
+ n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);\r
\r
- return n ? ed.dom.decode(n[1]) : '';\r
- };\r
+ return n ? ed.dom.decode(n[1]) : '';\r
+ };\r
\r
- ed.onPostProcess.add(function(ed, o) {\r
+ ed.onPostProcess.add(function(ed, o) {\r
+ if (ed.getParam('media_use_script')) {\r
o.content = o.content.replace(/<img[^>]+>/g, function(im) {\r
var cl = getAttr(im, 'class');\r
\r
\r
return im;\r
});\r
- });\r
- }\r
+ }\r
+ });\r
},\r
\r
getInfo : function() {\r
\r
if (stc) {\r
ob = dom.create('span', {\r
- mce_name : 'object',\r
+ id : p.id,\r
+ _mce_name : 'object',\r
type : 'application/x-shockwave-flash',\r
data : p.src,\r
+ style : dom.getAttrib(n, 'style'),\r
width : o.width,\r
height : o.height\r
});\r
} else {\r
ob = dom.create('span', {\r
- mce_name : 'object',\r
+ id : p.id,\r
+ _mce_name : 'object',\r
classid : "clsid:" + o.classid,\r
+ style : dom.getAttrib(n, 'style'),\r
codebase : o.codebase,\r
width : o.width,\r
height : o.height\r
}\r
\r
each (p, function(v, k) {\r
- if (!/^(width|height|codebase|classid|_cx|_cy)$/.test(k)) {\r
+ if (!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(k)) {\r
// Use url instead of src in IE for Windows media\r
- if (o.type == 'application/x-mplayer2' && k == 'src')\r
+ if (o.type == 'application/x-mplayer2' && k == 'src' && !p.url)\r
k = 'url';\r
\r
if (v)\r
- dom.add(ob, 'span', {mce_name : 'param', name : k, '_mce_value' : v});\r
+ dom.add(ob, 'span', {_mce_name : 'param', name : k, '_mce_value' : v});\r
}\r
});\r
\r
if (!stc)\r
- dom.add(ob, 'span', tinymce.extend({mce_name : 'embed', type : o.type}, p));\r
+ dom.add(ob, 'span', tinymce.extend({_mce_name : 'embed', type : o.type, style : dom.getAttrib(n, 'style')}, p));\r
\r
return ob;\r
},\r
_createImg : function(cl, n) {\r
var im, dom = this.editor.dom, pa = {}, ti = '', args;\r
\r
- args = ['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode', 'allowfullscreen', 'quality']; \r
+ args = ['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode', 'allowfullscreen', 'quality', 'data']; \r
\r
// Create image\r
im = dom.create('img', {\r
src : this.url + '/img/trans.gif',\r
width : dom.getAttrib(n, 'width') || 100,\r
height : dom.getAttrib(n, 'height') || 100,\r
+ style : dom.getAttrib(n, 'style'),\r
'class' : cl\r
});\r
\r
delete pa.movie;\r
}\r
\r
+ // No src try data\r
+ if (!pa.src) {\r
+ pa.src = pa.data;\r
+ delete pa.data;\r
+ }\r
+\r
// Merge with embed args\r
n = dom.select('.mceItemEmbed', n)[0];\r
if (n) {\r
\r
// Register plugin\r
tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin);\r
-})();\r
+})();
\ No newline at end of file
break;\r
}\r
\r
- if (fe.width != f.width.value || fe.height != f.height.height)\r
+ if (fe.width != f.width.value || fe.height != f.height.value)\r
ed.execCommand('mceRepaint');\r
\r
fe.title = serializeParameters();\r
if (typeof(pl[n]) == "undefined")\r
return;\r
\r
- document.forms[0].elements[p + "_" + n].checked = pl[n];\r
+ document.forms[0].elements[p + "_" + n].checked = pl[n] != 'false';\r
}\r
\r
function setStr(pl, p, n) {\r
tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";\r
fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";\r
\r
- return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ',');\r
+ return (v == d) ? '' : n + (v ? ':' + tv + ',' : ":\'" + fv + "\',");\r
}\r
\r
function getStr(p, n, d) {\r
tinyMCE.addI18n('de.media_dlg',{\r
-title:"Multimedia-Inhalte einf\u00FCgen / bearbeiten",\r
+title:"Multimedia-Inhalte einf\u00FCgen/bearbeiten",\r
general:"Allgemein",\r
advanced:"Erweitert",\r
file:"Datei/URL",\r
sound:"Ton",\r
progress:"Fortschritt",\r
qtsrc:"QT Src",\r
-qt_stream_warn:"In den Erweiterten Einstellungen sollten im Feld 'QT Src' gestreamte rtsp Resourcen hinzugef\u00FCgt werden.\nzus\u00E4tzlich sollten Sie dort auch eine nicht-gestreamte Resource angeben.",\r
+qt_stream_warn:"In den Erweiterten Einstellungen sollten im Feld 'QT Src' gestreamte RTSP Resourcen hinzugef\u00FCgt werden.\nZus\u00E4tzlich sollten Sie dort auch eine nicht-gestreamte Resource angeben.",\r
align_top:"Oben",\r
align_right:"Rechts",\r
align_bottom:"Unten",\r
--- /dev/null
+tinyMCE.addI18n('et.media_dlg',{\r
+title:"Sisesta/muuda meediat",\r
+general:"\u00DCldine",\r
+advanced:"T\u00E4psem",\r
+file:"Fail/URL",\r
+list:"Nimekiri",\r
+size:"M\u00F5\u00F5dud",\r
+preview:"Eelvaade",\r
+constrain_proportions:"S\u00E4ilita proportsioon",\r
+type:"T\u00FC\u00FCp",\r
+id:"ID",\r
+name:"Nime",\r
+class_name:"Klass",\r
+vspace:"V-vahe",\r
+hspace:"H-vahe",\r
+play:"Auto-start",\r
+loop:"Auto-kordus",\r
+menu:"N\u00E4ita men\u00FC\u00FCd",\r
+quality:"Kvaliteet",\r
+scale:"M\u00F5\u00F5tkava",\r
+align:"Joondus",\r
+salign:"SJoondus",\r
+wmode:"WMoodus",\r
+bgcolor:"Taust",\r
+base:"Baas",\r
+flashvars:"Flashiv\u00E4rk",\r
+liveconnect:"SWLive-\u00DChendus",\r
+autohref:"Auto-HREF",\r
+cache:"Vahem\u00E4lu",\r
+hidden:"Peidetud",\r
+controller:"Kontrollija",\r
+kioskmode:"Kioski reziim",\r
+playeveryframe:"M\u00E4ngi igat raami",\r
+targetcache:"Sihtm\u00E4rgi vahem\u00E4lu",\r
+correction:"Parandust ei ole",\r
+enablejavascript:"Luba JavaScript\u2019i",\r
+starttime:"Stardi aeg",\r
+endtime:"L\u00F5pu aeg",\r
+href:"Href",\r
+qtsrcchokespeed:"Kiirus",\r
+target:"Sihtm\u00E4rk",\r
+volume:"Valjudus",\r
+autostart:"Auto-start",\r
+enabled:"Lubatud",\r
+fullscreen:"T\u00E4isekraan",\r
+invokeurls:"N\u00E4ita URL\u2019e",\r
+mute:"Vaigista",\r
+stretchtofit:"Venita sobivaks",\r
+windowlessvideo:"Aknata video",\r
+balance:"Tasakaal",\r
+baseurl:"Baas URL",\r
+captioningid:"Tiitri ID",\r
+currentmarker:"Antud marker",\r
+currentposition:"Antud positioon",\r
+defaultframe:"Vaikimisi raam",\r
+playcount:"M\u00E4ngukorrad",\r
+rate:"Hinda",\r
+uimode:"UI Reziim",\r
+flash_options:"Flash\u2019i seaded",\r
+qt_options:"Quicktime\u2019 seaded",\r
+wmp_options:"Windows media player\u2019i seaded",\r
+rmp_options:"Real media player\u2019i seaded",\r
+shockwave_options:"Shockwave\u2019i seaded",\r
+autogotourl:"Auto-URL",\r
+center:"Keskel",\r
+imagestatus:"Pildi staatus",\r
+maintainaspect:"S\u00E4ilitamise aspekt",\r
+nojava:"Ilma java\u2019ta",\r
+prefetch:"Prefetch",\r
+shuffle:"Sega",\r
+console:"Konsool",\r
+numloop:"Kordused",\r
+controls:"Kontrollid",\r
+scriptcallbacks:"Skripti tagasikutse",\r
+swstretchstyle:"Venita stiili",\r
+swstretchhalign:"Venita H-joondust",\r
+swstretchvalign:"Venita V-joondust",\r
+sound:"Heli",\r
+progress:"Progress",\r
+qtsrc:"QT Src",\r
+qt_stream_warn:"Striimitav variant peaks olema lisatud.",\r
+align_top:"\u00DCleval",\r
+align_right:"Paremal",\r
+align_bottom:"All",\r
+align_left:"Vasakul",\r
+align_center:"Keskel",\r
+align_top_left:"\u00DCleval vasakul",\r
+align_top_right:"Pleval paremal",\r
+align_bottom_left:"All vasakul",\r
+align_bottom_right:"All paremal",\r
+flv_options:"Flash video seaded",\r
+flv_scalemode:"Skaala reziim",\r
+flv_buffer:"Puffer",\r
+flv_startimage:"Stardi pilt",\r
+flv_starttime:"Stardi aeg",\r
+flv_defaultvolume:"Vaikimisi helitugevus",\r
+flv_hiddengui:"Peidetud GUI",\r
+flv_autostart:"Auto-start",\r
+flv_loop:"Auto.kordus",\r
+flv_showscalemodes:"Show scale modes",\r
+flv_smoothvideo:"Sujuv video",\r
+flv_jscallback:"JS tagasikutse"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.media_dlg',{\r
+title:"Ins\u00E9rer / \u00E9diter un fichier m\u00E9dia",\r
+general:"G\u00E9n\u00E9ral",\r
+advanced:"Avanc\u00E9",\r
+file:"Fichier / URL",\r
+list:"Liste",\r
+size:"Dimensions",\r
+preview:"Pr\u00E9visualisation",\r
+constrain_proportions:"Conserver les proportions",\r
+type:"Type",\r
+id:"Id",\r
+name:"Nom",\r
+class_name:"Classe",\r
+vspace:"Espacement vertical",\r
+hspace:"Espacement horizontal",\r
+play:"Lecture automatique",\r
+loop:"Lire en boucle",\r
+menu:"Afficher le menu",\r
+quality:"Qualit\u00E9",\r
+scale:"\u00C9chelle",\r
+align:"Alignement",\r
+salign:"SAlign",\r
+wmode:"WMode",\r
+bgcolor:"Fond",\r
+base:"Base",\r
+flashvars:"Variables flash",\r
+liveconnect:"SWLiveConnect",\r
+autohref:"AutoHREF",\r
+cache:"Cache",\r
+hidden:"Cach\u00E9",\r
+controller:"Contr\u00F4leur",\r
+kioskmode:"Mode kiosque",\r
+playeveryframe:"Jouer toutes les images",\r
+targetcache:"Cache cible",\r
+correction:"Pas de correction",\r
+enablejavascript:"Activer le JavaScript",\r
+starttime:"D\u00E9but",\r
+endtime:"Fin",\r
+href:"Href",\r
+qtsrcchokespeed:"D\u00E9bit maximum",\r
+target:"Cible",\r
+volume:"Volume",\r
+autostart:"Lire automatiquement",\r
+enabled:"Activ\u00E9",\r
+fullscreen:"Plein \u00E9cran",\r
+invokeurls:"Invoquer URLs",\r
+mute:"Muet",\r
+stretchtofit:"\u00C9tendre pour adapter la taille",\r
+windowlessvideo:"Vid\u00E9o sans fen\u00EAtre",\r
+balance:"Balance",\r
+baseurl:"Adresse de base",\r
+captioningid:"Captioning id",\r
+currentmarker:"Marqueur actuel",\r
+currentposition:"Position actuelle",\r
+defaultframe:"Image par d\u00E9faut",\r
+playcount:"Compteur",\r
+rate:"Taux",\r
+uimode:"Mode UI",\r
+flash_options:"Options Flash",\r
+qt_options:"Options Quicktime",\r
+wmp_options:"Windows media player options",\r
+rmp_options:"Options Real media player",\r
+shockwave_options:"Options Shockwave",\r
+autogotourl:"Aller automatiquement \u00E0 l'URL",\r
+center:"Centrer",\r
+imagestatus:"Statut de l'image",\r
+maintainaspect:"Maintenir l'aspect",\r
+nojava:"Pas java",\r
+prefetch:"Pr\u00E9chargement",\r
+shuffle:"Al\u00E9atoire",\r
+console:"Console",\r
+numloop:"Nombre de tours",\r
+controls:"Contr\u00F4les",\r
+scriptcallbacks:"Callback de script",\r
+swstretchstyle:"Stretch style",\r
+swstretchhalign:"Stretch horizontal",\r
+swstretchvalign:"Stretch vertical",\r
+sound:"Son",\r
+progress:"Progression",\r
+qtsrc:"Source QT",\r
+qt_stream_warn:"Les ressources rtsp en streaming doivent \u00EAtre ajout\u00E9es au champ \u00AB Source QT \u00BB dans l'onglet avanc\u00E9.\nVous devriez aussi ajouter une version n'\u00E9tant pas en streaming au champ \u00AB source QT \u00BB.",\r
+align_top:"Haut",\r
+align_right:"Droite",\r
+align_bottom:"Bas",\r
+align_left:"Gauche",\r
+align_center:"Centr\u00E9",\r
+align_top_left:"En haut \u00E0 gauche",\r
+align_top_right:"En haut \u00E0 droite",\r
+align_bottom_left:"En bas \u00E0 gauche",\r
+align_bottom_right:"En bas \u00E0 droite",\r
+flv_options:"Options de la vid\u00E9o Flash",\r
+flv_scalemode:"\u00C9chelle",\r
+flv_buffer:"Tampon",\r
+flv_startimage:"Image de d\u00E9marrage",\r
+flv_starttime:"Temps au d\u00E9but",\r
+flv_defaultvolume:"Volume par d\u00E9faut",\r
+flv_hiddengui:"Interface utilisateur cach\u00E9e",\r
+flv_autostart:"D\u00E9marrage automatique",\r
+flv_loop:"En boucle",\r
+flv_showscalemodes:"Montrer les diff\u00E9rentes \u00E9chelles",\r
+flv_smoothvideo:"Vid\u00E9o adoucie",\r
+flv_jscallback:"Callback JavaScript"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.media_dlg',{\r
+title:"Be\u00E1gyazott m\u00E9dia besz\u00FAr\u00E1sa/szerkeszt\u00E9se",\r
+general:"\u00C1ltal\u00E1nos",\r
+advanced:"Halad\u00F3",\r
+file:"F\u00E1jl/URL",\r
+list:"Lista",\r
+size:"Dimenzi\u00F3k",\r
+preview:"El\u0151n\u00E9zet",\r
+constrain_proportions:"Ar\u00E1nytart\u00E1s",\r
+type:"T\u00EDpus",\r
+id:"Id",\r
+name:"N\u00E9v",\r
+class_name:"Oszt\u00E1ly",\r
+vspace:"F-t\u00E1v",\r
+hspace:"V-t\u00E1v",\r
+play:"Automatikus lej\u00E1tsz\u00E1s",\r
+loop:"Ism\u00E9tl\u00E9s",\r
+menu:"Men\u00FC mutat\u00E1sa",\r
+quality:"Min\u0151s\u00E9g",\r
+scale:"Nagy\u00EDt\u00E1s",\r
+align:"Elrendez\u00E9s",\r
+salign:"SElrendez\u00E9s",\r
+wmode:"WM\u00F3d",\r
+bgcolor:"H\u00E1tt\u00E9r",\r
+base:"Base",\r
+flashvars:"Flashvars",\r
+liveconnect:"SWLiveConnect",\r
+autohref:"AutoHREF",\r
+cache:"Cache",\r
+hidden:"Rejtett",\r
+controller:"Vez\u00E9rl\u0151",\r
+kioskmode:"Kiosk m\u00F3d",\r
+playeveryframe:"Minden kocka lej\u00E1tsz\u00E1sa",\r
+targetcache:"C\u00E9l cache",\r
+correction:"Nincs jav\u00EDt\u00E1s",\r
+enablejavascript:"JavaScript enged\u00E9se",\r
+starttime:"Kezd\u00E9si id\u0151",\r
+endtime:"Z\u00E1r\u00F3 id\u0151",\r
+href:"Href",\r
+qtsrcchokespeed:"Folyt\u00E1s sebess\u00E9ge",\r
+target:"C\u00E9l",\r
+volume:"Hanger\u0151",\r
+autostart:"Automatikus kezd\u00E9s",\r
+enabled:"Enged\u00E9lyezve",\r
+fullscreen:"Teljes k\u00E9perny\u0151",\r
+invokeurls:"URL-ek bevon\u00E1sa",\r
+mute:"N\u00E9ma",\r
+stretchtofit:"Ny\u00FAjtva igaz\u00EDt\u00E1s",\r
+windowlessvideo:"Ablak n\u00E9lk\u00FCli vide\u00F3",\r
+balance:"Balance",\r
+baseurl:"Base URL",\r
+captioningid:"Captioning id",\r
+currentmarker:"Aktu\u00E1lis marker",\r
+currentposition:"Aktu\u00E1lis poz\u00EDci\u00F3",\r
+defaultframe:"Alap\u00E9rtelmezett frame",\r
+playcount:"Lej\u00E1tsz\u00E1ssz\u00E1m",\r
+rate:"Rate",\r
+uimode:"UI M\u00F3d",\r
+flash_options:"Flash be\u00E1ll\u00EDt\u00E1sai",\r
+qt_options:"Quicktime be\u00E1ll\u00EDt\u00E1sai",\r
+wmp_options:"Windows media player be\u00E1ll\u00EDt\u00E1sai",\r
+rmp_options:"Real media player be\u00E1ll\u00EDt\u00E1sai",\r
+shockwave_options:"Shockwave be\u00E1ll\u00EDt\u00E1sai",\r
+autogotourl:"Automatikus URL-re ugr\u00E1s",\r
+center:"K\u00F6z\u00E9pre",\r
+imagestatus:"K\u00E9p \u00E1llapot",\r
+maintainaspect:"Ar\u00E1nytart\u00E1s",\r
+nojava:"Nincs java",\r
+prefetch:"El\u0151t\u00F6lt\u00E9s",\r
+shuffle:"V\u00E9letlenszer\u0171",\r
+console:"Console",\r
+numloop:"Ism\u00E9tl\u00E9ssz\u00E1m",\r
+controls:"Kezel\u0151k",\r
+scriptcallbacks:"Script callbacks",\r
+swstretchstyle:"Ny\u00FAjt\u00E1s st\u00EDlus",\r
+swstretchhalign:"Ny\u00FAjt\u00E1s V-igaz\u00EDt\u00E1s",\r
+swstretchvalign:"Ny\u00FAjt\u00E1s F-igaz\u00EDt\u00E1s",\r
+sound:"Hang",\r
+progress:"Folymat",\r
+qtsrc:"QT Src",\r
+qt_stream_warn:"Streamelt rtsp forr\u00E1sok a QT Src mez\u0151be val\u00F3k a halad\u00F3 lapon.\nHozz\u00E1 kellene adnia egy nem streamelt verzi\u00F3t a Src mez\u0151ben.",\r
+align_top:"Fent",\r
+align_right:"Jobbra",\r
+align_bottom:"Lent",\r
+align_left:"Balra",\r
+align_center:"K\u00F6z\u00E9pen",\r
+align_top_left:"Bal-fent",\r
+align_top_right:"Jobb-fent",\r
+align_bottom_left:"Bal-lent",\r
+align_bottom_right:"Bal-jobbra",\r
+flv_options:"Flash vide\u00F3 be\u00E1ll\u00EDt\u00E1sai",\r
+flv_scalemode:"Nagy\u00EDt\u00E1s m\u00F3d",\r
+flv_buffer:"Buffer",\r
+flv_startimage:"Start k\u00E9p",\r
+flv_starttime:"Start id\u0151",\r
+flv_defaultvolume:"Alap\u00E9rtelmezett hanger\u0151",\r
+flv_hiddengui:"Rejtett GUI",\r
+flv_autostart:"Aut\u00F3 start",\r
+flv_loop:"Ism\u00E9tl\u00E9s",\r
+flv_showscalemodes:"Nagy\u00EDt\u00E1si m\u00F3dok mutat\u00E1sa",\r
+flv_smoothvideo:"Vide\u00F3 sim\u00EDt\u00E1sa",\r
+flv_jscallback:"JS Callback"\r
+});
\ No newline at end of file
flv_buffer:"Buffer",\r
flv_startimage:"Startafbeelding",\r
flv_starttime:"Starttijd",\r
-flv_defaultvolume:"Standaard volumne",\r
+flv_defaultvolume:"Standaard volume",\r
flv_hiddengui:"GUI verbergen",\r
flv_autostart:"Automatisch afspelen",\r
flv_loop:"Herhalen",\r
tinyMCE.addI18n('pt.media_dlg',{\r
-title:"Inserir/Editar m\u00C3\u00ADdia incorporada",\r
+title:"Inserir/Editar m\u00EDdia incorporada",\r
general:"Geral",\r
-advanced:"Avan\u00C3\u00A7ado",\r
+advanced:"Avan\u00E7ado",\r
file:"Arquivo/URL",\r
list:"Lista",\r
-size:"Dimens\u00C3\u00B5es",\r
-preview:"Previs\u00C3\u00A3o",\r
-constrain_proportions:"Manter propor\u00C3\u00A7\u00C3\u00B5es",\r
+size:"Dimens\u00F5es",\r
+preview:"Previs\u00E3o",\r
+constrain_proportions:"Manter propor\u00E7\u00F5es",\r
type:"Tipo",\r
id:"Id",\r
name:"Nome",\r
class_name:"Classe",\r
-vspace:"Espa\u00C3\u00A7o vertical",\r
-hspace:"Espa\u00C3\u00A7o horizontal",\r
-play:"Execu\u00C3\u00A7\u00C3\u00A3o autom\u00C3\u00A1tica",\r
-loop:"Repeti\u00C3\u00A7\u00C3\u00A3o autom\u00C3\u00A1tica",\r
+vspace:"Espa\u00E7o vertical",\r
+hspace:"Espa\u00E7o horizontal",\r
+play:"Execu\u00E7\u00E3o autom\u00E1tica",\r
+loop:"Repeti\u00E7\u00E3o autom\u00E1tica",\r
menu:"Mostrar menu",\r
quality:"Qualidade",\r
scale:"Escala",\r
kioskmode:"Modo Quiosque",\r
playeveryframe:"Executar todas as frames",\r
targetcache:"Cache alvo",\r
-correction:"Sem correc\u00C3\u00A7\u00C3\u00B5es",\r
+correction:"Sem correc\u00E7\u00F5es",\r
enablejavascript:"Disponibilizar javaScript",\r
-starttime:"Hora de in\u00C3\u00ADcio",\r
+starttime:"Hora de in\u00EDcio",\r
endtime:"Hora do fim",\r
href:"Href",\r
qtsrcchokespeed:"Choke speed",\r
target:"Alvo",\r
volume:"Volume",\r
-autostart:"Execu\u00C3\u00A7\u00C3\u00A3o autom\u00C3\u00A1tica",\r
-enabled:"Activado",\r
+autostart:"Execu\u00E7\u00E3o autom\u00E1tica",\r
+enabled:"Ativado",\r
fullscreen:"Tela inteira",\r
invokeurls:"Invocar URLs",\r
mute:"Mudo",\r
stretchtofit:"Estender",\r
-windowlessvideo:"V\u00C3\u00ADdeo sem janela",\r
+windowlessvideo:"V\u00EDdeo sem janela",\r
balance:"Stereo",\r
baseurl:"Base URL",\r
captioningid:"Id de legenda",\r
currentmarker:"Marcador atual",\r
-currentposition:"Posi\u00C3\u00A7\u00C3\u00A3o atual",\r
-defaultframe:"Frame padr\u00C3\u00A3o",\r
+currentposition:"Posi\u00E7\u00E3o atual",\r
+defaultframe:"Frame padr\u00E3o",\r
playcount:"Play count",\r
rate:"Rate",\r
uimode:"UI Mode",\r
-flash_options:"Op\u00C3\u00A7\u00C3\u00B5es Flash",\r
-qt_options:"Op\u00C3\u00A7\u00C3\u00B5es Quicktime",\r
-wmp_options:"Op\u00C3\u00A7\u00C3\u00B5es Windows Media Player",\r
-rmp_options:"Op\u00C3\u00A7\u00C3\u00B5es Real Media Player",\r
-shockwave_options:"Op\u00C3\u00A7\u00C3\u00B5es Shockwave",\r
+flash_options:"Op\u00E7\u00F5es Flash",\r
+qt_options:"Op\u00E7\u00F5es Quicktime",\r
+wmp_options:"Op\u00E7\u00F5es Windows Media Player",\r
+rmp_options:"Op\u00E7\u00F5es Real Media Player",\r
+shockwave_options:"Op\u00E7\u00F5es Shockwave",\r
autogotourl:"Auto goto URL",\r
center:"Centro",\r
imagestatus:"Status da imagem",\r
sound:"Som",\r
progress:"Progresso",\r
qtsrc:"QT Src",\r
-qt_stream_warn:"Fluxos de recursos rtsp devem ser acrescentados ao campo QT Src no Modo Avan\u00C3\u00A7ado.\Numa vers\u00C3\u00A3o sem fluxo tamb\u00C3\u00A9m deve ser acrescentada ao campo Src.",\r
+qt_stream_warn:"Fluxos de recursos rtsp devem ser acrescentados ao campo QT Src no Modo Avan\u00E7ado.\Numa vers\u00E3o sem fluxo tamb\u00E9m deve ser acrescentada ao campo Src.",\r
align_top:"Topo",\r
align_right:"Direita",\r
align_bottom:"Abaixo",\r
align_left:"Esquerda",\r
align_center:"Centro",\r
-align_top_left:"Topo \u00C3\u00A0 esquerda",\r
-align_top_right:"Topo \u00C3\u00A0 direita",\r
-align_bottom_left:"Abaixo \u00C3\u00A0 esquerda",\r
-align_bottom_right:"Abaixo \u00C3\u00A0 direita",\r
-flv_options:"Op\u00C3\u00A7\u00C3\u00B5es de Flash video",\r
+align_top_left:"Topo esquerda",\r
+align_top_right:"Topo direita",\r
+align_bottom_left:"Abaixo esquerda",\r
+align_bottom_right:"Abaixo direita",\r
+flv_options:"Op\u00E7\u00F5es de Flash video",\r
flv_scalemode:"Modo escala",\r
flv_buffer:"Buffer",\r
flv_startimage:"Imagem inicial",\r
flv_starttime:"Hora inicial",\r
-flv_defaultvolume:"Volume padr\u00C3\u00A3o",\r
+flv_defaultvolume:"Volume padr\u00E3o",\r
flv_hiddengui:"GUI oculta",\r
-flv_autostart:"Execu\u00C3\u00A7\u00C3\u00A3o Autom\u00C3\u00A1tica",\r
+flv_autostart:"Execu\u00E7\u00E3o Autom\u00E1tica",\r
flv_loop:"Loop",\r
flv_showscalemodes:"Mostrar modos escala",\r
flv_smoothvideo:"Smooth video",\r
--- /dev/null
+tinyMCE.addI18n('ru.media_dlg',{\r
+title:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043A\u043B\u0438\u043F\u0430",\r
+general:"\u041E\u0431\u0449\u0435\u0435",\r
+advanced:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E",\r
+file:"\u0410\u0434\u0440\u0435\u0441",\r
+list:"\u0421\u043F\u0438\u0441\u043E\u043A",\r
+size:"\u0420\u0430\u0437\u043C\u0435\u0440\u044B",\r
+preview:"\u041F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440",\r
+constrain_proportions:"\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043F\u0440\u043E\u043F\u043E\u0440\u0446\u0438\u0438",\r
+type:"\u0422\u0438\u043F",\r
+id:"\u0418\u043C\u044F",\r
+name:"\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435",\r
+class_name:"\u041A\u043B\u0430\u0441\u0441",\r
+vspace:"\u0412\u0435\u0440\u0442. \u043E\u0442\u0441\u0442\u0443\u043F",\r
+hspace:"\u0413\u043E\u0440. \u043E\u0442\u0441\u0442\u0443\u043F",\r
+play:"\u0410\u0432\u0442\u0437\u0430\u043F\u0443\u0441\u043A",\r
+loop:"\u041F\u043E\u0432\u0442\u043E\u0440",\r
+menu:"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043C\u0435\u043D\u044E",\r
+quality:"\u041A\u0430\u0447\u0435\u0441\u0442\u0432\u043E",\r
+scale:"\u041E\u0431\u043B\u0430\u0441\u0442\u044C",\r
+align:"\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435",\r
+salign:"\u0412\u044B\u0440-\u0435",\r
+wmode:"\u041E\u043A\u043D\u043E",\r
+bgcolor:"\u0424\u043E\u043D",\r
+base:"Base",\r
+flashvars:"Flas \u043A\u043E\u043C\u0430\u043D\u0434\u044B",\r
+liveconnect:"SWLiveConnect",\r
+autohref:"\u0410\u0432\u0442\u043E-\u0441\u0441\u044B\u043B\u043A\u0430",\r
+cache:"\u041A\u044D\u0448",\r
+hidden:"\u0421\u043A\u0440\u044B\u0442\u044B\u0439",\r
+controller:"\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435",\r
+kioskmode:"\u0420\u0435\u0436\u0438\u043C \u043A\u0438\u043E\u0441\u043A",\r
+playeveryframe:"\u0412\u043E\u0441\u043F\u0440\u043E\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043A\u0430\u0436\u0434\u044B\u0439 \u043A\u0430\u0434\u0440",\r
+targetcache:"\u041A\u044D\u0448 \u0446\u0435\u043B\u0438",\r
+correction:"\u0411\u0435\u0437 \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u0438\u0440\u043E\u0432\u043A\u0438",\r
+enablejavascript:"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C JavaScript",\r
+starttime:"\u0412\u0440\u0435\u043C\u044F \u043D\u0430\u0447\u0430\u043B\u0430",\r
+endtime:"\u0412\u0440\u0435\u043C\u044F \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F",\r
+href:"\u0421\u0441\u044B\u043B\u043A\u0430",\r
+qtsrcchokespeed:"Choke speed",\r
+target:"\u0426\u0435\u043B\u044C",\r
+volume:"\u0413\u0440\u043E\u043C\u043A\u043E\u0441\u0442\u044C",\r
+autostart:"\u0410\u0432\u0442\u043E\u0437\u0430\u043F\u0443\u0441\u043A",\r
+enabled:"\u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E",\r
+fullscreen:"\u041D\u0430 \u0432\u0435\u0441\u044C \u044D\u043A\u0440\u0430\u043D",\r
+invokeurls:"\u0412\u044B\u0437\u0432\u0430\u0442\u044C \u0430\u0434\u0440\u0435\u0441",\r
+mute:"\u0411\u0435\u0437 \u0437\u0432\u0443\u043A\u0430",\r
+stretchtofit:"\u041F\u043E\u0434 \u0440\u0430\u0437\u043C\u0435\u0440 \u043E\u043A\u043D\u0430",\r
+windowlessvideo:"\u041E\u043A\u043E\u043D\u043D\u043E\u0435 \u0432\u0438\u0434\u0435\u043E",\r
+balance:"\u0411\u0430\u043B\u0430\u043D\u0441",\r
+baseurl:"\u0411\u0430\u0437\u043E\u0440\u0432\u044B\u0439 \u0430\u0434\u0440\u0435\u0441",\r
+captioningid:"\u0418\u043C\u044F \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043E\u0432",\r
+currentmarker:"\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u043C\u0430\u0440\u043A\u0435\u0440",\r
+currentposition:"\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u043F\u043E\u0437\u0438\u0446\u0438\u044F",\r
+defaultframe:"\u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043A\u0430\u0434\u0440",\r
+playcount:"\u0429\u0435\u0442\u0447\u0438\u043A \u0432\u043E\u0441\u043F\u0440\u043E\u0438\u0437\u0432\u0435\u0434\u0435\u043D\u0438\u0439",\r
+rate:"\u0420\u0435\u0439\u0442\u0438\u043D\u0433",\r
+uimode:"\u0420\u0435\u0436\u0438\u043C \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430",\r
+flash_options:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B Flash",\r
+qt_options:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B Quicktime",\r
+wmp_options:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B Windows Media",\r
+rmp_options:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B Real Media",\r
+shockwave_options:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B Shockwave",\r
+autogotourl:"\u0410\u0432\u0442\u043E\u043F\u0435\u0440\u0435\u0445\u043E\u0434 \u043D\u0430 \u0430\u0434\u0440\u0435\u0441",\r
+center:"\u0426\u0435\u043D\u0442\u0440",\r
+imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F",\r
+maintainaspect:"\u0417\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C \u0440\u0430\u0437\u043C\u0435\u0440",\r
+nojava:"\u0411\u0435\u0437 Java",\r
+prefetch:"\u0423\u043F\u0440\u0435\u0436\u0434\u0430\u044E\u0449\u0430\u044F \u0432\u044B\u0431\u043E\u0440\u043A\u0430",\r
+shuffle:"\u0412 \u0440\u0430\u0437\u0431\u0440\u043E\u0441",\r
+console:"\u041A\u043E\u043D\u0441\u043E\u043B\u044C",\r
+numloop:"\u041F\u043E\u0432\u0442\u043E\u0440\u044B",\r
+controls:"\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435",\r
+scriptcallbacks:"\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430 \u0441\u043A\u0440\u0438\u043F\u0442\u0430",\r
+swstretchstyle:"\u0421\u0442\u0438\u043B\u044C \u0440\u0430\u0441\u0442\u044F\u0436\u0435\u043D\u0438\u0435",\r
+swstretchhalign:"\u0413\u043E\u0440. \u0432\u044B\u0440-\u0435 \u0440\u0430\u0441\u0442\u044F\u0436\u0435\u043D\u0438\u044F",\r
+swstretchvalign:"\u0412\u0435\u0440. \u0432\u044B\u0440-\u0435 \u0440\u0430\u0441\u0442\u044F\u0436\u0435\u043D\u0438\u044F",\r
+sound:"\u0417\u0432\u0443\u043A",\r
+progress:"\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441",\r
+qtsrc:"QT Src",\r
+qt_stream_warn:"\u041F\u043E\u0442\u043E\u043A\u043E\u0432\u044B\u0435 rtsp \u0440\u0435\u0441\u0443\u0440\u0441\u044B \u0434\u043E\u043B\u0436\u043D\u044B \u0431\u044B\u0442\u044C \u0432 \u043F\u043E\u043B\u0435 QT Src.",\r
+align_top:"\u041F\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_right:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_bottom:"\u041F\u043E \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_left:"\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_center:"\u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443",\r
+align_top_left:"\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_top_right:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_bottom_left:"\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_bottom_right:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+flv_options:"\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 Flash",\r
+flv_scalemode:"\u041C\u0430\u0441\u0448\u0442\u0430\u0431",\r
+flv_buffer:"\u0411\u0443\u0444\u0435\u0440",\r
+flv_startimage:"\u0421\u0442\u0430\u0440\u0442\u043E\u0432\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435",\r
+flv_starttime:"\u0421\u0442\u0430\u0440\u0442\u043E\u0432\u043E\u0435 \u0432\u0440\u0435\u043C\u044F",\r
+flv_defaultvolume:"\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0437\u0432\u0443\u043A",\r
+flv_hiddengui:"\u0421\u043A\u0440\u044B\u0442\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441",\r
+flv_autostart:"\u0410\u0432\u0442\u043E\u0437\u0430\u043F\u0443\u0441\u043A",\r
+flv_loop:"\u041F\u043E\u0432\u0442\u043E\u0440",\r
+flv_showscalemodes:"\u0420\u0435\u0436\u0438\u043C \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0430",\r
+flv_smoothvideo:"\u041F\u043B\u0430\u0432\u043D\u043E\u0435 \u0432\u0438\u0434\u0435\u043E",\r
+flv_jscallback:"\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430 JS"\r
+});
\ No newline at end of file
<script type="text/javascript" src="../../utils/form_utils.js"></script>\r
<script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
<link href="css/media.css" rel="stylesheet" type="text/css" />\r
- <base target="_self" />\r
</head>\r
<body style="display: none">\r
<form onsubmit="insertMedia();return false;" action="#">\r
</tr>\r
<tr id="linklistrow">\r
<td><label for="linklist">{#media_dlg.list}</label></td>\r
- <td id="linklistcontainer"> </td>\r
+ <td id="linklistcontainer"><select id="linklist"><option value=""></option></select></td>\r
</tr>\r
<tr>\r
<td><label for="width">{#media_dlg.size}</label></td>\r
<td><label for="flv_defaultvolume">{#media_dlg.flv_defaultvolume}</label></td>\r
<td><input type="text" id="flv_defaultvolume" name="flv_defaultvolume" onchange="generatePreview();" /></td>\r
\r
- <td><label for="flv_starttime">{#media_dlg.flv_starttime}</label></td>\r
- <td><input type="text" id="flv_starttime" name="flv_starttime" onchange="generatePreview();" /></td>\r
+\r
</tr>\r
\r
<tr>\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#insert}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
-(function(){tinymce.create('tinymce.plugins.Nonbreaking',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceNonBreaking',function(){ed.execCommand('mceInsertContent',false,(ed.plugins.visualchars&&ed.plugins.visualchars.state)?'<span class="mceItemHidden mceVisualNbsp">·</span>':' ');});ed.addButton('nonbreaking',{title:'nonbreaking.nonbreaking_desc',cmd:'mceNonBreaking'});if(ed.getParam('nonbreaking_force_tab')){ed.onKeyDown.add(function(ed,e){if(tinymce.isIE&&e.keyCode==9){ed.execCommand('mceNonBreaking');ed.execCommand('mceNonBreaking');ed.execCommand('mceNonBreaking');tinymce.dom.Event.cancel(e);}});}},getInfo:function(){return{longname:'Nonbreaking space',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('nonbreaking',tinymce.plugins.Nonbreaking);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?'<span _mce_bogus="1" class="mceItemHidden mceItemNbsp"> </span>':" ")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register commands\r
ed.addCommand('mceNonBreaking', function() {\r
- ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span class="mceItemHidden mceVisualNbsp">·</span>' : ' ');\r
+ ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span _mce_bogus="1" class="mceItemHidden mceItemNbsp"> </span>' : ' ');\r
});\r
\r
// Register buttons\r
\r
// Register plugin\r
tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking);\r
-})();\r
+})();
\ No newline at end of file
-(function(){var Event=tinymce.dom.Event;tinymce.create('tinymce.plugins.NonEditablePlugin',{init:function(ed,url){var t=this,editClass,nonEditClass;t.editor=ed;editClass=ed.getParam("noneditable_editable_class","mceEditable");nonEditClass=ed.getParam("noneditable_noneditable_class","mceNonEditable");ed.onNodeChange.addToTop(function(ed,cm,n){var sc,ec;sc=ed.dom.getParent(ed.selection.getStart(),function(n){return ed.dom.hasClass(n,nonEditClass);});ec=ed.dom.getParent(ed.selection.getEnd(),function(n){return ed.dom.hasClass(n,nonEditClass);});if(sc||ec){t._setDisabled(1);return false;}else t._setDisabled(0);});},getInfo:function(){return{longname:'Non editable elements',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_block:function(ed,e){var k=e.keyCode;if((k>32&&k<41)||(k>111&&k<124))return;return Event.cancel(e);},_setDisabled:function(s){var t=this,ed=t.editor;tinymce.each(ed.controlManager.controls,function(c){c.setDisabled(s);});if(s!==t.disabled){if(s){ed.onKeyDown.addToTop(t._block);ed.onKeyPress.addToTop(t._block);ed.onKeyUp.addToTop(t._block);ed.onPaste.addToTop(t._block);}else{ed.onKeyDown.remove(t._block);ed.onKeyPress.remove(t._block);ed.onKeyUp.remove(t._block);ed.onPaste.remove(t._block);}t.disabled=s;}}});tinymce.PluginManager.add('noneditable',tinymce.plugins.NonEditablePlugin);})();
\ No newline at end of file
+(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(h,g,k){var j,i;j=h.dom.getParent(h.selection.getStart(),function(l){return h.dom.hasClass(l,b)});i=h.dom.getParent(h.selection.getEnd(),function(l){return h.dom.hasClass(l,b)});if(j||i){f._setDisabled(1);return false}else{f._setDisabled(0)}})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin);\r
-})();\r
+})();
\ No newline at end of file
-(function(){tinymce.create('tinymce.plugins.PageBreakPlugin',{init:function(ed,url){var pb='<img src="'+url+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',cls='mcePageBreak',sep=ed.getParam('pagebreak_separator','<!-- pagebreak -->'),pbRE;pbRE=new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(a){return'\\'+a;}),'g');ed.addCommand('mcePageBreak',function(){ed.execCommand('mceInsertContent',0,pb);});ed.addButton('pagebreak',{title:'pagebreak.desc',cmd:cls});ed.onInit.add(function(){if(ed.settings.content_css!==false)ed.dom.loadCSS(url+"/css/content.css");if(ed.theme.onResolveName){ed.theme.onResolveName.add(function(th,o){if(o.node.nodeName=='IMG'&&ed.dom.hasClass(o.node,cls))o.name='pagebreak';});}});ed.onClick.add(function(ed,e){e=e.target;if(e.nodeName==='IMG'&&ed.dom.hasClass(e,cls))ed.selection.select(e);});ed.onNodeChange.add(function(ed,cm,n){cm.setActive('pagebreak',n.nodeName==='IMG'&&ed.dom.hasClass(n,cls));});ed.onBeforeSetContent.add(function(ed,o){o.content=o.content.replace(pbRE,pb);});ed.onPostProcess.add(function(ed,o){if(o.get)o.content=o.content.replace(/<img[^>]+>/g,function(im){if(im.indexOf('class="mcePageBreak')!==-1)im=sep;return im;});});},getInfo:function(){return{longname:'PageBreak',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('pagebreak',tinymce.plugins.PageBreakPlugin);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='<img src="'+d+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',a="mcePageBreak",c=b.getParam("pagebreak_separator","<!-- pagebreak -->"),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.settings.content_css!==false){b.dom.loadCSS(d+"/css/content.css")}if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
// Register plugin\r
tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin);\r
-})();\r
+})();
\ No newline at end of file
+++ /dev/null
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-<title>blank_page</title>\r
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-<link href="css/blank.css" rel="stylesheet" type="text/css" />\r
-<base target="_self" />\r
-<script type="text/javascript">\r
-function init() {\r
- if (parent.tinymce.isIE)\r
- document.body.contentEditable = true;\r
- else\r
- document.designMode = 'on';\r
-\r
- parent.initIframe(document);\r
- window.focus();\r
-}\r
-</script>\r
-</head>\r
-<body onload="init();">\r
-\r
-</body>\r
-</html>\r
+++ /dev/null
-html, body {height:98%}\r
-body {\r
-background-color: #FFFFFF;\r
-font-family: Verdana, Arial, Helvetica, sans-serif;\r
-font-size: 10px;\r
-scrollbar-3dlight-color: #F0F0EE;\r
-scrollbar-arrow-color: #676662;\r
-scrollbar-base-color: #F0F0EE;\r
-scrollbar-darkshadow-color: #DDDDDD;\r
-scrollbar-face-color: #E0E0DD;\r
-scrollbar-highlight-color: #F0F0EE;\r
-scrollbar-shadow-color: #F0F0EE;\r
-scrollbar-track-color: #F5F5F5;\r
-}\r
+++ /dev/null
-.sourceIframe {\r
- border: 1px solid #808080;\r
-}\r
-(function(){var Event=tinymce.dom.Event;tinymce.create('tinymce.plugins.PastePlugin',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mcePasteText',function(ui,v){if(ui){if((ed.getParam('paste_use_dialog',true))||(!tinymce.isIE)){ed.windowManager.open({file:url+'/pastetext.htm',width:450,height:400,inline:1},{plugin_url:url});}else t._insertText(clipboardData.getData("Text"),true);}else t._insertText(v.html,v.linebreaks);});ed.addCommand('mcePasteWord',function(ui,v){if(ui){if((ed.getParam('paste_use_dialog',true))||(!tinymce.isIE)){ed.windowManager.open({file:url+'/pasteword.htm',width:450,height:400,inline:1},{plugin_url:url});}else t._insertText(t._clipboardHTML());}else t._insertWordContent(v);});ed.addCommand('mceSelectAll',function(){ed.execCommand('selectall');});ed.addButton('pastetext',{title:'paste.paste_text_desc',cmd:'mcePasteText',ui:true});ed.addButton('pasteword',{title:'paste.paste_word_desc',cmd:'mcePasteWord',ui:true});ed.addButton('selectall',{title:'paste.selectall_desc',cmd:'mceSelectAll'});if(ed.getParam("paste_auto_cleanup_on_paste",false)){ed.onPaste.add(function(ed,e){return t._handlePasteEvent(e)});}if(!tinymce.isIE&&ed.getParam("paste_auto_cleanup_on_paste",false)){ed.onKeyDown.add(function(ed,e){if(e.ctrlKey&&e.keyCode==86){window.setTimeout(function(){ed.execCommand("mcePasteText",true);},1);Event.cancel(e);}});}},getInfo:function(){return{longname:'Paste text/word',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_handlePasteEvent:function(e){var html=this._clipboardHTML(),ed=this.editor,sel=ed.selection,r;if(ed&&(r=sel.getRng())&&r.text.length>0)ed.execCommand('delete');if(html&&html.length>0)ed.execCommand('mcePasteWord',false,html);return Event.cancel(e);},_insertText:function(content,bLinebreaks){content=this.editor.dom.encode(content);if(content&&content.length>0){if(!this.editor.selection.isCollapsed())this.editor.execCommand("Delete");if(bLinebreaks){if(this.editor.getParam("paste_create_paragraphs",true)){var rl=this.editor.getParam("paste_replace_list",'\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');for(var i=0;i<rl.length;i+=2)content=content.replace(new RegExp(rl[i],'gi'),rl[i+1]);content=content.replace(/\r\n\r\n/g,'</p><p>');content=content.replace(/\r\r/g,'</p><p>');content=content.replace(/\n\n/g,'</p><p>');if((pos=content.indexOf('</p><p>'))!=-1){this.editor.execCommand("Delete");var node=this.editor.selection.getNode();var breakElms=[];do{if(node.nodeType==1){if(node.nodeName=="TD"||node.nodeName=="BODY")break;breakElms[breakElms.length]=node;}}while(node=node.parentNode);var before="",after="</p>";before+=content.substring(0,pos);for(var i=0;i<breakElms.length;i++){before+="</"+breakElms[i].nodeName+">";after+="<"+breakElms[(breakElms.length-1)-i].nodeName+">";}before+="<p>";content=before+content.substring(pos+7)+after;}}if(this.editor.getParam("paste_create_linebreaks",true)){content=content.replace(/\r\n/g,'<br />');content=content.replace(/\r/g,'<br />');content=content.replace(/\n/g,'<br />');}}this.editor.execCommand("mceInsertRawHTML",false,content);}},_insertWordContent:function(content){var t=this,ed=t.editor;if(content&&content.length>0){var bull=String.fromCharCode(8226);var middot=String.fromCharCode(183);if(ed.getParam('paste_insert_word_content_callback'))content=ed.execCallback('paste_insert_word_content_callback','before',content);var rl=ed.getParam("paste_replace_list",'\u2122,<sup>TM</sup>,\u2026,...,\x93|\x94|\u201c|\u201d,",\x60|\x91|\x92|\u2018|\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');for(var i=0;i<rl.length;i+=2)content=content.replace(new RegExp(rl[i],'gi'),rl[i+1]);if(this.editor.getParam("paste_convert_headers_to_strong",false)){content=content.replace(new RegExp('<p class=MsoHeading.*?>(.*?)<\/p>','gi'),'<p><b>$1</b></p>');}content=content.replace(new RegExp('tab-stops: list [0-9]+.0pt">','gi'),'">'+"--list--");content=content.replace(new RegExp(bull+"(.*?)<BR>","gi"),"<p>"+middot+"$1</p>");content=content.replace(new RegExp('<SPAN style="mso-list: Ignore">','gi'),"<span>"+bull);content=content.replace(/<o:p><\/o:p>/gi,"");content=content.replace(new RegExp('<br style="page-break-before: always;.*>','gi'),'-- page break --');content=content.replace(/<!--([\s\S]*?)-->|<style>[\s\S]*?<\/style>/g,"");content=content.replace(/<(meta|link)[^>]+>/g,"");if(this.editor.getParam("paste_remove_spans",true))content=content.replace(/<\/?span[^>]*>/gi,"");if(this.editor.getParam("paste_remove_styles",true))content=content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)','gi'),"<$1$3");content=content.replace(/<\/?font[^>]*>/gi,"");switch(this.editor.getParam("paste_strip_class_attributes","all")){case"all":content=content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi,"<$1$3");break;case"mso":content=content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)','gi'),"<$1$3");break;}content=content.replace(new RegExp('href="?'+this._reEscape(""+document.location)+'','gi'),'href="'+this.editor.documentBaseURI.getURI());content=content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi,"<$1$3");content=content.replace(/<\\?\?xml[^>]*>/gi,"");content=content.replace(/<\/?\w+:[^>]*>/gi,"");content=content.replace(/-- page break --\s*<p> <\/p>/gi,"");content=content.replace(/-- page break --/gi,"");if(!this.editor.getParam('force_p_newlines')){content=content.replace('','','gi');content=content.replace('</p>','<br /><br />','gi');}if(!tinymce.isIE&&!this.editor.getParam('force_p_newlines')){content=content.replace(/<\/?p[^>]*>/gi,"");}content=content.replace(/<\/?div[^>]*>/gi,"");if(this.editor.getParam("paste_convert_middot_lists",true)){var div=ed.dom.create("div",null,content);var className=this.editor.getParam("paste_unindented_list_class","unIndentedList");while(this._convertMiddots(div,"--list--"));while(this._convertMiddots(div,middot,className));while(this._convertMiddots(div,bull));content=div.innerHTML;}if(this.editor.getParam("paste_convert_headers_to_strong",false)){content=content.replace(/<h[1-6]> <\/h[1-6]>/gi,'<p> </p>');content=content.replace(/<h[1-6]>/gi,'<p><b>');content=content.replace(/<\/h[1-6]>/gi,'</b></p>');content=content.replace(/<b> <\/b>/gi,'<b> </b>');content=content.replace(/^( )*/gi,'');}content=content.replace(/--list--/gi,"");if(ed.getParam('paste_insert_word_content_callback'))content=ed.execCallback('paste_insert_word_content_callback','after',content);this.editor.execCommand("mceInsertContent",false,content);if(this.editor.getParam('paste_force_cleanup_wordpaste',true)){var ed=this.editor;window.setTimeout(function(){ed.execCommand("mceCleanup");},1);}}},_reEscape:function(s){var l="?.\\*[](){}+^$:";var o="";for(var i=0;i<s.length;i++){var c=s.charAt(i);if(l.indexOf(c)!=-1)o+='\\'+c;else o+=c;}return o;},_convertMiddots:function(div,search,class_name){var ed=this.editor,mdot=String.fromCharCode(183),bull=String.fromCharCode(8226);var nodes,prevul,i,p,ul,li,np,cp,li;nodes=div.getElementsByTagName("p");for(i=0;i<nodes.length;i++){p=nodes[i];if(p.innerHTML.indexOf(search)==0){ul=ed.dom.create("ul");if(class_name)ul.className=class_name;li=ed.dom.create("li");li.innerHTML=p.innerHTML.replace(new RegExp(''+mdot+'|'+bull+'|--list--| ',"gi"),'');ul.appendChild(li);np=p.nextSibling;while(np){if(np.nodeType==3&&new RegExp('^\\s$','m').test(np.nodeValue)){np=np.nextSibling;continue;}if(search==mdot){if(np.nodeType==1&&new RegExp('^o(\\s+| )').test(np.innerHTML)){if(!prevul){prevul=ul;ul=ed.dom.create("ul");prevul.appendChild(ul);}np.innerHTML=np.innerHTML.replace(/^o/,'');}else{if(prevul){ul=prevul;prevul=null;}if(np.nodeType!=1||np.innerHTML.indexOf(search)!=0)break;}}else{if(np.nodeType!=1||np.innerHTML.indexOf(search)!=0)break;}cp=np.nextSibling;li=ed.dom.create("li");li.innerHTML=np.innerHTML.replace(new RegExp(''+mdot+'|'+bull+'|--list--| ',"gi"),'');np.parentNode.removeChild(np);ul.appendChild(li);np=cp;}p.parentNode.replaceChild(ul,p);return true;}}return false;},_clipboardHTML:function(){var div=document.getElementById('_TinyMCE_clipboardHTML');if(!div){var div=document.createElement('DIV');div.id='_TinyMCE_clipboardHTML';with(div.style){visibility='hidden';overflow='hidden';position='absolute';width=1;height=1;}document.body.appendChild(div);}div.innerHTML='';var rng=document.body.createTextRange();rng.moveToElementText(div);rng.execCommand('Paste');var html=div.innerHTML;div.innerHTML='';return html;}});tinymce.PluginManager.add('paste',tinymce.plugins.PastePlugin);})();
\ No newline at end of file
+(function(){var c=tinymce.each,d=null,a={paste_auto_cleanup_on_paste:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_notifyalways:false,paste_text_linebreaktype:"p",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(e,f){return e.getParam(f,a[f])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(e,f){var g=this;g.editor=e;g.url=f;g.onPreProcess=new tinymce.util.Dispatcher(g);g.onPostProcess=new tinymce.util.Dispatcher(g);g.onPreProcess.add(g._preProcess);g.onPostProcess.add(g._postProcess);g.onPreProcess.add(function(j,k){e.execCallback("paste_preprocess",j,k)});g.onPostProcess.add(function(j,k){e.execCallback("paste_postprocess",j,k)});e.pasteAsPlainText=false;function i(l,j){var k=e.dom;g.onPreProcess.dispatch(g,l);l.node=k.create("div",0,l.content);g.onPostProcess.dispatch(g,l);l.content=e.serializer.serialize(l.node,{getInner:1});if((!j)&&(e.pasteAsPlainText)){g._insertPlainText(e,k,l.content);if(!b(e,"paste_text_sticky")){e.pasteAsPlainText=false;e.controlManager.setActive("pastetext",false)}}else{if(/<(p|h[1-6]|ul|ol)/.test(l.content)){g._insertBlockContent(e,k,l.content)}else{g._insert(l.content)}}}e.addCommand("mceInsertClipboardContent",function(j,k){i(k,true)});if(!b(e,"paste_text_use_dialog")){e.addCommand("mcePasteText",function(k,j){var l=tinymce.util.Cookie;e.pasteAsPlainText=!e.pasteAsPlainText;e.controlManager.setActive("pastetext",e.pasteAsPlainText);if((e.pasteAsPlainText)&&(!l.get("tinymcePasteText"))){if(b(e,"paste_text_sticky")){e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}else{e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}if(!b(e,"paste_text_notifyalways")){l.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}e.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});e.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function h(s){var m,q,k,l=e.selection,p=e.dom,r=e.getBody(),j;if(e.pasteAsPlainText&&(s.clipboardData||p.doc.dataTransfer)){s.preventDefault();i({content:(s.clipboardData||p.doc.dataTransfer).getData("Text")},true);return}if(p.get("_mcePaste")){return}m=p.add(r,"div",{id:"_mcePaste","class":"mcePaste"},'\uFEFF<br _mce_bogus="1">');if(r!=e.getDoc().body){j=p.getPos(e.selection.getStart(),r).y}else{j=r.scrollTop}p.setStyles(m,{position:"absolute",left:-10000,top:j,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){k=p.doc.body.createTextRange();k.moveToElementText(m);k.execCommand("Paste");p.remove(m);if(m.innerHTML==="\uFEFF"){e.execCommand("mcePasteWord");s.preventDefault();return}i({content:m.innerHTML});return tinymce.dom.Event.cancel(s)}else{function o(n){n.preventDefault()}p.bind(e.getDoc(),"mousedown",o);p.bind(e.getDoc(),"keydown",o);q=e.selection.getRng();m=m.firstChild;k=e.getDoc().createRange();k.setStart(m,0);k.setEnd(m,1);l.setRng(k);window.setTimeout(function(){var t="",n=p.select("div.mcePaste");c(n,function(v){var u=v.firstChild;if(u&&u.nodeName=="DIV"&&u.style.marginTop&&u.style.backgroundColor){p.remove(u,1)}c(p.select("div.mcePaste",v),function(w){p.remove(w,1)});c(p.select("span.Apple-style-span",v),function(w){p.remove(w,1)});c(p.select("br[_mce_bogus]",v),function(w){p.remove(w)});t+=v.innerHTML});c(n,function(u){p.remove(u)});if(q){l.setRng(q)}i({content:t});p.unbind(e.getDoc(),"mousedown",o);p.unbind(e.getDoc(),"keydown",o)},0)}}if(b(e,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){e.onKeyDown.add(function(j,k){if(((tinymce.isMac?k.metaKey:k.ctrlKey)&&k.keyCode==86)||(k.shiftKey&&k.keyCode==45)){h(k)}})}else{e.onPaste.addToTop(function(j,k){return h(k)})}}if(b(e,"paste_block_drop")){e.onInit.add(function(){e.dom.bind(e.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(j){j.preventDefault();j.stopPropagation();return false})})}g._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(i,f){var l=this.editor,k=f.content,q=tinymce.grep,p=tinymce.explode,g=tinymce.trim,m,j;function e(h){c(h,function(o){if(o.constructor==RegExp){k=k.replace(o,"")}else{k=k.replace(o[0],o[1])}})}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(k)||f.wordContent){f.wordContent=true;e([/^\s*( )+/gi,/( |<br[^>]*>)+\s*$/gi]);if(b(l,"paste_convert_headers_to_strong")){k=k.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(l,"paste_convert_middot_lists")){e([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"]])}e([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{m=k.length;k=k.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(m!=k.length);if(b(l,"paste_retain_style_properties").replace(/^none$/i,"").length==0){k=k.replace(/<\/?span[^>]*>/gi,"")}else{e([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(u,h,t){var v=[],o=0,r=p(g(t).replace(/"/gi,"'"),";");c(r,function(s){var w,y,z=p(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":v[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":v[o++]="text-align:"+y;return;case"vert-align":v[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":v[o++]="color:"+y;return;case"mso-background":case"mso-highlight":v[o++]="background:"+y;return;case"mso-default-height":v[o++]="min-height:"+x(y);return;case"mso-default-width":v[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":v[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){v[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){v[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}v[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+v.join(";")+'"'}else{return h}}]])}}if(b(l,"paste_convert_headers_to_strong")){e([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}j=b(l,"paste_strip_class_attributes");if(j!=="none"){function n(r,o){if(j==="all"){return""}var h=q(p(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(s){return(/^(?!mso)/i.test(s))});return h.length?' class="'+h.join(" ")+'"':""}k=k.replace(/ class="([^"]+)"/gi,n);k=k.replace(/ class=(\w+)/gi,n)}if(b(l,"paste_remove_spans")){k=k.replace(/<\/?span[^>]*>/gi,"")}f.content=k},_postProcess:function(h,j){var g=this,f=g.editor,i=f.dom,e;if(j.wordContent){c(i.select("a",j.node),function(k){if(!k.href||k.href.indexOf("#_Toc")!=-1){i.remove(k,1)}});if(b(f,"paste_convert_middot_lists")){g._convertLists(h,j)}e=b(f,"paste_retain_style_properties");if((tinymce.is(e,"string"))&&(e!=="all")&&(e!=="*")){e=tinymce.explode(e.replace(/^none$/i,""));c(i.select("*",j.node),function(n){var o={},l=0,m,p,k;if(e){for(m=0;m<e.length;m++){p=e[m];k=i.getStyle(n,p);if(k){o[p]=k;l++}}}i.setAttrib(n,"style","");if(e&&l>0){i.setStyles(n,o)}else{if(n.nodeName=="SPAN"&&!n.className){i.remove(n,true)}}})}}if(b(f,"paste_remove_styles")||(b(f,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(i.select("*[style]",j.node),function(k){k.removeAttribute("style");k.removeAttribute("_mce_style")})}else{if(tinymce.isWebKit){c(i.select("*",j.node),function(k){k.removeAttribute("_mce_style")})}}},_convertLists:function(h,f){var j=h.editor.dom,i,m,e=-1,g,n=[],l,k;c(j.select("p",f.node),function(u){var r,v="",t,s,o,q;for(r=u.firstChild;r&&r.nodeType==3;r=r.nextSibling){v+=r.nodeValue}v=u.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(v)){t="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(v)){t="ol"}if(t){g=parseFloat(u.style.marginLeft||0);if(g>e){n.push(g)}if(!i||t!=l){i=j.create(t);j.insertAfter(i,u)}else{if(g>e){i=m.appendChild(j.create(t))}else{if(g<e){o=tinymce.inArray(n,g);q=j.getParents(i.parentNode,t);i=q[q.length-1-o]||i}}}c(j.select("span",u),function(w){var p=w.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(t=="ul"&&/^[\u2022\u00b7\u00a7\u00d8o]/.test(p)){j.remove(w)}else{if(/^[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){j.remove(w)}}});s=u.innerHTML;if(t=="ul"){s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*( |\u00a0)+\s*/,"")}else{s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}m=i.appendChild(j.create("li",0,s));j.remove(u);e=g;l=t}else{i=e=0}});k=f.node.innerHTML;if(k.indexOf("__MCE_ITEM__")!=-1){f.node.innerHTML=k.replace(/__MCE_ITEM__/g,"")}},_insertBlockContent:function(l,h,m){var f,j,g=l.selection,q,n,e,o,i,k="mce_marker";function p(t){var s;if(tinymce.isIE){s=l.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(false);s.select()}else{g.select(t,1);g.collapse(false)}}this._insert('<span id="'+k+'"></span>',1);j=h.get(k);f=h.getParent(j,"p,h1,h2,h3,h4,h5,h6,ul,ol,th,td");if(f&&!/TD|TH/.test(f.nodeName)){j=h.split(f,j);c(h.create("div",0,m).childNodes,function(r){q=j.parentNode.insertBefore(r.cloneNode(true),j)});p(q)}else{h.setOuterHTML(j,m);g.select(l.getBody(),1);g.collapse(0)}while(n=h.get(k)){h.remove(n)}n=g.getStart();e=h.getViewPort(l.getWin());o=l.dom.getPos(n).y;i=n.clientHeight;if(o<e.y||o+i>e.y+e.h){l.getDoc().body.scrollTop=o<e.y?o:o-e.h+25}},_insert:function(g,e){var f=this.editor,i=f.selection.getRng();if(!f.selection.isCollapsed()&&i.startContainer!=i.endContainer){f.getDoc().execCommand("Delete",false,null)}f.execCommand(tinymce.isGecko?"insertHTML":"mceInsertContent",false,g,{skip_undo:e})},_insertPlainText:function(j,x,v){var t,u,l,k,r,e,p,f,n=j.getWin(),z=j.getDoc(),s=j.selection,m=tinymce.is,y=tinymce.inArray,g=b(j,"paste_text_linebreaktype"),o=b(j,"paste_text_replacements");function q(h){c(h,function(i){if(i.constructor==RegExp){v=v.replace(i,"")}else{v=v.replace(i[0],i[1])}})}if((typeof(v)==="string")&&(v.length>0)){if(!d){d=("34,quot,38,amp,39,apos,60,lt,62,gt,"+j.serializer.settings.entities).split(",")}if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(v)){q([/[\n\r]+/g])}else{q([/\r+/g])}q([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/&(#\d+|[a-z0-9]{1,10});/gi,function(i,h){if(h.charAt(0)==="#"){return String.fromCharCode(h.slice(1))}else{return((i=y(d,h))>0)?String.fromCharCode(d[i-1]):" "}}],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"],/^\s+|\s+$/g]);v=x.encode(v);if(!s.isCollapsed()){z.execCommand("Delete",false,null)}if(m(o,"array")||(m(o,"array"))){q(o)}else{if(m(o,"string")){q(new RegExp(o,"gi"))}}if(g=="none"){q([[/\n+/g," "]])}else{if(g=="br"){q([[/\n/g,"<br />"]])}else{q([/^\s+|\s+$/g,[/\n\n/g,"</p><p>"],[/\n/g,"<br />"]])}}if((l=v.indexOf("</p><p>"))!=-1){k=v.lastIndexOf("</p><p>");r=s.getNode();e=[];do{if(r.nodeType==1){if(r.nodeName=="TD"||r.nodeName=="BODY"){break}e[e.length]=r}}while(r=r.parentNode);if(e.length>0){p=v.substring(0,l);f="";for(t=0,u=e.length;t<u;t++){p+="</"+e[t].nodeName.toLowerCase()+">";f+="<"+e[e.length-t-1].nodeName.toLowerCase()+">"}if(l==k){v=p+f+v.substring(l+7)}else{v=p+v.substring(l+4,k+4)+f+v.substring(k+7)}}}j.execCommand("mceInsertRawHTML",false,v+'<span id="_plain_text_marker"> </span>');window.setTimeout(function(){var h=x.get("_plain_text_marker"),B,i,A,w;s.select(h,false);z.execCommand("Delete",false,null);h=null;B=s.getStart();i=x.getViewPort(n);A=x.getPos(B).y;w=B.clientHeight;if((A<i.y)||(A+w>i.y+i.h)){z.body.scrollTop=A<i.y?A:A-i.h+25}},0)}},_legacySupport:function(){var f=this,e=f.editor;e.addCommand("mcePasteWord",function(){e.windowManager.open({file:f.url+"/pasteword.htm",width:parseInt(b(e,"paste_dialog_width")),height:parseInt(b(e,"paste_dialog_height")),inline:1})});if(b(e,"paste_text_use_dialog")){e.addCommand("mcePasteText",function(){e.windowManager.open({file:f.url+"/pastetext.htm",width:parseInt(b(e,"paste_dialog_width")),height:parseInt(b(e,"paste_dialog_height")),inline:1})})}e.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
- var Event = tinymce.dom.Event;\r
+ var each = tinymce.each,\r
+ entities = null,\r
+ defs = {\r
+ paste_auto_cleanup_on_paste : true,\r
+ paste_block_drop : false,\r
+ paste_retain_style_properties : "none",\r
+ paste_strip_class_attributes : "mso",\r
+ paste_remove_spans : false,\r
+ paste_remove_styles : false,\r
+ paste_remove_styles_if_webkit : true,\r
+ paste_convert_middot_lists : true,\r
+ paste_convert_headers_to_strong : false,\r
+ paste_dialog_width : "450",\r
+ paste_dialog_height : "400",\r
+ paste_text_use_dialog : false,\r
+ paste_text_sticky : false,\r
+ paste_text_notifyalways : false,\r
+ paste_text_linebreaktype : "p",\r
+ paste_text_replacements : [\r
+ [/\u2026/g, "..."],\r
+ [/[\x93\x94\u201c\u201d]/g, '"'],\r
+ [/[\x60\x91\x92\u2018\u2019]/g, "'"]\r
+ ]\r
+ };\r
+\r
+ function getParam(ed, name) {\r
+ return ed.getParam(name, defs[name]);\r
+ }\r
\r
tinymce.create('tinymce.plugins.PastePlugin', {\r
init : function(ed, url) {\r
var t = this;\r
\r
- t.editor = ed; \r
-\r
- // Register commands\r
- ed.addCommand('mcePasteText', function(ui, v) {\r
- if (ui) {\r
- if ((ed.getParam('paste_use_dialog', true)) || (!tinymce.isIE)) {\r
- ed.windowManager.open({\r
- file : url + '/pastetext.htm',\r
- width : 450,\r
- height : 400,\r
- inline : 1\r
- }, {\r
- plugin_url : url\r
- });\r
- } else\r
- t._insertText(clipboardData.getData("Text"), true);\r
- } else\r
- t._insertText(v.html, v.linebreaks);\r
+ t.editor = ed;\r
+ t.url = url;\r
+\r
+ // Setup plugin events\r
+ t.onPreProcess = new tinymce.util.Dispatcher(t);\r
+ t.onPostProcess = new tinymce.util.Dispatcher(t);\r
+\r
+ // Register default handlers\r
+ t.onPreProcess.add(t._preProcess);\r
+ t.onPostProcess.add(t._postProcess);\r
+\r
+ // Register optional preprocess handler\r
+ t.onPreProcess.add(function(pl, o) {\r
+ ed.execCallback('paste_preprocess', pl, o);\r
});\r
\r
- ed.addCommand('mcePasteWord', function(ui, v) {\r
- if (ui) {\r
- if ((ed.getParam('paste_use_dialog', true)) || (!tinymce.isIE)) {\r
- ed.windowManager.open({\r
- file : url + '/pasteword.htm',\r
- width : 450,\r
- height : 400,\r
- inline : 1\r
- }, {\r
- plugin_url : url\r
- });\r
- } else\r
- t._insertText(t._clipboardHTML());\r
- } else\r
- t._insertWordContent(v);\r
+ // Register optional postprocess\r
+ t.onPostProcess.add(function(pl, o) {\r
+ ed.execCallback('paste_postprocess', pl, o);\r
});\r
\r
- ed.addCommand('mceSelectAll', function() {\r
- ed.execCommand('selectall'); \r
+ // Initialize plain text flag\r
+ ed.pasteAsPlainText = false;\r
+\r
+ // This function executes the process handlers and inserts the contents\r
+ // force_rich overrides plain text mode set by user, important for pasting with execCommand\r
+ function process(o, force_rich) {\r
+ var dom = ed.dom;\r
+\r
+ // Execute pre process handlers\r
+ t.onPreProcess.dispatch(t, o);\r
+\r
+ // Create DOM structure\r
+ o.node = dom.create('div', 0, o.content);\r
+\r
+ // Execute post process handlers\r
+ t.onPostProcess.dispatch(t, o);\r
+\r
+ // Serialize content\r
+ o.content = ed.serializer.serialize(o.node, {getInner : 1});\r
+\r
+ // Plain text option active?\r
+ if ((!force_rich) && (ed.pasteAsPlainText)) {\r
+ t._insertPlainText(ed, dom, o.content);\r
+\r
+ if (!getParam(ed, "paste_text_sticky")) {\r
+ ed.pasteAsPlainText = false;\r
+ ed.controlManager.setActive("pastetext", false);\r
+ }\r
+ } else if (/<(p|h[1-6]|ul|ol)/.test(o.content)) {\r
+ // Handle insertion of contents containing block elements separately\r
+ t._insertBlockContent(ed, dom, o.content);\r
+ } else {\r
+ t._insert(o.content);\r
+ }\r
+ }\r
+\r
+ // Add command for external usage\r
+ ed.addCommand('mceInsertClipboardContent', function(u, o) {\r
+ process(o, true);\r
});\r
\r
- // Register buttons\r
- ed.addButton('pastetext', {title : 'paste.paste_text_desc', cmd : 'mcePasteText', ui : true});\r
- ed.addButton('pasteword', {title : 'paste.paste_word_desc', cmd : 'mcePasteWord', ui : true});\r
- ed.addButton('selectall', {title : 'paste.selectall_desc', cmd : 'mceSelectAll'});\r
+ if (!getParam(ed, "paste_text_use_dialog")) {\r
+ ed.addCommand('mcePasteText', function(u, v) {\r
+ var cookie = tinymce.util.Cookie;\r
\r
- if (ed.getParam("paste_auto_cleanup_on_paste", false)) {\r
- ed.onPaste.add(function(ed, e) {\r
- return t._handlePasteEvent(e)\r
+ ed.pasteAsPlainText = !ed.pasteAsPlainText;\r
+ ed.controlManager.setActive('pastetext', ed.pasteAsPlainText);\r
+\r
+ if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) {\r
+ if (getParam(ed, "paste_text_sticky")) {\r
+ ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));\r
+ } else {\r
+ ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));\r
+ }\r
+\r
+ if (!getParam(ed, "paste_text_notifyalways")) {\r
+ cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31))\r
+ }\r
+ }\r
});\r
}\r
\r
- if (!tinymce.isIE && ed.getParam("paste_auto_cleanup_on_paste", false)) {\r
- // Force paste dialog if non IE browser\r
- ed.onKeyDown.add(function(ed, e) {\r
- if (e.ctrlKey && e.keyCode == 86) {\r
- window.setTimeout(function() {\r
- ed.execCommand("mcePasteText", true);\r
- }, 1);\r
+ ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'});\r
+ ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'});\r
+\r
+ // This function grabs the contents from the clipboard by adding a\r
+ // hidden div and placing the caret inside it and after the browser paste\r
+ // is done it grabs that contents and processes that\r
+ function grabContent(e) {\r
+ var n, or, rng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY;\r
\r
- Event.cancel(e);\r
+ // Check if browser supports direct plaintext access\r
+ if (ed.pasteAsPlainText && (e.clipboardData || dom.doc.dataTransfer)) {\r
+ e.preventDefault();\r
+ process({content : (e.clipboardData || dom.doc.dataTransfer).getData('Text')}, true);\r
+ return;\r
+ }\r
+\r
+ if (dom.get('_mcePaste'))\r
+ return;\r
+\r
+ // Create container to paste into\r
+ n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste'}, '\uFEFF<br _mce_bogus="1">');\r
+\r
+ // If contentEditable mode we need to find out the position of the closest element\r
+ if (body != ed.getDoc().body)\r
+ posY = dom.getPos(ed.selection.getStart(), body).y;\r
+ else\r
+ posY = body.scrollTop;\r
+\r
+ // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles\r
+ dom.setStyles(n, {\r
+ position : 'absolute',\r
+ left : -10000,\r
+ top : posY,\r
+ width : 1,\r
+ height : 1,\r
+ overflow : 'hidden'\r
+ });\r
+\r
+ if (tinymce.isIE) {\r
+ // Select the container\r
+ rng = dom.doc.body.createTextRange();\r
+ rng.moveToElementText(n);\r
+ rng.execCommand('Paste');\r
+\r
+ // Remove container\r
+ dom.remove(n);\r
+\r
+ // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due\r
+ // to IE security settings so we pass the junk though better than nothing right\r
+ if (n.innerHTML === '\uFEFF') {\r
+ ed.execCommand('mcePasteWord');\r
+ e.preventDefault();\r
+ return;\r
}\r
+\r
+ // Process contents\r
+ process({content : n.innerHTML});\r
+\r
+ // Block the real paste event\r
+ return tinymce.dom.Event.cancel(e);\r
+ } else {\r
+ function block(e) {\r
+ e.preventDefault();\r
+ };\r
+\r
+ // Block mousedown and click to prevent selection change\r
+ dom.bind(ed.getDoc(), 'mousedown', block);\r
+ dom.bind(ed.getDoc(), 'keydown', block);\r
+\r
+ or = ed.selection.getRng();\r
+\r
+ // Move caret into hidden div\r
+ n = n.firstChild;\r
+ rng = ed.getDoc().createRange();\r
+ rng.setStart(n, 0);\r
+ rng.setEnd(n, 1);\r
+ sel.setRng(rng);\r
+\r
+ // Wait a while and grab the pasted contents\r
+ window.setTimeout(function() {\r
+ var h = '', nl = dom.select('div.mcePaste');\r
+\r
+ // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string\r
+ each(nl, function(n) {\r
+ var child = n.firstChild;\r
+\r
+ // WebKit inserts a DIV container with lots of odd styles\r
+ if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {\r
+ dom.remove(child, 1);\r
+ }\r
+\r
+ // WebKit duplicates the divs so we need to remove them\r
+ each(dom.select('div.mcePaste', n), function(n) {\r
+ dom.remove(n, 1);\r
+ });\r
+\r
+ // Remove apply style spans\r
+ each(dom.select('span.Apple-style-span', n), function(n) {\r
+ dom.remove(n, 1);\r
+ });\r
+\r
+ // Remove bogus br elements\r
+ each(dom.select('br[_mce_bogus]', n), function(n) {\r
+ dom.remove(n);\r
+ });\r
+\r
+ h += n.innerHTML;\r
+ });\r
+\r
+ // Remove the nodes\r
+ each(nl, function(n) {\r
+ dom.remove(n);\r
+ });\r
+\r
+ // Restore the old selection\r
+ if (or)\r
+ sel.setRng(or);\r
+\r
+ process({content : h});\r
+\r
+ // Unblock events ones we got the contents\r
+ dom.unbind(ed.getDoc(), 'mousedown', block);\r
+ dom.unbind(ed.getDoc(), 'keydown', block);\r
+ }, 0);\r
+ }\r
+ }\r
+\r
+ // Check if we should use the new auto process method \r
+ if (getParam(ed, "paste_auto_cleanup_on_paste")) {\r
+ // Is it's Opera or older FF use key handler\r
+ if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {\r
+ ed.onKeyDown.add(function(ed, e) {\r
+ if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))\r
+ grabContent(e);\r
+ });\r
+ } else {\r
+ // Grab contents on paste event on Gecko and WebKit\r
+ ed.onPaste.addToTop(function(ed, e) {\r
+ return grabContent(e);\r
+ });\r
+ }\r
+ }\r
+\r
+ // Block all drag/drop events\r
+ if (getParam(ed, "paste_block_drop")) {\r
+ ed.onInit.add(function() {\r
+ ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) {\r
+ e.preventDefault();\r
+ e.stopPropagation();\r
+\r
+ return false;\r
+ });\r
});\r
}\r
+\r
+ // Add legacy support\r
+ t._legacySupport();\r
},\r
\r
getInfo : function() {\r
};\r
},\r
\r
- // Private methods\r
+ _preProcess : function(pl, o) {\r
+ //console.log('Before preprocess:' + o.content);\r
+\r
+ var ed = this.editor,\r
+ h = o.content,\r
+ grep = tinymce.grep,\r
+ explode = tinymce.explode,\r
+ trim = tinymce.trim,\r
+ len, stripClass;\r
+\r
+ function process(items) {\r
+ each(items, function(v) {\r
+ // Remove or replace\r
+ if (v.constructor == RegExp)\r
+ h = h.replace(v, '');\r
+ else\r
+ h = h.replace(v[0], v[1]);\r
+ });\r
+ }\r
\r
- _handlePasteEvent : function(e) {\r
- var html = this._clipboardHTML(), ed = this.editor, sel = ed.selection, r;\r
+ // Detect Word content and process it more aggressive\r
+ if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) {\r
+ o.wordContent = true; // Mark the pasted contents as word specific content\r
+ //console.log('Word contents detected.');\r
\r
- // Removes italic, strong etc, the if was needed due to bug #1437114\r
- if (ed && (r = sel.getRng()) && r.text.length > 0)\r
- ed.execCommand('delete');\r
+ // Process away some basic content\r
+ process([\r
+ /^\s*( )+/gi, // entities at the start of contents\r
+ /( |<br[^>]*>)+\s*$/gi // entities at the end of contents\r
+ ]);\r
\r
- if (html && html.length > 0)\r
- ed.execCommand('mcePasteWord', false, html);\r
+ if (getParam(ed, "paste_convert_headers_to_strong")) {\r
+ h = h.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>");\r
+ }\r
\r
- return Event.cancel(e);\r
- },\r
+ if (getParam(ed, "paste_convert_middot_lists")) {\r
+ process([\r
+ [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker\r
+ [/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol spans to item markers\r
+ ]);\r
+ }\r
\r
- _insertText : function(content, bLinebreaks) {\r
- content = this.editor.dom.encode(content);\r
+ process([\r
+ // Word comments like conditional comments etc\r
+ /<!--[\s\S]+?-->/gi,\r
+\r
+ // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags\r
+ /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,\r
+\r
+ // Convert <s> into <strike> for line-though\r
+ [/<(\/?)s>/gi, "<$1strike>"],\r
+\r
+ // Replace nsbp entites to char since it's easier to handle\r
+ [/ /gi, "\u00a0"]\r
+ ]);\r
+\r
+ // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag.\r
+ // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot.\r
+ do {\r
+ len = h.length;\r
+ h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");\r
+ } while (len != h.length);\r
+\r
+ // Remove all spans if no styles is to be retained\r
+ if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) {\r
+ h = h.replace(/<\/?span[^>]*>/gi, "");\r
+ } else {\r
+ // We're keeping styles, so at least clean them up.\r
+ // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx\r
+\r
+ process([\r
+ // Convert <span style="mso-spacerun:yes">___</span> to string of alternating breaking/non-breaking spaces of same length\r
+ [/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,\r
+ function(str, spaces) {\r
+ return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : "";\r
+ }\r
+ ],\r
+\r
+ // Examine all styles: delete junk, transform some, and keep the rest\r
+ [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,\r
+ function(str, tag, style) {\r
+ var n = [],\r
+ i = 0,\r
+ s = explode(trim(style).replace(/"/gi, "'"), ";");\r
+\r
+ // Examine each style definition within the tag's style attribute\r
+ each(s, function(v) {\r
+ var name, value,\r
+ parts = explode(v, ":");\r
+\r
+ function ensureUnits(v) {\r
+ return v + ((v !== "0") && (/\d$/.test(v)))? "px" : "";\r
+ }\r
+\r
+ if (parts.length == 2) {\r
+ name = parts[0].toLowerCase();\r
+ value = parts[1].toLowerCase();\r
+\r
+ // Translate certain MS Office styles into their CSS equivalents\r
+ switch (name) {\r
+ case "mso-padding-alt":\r
+ case "mso-padding-top-alt":\r
+ case "mso-padding-right-alt":\r
+ case "mso-padding-bottom-alt":\r
+ case "mso-padding-left-alt":\r
+ case "mso-margin-alt":\r
+ case "mso-margin-top-alt":\r
+ case "mso-margin-right-alt":\r
+ case "mso-margin-bottom-alt":\r
+ case "mso-margin-left-alt":\r
+ case "mso-table-layout-alt":\r
+ case "mso-height":\r
+ case "mso-width":\r
+ case "mso-vertical-align-alt":\r
+ n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value);\r
+ return;\r
+\r
+ case "horiz-align":\r
+ n[i++] = "text-align:" + value;\r
+ return;\r
+\r
+ case "vert-align":\r
+ n[i++] = "vertical-align:" + value;\r
+ return;\r
+\r
+ case "font-color":\r
+ case "mso-foreground":\r
+ n[i++] = "color:" + value;\r
+ return;\r
+\r
+ case "mso-background":\r
+ case "mso-highlight":\r
+ n[i++] = "background:" + value;\r
+ return;\r
+\r
+ case "mso-default-height":\r
+ n[i++] = "min-height:" + ensureUnits(value);\r
+ return;\r
+\r
+ case "mso-default-width":\r
+ n[i++] = "min-width:" + ensureUnits(value);\r
+ return;\r
+\r
+ case "mso-padding-between-alt":\r
+ n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value);\r
+ return;\r
+\r
+ case "text-line-through":\r
+ if ((value == "single") || (value == "double")) {\r
+ n[i++] = "text-decoration:line-through";\r
+ }\r
+ return;\r
+\r
+ case "mso-zero-height":\r
+ if (value == "yes") {\r
+ n[i++] = "display:none";\r
+ }\r
+ return;\r
+ }\r
\r
- if (content && content.length > 0) {\r
- // Delete any highlighted text before pasting\r
- if (!this.editor.selection.isCollapsed())\r
- this.editor.execCommand("Delete"); \r
-\r
- if (bLinebreaks) { \r
- // Special paragraph treatment \r
- if (this.editor.getParam("paste_create_paragraphs", true)) {\r
- var rl = this.editor.getParam("paste_replace_list", '\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');\r
- for (var i=0; i<rl.length; i+=2)\r
- content = content.replace(new RegExp(rl[i], 'gi'), rl[i+1]);\r
-\r
- content = content.replace(/\r\n\r\n/g, '</p><p>');\r
- content = content.replace(/\r\r/g, '</p><p>');\r
- content = content.replace(/\n\n/g, '</p><p>');\r
-\r
- // Has paragraphs \r
- if ((pos = content.indexOf('</p><p>')) != -1) { \r
- this.editor.execCommand("Delete"); \r
-\r
- var node = this.editor.selection.getNode(); \r
-\r
- // Get list of elements to break \r
- var breakElms = [];\r
-\r
- do { \r
- if (node.nodeType == 1) { \r
- // Don't break tables and break at body \r
- if (node.nodeName == "TD" || node.nodeName == "BODY") \r
- break; \r
- \r
- breakElms[breakElms.length] = node; \r
- } \r
- } while(node = node.parentNode); \r
-\r
- var before = "", after = "</p>"; \r
- before += content.substring(0, pos); \r
-\r
- for (var i=0; i<breakElms.length; i++) { \r
- before += "</" + breakElms[i].nodeName + ">"; \r
- after += "<" + breakElms[(breakElms.length-1)-i].nodeName + ">"; \r
- } \r
-\r
- before += "<p>"; \r
- content = before + content.substring(pos+7) + after; \r
- } \r
- } \r
-\r
- if (this.editor.getParam("paste_create_linebreaks", true)) {\r
- content = content.replace(/\r\n/g, '<br />');\r
- content = content.replace(/\r/g, '<br />');\r
- content = content.replace(/\n/g, '<br />');\r
- }\r
- } \r
+ // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name\r
+ if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) {\r
+ return;\r
+ }\r
+\r
+ // If it reached this point, it must be a valid CSS style\r
+ n[i++] = name + ":" + parts[1]; // Lower-case name, but keep value case\r
+ }\r
+ });\r
\r
- this.editor.execCommand("mceInsertRawHTML", false, content); \r
+ // If style attribute contained any valid styles the re-write it; otherwise delete style attribute.\r
+ if (i > 0) {\r
+ return tag + ' style="' + n.join(';') + '"';\r
+ } else {\r
+ return tag;\r
+ }\r
+ }\r
+ ]\r
+ ]);\r
+ }\r
}\r
- },\r
\r
- _insertWordContent : function(content) { \r
- var t = this, ed = t.editor;\r
+ // Replace headers with <strong>\r
+ if (getParam(ed, "paste_convert_headers_to_strong")) {\r
+ process([\r
+ [/<h[1-6][^>]*>/gi, "<p><strong>"],\r
+ [/<\/h[1-6][^>]*>/gi, "</strong></p>"]\r
+ ]);\r
+ }\r
\r
- if (content && content.length > 0) {\r
- // Cleanup Word content\r
- var bull = String.fromCharCode(8226);\r
- var middot = String.fromCharCode(183);\r
+ // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso").\r
+ // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation.\r
+ stripClass = getParam(ed, "paste_strip_class_attributes");\r
\r
- if (ed.getParam('paste_insert_word_content_callback'))\r
- content = ed.execCallback('paste_insert_word_content_callback', 'before', content);\r
+ if (stripClass !== "none") {\r
+ function removeClasses(match, g1) {\r
+ if (stripClass === "all")\r
+ return '';\r
\r
- var rl = ed.getParam("paste_replace_list", '\u2122,<sup>TM</sup>,\u2026,...,\x93|\x94|\u201c|\u201d,",\x60|\x91|\x92|\u2018|\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');\r
- for (var i=0; i<rl.length; i+=2)\r
- content = content.replace(new RegExp(rl[i], 'gi'), rl[i+1]);\r
+ var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "),\r
+ function(v) {\r
+ return (/^(?!mso)/i.test(v));\r
+ }\r
+ );\r
\r
- if (this.editor.getParam("paste_convert_headers_to_strong", false)) {\r
- content = content.replace(new RegExp('<p class=MsoHeading.*?>(.*?)<\/p>', 'gi'), '<p><b>$1</b></p>');\r
- }\r
+ return cls.length ? ' class="' + cls.join(" ") + '"' : '';\r
+ };\r
\r
- content = content.replace(new RegExp('tab-stops: list [0-9]+.0pt">', 'gi'), '">' + "--list--");\r
- content = content.replace(new RegExp(bull + "(.*?)<BR>", "gi"), "<p>" + middot + "$1</p>");\r
- content = content.replace(new RegExp('<SPAN style="mso-list: Ignore">', 'gi'), "<span>" + bull); // Covert to bull list\r
- content = content.replace(/<o:p><\/o:p>/gi, "");\r
- content = content.replace(new RegExp('<br style="page-break-before: always;.*>', 'gi'), '-- page break --'); // Replace pagebreaks\r
- content = content.replace(/<!--([\s\S]*?)-->|<style>[\s\S]*?<\/style>/g, ""); // Word comments\r
- content = content.replace(/<(meta|link)[^>]+>/g, ""); // Header elements\r
+ h = h.replace(/ class="([^"]+)"/gi, removeClasses);\r
+ h = h.replace(/ class=(\w+)/gi, removeClasses);\r
+ }\r
\r
- if (this.editor.getParam("paste_remove_spans", true))\r
- content = content.replace(/<\/?span[^>]*>/gi, "");\r
+ // Remove spans option\r
+ if (getParam(ed, "paste_remove_spans")) {\r
+ h = h.replace(/<\/?span[^>]*>/gi, "");\r
+ }\r
\r
- if (this.editor.getParam("paste_remove_styles", true))\r
- content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3");\r
+ //console.log('After preprocess:' + h);\r
\r
- content = content.replace(/<\/?font[^>]*>/gi, "");\r
+ o.content = h;\r
+ },\r
\r
- // Strips class attributes.\r
- switch (this.editor.getParam("paste_strip_class_attributes", "all")) {\r
- case "all":\r
- content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3");\r
- break;\r
+ /**\r
+ * Various post process items.\r
+ */\r
+ _postProcess : function(pl, o) {\r
+ var t = this, ed = t.editor, dom = ed.dom, styleProps;\r
+\r
+ if (o.wordContent) {\r
+ // Remove named anchors or TOC links\r
+ each(dom.select('a', o.node), function(a) {\r
+ if (!a.href || a.href.indexOf('#_Toc') != -1)\r
+ dom.remove(a, 1);\r
+ });\r
\r
- case "mso":\r
- content = content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)', 'gi'), "<$1$3");\r
- break;\r
+ if (getParam(ed, "paste_convert_middot_lists")) {\r
+ t._convertLists(pl, o);\r
}\r
\r
- content = content.replace(new RegExp('href="?' + this._reEscape("" + document.location) + '', 'gi'), 'href="' + this.editor.documentBaseURI.getURI());\r
- content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");\r
- content = content.replace(/<\\?\?xml[^>]*>/gi, "");\r
- content = content.replace(/<\/?\w+:[^>]*>/gi, "");\r
- content = content.replace(/-- page break --\s*<p> <\/p>/gi, ""); // Remove pagebreaks\r
- content = content.replace(/-- page break --/gi, ""); // Remove pagebreaks\r
-\r
- // content = content.replace(/\/? */gi, ""); \r
- // content = content.replace(/<p> <\/p>/gi, '');\r
-\r
- if (!this.editor.getParam('force_p_newlines')) {\r
- content = content.replace('', '' ,'gi');\r
- content = content.replace('</p>', '<br /><br />' ,'gi');\r
- }\r
+ // Process styles\r
+ styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties\r
\r
- if (!tinymce.isIE && !this.editor.getParam('force_p_newlines')) {\r
- content = content.replace(/<\/?p[^>]*>/gi, "");\r
- }\r
+ // Process only if a string was specified and not equal to "all" or "*"\r
+ if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) {\r
+ styleProps = tinymce.explode(styleProps.replace(/^none$/i, ""));\r
\r
- content = content.replace(/<\/?div[^>]*>/gi, "");\r
+ // Retains some style properties\r
+ each(dom.select('*', o.node), function(el) {\r
+ var newStyle = {}, npc = 0, i, sp, sv;\r
\r
- // Convert all middlot lists to UL lists\r
- if (this.editor.getParam("paste_convert_middot_lists", true)) {\r
- var div = ed.dom.create("div", null, content);\r
+ // Store a subset of the existing styles\r
+ if (styleProps) {\r
+ for (i = 0; i < styleProps.length; i++) {\r
+ sp = styleProps[i];\r
+ sv = dom.getStyle(el, sp);\r
\r
- // Convert all middot paragraphs to li elements\r
- var className = this.editor.getParam("paste_unindented_list_class", "unIndentedList");\r
+ if (sv) {\r
+ newStyle[sp] = sv;\r
+ npc++;\r
+ }\r
+ }\r
+ }\r
\r
- while (this._convertMiddots(div, "--list--")) ; // bull\r
- while (this._convertMiddots(div, middot, className)) ; // Middot\r
- while (this._convertMiddots(div, bull)) ; // bull\r
+ // Remove all of the existing styles\r
+ dom.setAttrib(el, 'style', '');\r
\r
- content = div.innerHTML;\r
+ if (styleProps && npc > 0)\r
+ dom.setStyles(el, newStyle); // Add back the stored subset of styles\r
+ else // Remove empty span tags that do not have class attributes\r
+ if (el.nodeName == 'SPAN' && !el.className)\r
+ dom.remove(el, true);\r
+ });\r
}\r
+ }\r
\r
- // Replace all headers with strong and fix some other issues\r
- if (this.editor.getParam("paste_convert_headers_to_strong", false)) {\r
- content = content.replace(/<h[1-6]> <\/h[1-6]>/gi, '<p> </p>');\r
- content = content.replace(/<h[1-6]>/gi, '<p><b>');\r
- content = content.replace(/<\/h[1-6]>/gi, '</b></p>');\r
- content = content.replace(/<b> <\/b>/gi, '<b> </b>');\r
- content = content.replace(/^( )*/gi, '');\r
+ // Remove all style information or only specifically on WebKit to avoid the style bug on that browser\r
+ if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) {\r
+ each(dom.select('*[style]', o.node), function(el) {\r
+ el.removeAttribute('style');\r
+ el.removeAttribute('_mce_style');\r
+ });\r
+ } else {\r
+ if (tinymce.isWebKit) {\r
+ // We need to compress the styles on WebKit since if you paste <img border="0" /> it will become <img border="0" style="... lots of junk ..." />\r
+ // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles\r
+ each(dom.select('*', o.node), function(el) {\r
+ el.removeAttribute('_mce_style');\r
+ });\r
}\r
+ }\r
+ },\r
\r
- content = content.replace(/--list--/gi, ""); // Remove --list--\r
+ /**\r
+ * Converts the most common bullet and number formats in Office into a real semantic UL/LI list.\r
+ */\r
+ _convertLists : function(pl, o) {\r
+ var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html;\r
+\r
+ // Convert middot lists into real semantic lists\r
+ each(dom.select('p', o.node), function(p) {\r
+ var sib, val = '', type, html, idx, parents;\r
+\r
+ // Get text node value at beginning of paragraph\r
+ for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling)\r
+ val += sib.nodeValue;\r
+\r
+ val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/ /g, '\u00a0');\r
+\r
+ // Detect unordered lists look for bullets\r
+ if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(val))\r
+ type = 'ul';\r
+\r
+ // Detect ordered lists 1., a. or ixv.\r
+ if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(val))\r
+ type = 'ol';\r
+\r
+ // Check if node value matches the list pattern: o \r
+ if (type) {\r
+ margin = parseFloat(p.style.marginLeft || 0);\r
+\r
+ if (margin > lastMargin)\r
+ levels.push(margin);\r
+\r
+ if (!listElm || type != lastType) {\r
+ listElm = dom.create(type);\r
+ dom.insertAfter(listElm, p);\r
+ } else {\r
+ // Nested list element\r
+ if (margin > lastMargin) {\r
+ listElm = li.appendChild(dom.create(type));\r
+ } else if (margin < lastMargin) {\r
+ // Find parent level based on margin value\r
+ idx = tinymce.inArray(levels, margin);\r
+ parents = dom.getParents(listElm.parentNode, type);\r
+ listElm = parents[parents.length - 1 - idx] || listElm;\r
+ }\r
+ }\r
\r
- if (ed.getParam('paste_insert_word_content_callback'))\r
- content = ed.execCallback('paste_insert_word_content_callback', 'after', content);\r
+ // Remove middot or number spans if they exists\r
+ each(dom.select('span', p), function(span) {\r
+ var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, '');\r
\r
- // Insert cleaned content\r
- this.editor.execCommand("mceInsertContent", false, content);\r
+ // Remove span with the middot or the number\r
+ if (type == 'ul' && /^[\u2022\u00b7\u00a7\u00d8o]/.test(html))\r
+ dom.remove(span);\r
+ else if (/^[\s\S]*\w+\.( |\u00a0)*\s*/.test(html))\r
+ dom.remove(span);\r
+ });\r
\r
- if (this.editor.getParam('paste_force_cleanup_wordpaste', true)) {\r
- var ed = this.editor;\r
+ html = p.innerHTML;\r
\r
- window.setTimeout(function() {\r
- ed.execCommand("mceCleanup");\r
- }, 1); // Do normal cleanup detached from this thread\r
+ // Remove middot/list items\r
+ if (type == 'ul')\r
+ html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*( |\u00a0)+\s*/, '');\r
+ else\r
+ html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.( |\u00a0)+\s*/, '');\r
+\r
+ // Create li and add paragraph data into the new li\r
+ li = listElm.appendChild(dom.create('li', 0, html));\r
+ dom.remove(p);\r
+\r
+ lastMargin = margin;\r
+ lastType = type;\r
+ } else\r
+ listElm = lastMargin = 0; // End list element\r
+ });\r
+\r
+ // Remove any left over makers\r
+ html = o.node.innerHTML;\r
+ if (html.indexOf('__MCE_ITEM__') != -1)\r
+ o.node.innerHTML = html.replace(/__MCE_ITEM__/g, '');\r
+ },\r
+\r
+ /**\r
+ * This method will split the current block parent and insert the contents inside the split position.\r
+ * This logic can be improved so text nodes at the start/end remain in the start/end block elements\r
+ */\r
+ _insertBlockContent : function(ed, dom, content) {\r
+ var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight, markerId = 'mce_marker';\r
+\r
+ function select(n) {\r
+ var r;\r
+\r
+ if (tinymce.isIE) {\r
+ r = ed.getDoc().body.createTextRange();\r
+ r.moveToElementText(n);\r
+ r.collapse(false);\r
+ r.select();\r
+ } else {\r
+ sel.select(n, 1);\r
+ sel.collapse(false);\r
}\r
}\r
- },\r
\r
- _reEscape : function(s) {\r
- var l = "?.\\*[](){}+^$:";\r
- var o = "";\r
+ // Insert a marker for the caret position\r
+ this._insert('<span id="' + markerId + '"></span>', 1);\r
+ marker = dom.get(markerId);\r
+ parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td');\r
\r
- for (var i=0; i<s.length; i++) {\r
- var c = s.charAt(i);\r
+ // If it's a parent block but not a table cell\r
+ if (parentBlock && !/TD|TH/.test(parentBlock.nodeName)) {\r
+ // Split parent block\r
+ marker = dom.split(parentBlock, marker);\r
\r
- if (l.indexOf(c) != -1)\r
- o += '\\' + c;\r
- else\r
- o += c;\r
+ // Insert nodes before the marker\r
+ each(dom.create('div', 0, content).childNodes, function(n) {\r
+ last = marker.parentNode.insertBefore(n.cloneNode(true), marker);\r
+ });\r
+\r
+ // Move caret after marker\r
+ select(last);\r
+ } else {\r
+ dom.setOuterHTML(marker, content);\r
+ sel.select(ed.getBody(), 1);\r
+ sel.collapse(0);\r
}\r
\r
- return o;\r
+ // Remove marker if it's left\r
+ while (elm = dom.get(markerId))\r
+ dom.remove(elm);\r
+\r
+ // Get element, position and height\r
+ elm = sel.getStart();\r
+ vp = dom.getViewPort(ed.getWin());\r
+ y = ed.dom.getPos(elm).y;\r
+ elmHeight = elm.clientHeight;\r
+\r
+ // Is element within viewport if not then scroll it into view\r
+ if (y < vp.y || y + elmHeight > vp.y + vp.h)\r
+ ed.getDoc().body.scrollTop = y < vp.y ? y : y - vp.h + 25;\r
},\r
\r
- _convertMiddots : function(div, search, class_name) {\r
- var ed = this.editor, mdot = String.fromCharCode(183), bull = String.fromCharCode(8226);\r
- var nodes, prevul, i, p, ul, li, np, cp, li;\r
-\r
- nodes = div.getElementsByTagName("p");\r
- for (i=0; i<nodes.length; i++) {\r
- p = nodes[i];\r
-\r
- // Is middot\r
- if (p.innerHTML.indexOf(search) == 0) {\r
- ul = ed.dom.create("ul");\r
-\r
- if (class_name)\r
- ul.className = class_name;\r
-\r
- // Add the first one\r
- li = ed.dom.create("li");\r
- li.innerHTML = p.innerHTML.replace(new RegExp('' + mdot + '|' + bull + '|--list--| ', "gi"), '');\r
- ul.appendChild(li);\r
-\r
- // Add the rest\r
- np = p.nextSibling;\r
- while (np) {\r
- // If the node is whitespace, then\r
- // ignore it and continue on.\r
- if (np.nodeType == 3 && new RegExp('^\\s$', 'm').test(np.nodeValue)) {\r
- np = np.nextSibling;\r
- continue;\r
- }\r
+ /**\r
+ * Inserts the specified contents at the caret position.\r
+ */\r
+ _insert : function(h, skip_undo) {\r
+ var ed = this.editor, r = ed.selection.getRng();\r
\r
- if (search == mdot) {\r
- if (np.nodeType == 1 && new RegExp('^o(\\s+| )').test(np.innerHTML)) {\r
- // Second level of nesting\r
- if (!prevul) {\r
- prevul = ul;\r
- ul = ed.dom.create("ul");\r
- prevul.appendChild(ul);\r
- }\r
- np.innerHTML = np.innerHTML.replace(/^o/, '');\r
- } else {\r
- // Pop the stack if we're going back up to the first level\r
- if (prevul) {\r
- ul = prevul;\r
- prevul = null;\r
- }\r
- // Not element or middot paragraph\r
- if (np.nodeType != 1 || np.innerHTML.indexOf(search) != 0)\r
- break;\r
- }\r
- } else {\r
- // Not element or middot paragraph\r
- if (np.nodeType != 1 || np.innerHTML.indexOf(search) != 0)\r
- break;\r
+ // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells.\r
+ if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer)\r
+ ed.getDoc().execCommand('Delete', false, null);\r
+\r
+ // It's better to use the insertHTML method on Gecko since it will combine paragraphs correctly before inserting the contents\r
+ ed.execCommand(tinymce.isGecko ? 'insertHTML' : 'mceInsertContent', false, h, {skip_undo : skip_undo});\r
+ },\r
+\r
+ /**\r
+ * Instead of the old plain text method which tried to re-create a paste operation, the\r
+ * new approach adds a plain text mode toggle switch that changes the behavior of paste.\r
+ * This function is passed the same input that the regular paste plugin produces.\r
+ * It performs additional scrubbing and produces (and inserts) the plain text.\r
+ * This approach leverages all of the great existing functionality in the paste\r
+ * plugin, and requires minimal changes to add the new functionality.\r
+ * Speednet - June 2009\r
+ */\r
+ _insertPlainText : function(ed, dom, h) {\r
+ var i, len, pos, rpos, node, breakElms, before, after,\r
+ w = ed.getWin(),\r
+ d = ed.getDoc(),\r
+ sel = ed.selection,\r
+ is = tinymce.is,\r
+ inArray = tinymce.inArray,\r
+ linebr = getParam(ed, "paste_text_linebreaktype"),\r
+ rl = getParam(ed, "paste_text_replacements");\r
+\r
+ function process(items) {\r
+ each(items, function(v) {\r
+ if (v.constructor == RegExp)\r
+ h = h.replace(v, "");\r
+ else\r
+ h = h.replace(v[0], v[1]);\r
+ });\r
+ };\r
+\r
+ if ((typeof(h) === "string") && (h.length > 0)) {\r
+ if (!entities)\r
+ entities = ("34,quot,38,amp,39,apos,60,lt,62,gt," + ed.serializer.settings.entities).split(",");\r
+\r
+ // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line\r
+ if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(h)) {\r
+ process([\r
+ /[\n\r]+/g\r
+ ]);\r
+ } else {\r
+ // Otherwise just get rid of carriage returns (only need linefeeds)\r
+ process([\r
+ /\r+/g\r
+ ]);\r
+ }\r
+\r
+ process([\r
+ [/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"], // Block tags get a blank line after them\r
+ [/<br[^>]*>|<\/tr>/gi, "\n"], // Single linebreak for <br /> tags and table rows\r
+ [/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"], // Table cells get tabs betweem them\r
+ /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags\r
+ [/ /gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*)\r
+ [\r
+ // HTML entity\r
+ /&(#\d+|[a-z0-9]{1,10});/gi,\r
+\r
+ // Replace with actual character\r
+ function(e, s) {\r
+ if (s.charAt(0) === "#") {\r
+ return String.fromCharCode(s.slice(1));\r
+ }\r
+ else {\r
+ return ((e = inArray(entities, s)) > 0)? String.fromCharCode(entities[e-1]) : " ";\r
}\r
+ }\r
+ ],\r
+ [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"], // Cool little RegExp deletes whitespace around linebreak chars.\r
+ [/\n{3,}/g, "\n\n"], // Max. 2 consecutive linebreaks\r
+ /^\s+|\s+$/g // Trim the front & back\r
+ ]);\r
\r
- cp = np.nextSibling;\r
- li = ed.dom.create("li");\r
- li.innerHTML = np.innerHTML.replace(new RegExp('' + mdot + '|' + bull + '|--list--| ', "gi"), '');\r
- np.parentNode.removeChild(np);\r
- ul.appendChild(li);\r
- np = cp;\r
- }\r
+ h = dom.encode(h);\r
\r
- p.parentNode.replaceChild(ul, p);\r
+ // Delete any highlighted text before pasting\r
+ if (!sel.isCollapsed()) {\r
+ d.execCommand("Delete", false, null);\r
+ }\r
\r
- return true;\r
+ // Perform default or custom replacements\r
+ if (is(rl, "array") || (is(rl, "array"))) {\r
+ process(rl);\r
+ }\r
+ else if (is(rl, "string")) {\r
+ process(new RegExp(rl, "gi"));\r
}\r
- }\r
\r
- return false;\r
- },\r
+ // Treat paragraphs as specified in the config\r
+ if (linebr == "none") {\r
+ process([\r
+ [/\n+/g, " "]\r
+ ]);\r
+ }\r
+ else if (linebr == "br") {\r
+ process([\r
+ [/\n/g, "<br />"]\r
+ ]);\r
+ }\r
+ else {\r
+ process([\r
+ /^\s+|\s+$/g,\r
+ [/\n\n/g, "</p><p>"],\r
+ [/\n/g, "<br />"]\r
+ ]);\r
+ }\r
+\r
+ // This next piece of code handles the situation where we're pasting more than one paragraph of plain\r
+ // text, and we are pasting the content into the middle of a block node in the editor. The block\r
+ // node gets split at the selection point into "Para A" and "Para B" (for the purposes of explaining).\r
+ // The first paragraph of the pasted text is appended to "Para A", and the last paragraph of the\r
+ // pasted text is prepended to "Para B". Any other paragraphs of pasted text are placed between\r
+ // "Para A" and "Para B". This code solves a host of problems with the original plain text plugin and\r
+ // now handles styles correctly. (Pasting plain text into a styled paragraph is supposed to make the\r
+ // plain text take the same style as the existing paragraph.)\r
+ if ((pos = h.indexOf("</p><p>")) != -1) {\r
+ rpos = h.lastIndexOf("</p><p>");\r
+ node = sel.getNode(); \r
+ breakElms = []; // Get list of elements to break \r
+\r
+ do {\r
+ if (node.nodeType == 1) {\r
+ // Don't break tables and break at body\r
+ if (node.nodeName == "TD" || node.nodeName == "BODY") {\r
+ break;\r
+ }\r
+\r
+ breakElms[breakElms.length] = node;\r
+ }\r
+ } while (node = node.parentNode);\r
\r
- _clipboardHTML : function() {\r
- var div = document.getElementById('_TinyMCE_clipboardHTML');\r
+ // Are we in the middle of a block node?\r
+ if (breakElms.length > 0) {\r
+ before = h.substring(0, pos);\r
+ after = "";\r
\r
- if (!div) {\r
- var div = document.createElement('DIV');\r
- div.id = '_TinyMCE_clipboardHTML';\r
+ for (i=0, len=breakElms.length; i<len; i++) {\r
+ before += "</" + breakElms[i].nodeName.toLowerCase() + ">";\r
+ after += "<" + breakElms[breakElms.length-i-1].nodeName.toLowerCase() + ">";\r
+ }\r
\r
- with (div.style) {\r
- visibility = 'hidden';\r
- overflow = 'hidden';\r
- position = 'absolute';\r
- width = 1;\r
- height = 1;\r
+ if (pos == rpos) {\r
+ h = before + after + h.substring(pos+7);\r
+ }\r
+ else {\r
+ h = before + h.substring(pos+4, rpos+4) + after + h.substring(rpos+7);\r
+ }\r
+ }\r
}\r
\r
- document.body.appendChild(div);\r
+ // Insert content at the caret, plus add a marker for repositioning the caret\r
+ ed.execCommand("mceInsertRawHTML", false, h + '<span id="_plain_text_marker"> </span>');\r
+\r
+ // Reposition the caret to the marker, which was placed immediately after the inserted content.\r
+ // Needs to be done asynchronously (in window.setTimeout) or else it doesn't work in all browsers.\r
+ // The second part of the code scrolls the content up if the caret is positioned off-screen.\r
+ // This is only necessary for WebKit browsers, but it doesn't hurt to use for all.\r
+ window.setTimeout(function() {\r
+ var marker = dom.get('_plain_text_marker'),\r
+ elm, vp, y, elmHeight;\r
+\r
+ sel.select(marker, false);\r
+ d.execCommand("Delete", false, null);\r
+ marker = null;\r
+\r
+ // Get element, position and height\r
+ elm = sel.getStart();\r
+ vp = dom.getViewPort(w);\r
+ y = dom.getPos(elm).y;\r
+ elmHeight = elm.clientHeight;\r
+\r
+ // Is element within viewport if not then scroll it into view\r
+ if ((y < vp.y) || (y + elmHeight > vp.y + vp.h)) {\r
+ d.body.scrollTop = y < vp.y ? y : y - vp.h + 25;\r
+ }\r
+ }, 0);\r
+ }\r
+ },\r
+\r
+ /**\r
+ * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine.\r
+ */\r
+ _legacySupport : function() {\r
+ var t = this, ed = t.editor;\r
+\r
+ // Register command(s) for backwards compatibility\r
+ ed.addCommand("mcePasteWord", function() {\r
+ ed.windowManager.open({\r
+ file: t.url + "/pasteword.htm",\r
+ width: parseInt(getParam(ed, "paste_dialog_width")),\r
+ height: parseInt(getParam(ed, "paste_dialog_height")),\r
+ inline: 1\r
+ });\r
+ });\r
+\r
+ if (getParam(ed, "paste_text_use_dialog")) {\r
+ ed.addCommand("mcePasteText", function() {\r
+ ed.windowManager.open({\r
+ file : t.url + "/pastetext.htm",\r
+ width: parseInt(getParam(ed, "paste_dialog_width")),\r
+ height: parseInt(getParam(ed, "paste_dialog_height")),\r
+ inline : 1\r
+ });\r
+ });\r
}\r
\r
- div.innerHTML = '';\r
- var rng = document.body.createTextRange();\r
- rng.moveToElementText(div);\r
- rng.execCommand('Paste');\r
- var html = div.innerHTML;\r
- div.innerHTML = '';\r
- return html;\r
+ // Register button for backwards compatibility\r
+ ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"});\r
}\r
});\r
\r
// Register plugin\r
- tinymce.PluginManager.add('paste', tinymce.plugins.PastePlugin);\r
+ tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin);\r
})();\r
tinyMCEPopup.requireLangPack();\r
\r
-function saveContent() {\r
- if (document.forms[0].htmlSource.value == '') {\r
+var PasteTextDialog = {\r
+ init : function() {\r
+ this.resize();\r
+ },\r
+\r
+ insert : function() {\r
+ var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines;\r
+\r
+ // Convert linebreaks into paragraphs\r
+ if (document.getElementById('linebreaks').checked) {\r
+ lines = h.split(/\r?\n/);\r
+ if (lines.length > 1) {\r
+ h = '';\r
+ tinymce.each(lines, function(row) {\r
+ h += '<p>' + row + '</p>';\r
+ });\r
+ }\r
+ }\r
+\r
+ tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h});\r
tinyMCEPopup.close();\r
- return false;\r
- }\r
-\r
- tinyMCEPopup.execCommand('mcePasteText', false, {\r
- html : document.forms[0].htmlSource.value,\r
- linebreaks : document.forms[0].linebreaks.checked\r
- });\r
-\r
- tinyMCEPopup.close();\r
-}\r
+ },\r
\r
-function onLoadInit() {\r
- tinyMCEPopup.resizeToInnerSize();\r
+ resize : function() {\r
+ var vp = tinyMCEPopup.dom.getViewPort(window), el;\r
\r
- // Remove Gecko spellchecking\r
- if (tinymce.isGecko)\r
- document.body.spellcheck = tinyMCEPopup.getParam("gecko_spellcheck");\r
+ el = document.getElementById('content');\r
\r
- resizeInputs();\r
-}\r
-\r
-var wHeight=0, wWidth=0, owHeight=0, owWidth=0;\r
-\r
-function resizeInputs() {\r
- if (!tinymce.isIE) {\r
- wHeight = self.innerHeight-80;\r
- wWidth = self.innerWidth-17;\r
- } else {\r
- wHeight = document.body.clientHeight-80;\r
- wWidth = document.body.clientWidth-17;\r
+ el.style.width = (vp.w - 20) + 'px';\r
+ el.style.height = (vp.h - 90) + 'px';\r
}\r
+};\r
\r
- document.forms[0].htmlSource.style.height = Math.abs(wHeight) + 'px';\r
- document.forms[0].htmlSource.style.width = Math.abs(wWidth) + 'px';\r
-}\r
-\r
-tinyMCEPopup.onInit.add(onLoadInit);
\ No newline at end of file
+tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog);\r
tinyMCEPopup.requireLangPack();\r
\r
-function saveContent() {\r
- var html = document.getElementById("frmData").contentWindow.document.body.innerHTML;\r
-\r
- if (html == ''){\r
+var PasteWordDialog = {\r
+ init : function() {\r
+ var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = '';\r
+\r
+ // Create iframe\r
+ el.innerHTML = '<iframe id="iframe" src="javascript:\'\';" frameBorder="0" style="border: 1px solid gray"></iframe>';\r
+ ifr = document.getElementById('iframe');\r
+ doc = ifr.contentWindow.document;\r
+\r
+ // Force absolute CSS urls\r
+ css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")];\r
+ css = css.concat(tinymce.explode(ed.settings.content_css) || []);\r
+ tinymce.each(css, function(u) {\r
+ cssHTML += '<link href="' + ed.documentBaseURI.toAbsolute('' + u) + '" rel="stylesheet" type="text/css" />';\r
+ });\r
+\r
+ // Write content into iframe\r
+ doc.open();\r
+ doc.write('<html><head>' + cssHTML + '</head><body class="mceContentBody" spellcheck="false"></body></html>');\r
+ doc.close();\r
+\r
+ doc.designMode = 'on';\r
+ this.resize();\r
+\r
+ window.setTimeout(function() {\r
+ ifr.contentWindow.focus();\r
+ }, 10);\r
+ },\r
+\r
+ insert : function() {\r
+ var h = document.getElementById('iframe').contentWindow.document.body.innerHTML;\r
+\r
+ tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true});\r
tinyMCEPopup.close();\r
- return false;\r
- }\r
-\r
- tinyMCEPopup.execCommand('mcePasteWord', false, html);\r
- tinyMCEPopup.close();\r
-}\r
-\r
-function onLoadInit() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- // Fix for endless reloading in FF\r
- window.setTimeout(createIFrame, 10);\r
-}\r
-\r
-function createIFrame() {\r
- document.getElementById('iframecontainer').innerHTML = '<iframe id="frmData" name="frmData" class="sourceIframe" src="blank.htm" height="280" width="400" frameborder="0" style="background-color:#FFFFFF; width:100%;" dir="ltr" wrap="soft"></iframe>';\r
-}\r
+ },\r
\r
-var wHeight=0, wWidth=0, owHeight=0, owWidth=0;\r
+ resize : function() {\r
+ var vp = tinyMCEPopup.dom.getViewPort(window), el;\r
\r
-function initIframe(doc) {\r
- var dir = tinyMCEPopup.editor.settings.directionality;\r
-\r
- doc.body.dir = dir;\r
-\r
- // Remove Gecko spellchecking\r
- if (tinymce.isGecko)\r
- doc.body.spellcheck = tinyMCEPopup.getParam("gecko_spellcheck");\r
-\r
- resizeInputs();\r
-}\r
-\r
-function resizeInputs() {\r
- if (!tinymce.isIE) {\r
- wHeight = self.innerHeight - 80;\r
- wWidth = self.innerWidth - 18;\r
- } else {\r
- wHeight = document.body.clientHeight - 80;\r
- wWidth = document.body.clientWidth - 18;\r
- }\r
+ el = document.getElementById('iframe');\r
\r
- var elm = document.getElementById('frmData');\r
- if (elm) {\r
- elm.style.height = Math.abs(wHeight) + 'px';\r
- elm.style.width = Math.abs(wWidth) + 'px';\r
+ if (el) {\r
+ el.style.width = (vp.w - 20) + 'px';\r
+ el.style.height = (vp.h - 90) + 'px';\r
+ }\r
}\r
-}\r
+};\r
\r
-tinyMCEPopup.onInit.add(onLoadInit);\r
+tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog);\r
--- /dev/null
+tinyMCE.addI18n('et.paste_dlg',{\r
+text_title:"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks.",\r
+text_linebreaks:"J\u00E4ta reavahetused",\r
+word_title:"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks."\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.paste_dlg',{\r
+text_title:"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00EAtre.",\r
+text_linebreaks:"Conserver les retours \u00E0 la ligne",\r
+word_title:"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00EAtre."\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.paste_dlg',{\r
+text_title:"Haszn\u00E1lja a Ctrl+V-t a billenty\u0171zet\u00E9n a beilleszt\u00E9shez.",\r
+text_linebreaks:"Sort\u00F6r\u00E9sek megtart\u00E1sa",\r
+word_title:"Haszn\u00E1lja a Ctrl+V-t a billenty\u0171zet\u00E9n a beilleszt\u00E9shez."\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('ru.paste_dlg',{\r
+text_title:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0442\u0435\u043A\u0441\u0442\u0430 \u0432 \u043E\u043A\u043D\u043E.",\r
+text_linebreaks:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u044B \u0441\u0442\u0440\u043E\u043A",\r
+word_title:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0442\u0435\u043A\u0441\u0442\u0430 \u0432 \u043E\u043A\u043D\u043E."\r
+});
\ No newline at end of file
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
<title>{#paste.paste_text_desc}</title>\r
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\r
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
<script type="text/javascript" src="js/pastetext.js"></script>\r
- <base target="_self" />\r
</head>\r
-<body onresize="resizeInputs();" style="display:none; overflow:hidden;">\r
-<form name="source" onsubmit="saveContent();return false;" action="#">\r
- <div style="float: left" class="title">{#paste.paste_text_desc}</div>\r
+<body onresize="PasteTextDialog.resize();" style="display:none; overflow:hidden;">\r
+ <form name="source" onsubmit="return PasteTextDialog.insert();" action="#">\r
+ <div style="float: left" class="title">{#paste.paste_text_desc}</div>\r
\r
- <div style="float: right">\r
- <input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>\r
- </div>\r
+ <div style="float: right">\r
+ <input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>\r
+ </div>\r
\r
- <br style="clear: both" />\r
+ <br style="clear: both" />\r
\r
- <div>{#paste_dlg.text_title}</div>\r
+ <div>{#paste_dlg.text_title}</div>\r
\r
- <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,mono; font-size: 12px;" dir="ltr" wrap="soft" class="mceFocus"></textarea>\r
+ <textarea id="content" name="content" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,mono; font-size: 12px;" dir="ltr" wrap="soft" class="mceFocus"></textarea>\r
\r
- <div class="mceActionPanel">\r
- <div style="float: left">\r
+ <div class="mceActionPanel">\r
<input type="submit" name="insert" value="{#insert}" id="insert" />\r
- </div>\r
-\r
- <div style="float: right">\r
<input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />\r
</div>\r
- </div>\r
-</form>\r
+ </form>\r
</body> \r
</html>
\ No newline at end of file
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\r
<title>{#paste.paste_word_desc}</title>\r
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
<script type="text/javascript" src="js/pasteword.js"></script>\r
- <link href="css/pasteword.css" rel="stylesheet" type="text/css" />\r
- <base target="_self" />\r
</head>\r
-<body onresize="resizeInputs();" style="display:none; overflow:hidden;">\r
- <form name="source" onsubmit="saveContent();" action="#">\r
+<body onresize="PasteWordDialog.resize();" style="display:none; overflow:hidden;">\r
+ <form name="source" onsubmit="return PasteWordDialog.insert();" action="#">\r
<div class="title">{#paste.paste_word_desc}</div>\r
\r
<div>{#paste_dlg.word_title}</div>\r
<div id="iframecontainer"></div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="button" id="insert" name="insert" value="{#insert}" onclick="saveContent();" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
-(function(){tinymce.create('tinymce.plugins.Preview',{init:function(ed,url){var t=this,css=tinymce.explode(ed.settings.content_css);t.editor=ed;tinymce.each(css,function(u,k){css[k]=ed.documentBaseURI.toAbsolute(u);});ed.addCommand('mcePreview',function(){ed.windowManager.open({file:ed.getParam("plugin_preview_pageurl",url+"/preview.html"),width:parseInt(ed.getParam("plugin_preview_width","550")),height:parseInt(ed.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:css.join(','),inline:ed.getParam("plugin_preview_inline",1)},{base:ed.documentBaseURI.getURI()});});ed.addButton('preview',{title:'preview.preview_desc',cmd:'mcePreview'});},getInfo:function(){return{longname:'Preview',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('preview',tinymce.plugins.Preview);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})();
\ No newline at end of file
-/*
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
+/**
+ * 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() {
height : parseInt(ed.getParam("plugin_preview_height", "600")),
resizable : "yes",
scrollbars : "yes",
- popup_css : css.join(','),
+ popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"),
inline : ed.getParam("plugin_preview_inline", 1)
}, {
base : ed.documentBaseURI.getURI()
// Register plugin
tinymce.PluginManager.add('preview', tinymce.plugins.Preview);
-})();
+})();
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
-<script language="javascript" src="../../tiny_mce_popup.js"></script>\r
+<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
<script type="text/javascript" src="jscripts/embed.js"></script>\r
-<script type="text/javascript">\r
-tinyMCEPopup.onInit.add(function(ed) {\r
- var dom = tinyMCEPopup.dom;\r
-\r
- dom.setHTML('content', ed.getContent());\r
-});\r
-\r
+<script type="text/javascript"><!--\r
document.write('<base href="' + tinyMCEPopup.getWindowArg("base") + '">');\r
+// -->\r
</script>\r
<title>{#preview.preview_desc}</title>\r
</head>\r
<body id="content">\r
-<!-- Gets filled with editor contents -->\r
+<script type="text/javascript">\r
+ document.write(tinyMCEPopup.editor.getContent());\r
+</script>\r
</body>\r
</html>\r
-(function(){tinymce.create('tinymce.plugins.Print',{init:function(ed,url){ed.addCommand('mcePrint',function(){ed.getWin().print();});ed.addButton('print',{title:'print.print_desc',cmd:'mcePrint'});},getInfo:function(){return{longname:'Print',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('print',tinymce.plugins.Print);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})();
\ No newline at end of file
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
+++ /dev/null
-<!-- WebKit -->
\ No newline at end of file
+++ /dev/null
-(function(){var Event=tinymce.dom.Event,grep=tinymce.grep,each=tinymce.each,inArray=tinymce.inArray,isOldWebKit=tinymce.isOldWebKit;function isEmpty(d,e,f){var w,n;w=d.createTreeWalker(e,NodeFilter.SHOW_ALL,null,false);while(n=w.nextNode()){if(f){if(!f(n))return false;}if(n.nodeType==3&&n.nodeValue&&/[^\s\u00a0]+/.test(n.nodeValue))return false;if(n.nodeType==1&&/^(HR|IMG|TABLE)$/.test(n.nodeName))return false;}return true;};tinymce.create('tinymce.plugins.Safari',{init:function(ed){var t=this,dom;if(!tinymce.isWebKit)return;t.editor=ed;t.webKitFontSizes=['x-small','small','medium','large','x-large','xx-large','-webkit-xxx-large'];t.namedFontSizes=['xx-small','x-small','small','medium','large','x-large','xx-large'];ed.addCommand('CreateLink',function(u,v){var n=ed.selection.getNode(),dom=ed.dom,a;if(n&&(/^(left|right)$/i.test(dom.getStyle(n,'float',1))||/^(left|right)$/i.test(dom.getAttrib(n,'align')))){a=dom.create('a',{href:v},n.cloneNode());n.parentNode.replaceChild(a,n);ed.selection.select(a);}else ed.getDoc().execCommand("CreateLink",false,v);});ed.onPaste.add(function(ed,e){function removeStyles(e){e=e.target;if(e.nodeType==1){e.style.cssText='';each(ed.dom.select('*',e),function(e){e.style.cssText='';});}};Event.add(ed.getDoc(),'DOMNodeInserted',removeStyles);window.setTimeout(function(){Event.remove(ed.getDoc(),'DOMNodeInserted',removeStyles);},0);});ed.onKeyUp.add(function(ed,e){var h,b,r,n,s;if(e.keyCode==46||e.keyCode==8){b=ed.getBody();h=b.innerHTML;s=ed.selection;if(b.childNodes.length==1&&!/<(img|hr)/.test(h)&&tinymce.trim(h.replace(/<[^>]+>/g,'')).length==0){ed.setContent('<p><br mce_bogus="1" /></p>',{format:'raw'});n=b.firstChild;r=s.getRng();r.setStart(n,0);r.setEnd(n,0);s.setRng(r);}}});ed.addCommand('FormatBlock',function(u,v){var dom=ed.dom,e=dom.getParent(ed.selection.getNode(),dom.isBlock);if(e)dom.replace(dom.create(v),e,1);else ed.getDoc().execCommand("FormatBlock",false,v);});ed.addCommand('mceInsertContent',function(u,v){ed.getDoc().execCommand("InsertText",false,'mce_marker');ed.getBody().innerHTML=ed.getBody().innerHTML.replace(/mce_marker/g,ed.dom.processHTML(v)+'<span id="_mce_tmp">XX</span>');ed.selection.select(ed.dom.get('_mce_tmp'));ed.getDoc().execCommand("Delete",false,' ');});ed.onKeyPress.add(function(ed,e){var se,li,lic,r1,r2,n,sel,doc,be,af,pa;if(e.keyCode==13){sel=ed.selection;se=sel.getNode();if(e.shiftKey||ed.settings.force_br_newlines&&se.nodeName!='LI'){t._insertBR(ed);Event.cancel(e);}if(li=dom.getParent(se,'LI')){lic=dom.getParent(li,'OL,UL');doc=ed.getDoc();pa=dom.create('p');dom.add(pa,'br',{mce_bogus:"1"});if(isEmpty(doc,li)){if(n=dom.getParent(lic.parentNode,'LI,OL,UL'))return;n=dom.getParent(lic,'p,h1,h2,h3,h4,h5,h6,div')||lic;r1=doc.createRange();r1.setStartBefore(n);r1.setEndBefore(li);r2=doc.createRange();r2.setStartAfter(li);r2.setEndAfter(n);be=r1.cloneContents();af=r2.cloneContents();if(!isEmpty(doc,af))dom.insertAfter(af,n);dom.insertAfter(pa,n);if(!isEmpty(doc,be))dom.insertAfter(be,n);dom.remove(n);n=pa.firstChild;r1=doc.createRange();r1.setStartBefore(n);r1.setEndBefore(n);sel.setRng(r1);return Event.cancel(e);}}}});ed.onExecCommand.add(function(ed,cmd){var sel,dom,bl,bm;if(cmd=='InsertUnorderedList'||cmd=='InsertOrderedList'){sel=ed.selection;dom=ed.dom;if(bl=dom.getParent(sel.getNode(),function(n){return/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName);})){bm=sel.getBookmark();dom.remove(bl,1);sel.moveToBookmark(bm);}}});ed.onClick.add(function(ed,e){e=e.target;if(e.nodeName=='IMG'){t.selElm=e;ed.selection.select(e);}else t.selElm=null;});ed.onInit.add(function(){t._fixWebKitSpans();if(isOldWebKit)t._patchSafari2x(ed);});ed.onSetContent.add(function(){dom=ed.dom;each(['strong','b','em','u','strike','sub','sup','a'],function(v){each(grep(dom.select(v)).reverse(),function(n){var nn=n.nodeName.toLowerCase(),st;if(nn=='a'){if(n.name)dom.replace(dom.create('img',{mce_name:'a',name:n.name,'class':'mceItemAnchor'}),n);return;}switch(nn){case'b':case'strong':if(nn=='b')nn='strong';st='font-weight: bold;';break;case'em':st='font-style: italic;';break;case'u':st='text-decoration: underline;';break;case'sub':st='vertical-align: sub;';break;case'sup':st='vertical-align: super;';break;case'strike':st='text-decoration: line-through;';break;}dom.replace(dom.create('span',{mce_name:nn,style:st,'class':'Apple-style-span'}),n,1);});});});ed.onPreProcess.add(function(ed,o){dom=ed.dom;each(grep(o.node.getElementsByTagName('span')).reverse(),function(n){var v,bg;if(o.get){if(dom.hasClass(n,'Apple-style-span')){bg=n.style.backgroundColor;switch(dom.getAttrib(n,'mce_name')){case'font':if(!ed.settings.convert_fonts_to_spans)dom.setAttrib(n,'style','');break;case'strong':case'em':case'sub':case'sup':dom.setAttrib(n,'style','');break;case'strike':case'u':if(!ed.settings.inline_styles)dom.setAttrib(n,'style','');else dom.setAttrib(n,'mce_name','');break;default:if(!ed.settings.inline_styles)dom.setAttrib(n,'style','');}if(bg)n.style.backgroundColor=bg;}}if(dom.hasClass(n,'mceItemRemoved'))dom.remove(n,1);});});ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/<br \/><\/(h[1-6]|div|p|address|pre)>/g,'</$1>');o.content=o.content.replace(/ id=\"undefined\"/g,'');});},getInfo:function(){return{longname:'Safari compatibility',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_fixWebKitSpans:function(){var t=this,ed=t.editor;if(!isOldWebKit){Event.add(ed.getDoc(),'DOMNodeInserted',function(e){e=e.target;if(e&&e.nodeType==1)t._fixAppleSpan(e);});}else{ed.onExecCommand.add(function(){each(ed.dom.select('span'),function(n){t._fixAppleSpan(n);});ed.nodeChanged();});}},_fixAppleSpan:function(e){var ed=this.editor,dom=ed.dom,fz=this.webKitFontSizes,fzn=this.namedFontSizes,s=ed.settings,st,p;if(dom.getAttrib(e,'mce_fixed'))return;if(e.nodeName=='SPAN'&&e.className=='Apple-style-span'){st=e.style;if(!s.convert_fonts_to_spans){if(st.fontSize){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'size',inArray(fz,st.fontSize)+1);}if(st.fontFamily){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'face',st.fontFamily);}if(st.color){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'color',dom.toHex(st.color));}if(st.backgroundColor){dom.setAttrib(e,'mce_name','font');dom.setStyle(e,'background-color',st.backgroundColor);}}else{if(st.fontSize)dom.setStyle(e,'fontSize',fzn[inArray(fz,st.fontSize)]);}if(st.fontWeight=='bold')dom.setAttrib(e,'mce_name','strong');if(st.fontStyle=='italic')dom.setAttrib(e,'mce_name','em');if(st.textDecoration=='underline')dom.setAttrib(e,'mce_name','u');if(st.textDecoration=='line-through')dom.setAttrib(e,'mce_name','strike');if(st.verticalAlign=='super')dom.setAttrib(e,'mce_name','sup');if(st.verticalAlign=='sub')dom.setAttrib(e,'mce_name','sub');dom.setAttrib(e,'mce_fixed','1');}},_patchSafari2x:function(ed){var t=this,setContent,getNode,dom=ed.dom,lr;if(ed.windowManager.onBeforeOpen){ed.windowManager.onBeforeOpen.add(function(){r=ed.selection.getRng();});}ed.selection.select=function(n){this.getSel().setBaseAndExtent(n,0,n,1);};getNode=ed.selection.getNode;ed.selection.getNode=function(){return t.selElm||getNode.call(this);};ed.selection.getRng=function(){var t=this,s=t.getSel(),d=ed.getDoc(),r,rb,ra,di;if(s.anchorNode){r=d.createRange();try{rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(1);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(1);di=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;r.setStart(di?s.anchorNode:s.focusNode,di?s.anchorOffset:s.focusOffset);r.setEnd(di?s.focusNode:s.anchorNode,di?s.focusOffset:s.anchorOffset);lr=r;}catch(ex){}}return r||lr;};setContent=ed.selection.setContent;ed.selection.setContent=function(h,s){var r=this.getRng(),b;try{setContent.call(this,h,s);}catch(ex){b=dom.create('body');b.innerHTML=h;each(b.childNodes,function(n){r.insertNode(n.cloneNode(true));});}};},_insertBR:function(ed){var dom=ed.dom,s=ed.selection,r=s.getRng(),br;r.insertNode(br=dom.create('br'));r.setStartAfter(br);r.setEndAfter(br);s.setRng(r);if(s.getSel().focusNode==br.previousSibling){s.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'),br));s.collapse(1);}ed.getWin().scrollTo(0,dom.getPos(s.getRng().startContainer).y);}});tinymce.PluginManager.add('safari',tinymce.plugins.Safari);})();
\ No newline at end of file
+++ /dev/null
-/*\r
- * Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-(function() {\r
- var Event = tinymce.dom.Event, grep = tinymce.grep, each = tinymce.each, inArray = tinymce.inArray, isOldWebKit = tinymce.isOldWebKit;\r
-\r
- function isEmpty(d, e, f) {\r
- var w, n;\r
-\r
- w = d.createTreeWalker(e, NodeFilter.SHOW_ALL, null, false);\r
- while (n = w.nextNode()) {\r
- // Filter func\r
- if (f) {\r
- if (!f(n))\r
- return false;\r
- }\r
-\r
- // Non whitespace text node\r
- if (n.nodeType == 3 && n.nodeValue && /[^\s\u00a0]+/.test(n.nodeValue))\r
- return false;\r
-\r
- // Is non text element byt still content\r
- if (n.nodeType == 1 && /^(HR|IMG|TABLE)$/.test(n.nodeName))\r
- return false;\r
- }\r
-\r
- return true;\r
- };\r
-\r
- tinymce.create('tinymce.plugins.Safari', {\r
- init : function(ed) {\r
- var t = this, dom;\r
-\r
- // Ignore on non webkit\r
- if (!tinymce.isWebKit)\r
- return;\r
-\r
- t.editor = ed;\r
- t.webKitFontSizes = ['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', '-webkit-xxx-large'];\r
- t.namedFontSizes = ['xx-small', 'x-small','small','medium','large','x-large', 'xx-large'];\r
-\r
- // Safari CreateLink command will not work correctly on images that is aligned\r
- ed.addCommand('CreateLink', function(u, v) {\r
- var n = ed.selection.getNode(), dom = ed.dom, a;\r
-\r
- if (n && (/^(left|right)$/i.test(dom.getStyle(n, 'float', 1)) || /^(left|right)$/i.test(dom.getAttrib(n, 'align')))) {\r
- a = dom.create('a', {href : v}, n.cloneNode());\r
- n.parentNode.replaceChild(a, n);\r
- ed.selection.select(a);\r
- } else\r
- ed.getDoc().execCommand("CreateLink", false, v);\r
- });\r
-\r
- ed.onPaste.add(function(ed, e) {\r
- function removeStyles(e) {\r
- e = e.target;\r
-\r
- if (e.nodeType == 1) {\r
- e.style.cssText = '';\r
-\r
- each(ed.dom.select('*', e), function(e) {\r
- e.style.cssText = '';\r
- });\r
- }\r
- };\r
-\r
- Event.add(ed.getDoc(), 'DOMNodeInserted', removeStyles);\r
-\r
- window.setTimeout(function() {\r
- Event.remove(ed.getDoc(), 'DOMNodeInserted', removeStyles);\r
- }, 0);\r
- });\r
-\r
- ed.onKeyUp.add(function(ed, e) {\r
- var h, b, r, n, s;\r
-\r
- // If backspace or delete key\r
- if (e.keyCode == 46 || e.keyCode == 8) {\r
- b = ed.getBody();\r
- h = b.innerHTML;\r
- s = ed.selection;\r
-\r
- // If there is no text content or images or hr elements then remove everything\r
- if (b.childNodes.length == 1 && !/<(img|hr)/.test(h) && tinymce.trim(h.replace(/<[^>]+>/g, '')).length == 0) {\r
- // Inject paragrah and bogus br\r
- ed.setContent('<p><br mce_bogus="1" /></p>', {format : 'raw'});\r
-\r
- // Move caret before bogus br\r
- n = b.firstChild;\r
- r = s.getRng();\r
- r.setStart(n, 0);\r
- r.setEnd(n, 0);\r
- s.setRng(r);\r
- }\r
- }\r
- });\r
-\r
- // Workaround for FormatBlock bug, http://bugs.webkit.org/show_bug.cgi?id=16004\r
- ed.addCommand('FormatBlock', function(u, v) {\r
- var dom = ed.dom, e = dom.getParent(ed.selection.getNode(), dom.isBlock);\r
-\r
- if (e)\r
- dom.replace(dom.create(v), e, 1);\r
- else\r
- ed.getDoc().execCommand("FormatBlock", false, v);\r
- });\r
-\r
- // Workaround for InsertHTML bug, http://bugs.webkit.org/show_bug.cgi?id=16382\r
- ed.addCommand('mceInsertContent', function(u, v) {\r
- ed.getDoc().execCommand("InsertText", false, 'mce_marker');\r
- ed.getBody().innerHTML = ed.getBody().innerHTML.replace(/mce_marker/g, ed.dom.processHTML(v) + '<span id="_mce_tmp">XX</span>');\r
- ed.selection.select(ed.dom.get('_mce_tmp'));\r
- ed.getDoc().execCommand("Delete", false, ' ');\r
- });\r
-\r
- ed.onKeyPress.add(function(ed, e) {\r
- var se, li, lic, r1, r2, n, sel, doc, be, af, pa;\r
-\r
- if (e.keyCode == 13) {\r
- sel = ed.selection;\r
- se = sel.getNode();\r
-\r
- // Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973\r
- if (e.shiftKey || ed.settings.force_br_newlines && se.nodeName != 'LI') {\r
- t._insertBR(ed);\r
- Event.cancel(e);\r
- }\r
-\r
- // Workaround for DIV elements produced by Safari\r
- if (li = dom.getParent(se, 'LI')) {\r
- lic = dom.getParent(li, 'OL,UL');\r
- doc = ed.getDoc();\r
-\r
- pa = dom.create('p');\r
- dom.add(pa, 'br', {mce_bogus : "1"});\r
-\r
- if (isEmpty(doc, li)) {\r
- // If list in list then use browser default behavior\r
- if (n = dom.getParent(lic.parentNode, 'LI,OL,UL'))\r
- return;\r
-\r
- n = dom.getParent(lic, 'p,h1,h2,h3,h4,h5,h6,div') || lic;\r
-\r
- // Create range from the start of block element to the list item\r
- r1 = doc.createRange();\r
- r1.setStartBefore(n);\r
- r1.setEndBefore(li);\r
-\r
- // Create range after the list to the end of block element\r
- r2 = doc.createRange();\r
- r2.setStartAfter(li);\r
- r2.setEndAfter(n);\r
-\r
- be = r1.cloneContents();\r
- af = r2.cloneContents();\r
-\r
- if (!isEmpty(doc, af))\r
- dom.insertAfter(af, n);\r
-\r
- dom.insertAfter(pa, n);\r
-\r
- if (!isEmpty(doc, be))\r
- dom.insertAfter(be, n);\r
-\r
- dom.remove(n);\r
-\r
- n = pa.firstChild;\r
- r1 = doc.createRange();\r
- r1.setStartBefore(n);\r
- r1.setEndBefore(n);\r
- sel.setRng(r1);\r
-\r
- return Event.cancel(e);\r
- }\r
- }\r
- }\r
- });\r
-\r
- // Safari doesn't place lists outside block elements\r
- ed.onExecCommand.add(function(ed, cmd) {\r
- var sel, dom, bl, bm;\r
-\r
- if (cmd == 'InsertUnorderedList' || cmd == 'InsertOrderedList') {\r
- sel = ed.selection;\r
- dom = ed.dom;\r
-\r
- if (bl = dom.getParent(sel.getNode(), function(n) {return /^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName);})) {\r
- bm = sel.getBookmark();\r
- dom.remove(bl, 1);\r
- sel.moveToBookmark(bm);\r
- }\r
- }\r
- });\r
-\r
- // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250\r
- ed.onClick.add(function(ed, e) {\r
- e = e.target;\r
-\r
- if (e.nodeName == 'IMG') {\r
- t.selElm = e;\r
- ed.selection.select(e);\r
- } else\r
- t.selElm = null;\r
- });\r
-\r
- ed.onInit.add(function() {\r
- t._fixWebKitSpans();\r
-\r
- if (isOldWebKit)\r
- t._patchSafari2x(ed);\r
- });\r
-\r
- ed.onSetContent.add(function() {\r
- dom = ed.dom;\r
-\r
- // Convert strong,b,em,u,strike to spans\r
- each(['strong','b','em','u','strike','sub','sup','a'], function(v) {\r
- each(grep(dom.select(v)).reverse(), function(n) {\r
- var nn = n.nodeName.toLowerCase(), st;\r
-\r
- // Convert anchors into images\r
- if (nn == 'a') {\r
- if (n.name)\r
- dom.replace(dom.create('img', {mce_name : 'a', name : n.name, 'class' : 'mceItemAnchor'}), n);\r
-\r
- return;\r
- }\r
-\r
- switch (nn) {\r
- case 'b':\r
- case 'strong':\r
- if (nn == 'b')\r
- nn = 'strong';\r
-\r
- st = 'font-weight: bold;';\r
- break;\r
-\r
- case 'em':\r
- st = 'font-style: italic;';\r
- break;\r
-\r
- case 'u':\r
- st = 'text-decoration: underline;';\r
- break;\r
-\r
- case 'sub':\r
- st = 'vertical-align: sub;';\r
- break;\r
-\r
- case 'sup':\r
- st = 'vertical-align: super;';\r
- break;\r
-\r
- case 'strike':\r
- st = 'text-decoration: line-through;';\r
- break;\r
- }\r
-\r
- dom.replace(dom.create('span', {mce_name : nn, style : st, 'class' : 'Apple-style-span'}), n, 1);\r
- });\r
- });\r
- });\r
-\r
- ed.onPreProcess.add(function(ed, o) {\r
- dom = ed.dom;\r
-\r
- each(grep(o.node.getElementsByTagName('span')).reverse(), function(n) {\r
- var v, bg;\r
-\r
- if (o.get) {\r
- if (dom.hasClass(n, 'Apple-style-span')) {\r
- bg = n.style.backgroundColor;\r
-\r
- switch (dom.getAttrib(n, 'mce_name')) {\r
- case 'font':\r
- if (!ed.settings.convert_fonts_to_spans)\r
- dom.setAttrib(n, 'style', '');\r
- break;\r
-\r
- case 'strong':\r
- case 'em':\r
- case 'sub':\r
- case 'sup':\r
- dom.setAttrib(n, 'style', '');\r
- break;\r
-\r
- case 'strike':\r
- case 'u':\r
- if (!ed.settings.inline_styles)\r
- dom.setAttrib(n, 'style', '');\r
- else\r
- dom.setAttrib(n, 'mce_name', '');\r
-\r
- break;\r
-\r
- default:\r
- if (!ed.settings.inline_styles)\r
- dom.setAttrib(n, 'style', '');\r
- }\r
-\r
-\r
- if (bg)\r
- n.style.backgroundColor = bg;\r
- }\r
- }\r
-\r
- if (dom.hasClass(n, 'mceItemRemoved'))\r
- dom.remove(n, 1);\r
- });\r
- });\r
-\r
- ed.onPostProcess.add(function(ed, o) {\r
- // Safari adds BR at end of all block elements\r
- o.content = o.content.replace(/<br \/><\/(h[1-6]|div|p|address|pre)>/g, '</$1>');\r
-\r
- // Safari adds id="undefined" to HR elements\r
- o.content = o.content.replace(/ id=\"undefined\"/g, '');\r
- });\r
- },\r
-\r
- getInfo : function() {\r
- return {\r
- longname : 'Safari compatibility',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari',\r
- version : tinymce.majorVersion + "." + tinymce.minorVersion\r
- };\r
- },\r
-\r
- // Internal methods\r
-\r
- _fixWebKitSpans : function() {\r
- var t = this, ed = t.editor;\r
-\r
- if (!isOldWebKit) {\r
- // Use mutator events on new WebKit\r
- Event.add(ed.getDoc(), 'DOMNodeInserted', function(e) {\r
- e = e.target;\r
-\r
- if (e && e.nodeType == 1)\r
- t._fixAppleSpan(e);\r
- });\r
- } else {\r
- // Do post command processing in old WebKit since the browser crashes on Mutator events :(\r
- ed.onExecCommand.add(function() {\r
- each(ed.dom.select('span'), function(n) {\r
- t._fixAppleSpan(n);\r
- });\r
-\r
- ed.nodeChanged();\r
- });\r
- }\r
- },\r
-\r
- _fixAppleSpan : function(e) {\r
- var ed = this.editor, dom = ed.dom, fz = this.webKitFontSizes, fzn = this.namedFontSizes, s = ed.settings, st, p;\r
-\r
- if (dom.getAttrib(e, 'mce_fixed'))\r
- return;\r
-\r
- // Handle Apple style spans\r
- if (e.nodeName == 'SPAN' && e.className == 'Apple-style-span') {\r
- st = e.style;\r
-\r
- if (!s.convert_fonts_to_spans) {\r
- if (st.fontSize) {\r
- dom.setAttrib(e, 'mce_name', 'font');\r
- dom.setAttrib(e, 'size', inArray(fz, st.fontSize) + 1);\r
- }\r
-\r
- if (st.fontFamily) {\r
- dom.setAttrib(e, 'mce_name', 'font');\r
- dom.setAttrib(e, 'face', st.fontFamily);\r
- }\r
-\r
- if (st.color) {\r
- dom.setAttrib(e, 'mce_name', 'font');\r
- dom.setAttrib(e, 'color', dom.toHex(st.color));\r
- }\r
-\r
- if (st.backgroundColor) {\r
- dom.setAttrib(e, 'mce_name', 'font');\r
- dom.setStyle(e, 'background-color', st.backgroundColor);\r
- }\r
- } else {\r
- if (st.fontSize)\r
- dom.setStyle(e, 'fontSize', fzn[inArray(fz, st.fontSize)]);\r
- }\r
-\r
- if (st.fontWeight == 'bold')\r
- dom.setAttrib(e, 'mce_name', 'strong');\r
-\r
- if (st.fontStyle == 'italic')\r
- dom.setAttrib(e, 'mce_name', 'em');\r
-\r
- if (st.textDecoration == 'underline')\r
- dom.setAttrib(e, 'mce_name', 'u');\r
-\r
- if (st.textDecoration == 'line-through')\r
- dom.setAttrib(e, 'mce_name', 'strike');\r
-\r
- if (st.verticalAlign == 'super')\r
- dom.setAttrib(e, 'mce_name', 'sup');\r
-\r
- if (st.verticalAlign == 'sub')\r
- dom.setAttrib(e, 'mce_name', 'sub');\r
-\r
- dom.setAttrib(e, 'mce_fixed', '1');\r
- }\r
- },\r
-\r
- _patchSafari2x : function(ed) {\r
- var t = this, setContent, getNode, dom = ed.dom, lr;\r
-\r
- // Inline dialogs\r
- if (ed.windowManager.onBeforeOpen) {\r
- ed.windowManager.onBeforeOpen.add(function() {\r
- r = ed.selection.getRng();\r
- });\r
- }\r
-\r
- // Fake select on 2.x\r
- ed.selection.select = function(n) {\r
- this.getSel().setBaseAndExtent(n, 0, n, 1);\r
- };\r
-\r
- getNode = ed.selection.getNode;\r
- ed.selection.getNode = function() {\r
- return t.selElm || getNode.call(this);\r
- };\r
-\r
- // Fake range on Safari 2.x\r
- ed.selection.getRng = function() {\r
- var t = this, s = t.getSel(), d = ed.getDoc(), r, rb, ra, di;\r
-\r
- // Fake range on Safari 2.x\r
- if (s.anchorNode) {\r
- r = d.createRange();\r
-\r
- try {\r
- // Setup before range\r
- rb = d.createRange();\r
- rb.setStart(s.anchorNode, s.anchorOffset);\r
- rb.collapse(1);\r
-\r
- // Setup after range\r
- ra = d.createRange();\r
- ra.setStart(s.focusNode, s.focusOffset);\r
- ra.collapse(1);\r
-\r
- // Setup start/end points by comparing locations\r
- di = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;\r
- r.setStart(di ? s.anchorNode : s.focusNode, di ? s.anchorOffset : s.focusOffset);\r
- r.setEnd(di ? s.focusNode : s.anchorNode, di ? s.focusOffset : s.anchorOffset);\r
-\r
- lr = r;\r
- } catch (ex) {\r
- // Sometimes fails, at least we tried to do it by the book. I hope Safari 2.x will go disappear soooon!!!\r
- }\r
- }\r
-\r
- return r || lr;\r
- };\r
-\r
- // Fix setContent so it works\r
- setContent = ed.selection.setContent;\r
- ed.selection.setContent = function(h, s) {\r
- var r = this.getRng(), b;\r
-\r
- try {\r
- setContent.call(this, h, s);\r
- } catch (ex) {\r
- // Workaround for Safari 2.x\r
- b = dom.create('body');\r
- b.innerHTML = h;\r
-\r
- each(b.childNodes, function(n) {\r
- r.insertNode(n.cloneNode(true));\r
- });\r
- }\r
- };\r
- },\r
-\r
- _insertBR : function(ed) {\r
- var dom = ed.dom, s = ed.selection, r = s.getRng(), br;\r
-\r
- // Insert BR element\r
- r.insertNode(br = dom.create('br'));\r
-\r
- // Place caret after BR\r
- r.setStartAfter(br);\r
- r.setEndAfter(br);\r
- s.setRng(r);\r
-\r
- // Could not place caret after BR then insert an nbsp entity and move the caret\r
- if (s.getSel().focusNode == br.previousSibling) {\r
- s.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br));\r
- s.collapse(1);\r
- }\r
-\r
- // Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117\r
- ed.getWin().scrollTo(0, dom.getPos(s.getRng().startContainer).y);\r
- }\r
- });\r
-\r
- // Register plugin\r
- tinymce.PluginManager.add('safari', tinymce.plugins.Safari);\r
-})();\r
-\r
-(function(){tinymce.create('tinymce.plugins.Save',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceSave',t._save,t);ed.addCommand('mceCancel',t._cancel,t);ed.addButton('save',{title:'save.save_desc',cmd:'mceSave'});ed.addButton('cancel',{title:'save.cancel_desc',cmd:'mceCancel'});ed.onNodeChange.add(t._nodeChange,t);ed.addShortcut('ctrl+s',ed.getLang('save.save_desc'),'mceSave');},getInfo:function(){return{longname:'Save',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_nodeChange:function(ed,cm,n){var ed=this.editor;if(ed.getParam('save_enablewhendirty')){cm.setDisabled('save',!ed.isDirty());cm.setDisabled('cancel',!ed.isDirty());}},_save:function(){var ed=this.editor,formObj,os,i,elementId;formObj=tinymce.DOM.get(ed.id).form||tinymce.DOM.getParent(ed.id,'form');if(ed.getParam("save_enablewhendirty")&&!ed.isDirty())return;tinyMCE.triggerSave();if(os=ed.getParam("save_onsavecallback")){if(ed.execCallback('save_onsavecallback',ed)){ed.startContent=tinymce.trim(ed.getContent({format:'raw'}));ed.nodeChanged();}return;}if(formObj){ed.isNotDirty=true;if(formObj.onsubmit==null||formObj.onsubmit()!=false)formObj.submit();ed.nodeChanged();}else ed.windowManager.alert("Error: No form element found.");},_cancel:function(){var ed=this.editor,os,h=tinymce.trim(ed.startContent);if(os=ed.getParam("save_oncancelcallback")){ed.execCallback('save_oncancelcallback',ed);return;}ed.setContent(h);ed.undoManager.clear();ed.nodeChanged();}});tinymce.PluginManager.add('save',tinymce.plugins.Save);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 851 2008-05-26 15:38:49Z spocke $\r
+ * editor_plugin_src.js\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
-(function(){tinymce.create('tinymce.plugins.SearchReplacePlugin',{init:function(ed,url){function open(m){ed.windowManager.open({file:url+'/searchreplace.htm',width:420+parseInt(ed.getLang('searchreplace.delta_width',0)),height:160+parseInt(ed.getLang('searchreplace.delta_height',0)),inline:1,auto_focus:0},{mode:m,search_string:ed.selection.getContent({format:'text'}),plugin_url:url});};ed.addCommand('mceSearch',function(){open('search');});ed.addCommand('mceReplace',function(){open('replace');});ed.addButton('search',{title:'searchreplace.search_desc',cmd:'mceSearch'});ed.addButton('replace',{title:'searchreplace.replace_desc',cmd:'mceReplace'});ed.addShortcut('ctrl+f','searchreplace.search_desc','mceSearch');},getInfo:function(){return{longname:'Search/Replace',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('searchreplace',tinymce.plugins.SearchReplacePlugin);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 686 2008-03-09 18:13:49Z spocke $\r
+ * editor_plugin_src.js\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
ed.windowManager.open({\r
file : url + '/searchreplace.htm',\r
width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)),\r
- height : 160 + parseInt(ed.getLang('searchreplace.delta_height', 0)),\r
+ height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)),\r
inline : 1,\r
auto_focus : 0\r
}, {\r
ca = f[m + '_panel_casesensitivebox'].checked;\r
rs = f['replace_panel_replacestring'].value;\r
\r
+ if (tinymce.isIE) {\r
+ r = ed.getDoc().selection.createRange();\r
+ }\r
+\r
if (s == '')\r
return;\r
\r
r.select();\r
replace();\r
fo = 1;\r
+\r
+ if (b) {\r
+ r.moveEnd("character", -(rs.length)); // Otherwise will loop forever\r
+ }\r
}\r
\r
tinyMCEPopup.storeSelection();\r
se.collapse(b);\r
r = se.getRng();\r
\r
+ if (tinymce.isIE) {\r
+ r = ed.getDoc().selection.createRange();\r
+ }\r
+\r
// Whats the point\r
if (!s)\r
return;\r
--- /dev/null
+tinyMCE.addI18n('et.searchreplace_dlg',{\r
+searchnext_desc:"Otsi uuesti",\r
+notfound:"Otsing on l\u00F5petatud. Otsis\u00F5na ei leitud.",\r
+search_title:"Otsi",\r
+replace_title:"Otsi/Asenda",\r
+allreplaced:"K\u00F5ik otsis\u00F5na ilmingud on asendatud.",\r
+findwhat:"Otsi mida",\r
+replacewith:"Asenda millega",\r
+direction:"Suund",\r
+up:"\u00DCles",\r
+down:"Alla",\r
+mcase:"Vasta suurusele",\r
+findnext:"Otsi j\u00E4rgmine",\r
+replace:"Asenda",\r
+replaceall:"Asenda k\u00F5ik"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.searchreplace_dlg',{\r
+searchnext_desc:"Suivant",\r
+notfound:"La recherche est termin\u00E9e. La cha\u00EEne recherch\u00E9e n'a pas \u00E9t\u00E9 trouv\u00E9e.",\r
+search_title:"Rechercher",\r
+replace_title:"Rechercher / remplacer",\r
+allreplaced:"Toutes les occurrences de la cha\u00EEne recherch\u00E9e ont \u00E9t\u00E9 remplac\u00E9es.",\r
+findwhat:"Rechercher ceci",\r
+replacewith:"Remplacer par",\r
+direction:"Direction",\r
+up:"Vers le haut",\r
+down:"Vers le bas",\r
+mcase:"Sensible \u00E0 la casse",\r
+findnext:"Rechercher le suivant",\r
+replace:"Remplacer",\r
+replaceall:"Tout remplacer"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.searchreplace_dlg',{\r
+searchnext_desc:"Keres\u00E9s megint",\r
+notfound:"A keres\u00E9s v\u00E9get \u00E9rt. A keresett sz\u00F6vegr\u00E9sz nem tal\u00E1lhat\u00F3.",\r
+search_title:"Keres\u00E9s",\r
+replace_title:"Keres\u00E9s/Csere",\r
+allreplaced:"A keresett r\u00E9szsz\u00F6veg minden el\u0151fordul\u00E1sa cser\u00E9lve lett.",\r
+findwhat:"Mit cser\u00E9l",\r
+replacewith:"Mire cser\u00E9l",\r
+direction:"Ir\u00E1ny",\r
+up:"Fel",\r
+down:"Le",\r
+mcase:"Kis- \u00E9s nagybet\u0171k megk\u00FCl\u00F6nb\u00F6ztet\u00E9se",\r
+findnext:"Keres\u00E9s",\r
+replace:"Csere",\r
+replaceall:"Minden tal\u00E1lat cser\u00E9je"\r
+});
\ No newline at end of file
tinyMCE.addI18n('pt.searchreplace_dlg',{\r
searchnext_desc:"Localizar novamente",\r
-notfound:"A pesquisa foi conclu\u00C3\u00ADda sem resultados.",\r
+notfound:"A pesquisa foi conclu\u00EDda sem resultados.",\r
search_title:"Localizar",\r
replace_title:"Localizar/substituir",\r
-allreplaced:"Todas as substitui\u00C3\u00A7\u00C3\u00B5es foram efetuadas.",\r
+allreplaced:"Todas as substitui\u00E7\u00F5es foram efetuadas.",\r
findwhat:"Localizar",\r
replacewith:"Substituir com",\r
-direction:"Dire\u00C3\u00A7\u00C3\u00A3o",\r
+direction:"Dire\u00E7\u00E3o",\r
up:"Acima",\r
down:"Abaixo",\r
-mcase:"Diferenciar mai\u00C3\u00BAsculas/min\u00C3\u00BAsculas",\r
-findnext:"Localizar pr\u00C3\u00B3ximo",\r
+mcase:"Diferenciar mai\u00FAsculas",\r
+findnext:"Localizar pr\u00F3ximo",\r
replace:"Substituir",\r
replaceall:"Substituir todos"\r
});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('ru.searchreplace_dlg',{\r
+searchnext_desc:"\u041D\u0430\u0439\u0442\u0438 \u0435\u0449\u0435",\r
+notfound:"\u041F\u043E\u0438\u0441\u043A \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D. \u0421\u043E\u043E\u0442\u0432\u0435\u0441\u0442\u0432\u0438\u0439 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E.",\r
+search_title:"\u041F\u043E\u0438\u0441\u043A",\r
+replace_title:"\u041F\u043E\u0438\u0441\u043A \u0438 \u0437\u0430\u043C\u0435\u043D\u0430",\r
+allreplaced:"\u0412\u0441\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044F \u043F\u043E\u0438\u0441\u043A\u0430 \u0431\u044B\u043B\u0438 \u0437\u0430\u043C\u0435\u043D\u0435\u043D\u044B.",\r
+findwhat:"\u041F\u043E\u0438\u0441\u043A",\r
+replacewith:"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430",\r
+direction:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435",\r
+up:"\u0412\u0432\u0435\u0440\u0445 ",\r
+down:"\u0412\u043D\u0438\u0437",\r
+mcase:"\u0423\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u0440\u0435\u0433\u0438\u0441\u0442\u0440",\r
+findnext:"\u041D\u0430\u0439\u0442\u0438 \u0434\u0430\u043B\u0435\u0435",\r
+replace:"\u0417\u0430\u043C\u0435\u043D\u0430",\r
+replaceall:"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435"\r
+});
\ No newline at end of file
<script type="text/javascript" src="../../utils/form_utils.js"></script>\r
<script type="text/javascript" src="js/searchreplace.js"></script>\r
<link rel="stylesheet" type="text/css" href="css/searchreplace.css" />\r
- <base target="_self" />\r
</head>\r
<body style="display:none;">\r
<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#searchreplace_dlg.findnext}" />\r
- <input type="button" class="button" id="replaceBtn" name="replaceBtn" value="{#searchreplace_dlg.replace}" onclick="SearchReplaceDialog.searchNext('current');" />\r
- <input type="button" class="button" id="replaceAllBtn" name="replaceAllBtn" value="{#searchreplace_dlg.replaceall}" onclick="SearchReplaceDialog.searchNext('all');" />\r
- </div>\r
-\r
- <div style="float: right"> \r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#searchreplace_dlg.findnext}" />\r
+ <input type="button" class="button" id="replaceBtn" name="replaceBtn" value="{#searchreplace_dlg.replace}" onclick="SearchReplaceDialog.searchNext('current');" />\r
+ <input type="button" class="button" id="replaceAllBtn" name="replaceAllBtn" value="{#searchreplace_dlg.replaceall}" onclick="SearchReplaceDialog.searchNext('all');" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
-(function(){var JSONRequest=tinymce.util.JSONRequest,each=tinymce.each,DOM=tinymce.DOM;tinymce.create('tinymce.plugins.SpellcheckerPlugin',{getInfo:function(){return{longname:'Spellchecker',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',version:tinymce.majorVersion+"."+tinymce.minorVersion};},init:function(ed,url){var t=this,cm;t.url=url;t.editor=ed;ed.addCommand('mceSpellCheck',function(){if(!t.active){ed.setProgressState(1);t._sendRPC('checkWords',[t.selectedLang,t._getWords()],function(r){if(r.length>0){t.active=1;t._markWords(r);ed.setProgressState(0);ed.nodeChanged();}else{ed.setProgressState(0);ed.windowManager.alert('spellchecker.no_mpell');}});}else t._done();});ed.onInit.add(function(){if(ed.settings.content_css!==false)ed.dom.loadCSS(url+'/css/content.css');});ed.onClick.add(t._showMenu,t);ed.onContextMenu.add(t._showMenu,t);ed.onBeforeGetContent.add(function(){if(t.active)t._removeWords();});ed.onNodeChange.add(function(ed,cm){cm.setActive('spellchecker',t.active);});ed.onSetContent.add(function(){t._done();});ed.onBeforeGetContent.add(function(){t._done();});ed.onBeforeExecCommand.add(function(ed,cmd){if(cmd=='mceFullScreen')t._done();});t.languages={};each(ed.getParam('spellchecker_languages','+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv','hash'),function(v,k){if(k.indexOf('+')===0){k=k.substring(1);t.selectedLang=v;}t.languages[k]=v;});},createControl:function(n,cm){var t=this,c,ed=t.editor;if(n=='spellchecker'){c=cm.createSplitButton(n,{title:'spellchecker.desc',cmd:'mceSpellCheck',scope:t});c.onRenderMenu.add(function(c,m){m.add({title:'spellchecker.langs','class':'mceMenuItemTitle'}).setDisabled(1);each(t.languages,function(v,k){var o={icon:1},mi;o.onclick=function(){mi.setSelected(1);t.selectedItem.setSelected(0);t.selectedItem=mi;t.selectedLang=v;};o.title=k;mi=m.add(o);mi.setSelected(v==t.selectedLang);if(v==t.selectedLang)t.selectedItem=mi;})});return c;}},_walk:function(n,f){var d=this.editor.getDoc(),w;if(d.createTreeWalker){w=d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while((n=w.nextNode())!=null)f.call(this,n);}else tinymce.walk(n,f,'childNodes');},_getSeparators:function(){var re='',i,str=this.editor.getParam('spellchecker_word_separator_chars','\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}����������������\u201d\u201c');for(i=0;i<str.length;i++)re+='\\'+str.charAt(i);return re;},_getWords:function(){var ed=this.editor,wl=[],tx='',lo={};this._walk(ed.getBody(),function(n){if(n.nodeType==3)tx+=n.nodeValue+' ';});tx=tx.replace(new RegExp('([0-9]|['+this._getSeparators()+'])','g'),' ');tx=tinymce.trim(tx.replace(/(\s+)/g,' '));each(tx.split(' '),function(v){if(!lo[v]){wl.push(v);lo[v]=1;}});return wl;},_removeWords:function(w){var ed=this.editor,dom=ed.dom,se=ed.selection,b=se.getBookmark();each(dom.select('span').reverse(),function(n){if(n&&(dom.hasClass(n,'mceItemHiddenSpellWord')||dom.hasClass(n,'mceItemHidden'))){if(!w||dom.decode(n.innerHTML)==w)dom.remove(n,1);}});se.moveToBookmark(b);},_markWords:function(wl){var r1,r2,r3,r4,r5,w='',ed=this.editor,re=this._getSeparators(),dom=ed.dom,nl=[];var se=ed.selection,b=se.getBookmark();each(wl,function(v){w+=(w?'|':'')+v;});r1=new RegExp('(['+re+'])('+w+')(['+re+'])','g');r2=new RegExp('^('+w+')','g');r3=new RegExp('('+w+')(['+re+']?)$','g');r4=new RegExp('^('+w+')(['+re+']?)$','g');r5=new RegExp('('+w+')(['+re+'])','g');this._walk(this.editor.getBody(),function(n){if(n.nodeType==3){nl.push(n);}});each(nl,function(n){var v;if(n.nodeType==3){v=n.nodeValue;if(r1.test(v)||r2.test(v)||r3.test(v)||r4.test(v)){v=dom.encode(v);v=v.replace(r5,'<span class="mceItemHiddenSpellWord">$1</span>$2');v=v.replace(r3,'<span class="mceItemHiddenSpellWord">$1</span>$2');dom.replace(dom.create('span',{'class':'mceItemHidden'},v),n);}}});se.moveToBookmark(b);},_showMenu:function(ed,e){var t=this,ed=t.editor,m=t._menu,p1,dom=ed.dom,vp=dom.getViewPort(ed.getWin());if(!m){p1=DOM.getPos(ed.getContentAreaContainer());m=ed.controlManager.createDropMenu('spellcheckermenu',{offset_x:p1.x,offset_y:p1.y,'class':'mceNoIcons'});t._menu=m;}if(dom.hasClass(e.target,'mceItemHiddenSpellWord')){m.removeAll();m.add({title:'spellchecker.wait','class':'mceMenuItemTitle'}).setDisabled(1);t._sendRPC('getSuggestions',[t.selectedLang,dom.decode(e.target.innerHTML)],function(r){m.removeAll();if(r.length>0){m.add({title:'spellchecker.sug','class':'mceMenuItemTitle'}).setDisabled(1);each(r,function(v){m.add({title:v,onclick:function(){dom.replace(ed.getDoc().createTextNode(v),e.target);t._checkDone();}});});m.addSeparator();}else m.add({title:'spellchecker.no_sug','class':'mceMenuItemTitle'}).setDisabled(1);m.add({title:'spellchecker.ignore_word',onclick:function(){dom.remove(e.target,1);t._checkDone();}});m.add({title:'spellchecker.ignore_words',onclick:function(){t._removeWords(dom.decode(e.target.innerHTML));t._checkDone();}});m.update();});ed.selection.select(e.target);p1=dom.getPos(e.target);m.showMenu(p1.x,p1.y+e.target.offsetHeight-vp.y);return tinymce.dom.Event.cancel(e);}else m.hideMenu();},_checkDone:function(){var t=this,ed=t.editor,dom=ed.dom,o;each(dom.select('span'),function(n){if(n&&dom.hasClass(n,'mceItemHiddenSpellWord')){o=true;return false;}});if(!o)t._done();},_done:function(){var t=this,la=t.active;if(t.active){t.active=0;t._removeWords();if(t._menu)t._menu.hideMenu();if(la)t.editor.nodeChanged();}},_sendRPC:function(m,p,cb){var t=this,url=t.editor.getParam("spellchecker_rpc_url","{backend}");if(url=='{backend}'){t.editor.setProgressState(0);alert('Please specify: spellchecker_rpc_url');return;}JSONRequest.sendRPC({url:url,method:m,params:p,success:cb,error:function(e,x){t.editor.setProgressState(0);t.editor.windowManager.alert(e.errstr||('Error response: '+x.responseText));}});}});tinymce.PluginManager.add('spellchecker',tinymce.plugins.SpellcheckerPlugin);})();
\ No newline at end of file
+(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});e.onInit.add(function(){if(e.settings.content_css!==false){e.dom.loadCSS(f+"/css/content.css")}});e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');for(d=0;d<f.length;d++){e+="\\"+f.charAt(d)}return e},_getWords:function(){var e=this.editor,g=[],d="",f={},h=[];this._walk(e.getBody(),function(i){if(i.nodeType==3){d+=i.nodeValue+" "}});if(e.getParam("spellchecker_word_pattern")){h=d.match("("+e.getParam("spellchecker_word_pattern")+")","gi")}else{d=d.replace(new RegExp("([0-9]|["+this._getSeparators()+"])","g")," ");d=tinymce.trim(d.replace(/(\s+)/g," "));h=d.split(" ")}c(h,function(i){if(!f[i]){g.push(i);f[i]=1}});return g},_removeWords:function(e){var f=this.editor,h=f.dom,g=f.selection,d=g.getBookmark();c(h.select("span").reverse(),function(i){if(i&&(h.hasClass(i,"mceItemHiddenSpellWord")||h.hasClass(i,"mceItemHidden"))){if(!e||h.decode(i.innerHTML)==e){h.remove(i,1)}}});g.moveToBookmark(d)},_markWords:function(o){var i,h,g,f,e,n="",k=this.editor,p=this._getSeparators(),j=k.dom,d=[];var l=k.selection,m=l.getBookmark();c(o,function(q){n+=(n?"|":"")+q});i=new RegExp("(["+p+"])("+n+")(["+p+"])","g");h=new RegExp("^("+n+")","g");g=new RegExp("("+n+")(["+p+"]?)$","g");f=new RegExp("^("+n+")(["+p+"]?)$","g");e=new RegExp("("+n+")(["+p+"])","g");this._walk(this.editor.getBody(),function(q){if(q.nodeType==3){d.push(q)}});c(d,function(r){var q;if(r.nodeType==3){q=r.nodeValue;if(i.test(q)||h.test(q)||g.test(q)||f.test(q)){q=j.encode(q);q=q.replace(e,'<span class="mceItemHiddenSpellWord">$1</span>$2');q=q.replace(g,'<span class="mceItemHiddenSpellWord">$1</span>$2');j.replace(j.create("span",{"class":"mceItemHidden"},q),r)}}});l.moveToBookmark(m)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){l=b.getPos(h.getContentAreaContainer());d=h.controlManager.createDropMenu("spellcheckermenu",{offset_x:l.x,offset_y:l.y,"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 425 2007-11-21 15:17:39Z spocke $\r
+ * editor_plugin_src.js\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
\r
t.url = url;\r
t.editor = ed;\r
+ t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}");\r
+\r
+ if (t.rpcUrl == '{backend}') {\r
+ // Sniff if the browser supports native spellchecking (Don't know of a better way)\r
+ if (tinymce.isIE)\r
+ return;\r
+\r
+ t.hasSupport = true;\r
+\r
+ // Disable the context menu when spellchecking is active\r
+ ed.onContextMenu.addToTop(function(ed, e) {\r
+ if (t.active)\r
+ return false;\r
+ });\r
+ }\r
\r
// Register commands\r
ed.addCommand('mceSpellCheck', function() {\r
+ if (t.rpcUrl == '{backend}') {\r
+ // Enable/disable native spellchecker\r
+ t.editor.getBody().spellcheck = t.active = !t.active;\r
+ return;\r
+ }\r
+\r
if (!t.active) {\r
ed.setProgressState(1);\r
t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) {\r
ed.nodeChanged();\r
} else {\r
ed.setProgressState(0);\r
- ed.windowManager.alert('spellchecker.no_mpell');\r
+\r
+ if (ed.getParam('spellchecker_report_no_misspellings', true))\r
+ ed.windowManager.alert('spellchecker.no_mpell');\r
}\r
});\r
} else\r
var t = this, c, ed = t.editor;\r
\r
if (n == 'spellchecker') {\r
+ // Use basic button if we use the native spellchecker\r
+ if (t.rpcUrl == '{backend}') {\r
+ // Create simple toggle button if we have native support\r
+ if (t.hasSupport)\r
+ c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});\r
+\r
+ return c;\r
+ }\r
+\r
c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});\r
\r
c.onRenderMenu.add(function(c, m) {\r
},\r
\r
_getWords : function() {\r
- var ed = this.editor, wl = [], tx = '', lo = {};\r
+ var ed = this.editor, wl = [], tx = '', lo = {}, rawWords = [];\r
\r
// Get area text\r
this._walk(ed.getBody(), function(n) {\r
tx += n.nodeValue + ' ';\r
});\r
\r
- // Split words by separator\r
- tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');\r
- tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));\r
+ // split the text up into individual words\r
+ if (ed.getParam('spellchecker_word_pattern')) {\r
+ // look for words that match the pattern\r
+ rawWords = tx.match('(' + ed.getParam('spellchecker_word_pattern') + ')', 'gi');\r
+ } else {\r
+ // Split words by separator\r
+ tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');\r
+ tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));\r
+ rawWords = tx.split(' ');\r
+ }\r
\r
// Build word array and remove duplicates\r
- each(tx.split(' '), function(v) {\r
+ each(rawWords, function(v) {\r
if (!lo[v]) {\r
wl.push(v);\r
lo[v] = 1;\r
},\r
\r
_showMenu : function(ed, e) {\r
- var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin());\r
+ var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target;\r
+\r
+ e = 0; // Fixes IE memory leak\r
\r
if (!m) {\r
p1 = DOM.getPos(ed.getContentAreaContainer());\r
t._menu = m;\r
}\r
\r
- if (dom.hasClass(e.target, 'mceItemHiddenSpellWord')) {\r
+ if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) {\r
m.removeAll();\r
m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
\r
- t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(e.target.innerHTML)], function(r) {\r
+ t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) {\r
+ var ignoreRpc;\r
+\r
m.removeAll();\r
\r
if (r.length > 0) {\r
m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
each(r, function(v) {\r
m.add({title : v, onclick : function() {\r
- dom.replace(ed.getDoc().createTextNode(v), e.target);\r
+ dom.replace(ed.getDoc().createTextNode(v), wordSpan);\r
t._checkDone();\r
}});\r
});\r
} else\r
m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
\r
+ ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", '');\r
m.add({\r
title : 'spellchecker.ignore_word',\r
onclick : function() {\r
- dom.remove(e.target, 1);\r
+ var word = wordSpan.innerHTML;\r
+\r
+ dom.remove(wordSpan, 1);\r
t._checkDone();\r
+\r
+ // tell the server if we need to\r
+ if (ignoreRpc) {\r
+ ed.setProgressState(1);\r
+ t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) {\r
+ ed.setProgressState(0);\r
+ });\r
+ }\r
}\r
});\r
\r
m.add({\r
title : 'spellchecker.ignore_words',\r
onclick : function() {\r
- t._removeWords(dom.decode(e.target.innerHTML));\r
+ var word = wordSpan.innerHTML;\r
+\r
+ t._removeWords(dom.decode(word));\r
t._checkDone();\r
+\r
+ // tell the server if we need to\r
+ if (ignoreRpc) {\r
+ ed.setProgressState(1);\r
+ t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) {\r
+ ed.setProgressState(0);\r
+ });\r
+ }\r
}\r
});\r
\r
+\r
+ if (t.editor.getParam("spellchecker_enable_learn_rpc")) {\r
+ m.add({\r
+ title : 'spellchecker.learn_word',\r
+ onclick : function() {\r
+ var word = wordSpan.innerHTML;\r
+\r
+ dom.remove(wordSpan, 1);\r
+ t._checkDone();\r
+\r
+ ed.setProgressState(1);\r
+ t._sendRPC('learnWord', [t.selectedLang, word], function(r) {\r
+ ed.setProgressState(0);\r
+ });\r
+ }\r
+ });\r
+ }\r
+\r
m.update();\r
});\r
\r
- ed.selection.select(e.target);\r
- p1 = dom.getPos(e.target);\r
- m.showMenu(p1.x, p1.y + e.target.offsetHeight - vp.y);\r
+ ed.selection.select(wordSpan);\r
+ p1 = dom.getPos(wordSpan);\r
+ m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y);\r
\r
return tinymce.dom.Event.cancel(e);\r
} else\r
},\r
\r
_sendRPC : function(m, p, cb) {\r
- var t = this, url = t.editor.getParam("spellchecker_rpc_url", "{backend}");\r
-\r
- if (url == '{backend}') {\r
- t.editor.setProgressState(0);\r
- alert('Please specify: spellchecker_rpc_url');\r
- return;\r
- }\r
+ var t = this;\r
\r
JSONRequest.sendRPC({\r
- url : url,\r
+ url : t.rpcUrl,\r
method : m,\r
params : p,\r
success : cb,\r
\r
// Register plugin\r
tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin);\r
-})();
\ No newline at end of file
+})();\r
-(function(){tinymce.create('tinymce.plugins.StylePlugin',{init:function(ed,url){ed.addCommand('mceStyleProps',function(){ed.windowManager.open({file:url+'/props.htm',width:480+parseInt(ed.getLang('style.delta_width',0)),height:320+parseInt(ed.getLang('style.delta_height',0)),inline:1},{plugin_url:url,style_text:ed.selection.getNode().style.cssText});});ed.addCommand('mceSetElementStyle',function(ui,v){if(e=ed.selection.getNode()){ed.dom.setAttrib(e,'style',v);ed.execCommand('mceRepaint');}});ed.onNodeChange.add(function(ed,cm,n){cm.setDisabled('styleprops',n.nodeName==='BODY');});ed.addButton('styleprops',{title:'style.desc',cmd:'mceStyleProps'});},getInfo:function(){return{longname:'Style',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('style',tinymce.plugins.StylePlugin);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 787 2008-04-10 11:40:57Z spocke $\r
+ * editor_plugin_src.js\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
"Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif";\r
\r
var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger";\r
-var defaultMeasurement = "+pixels=px;points=pt;em;in;cm;mm;picas;ems;exs;%";\r
-var defaultSpacingMeasurement = "pixels=px;points=pt;in;cm;mm;picas;+ems;exs;%";\r
-var defaultIndentMeasurement = "pixels=px;+points=pt;in;cm;mm;picas;ems;exs;%";\r
+var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";\r
+var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%";\r
+var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";\r
var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900";\r
var defaultTextStyle = "normal;italic;oblique";\r
var defaultVariant = "normal;small-caps";\r
}\r
\r
function getMeasurement(s) {\r
- return s.replace(/^([0-9]+)(.*)$/, "$2");\r
+ return s.replace(/^([0-9.]+)(.*)$/, "$2");\r
}\r
\r
function getNum(s) {\r
- if (new RegExp('^[0-9]+[a-z%]+$', 'gi').test(s))\r
- return s.replace(/[^0-9]/g, '');\r
+ if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s))\r
+ return s.replace(/[^0-9.]/g, '');\r
\r
return s;\r
}\r
ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : "");\r
ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : "");\r
} else\r
- ce.style.borderWidth = f.border_width_top.value;\r
+ ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : "");\r
\r
if (!f.border_color_same.checked) {\r
ce.style.borderTopColor = f.border_color_top.value;\r
--- /dev/null
+tinyMCE.addI18n('et.style_dlg',{\r
+title:"Muuda CSS stiili",\r
+apply:"Rakenda",\r
+text_tab:"Tekst",\r
+background_tab:"Taust",\r
+block_tab:"Plokk",\r
+box_tab:"Kast",\r
+border_tab:"Raam",\r
+list_tab:"Nimekiri",\r
+positioning_tab:"Positsioneerimine",\r
+text_props:"Tekst",\r
+text_font:"Font",\r
+text_size:"Suurus",\r
+text_weight:"Raskus",\r
+text_style:"Stiil",\r
+text_variant:"Variant",\r
+text_lineheight:"Joone k\u00F5rgus",\r
+text_case:"Kast",\r
+text_color:"V\u00E4rv",\r
+text_decoration:"Dekoratioon",\r
+text_overline:"\u00FClejoon",\r
+text_underline:"alajoon",\r
+text_striketrough:"l\u00E4bikriipsutus",\r
+text_blink:"vilgutus",\r
+text_none:"mitte \u00FCkski",\r
+background_color:"Tausta v\u00E4rv",\r
+background_image:"Tausta pilt",\r
+background_repeat:"Kordus",\r
+background_attachment:"Manus",\r
+background_hpos:"Horisontaalne asend",\r
+background_vpos:"Vertikaalne asend",\r
+block_wordspacing:"S\u00F5nade avardamine",\r
+block_letterspacing:"T\u00E4he avardamine",\r
+block_vertical_alignment:"Vertikaalne joondus",\r
+block_text_align:"Teksti joondus",\r
+block_text_indent:"Teksti taandus",\r
+block_whitespace:"T\u00FChimik",\r
+block_display:"Kuva",\r
+box_width:"Laius",\r
+box_height:"K\u00F5rgus",\r
+box_float:"H\u00F5ljuv",\r
+box_clear:"Puhas",\r
+padding:"T\u00E4idis",\r
+same:"Sama k\u00F5igile",\r
+top:"\u00DCleval",\r
+right:"Paremal",\r
+bottom:"All",\r
+left:"Vasakul",\r
+margin:"Serv",\r
+style:"Stiil",\r
+width:"Laius",\r
+height:"K\u00F5rgus",\r
+color:"V\u00E4rv",\r
+list_type:"T\u00FC\u00FCp",\r
+bullet_image:"Punkt pilt",\r
+position:"Positsioon",\r
+positioning_type:"T\u00FC\u00FCp",\r
+visibility:"N\u00E4htavus",\r
+zindex:"Z-viit",\r
+overflow:"\u00DClevool",\r
+placement:"Asetus",\r
+clip:"Klipp"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.style_dlg',{\r
+title:"\u00C9diter la feuille de style",\r
+apply:"Appliquer",\r
+text_tab:"Texte",\r
+background_tab:"Fond",\r
+block_tab:"Bloc",\r
+box_tab:"Bo\u00EEte",\r
+border_tab:"Bordure",\r
+list_tab:"Liste",\r
+positioning_tab:"Positionnement",\r
+text_props:"Texte",\r
+text_font:"Police",\r
+text_size:"Taille",\r
+text_weight:"Gras",\r
+text_style:"Style",\r
+text_variant:"Variante",\r
+text_lineheight:"Hauteur de ligne",\r
+text_case:"Casse",\r
+text_color:"Couleur",\r
+text_decoration:"D\u00E9coration",\r
+text_overline:"ligne au-dessus",\r
+text_underline:"soulign\u00E9",\r
+text_striketrough:"barr\u00E9",\r
+text_blink:"clignotant",\r
+text_none:"aucun",\r
+background_color:"Couleur de fond",\r
+background_image:"Image de fond",\r
+background_repeat:"R\u00E9p\u00E9ter",\r
+background_attachment:"Attachement",\r
+background_hpos:"Position horizontale",\r
+background_vpos:"Position verticale",\r
+block_wordspacing:"Espacement des mots ",\r
+block_letterspacing:"Espacement des lettres",\r
+block_vertical_alignment:"Alignement vertical",\r
+block_text_align:"Alignement du texte",\r
+block_text_indent:"Indentation du texte",\r
+block_whitespace:"Fin de ligne",\r
+block_display:"Affichage",\r
+box_width:"Largeur",\r
+box_height:"Hauteur",\r
+box_float:"Flottant",\r
+box_clear:"Vider",\r
+padding:"Espacement",\r
+same:"Identique pour tous",\r
+top:"Haut",\r
+right:"Droit",\r
+bottom:"Bas",\r
+left:"Gauche",\r
+margin:"Marge",\r
+style:"Style",\r
+width:"Largeur",\r
+height:"Hauteur",\r
+color:"Couleur",\r
+list_type:"Type",\r
+bullet_image:"Image de puce",\r
+position:"Position",\r
+positioning_type:"Type",\r
+visibility:"Visibilit\u00E9",\r
+zindex:"Z-index",\r
+overflow:"D\u00E9bordement",\r
+placement:"Placement",\r
+clip:"Clip"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.style_dlg',{\r
+title:"CSS st\u00EDlus szerkest\u00E9se",\r
+apply:"Alkalmaz",\r
+text_tab:"Sz\u00F6veg",\r
+background_tab:"H\u00E1tt\u00E9r",\r
+block_tab:"Blokk",\r
+box_tab:"Doboz",\r
+border_tab:"Keret",\r
+list_tab:"Lista",\r
+positioning_tab:"Poz\u00EDci\u00F3",\r
+text_props:"Sz\u00F6veg",\r
+text_font:"Bet\u0171t\u00EDpus",\r
+text_size:"M\u00E9ret",\r
+text_weight:"Sz\u00E9less\u00E9g",\r
+text_style:"St\u00EDlus",\r
+text_variant:"V\u00E1ltozat",\r
+text_lineheight:"Sormagass\u00E1g",\r
+text_case:"eset",\r
+text_color:"sz\u00EDn",\r
+text_decoration:"dekor\u00E1ci\u00F3",\r
+text_overline:"fel\u00FClh\u00FAz\u00E1s",\r
+text_underline:"alulh\u00FAz\u00E1s",\r
+text_striketrough:"\u00E1th\u00FAz\u00E1s",\r
+text_blink:"villog\u00E1s",\r
+text_none:"egyik sem",\r
+background_color:"H\u00E1tt\u00E9rsz\u00EDn",\r
+background_image:"H\u00E1tt\u00E9rk\u00E9p",\r
+background_repeat:"Ism\u00E9tl\u00E9s",\r
+background_attachment:"Csatolm\u00E1ny",\r
+background_hpos:"V\u00EDzszintes hely",\r
+background_vpos:"F\u00FCgg\u0151leges hely",\r
+block_wordspacing:"Sz\u00F3t\u00E1vols\u00E1g",\r
+block_letterspacing:"Bet\u0171t\u00E1vols\u00E1g",\r
+block_vertical_alignment:"F\u00FCgg\u0151leges igaz\u00EDt\u00E1s",\r
+block_text_align:"Sz\u00F6veg igaz\u00EDt\u00E1sa",\r
+block_text_indent:"Sz\u00F6veg beh\u00FAz\u00E1sa",\r
+block_whitespace:"\u00DCres helyek",\r
+block_display:"Megjelen\u00EDt\u00E9s",\r
+box_width:"Sz\u00E9less\u00E9g",\r
+box_height:"Magass\u00E1g",\r
+box_float:"Lebeg\u00E9s (float)",\r
+box_clear:"Lebeg\u00E9s (float) t\u00F6rl\u00E9se",\r
+padding:"Bels\u0151 marg\u00F3",\r
+same:"Mindenhol ugyanaz",\r
+top:"Fel\u00FCl",\r
+right:"Jobbra",\r
+bottom:"Lent",\r
+left:"Balra",\r
+margin:"Marg\u00F3",\r
+style:"St\u00EDlus",\r
+width:"Sz\u00E9less\u00E9g",\r
+height:"Magass\u00E1g",\r
+color:"Sz\u00EDn",\r
+list_type:"T\u00EDpus",\r
+bullet_image:"Elemk\u00E9p",\r
+position:"Poz\u00EDci\u00F3",\r
+positioning_type:"T\u00EDpus",\r
+visibility:"L\u00E1that\u00F3s\u00E1g",\r
+zindex:"Z-index",\r
+overflow:"Kifut\u00E1s",\r
+placement:"Elhelyez\u00E9s",\r
+clip:"Lev\u00E1g\u00E1s"\r
+});
\ No newline at end of file
block_display:"Visualizzazione",\r
box_width:"Larghezza",\r
box_height:"Altezza",\r
-box_float:"Float",\r
-box_clear:"Clear",\r
+box_float:"Fluttuante",\r
+box_clear:"Pulito",\r
padding:"Spazio dal bordo",\r
same:"Uguale per tutti",\r
top:"Superiore",\r
height:"Altezza",\r
color:"Colore",\r
list_type:"Tipo",\r
-bullet_image:"Immagine bullet",\r
+bullet_image:"Immagine Punto",\r
position:"Posizione",\r
positioning_type:"Tipo",\r
visibility:"Visibilit\u00E0",\r
text_style:"Estilo",\r
text_variant:"Variante",\r
text_lineheight:"Altura da linha",\r
-text_case:"Mai\u00C3\u00BAscula/min\u00C3\u00BAscula",\r
+text_case:"Mai\u00FAscula",\r
text_color:"Cor",\r
-text_decoration:"Decora\u00C3\u00A7\u00C3\u00A3o",\r
+text_decoration:"Decora\u00E7\u00E3o",\r
text_overline:"Sobrelinha",\r
text_underline:"Sublinhado",\r
text_striketrough:"Riscado",\r
background_image:"Imagem de fundo",\r
background_repeat:"Repetir",\r
background_attachment:"Fixar",\r
-background_hpos:"Posi\u00C3\u00A7\u00C3\u00A3o horizontal",\r
-background_vpos:"Posi\u00C3\u00A7\u00C3\u00A3o vertical",\r
-block_wordspacing:"Espa\u00C3\u00A7amento de palavras",\r
-block_letterspacing:"Espa\u00C3\u00A7amento de letras",\r
+background_hpos:"Posi\u00E7\u00E3o horizontal",\r
+background_vpos:"Posi\u00E7\u00E3o vertical",\r
+block_wordspacing:"Espa\u00E7amento de palavras",\r
+block_letterspacing:"Espa\u00E7amento de letras",\r
block_vertical_alignment:"Alinhamento vertical",\r
block_text_align:"Alinhamento de texto",\r
block_text_indent:"Indent",\r
-block_whitespace:"Espa\u00C3\u00A7o",\r
+block_whitespace:"Espa\u00E7o",\r
block_display:"Display",\r
box_width:"Largura",\r
box_height:"Altura",\r
color:"Cor",\r
list_type:"Tipo",\r
bullet_image:"Imagem de lista",\r
-position:"Posi\u00C3\u00A7\u00C3\u00A3o",\r
+position:"Posi\u00E7\u00E3o",\r
positioning_type:"Tipo",\r
visibility:"Visibilidade",\r
zindex:"Z-index",\r
--- /dev/null
+tinyMCE.addI18n('ru.style_dlg',{\r
+title:"\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 CSS \u0441\u0442\u0438\u043B\u044F",\r
+apply:"\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C",\r
+text_tab:"\u0422\u0435\u043A\u0441\u0442",\r
+background_tab:"\u0424\u043E\u043D",\r
+block_tab:"\u0411\u043B\u043E\u043A",\r
+box_tab:"\u041A\u0440\u0430\u044F",\r
+border_tab:"\u0413\u0440\u0430\u043D\u0438\u0446\u0430",\r
+list_tab:"\u0421\u043F\u0438\u0441\u043E\u043A",\r
+positioning_tab:"\u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435",\r
+text_props:"\u0422\u0435\u043A\u0441\u0442",\r
+text_font:"\u0428\u0440\u0438\u0444\u0442",\r
+text_size:"\u0420\u0430\u0437\u043C\u0435\u0440",\r
+text_weight:"\u0422\u043E\u043B\u0449\u0438\u043D\u0430",\r
+text_style:"\u0421\u0442\u0438\u043B\u044C",\r
+text_variant:"\u0412\u0430\u0440\u0438\u0430\u043D\u0442",\r
+text_lineheight:"\u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0442\u0440\u043E\u043A\u0438",\r
+text_case:"\u0420\u0435\u0433\u0438\u0441\u0442\u0440",\r
+text_color:"\u0426\u0432\u0435\u0442",\r
+text_decoration:"\u041E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u0435",\r
+text_overline:"\u0421 \u0432\u0435\u0440\u0445\u043D\u0435\u0439 \u0447\u0435\u0440\u0442\u043E\u0439",\r
+text_underline:"\u041F\u043E\u0434\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439",\r
+text_striketrough:"\u0417\u0430\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439",\r
+text_blink:"\u041C\u0435\u0440\u0446\u0430\u044E\u0449\u0438\u0439",\r
+text_none:"\u0411\u0435\u0437 \u0432\u0441\u0435\u0433\u043E",\r
+background_color:"\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430",\r
+background_image:"\u0424\u043E\u043D\u043E\u0432\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435",\r
+background_repeat:"\u041F\u043E\u0432\u0442\u043E\u0440",\r
+background_attachment:"\u041F\u0440\u0438\u0432\u044F\u0437\u043A\u0430",\r
+background_hpos:"\u0413\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u0430\u044F \u043F\u043E\u0437\u0438\u0446\u0438\u044F",\r
+background_vpos:"\u0412\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u0430\u044F \u043F\u043E\u0437\u0438\u0446\u0438\u044F",\r
+block_wordspacing:"\u041E\u0442\u0441\u0442\u0443\u043F\u044B \u043C\u0435\u0436\u0434\u0443 \u0441\u043B\u043E\u0432\u0430\u043C\u0438",\r
+block_letterspacing:"\u041E\u0442\u0441\u0442\u0443\u043F\u044B \u043C\u0435\u0436\u0434\u0443 \u0431\u0443\u043A\u0432\u0430\u043C\u0438",\r
+block_vertical_alignment:"\u0412\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0435 \u0432\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435",\r
+block_text_align:"\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430",\r
+block_text_indent:"\u041E\u0442\u0441\u0442\u0443\u043F \u0442\u0435\u043A\u0441\u0442\u0430",\r
+block_whitespace:"\u041F\u0440\u043E\u0431\u0435\u043B",\r
+block_display:"\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435",\r
+box_width:"\u0428\u0438\u0440\u0438\u043D\u0430",\r
+box_height:"\u0412\u044B\u0441\u043E\u0442\u0430",\r
+box_float:"\u041F\u043B\u0430\u0432\u0430\u044E\u0449\u0438\u0439",\r
+box_clear:"\u042F\u0432\u043D\u044B\u0439",\r
+padding:"\u041F\u043E\u043B\u044F",\r
+same:"\u041E\u0434\u0438\u043D\u0430\u043A\u043E\u0432\u043E \u0434\u043B\u044F \u0432\u0441\u0435\u0445",\r
+top:"\u0412\u0432\u0435\u0440\u0445",\r
+right:"\u0421\u043F\u0440\u0430\u0432\u0430",\r
+bottom:"\u0421\u043D\u0438\u0437\u0443",\r
+left:"\u0421\u043B\u0435\u0432\u0430",\r
+margin:"\u041E\u0442\u0441\u0442\u0443\u043F\u044B",\r
+style:"\u0421\u0442\u0438\u043B\u044C",\r
+width:"\u0428\u0438\u0440\u0438\u043D\u0430",\r
+height:"\u0412\u044B\u0441\u043E\u0442\u0430",\r
+color:"\u0426\u0432\u0435\u0442",\r
+list_type:"\u0422\u0438\u043F",\r
+bullet_image:"\u041C\u0430\u0440\u043A\u0435\u0440",\r
+position:"\u041F\u043E\u0437\u0438\u0446\u0438\u044F",\r
+positioning_type:"\u0422\u0438\u043F",\r
+visibility:"\u0412\u0438\u0434\u0438\u043C\u043E\u0441\u0442\u044C",\r
+zindex:"Z-\u0438\u043D\u0434\u0435\u043A\u0441",\r
+overflow:"\u041F\u0435\u0440\u0435\u043F\u043E\u043B\u043D\u0435\u043D\u0435",\r
+placement:"\u0420\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u0435",\r
+clip:"\u041E\u0442\u0441\u0435\u0447\u0435\u043D\u0438\u0435"\r
+});
\ No newline at end of file
<script type="text/javascript" src="../../utils/form_utils.js"></script>
<script type="text/javascript" src="js/props.js"></script>
<link href="css/props.css" rel="stylesheet" type="text/css" />
- <base target="_self" />
</head>
<body id="styleprops" style="display: none">
<tr>
<td><select id="text_size" name="text_size" class="mceEditableSelect"></select></td>
<td> </td>
- <td><select id="text_size_measurement" name="text_size_measurement"></select></td>
+ <td><select id="text_size_measurement" name="text_size_measurement"></select></td>
</tr>
</table>
</td>
</div>
<div class="mceActionPanel">
- <div style="float: left">
- <div style="float: left"><input type="submit" id="insert" name="insert" value="{#update}" /></div>
-
- <div style="float: left"> <input type="button" class="button" id="apply" name="apply" value="{#style_dlg.apply}" onClick="applyAction();" /></div>
- <br style="clear: both" />
- </div>
-
- <div style="float: right">
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onClick="tinyMCEPopup.close();" />
- </div>
+ <input type="submit" id="insert" name="insert" value="{#update}" />
+ <input type="button" class="button" id="apply" name="apply" value="{#style_dlg.apply}" onClick="applyAction();" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onClick="tinyMCEPopup.close();" />
</div>
</form>
--- /dev/null
+(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(i){o=c.getParent(l.id,"form");n=o.elements;if(o){d(n,function(s,r){if(s.id==l.id){j=r;return false}});if(i>0){for(m=j+1;m<n.length;m++){if(n[m].type!="hidden"){return n[m]}}}else{for(m=j-1;m>=0;m--){if(n[m].type!="hidden"){return n[m]}}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(l=tinymce.get(n.id||n.name)){l.focus()}else{window.setTimeout(function(){window.focus();n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}f.onInit.add(function(){d(c.select("a:first,a:last",f.getContainer()),function(i){a.add(i,"focus",function(){f.focus()})})})},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})();
\ No newline at end of file
--- /dev/null
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;\r
+\r
+ tinymce.create('tinymce.plugins.TabFocusPlugin', {\r
+ init : function(ed, url) {\r
+ function tabCancel(ed, e) {\r
+ if (e.keyCode === 9)\r
+ return Event.cancel(e);\r
+ };\r
+\r
+ function tabHandler(ed, e) {\r
+ var x, i, f, el, v;\r
+\r
+ function find(d) {\r
+ f = DOM.getParent(ed.id, 'form');\r
+ el = f.elements;\r
+\r
+ if (f) {\r
+ each(el, function(e, i) {\r
+ if (e.id == ed.id) {\r
+ x = i;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ if (d > 0) {\r
+ for (i = x + 1; i < el.length; i++) {\r
+ if (el[i].type != 'hidden')\r
+ return el[i];\r
+ }\r
+ } else {\r
+ for (i = x - 1; i >= 0; i--) {\r
+ if (el[i].type != 'hidden')\r
+ return el[i];\r
+ }\r
+ }\r
+ }\r
+\r
+ return null;\r
+ };\r
+\r
+ if (e.keyCode === 9) {\r
+ v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));\r
+\r
+ if (v.length == 1) {\r
+ v[1] = v[0];\r
+ v[0] = ':prev';\r
+ }\r
+\r
+ // Find element to focus\r
+ if (e.shiftKey) {\r
+ if (v[0] == ':prev')\r
+ el = find(-1);\r
+ else\r
+ el = DOM.get(v[0]);\r
+ } else {\r
+ if (v[1] == ':next')\r
+ el = find(1);\r
+ else\r
+ el = DOM.get(v[1]);\r
+ }\r
+\r
+ if (el) {\r
+ if (ed = tinymce.get(el.id || el.name))\r
+ ed.focus();\r
+ else\r
+ window.setTimeout(function() {window.focus();el.focus();}, 10);\r
+\r
+ return Event.cancel(e);\r
+ }\r
+ }\r
+ };\r
+\r
+ ed.onKeyUp.add(tabCancel);\r
+\r
+ if (tinymce.isGecko) {\r
+ ed.onKeyPress.add(tabHandler);\r
+ ed.onKeyDown.add(tabCancel);\r
+ } else\r
+ ed.onKeyDown.add(tabHandler);\r
+\r
+ ed.onInit.add(function() {\r
+ each(DOM.select('a:first,a:last', ed.getContainer()), function(n) {\r
+ Event.add(n, 'focus', function() {ed.focus();});\r
+ });\r
+ });\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Tabfocus',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ }\r
+ });\r
+\r
+ // Register plugin\r
+ tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);\r
+})();
\ No newline at end of file
<script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
<script type="text/javascript" src="js/cell.js"></script>\r
<link href="css/cell.css" rel="stylesheet" type="text/css" />\r
- <base target="_self" />\r
</head>\r
<body id="tablecell" style="display: none">\r
<form onsubmit="updateAction();return false;" action="#">\r
</select>\r
</div>\r
\r
- <div style="float: left">\r
- <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
-(function(){var each=tinymce.each;tinymce.create('tinymce.plugins.TablePlugin',{init:function(ed,url){var t=this;t.editor=ed;t.url=url;each([['table','table.desc','mceInsertTable',true],['delete_table','table.del','mceTableDelete'],['delete_col','table.delete_col_desc','mceTableDeleteCol'],['delete_row','table.delete_row_desc','mceTableDeleteRow'],['col_after','table.col_after_desc','mceTableInsertColAfter'],['col_before','table.col_before_desc','mceTableInsertColBefore'],['row_after','table.row_after_desc','mceTableInsertRowAfter'],['row_before','table.row_before_desc','mceTableInsertRowBefore'],['row_props','table.row_desc','mceTableRowProps',true],['cell_props','table.cell_desc','mceTableCellProps',true],['split_cells','table.split_cells_desc','mceTableSplitCells',true],['merge_cells','table.merge_cells_desc','mceTableMergeCells',true]],function(c){ed.addButton(c[0],{title:c[1],cmd:c[2],ui:c[3]});});if(ed.getParam('inline_styles')){ed.onPreProcess.add(function(ed,o){var dom=ed.dom;each(dom.select('table',o.node),function(n){var v;if(v=dom.getAttrib(n,'width')){dom.setStyle(n,'width',v);dom.setAttrib(n,'width');}if(v=dom.getAttrib(n,'height')){dom.setStyle(n,'height',v);dom.setAttrib(n,'height');}});});}ed.onInit.add(function(){if(ed&&ed.plugins.contextmenu){ed.plugins.contextmenu.onContextMenu.add(function(th,m,e){var sm,se=ed.selection,el=se.getNode()||ed.getBody();if(ed.dom.getParent(e,'td')||ed.dom.getParent(e,'th')){m.removeAll();if(el.nodeName=='A'&&!ed.dom.getAttrib(el,'name')){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();}if(el.nodeName=='IMG'&&el.className.indexOf('mceItem')==-1){m.add({title:'advanced.image_desc',icon:'image',cmd:ed.plugins.advimage?'mceAdvImage':'mceImage',ui:true});m.addSeparator();}m.add({title:'table.desc',icon:'table',cmd:'mceInsertTable',ui:true,value:{action:'insert'}});m.add({title:'table.props_desc',icon:'table_props',cmd:'mceInsertTable',ui:true});m.add({title:'table.del',icon:'delete_table',cmd:'mceTableDelete',ui:true});m.addSeparator();sm=m.addMenu({title:'table.cell'});sm.add({title:'table.cell_desc',icon:'cell_props',cmd:'mceTableCellProps',ui:true});sm.add({title:'table.split_cells_desc',icon:'split_cells',cmd:'mceTableSplitCells',ui:true});sm.add({title:'table.merge_cells_desc',icon:'merge_cells',cmd:'mceTableMergeCells',ui:true});sm=m.addMenu({title:'table.row'});sm.add({title:'table.row_desc',icon:'row_props',cmd:'mceTableRowProps',ui:true});sm.add({title:'table.row_before_desc',icon:'row_before',cmd:'mceTableInsertRowBefore'});sm.add({title:'table.row_after_desc',icon:'row_after',cmd:'mceTableInsertRowAfter'});sm.add({title:'table.delete_row_desc',icon:'delete_row',cmd:'mceTableDeleteRow'});sm.addSeparator();sm.add({title:'table.cut_row_desc',icon:'cut',cmd:'mceTableCutRow'});sm.add({title:'table.copy_row_desc',icon:'copy',cmd:'mceTableCopyRow'});sm.add({title:'table.paste_row_before_desc',icon:'paste',cmd:'mceTablePasteRowBefore'});sm.add({title:'table.paste_row_after_desc',icon:'paste',cmd:'mceTablePasteRowAfter'});sm=m.addMenu({title:'table.col'});sm.add({title:'table.col_before_desc',icon:'col_before',cmd:'mceTableInsertColBefore'});sm.add({title:'table.col_after_desc',icon:'col_after',cmd:'mceTableInsertColAfter'});sm.add({title:'table.delete_col_desc',icon:'delete_col',cmd:'mceTableDeleteCol'});}else m.add({title:'table.desc',icon:'table',cmd:'mceInsertTable',ui:true});});}});ed.onKeyDown.add(function(ed,e){if(e.keyCode==9&&ed.dom.getParent(ed.selection.getNode(),'TABLE')){if(!tinymce.isGecko&&!tinymce.isOpera){tinyMCE.execInstanceCommand(ed.editorId,"mceTableMoveToNextRow",true);return tinymce.dom.Event.cancel(e);}ed.undoManager.add();}});if(!tinymce.isIE){if(ed.getParam('table_selection',true)){ed.onClick.add(function(ed,e){e=e.target;if(e.nodeName==='TABLE')ed.selection.select(e);});}}ed.onNodeChange.add(function(ed,cm,n){var p=ed.dom.getParent(n,'td,th,caption');cm.setActive('table',n.nodeName==='TABLE'||!!p);if(p&&p.nodeName==='CAPTION')p=null;cm.setDisabled('delete_table',!p);cm.setDisabled('delete_col',!p);cm.setDisabled('delete_table',!p);cm.setDisabled('delete_row',!p);cm.setDisabled('col_after',!p);cm.setDisabled('col_before',!p);cm.setDisabled('row_after',!p);cm.setDisabled('row_before',!p);cm.setDisabled('row_props',!p);cm.setDisabled('cell_props',!p);cm.setDisabled('split_cells',!p||(parseInt(ed.dom.getAttrib(p,'colspan','1'))<2&&parseInt(ed.dom.getAttrib(p,'rowspan','1'))<2));cm.setDisabled('merge_cells',!p);});if(!tinymce.isIE){ed.onBeforeSetContent.add(function(ed,o){if(o.initial)o.content=o.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g,tinymce.isOpera?'<$1$2> </$1>':'<$1$2><br mce_bogus="1" /></$1>');});}},execCommand:function(cmd,ui,val){var ed=this.editor,b;switch(cmd){case"mceTableMoveToNextRow":case"mceInsertTable":case"mceTableRowProps":case"mceTableCellProps":case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":case"mceTableDelete":ed.execCommand('mceBeginUndoLevel');this._doExecCommand(cmd,ui,val);ed.execCommand('mceEndUndoLevel');return true;}return false;},getInfo:function(){return{longname:'Tables',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_doExecCommand:function(command,user_interface,value){var inst=this.editor,ed=inst,url=this.url;var focusElm=inst.selection.getNode();var trElm=inst.dom.getParent(focusElm,"tr");var tdElm=inst.dom.getParent(focusElm,"td,th");var tableElm=inst.dom.getParent(focusElm,"table");var doc=inst.contentWindow.document;var tableBorder=tableElm?tableElm.getAttribute("border"):"";if(trElm&&tdElm==null)tdElm=trElm.cells[0];function inArray(ar,v){for(var i=0;i<ar.length;i++){if(ar[i].length>0&&inArray(ar[i],v))return true;if(ar[i]==v)return true;}return false;}function select(dx,dy){var td;grid=getTableGrid(tableElm);dx=dx||0;dy=dy||0;dx=Math.max(cpos.cellindex+dx,0);dy=Math.max(cpos.rowindex+dy,0);inst.execCommand('mceRepaint');td=getCell(grid,dy,dx);if(td){inst.selection.select(td.firstChild||td);inst.selection.collapse(1);}};function makeTD(){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';}function getColRowSpan(td){var colspan=inst.dom.getAttrib(td,"colspan");var rowspan=inst.dom.getAttrib(td,"rowspan");colspan=colspan==""?1:parseInt(colspan);rowspan=rowspan==""?1:parseInt(rowspan);return{colspan:colspan,rowspan:rowspan};}function getCellPos(grid,td){var x,y;for(y=0;y<grid.length;y++){for(x=0;x<grid[y].length;x++){if(grid[y][x]==td)return{cellindex:x,rowindex:y};}}return null;}function getCell(grid,row,col){if(grid[row]&&grid[row][col])return grid[row][col];return null;}function getNextCell(table,cell){var cells=[],x=0,i,j,cell,nextCell;for(i=0;i<table.rows.length;i++)for(j=0;j<table.rows[i].cells.length;j++,x++)cells[x]=table.rows[i].cells[j];for(i=0;i<cells.length;i++)if(cells[i]==cell)if(nextCell=cells[i+1])return nextCell;}function getTableGrid(table){var grid=[],rows=table.rows,x,y,td,sd,xstart,x2,y2;for(y=0;y<rows.length;y++){for(x=0;x<rows[y].cells.length;x++){td=rows[y].cells[x];sd=getColRowSpan(td);for(xstart=x;grid[y]&&grid[y][xstart];xstart++);for(y2=y;y2<y+sd['rowspan'];y2++){if(!grid[y2])grid[y2]=[];for(x2=xstart;x2<xstart+sd['colspan'];x2++)grid[y2][x2]=td;}}}return grid;}function trimRow(table,tr,td,new_tr){var grid=getTableGrid(table),cpos=getCellPos(grid,td);var cells,lastElm;if(new_tr.cells.length!=tr.childNodes.length){cells=tr.childNodes;lastElm=null;for(var x=0;td=getCell(grid,cpos.rowindex,x);x++){var remove=true;var sd=getColRowSpan(td);if(inArray(cells,td)){new_tr.childNodes[x]._delete=true;}else if((lastElm==null||td!=lastElm)&&sd.colspan>1){for(var i=x;i<x+td.colSpan;i++)new_tr.childNodes[i]._delete=true;}if((lastElm==null||td!=lastElm)&&sd.rowspan>1)td.rowSpan=sd.rowspan+1;lastElm=td;}deleteMarked(tableElm);}}function prevElm(node,name){while((node=node.previousSibling)!=null){if(node.nodeName==name)return node;}return null;}function nextElm(node,names){var namesAr=names.split(',');while((node=node.nextSibling)!=null){for(var i=0;i<namesAr.length;i++){if(node.nodeName.toLowerCase()==namesAr[i].toLowerCase())return node;}}return null;}function deleteMarked(tbl){if(tbl.rows==0)return;var tr=tbl.rows[0];do{var next=nextElm(tr,"TR");if(tr._delete){tr.parentNode.removeChild(tr);continue;}var td=tr.cells[0];if(td.cells>1){do{var nexttd=nextElm(td,"TD,TH");if(td._delete)td.parentNode.removeChild(td);}while((td=nexttd)!=null);}}while((tr=next)!=null);}function addRows(td_elm,tr_elm,rowspan){td_elm.rowSpan=1;var trNext=nextElm(tr_elm,"TR");for(var i=1;i<rowspan&&trNext;i++){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';if(tinymce.isIE)trNext.insertBefore(newTD,trNext.cells(td_elm.cellIndex));else trNext.insertBefore(newTD,trNext.cells[td_elm.cellIndex]);trNext=nextElm(trNext,"TR");}}function copyRow(doc,table,tr){var grid=getTableGrid(table);var newTR=tr.cloneNode(false);var cpos=getCellPos(grid,tr.cells[0]);var lastCell=null;var tableBorder=inst.dom.getAttrib(table,"border");var tdElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){var newTD=null;if(lastCell!=tdElm){for(var i=0;i<tr.cells.length;i++){if(tdElm==tr.cells[i]){newTD=tdElm.cloneNode(true);break;}}}if(newTD==null){newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';}newTD.colSpan=1;newTD.rowSpan=1;newTR.appendChild(newTD);lastCell=tdElm;}return newTR;}switch(command){case"mceTableMoveToNextRow":var nextCell=getNextCell(tableElm,tdElm);if(!nextCell){inst.execCommand("mceTableInsertRowAfter",tdElm);nextCell=getNextCell(tableElm,tdElm);}inst.selection.select(nextCell);inst.selection.collapse(true);return true;case"mceTableRowProps":if(trElm==null)return true;if(user_interface){inst.windowManager.open({url:url+'/row.htm',width:400+parseInt(inst.getLang('table.rowprops_delta_width',0)),height:295+parseInt(inst.getLang('table.rowprops_delta_height',0)),inline:1},{plugin_url:url});}return true;case"mceTableCellProps":if(tdElm==null)return true;if(user_interface){inst.windowManager.open({url:url+'/cell.htm',width:400+parseInt(inst.getLang('table.cellprops_delta_width',0)),height:295+parseInt(inst.getLang('table.cellprops_delta_height',0)),inline:1},{plugin_url:url});}return true;case"mceInsertTable":if(user_interface){inst.windowManager.open({url:url+'/table.htm',width:400+parseInt(inst.getLang('table.table_delta_width',0)),height:320+parseInt(inst.getLang('table.table_delta_height',0)),inline:1},{plugin_url:url,action:value?value.action:0});}return true;case"mceTableDelete":var table=inst.dom.getParent(inst.selection.getNode(),"table");if(table){table.parentNode.removeChild(table);inst.execCommand('mceRepaint');}return true;case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":if(!tableElm)return true;if(trElm&&tableElm!=trElm.parentNode)tableElm=trElm.parentNode;if(tableElm&&trElm){switch(command){case"mceTableCutRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);inst.execCommand("mceTableDeleteRow");break;case"mceTableCopyRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);break;case"mceTablePasteRowBefore":if(!trElm||!tdElm)return true;var newTR=inst.tableRowClipboard.cloneNode(true);var prevTR=prevElm(trElm,"TR");if(prevTR!=null)trimRow(tableElm,prevTR,prevTR.cells[0],newTR);trElm.parentNode.insertBefore(newTR,trElm);break;case"mceTablePasteRowAfter":if(!trElm||!tdElm)return true;var nextTR=nextElm(trElm,"TR");var newTR=inst.tableRowClipboard.cloneNode(true);trimRow(tableElm,trElm,tdElm,newTR);if(nextTR==null)trElm.parentNode.appendChild(newTR);else nextTR.parentNode.insertBefore(newTR,nextTR);break;case"mceTableInsertRowBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD);}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm;}}trElm.parentNode.insertBefore(newTR,trElm);select(0,1);break;case"mceTableInsertRowAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD);}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm;}}if(newTR.hasChildNodes()){var nextTR=nextElm(trElm,"TR");if(nextTR)nextTR.parentNode.insertBefore(newTR,nextTR);else tableElm.appendChild(newTR);}select(0,1);break;case"mceTableDeleteRow":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);if(grid.length==1&&tableElm.nodeName=='TBODY'){inst.dom.remove(inst.dom.getParent(tableElm,"table"));return true;}var cells=trElm.cells;var nextTR=nextElm(trElm,"TR");for(var x=0;x<cells.length;x++){if(cells[x].rowSpan>1){var newTD=cells[x].cloneNode(true);var sd=getColRowSpan(cells[x]);newTD.rowSpan=sd.rowspan-1;var nextTD=nextTR.cells[x];if(nextTD==null)nextTR.appendChild(newTD);else nextTR.insertBefore(newTD,nextTD);}}var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd.rowspan>1){tdElm.rowSpan=sd.rowspan-1;}else{trElm=tdElm.parentNode;if(trElm.parentNode)trElm._delete=true;}lastTDElm=tdElm;}}deleteMarked(tableElm);select(0,-1);break;case"mceTableInsertColBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(inst.dom.getParent(tableElm,"table"));var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.rowSpan=tdElm.rowSpan;tdElm.parentNode.insertBefore(newTD,tdElm);}else tdElm.colSpan++;lastTDElm=tdElm;}}select();break;case"mceTableInsertColAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(inst.dom.getParent(tableElm,"table"));var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.rowSpan=tdElm.rowSpan;var nextTD=nextElm(tdElm,"TD,TH");if(nextTD==null)tdElm.parentNode.appendChild(newTD);else nextTD.parentNode.insertBefore(newTD,nextTD);}else tdElm.colSpan++;lastTDElm=tdElm;}}select(1);break;case"mceTableDeleteCol":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;if((grid.length>1&&grid[0].length<=1)&&tableElm.nodeName=='TBODY'){inst.dom.remove(inst.dom.getParent(tableElm,"table"));return true;}for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']>1)tdElm.colSpan=sd['colspan']-1;else{if(tdElm.parentNode)tdElm.parentNode.removeChild(tdElm);}lastTDElm=tdElm;}}select(-1);break;case"mceTableSplitCells":if(!trElm||!tdElm)return true;var spandata=getColRowSpan(tdElm);var colspan=spandata["colspan"];var rowspan=spandata["rowspan"];if(colspan>1||rowspan>1){tdElm.colSpan=1;for(var i=1;i<colspan;i++){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';trElm.insertBefore(newTD,nextElm(tdElm,"TD,TH"));if(rowspan>1)addRows(newTD,trElm,rowspan);}addRows(tdElm,trElm,rowspan);}tableElm=inst.dom.getParent(inst.selection.getNode(),"table");break;case"mceTableMergeCells":var rows=[];var sel=inst.selection.getSel();var grid=getTableGrid(tableElm);if(tinymce.isIE||sel.rangeCount==1){if(user_interface){var sp=getColRowSpan(tdElm);inst.windowManager.open({url:url+'/merge_cells.htm',width:240+parseInt(inst.getLang('table.merge_cells_delta_width',0)),height:110+parseInt(inst.getLang('table.merge_cells_delta_height',0)),inline:1},{action:"update",numcols:sp.colspan,numrows:sp.rowspan,plugin_url:url});return true;}else{var numRows=parseInt(value['numrows']);var numCols=parseInt(value['numcols']);var cpos=getCellPos(grid,tdElm);if((""+numRows)=="NaN")numRows=1;if((""+numCols)=="NaN")numCols=1;var tRows=tableElm.rows;for(var y=cpos.rowindex;y<grid.length;y++){var rowCells=[];for(var x=cpos.cellindex;x<grid[y].length;x++){var td=getCell(grid,y,x);if(td&&!inArray(rows,td)&&!inArray(rowCells,td)){var cp=getCellPos(grid,td);if(cp.cellindex<cpos.cellindex+numCols&&cp.rowindex<cpos.rowindex+numRows)rowCells[rowCells.length]=td;}}if(rowCells.length>0)rows[rows.length]=rowCells;var td=getCell(grid,cpos.rowindex,cpos.cellindex);each(ed.dom.select('br',td),function(e,i){if(i>0&&ed.dom.getAttrib('mce_bogus'))ed.dom.remove(e);});}}}else{var cells=[];var sel=inst.selection.getSel();var lastTR=null;var curRow=null;var x1=-1,y1=-1,x2,y2;if(sel.rangeCount<2)return true;for(var i=0;i<sel.rangeCount;i++){var rng=sel.getRangeAt(i);var tdElm=rng.startContainer.childNodes[rng.startOffset];if(!tdElm)break;if(tdElm.nodeName=="TD"||tdElm.nodeName=="TH")cells[cells.length]=tdElm;}var tRows=tableElm.rows;for(var y=0;y<tRows.length;y++){var rowCells=[];for(var x=0;x<tRows[y].cells.length;x++){var td=tRows[y].cells[x];for(var i=0;i<cells.length;i++){if(td==cells[i]){rowCells[rowCells.length]=td;}}}if(rowCells.length>0)rows[rows.length]=rowCells;}var curRow=[];var lastTR=null;for(var y=0;y<grid.length;y++){for(var x=0;x<grid[y].length;x++){grid[y][x]._selected=false;for(var i=0;i<cells.length;i++){if(grid[y][x]==cells[i]){if(x1==-1){x1=x;y1=y;}x2=x;y2=y;grid[y][x]._selected=true;}}}}for(var y=y1;y<=y2;y++){for(var x=x1;x<=x2;x++){if(!grid[y][x]._selected){alert("Invalid selection for merge.");return true;}}}}var rowSpan=1,colSpan=1;var lastRowSpan=-1;for(var y=0;y<rows.length;y++){var rowColSpan=0;for(var x=0;x<rows[y].length;x++){var sd=getColRowSpan(rows[y][x]);rowColSpan+=sd['colspan'];if(lastRowSpan!=-1&&sd['rowspan']!=lastRowSpan){alert("Invalid selection for merge.");return true;}lastRowSpan=sd['rowspan'];}if(rowColSpan>colSpan)colSpan=rowColSpan;lastRowSpan=-1;}var lastColSpan=-1;for(var x=0;x<rows[0].length;x++){var colRowSpan=0;for(var y=0;y<rows.length;y++){var sd=getColRowSpan(rows[y][x]);colRowSpan+=sd['rowspan'];if(lastColSpan!=-1&&sd['colspan']!=lastColSpan){alert("Invalid selection for merge.");return true;}lastColSpan=sd['colspan'];}if(colRowSpan>rowSpan)rowSpan=colRowSpan;lastColSpan=-1;}tdElm=rows[0][0];tdElm.rowSpan=rowSpan;tdElm.colSpan=colSpan;for(var y=0;y<rows.length;y++){for(var x=0;x<rows[y].length;x++){var html=rows[y][x].innerHTML;var chk=html.replace(/[ \t\r\n]/g,"");if(chk!="<br/>"&&chk!="<br>"&&chk!='<br mce_bogus="1"/>'&&(x+y>0))tdElm.innerHTML+=html;if(rows[y][x]!=tdElm&&!rows[y][x]._deleted){var cpos=getCellPos(grid,rows[y][x]);var tr=rows[y][x].parentNode;tr.removeChild(rows[y][x]);rows[y][x]._deleted=true;if(!tr.hasChildNodes()){tr.parentNode.removeChild(tr);var lastCell=null;for(var x=0;cellElm=getCell(grid,cpos.rowindex,x);x++){if(cellElm!=lastCell&&cellElm.rowSpan>1)cellElm.rowSpan--;lastCell=cellElm;}if(tdElm.rowSpan>1)tdElm.rowSpan--;}}}}each(ed.dom.select('br',tdElm),function(e,i){if(i>0&&ed.dom.getAttrib(e,'mce_bogus'))ed.dom.remove(e);});break;}tableElm=inst.dom.getParent(inst.selection.getNode(),"table");inst.addVisual(tableElm);inst.nodeChanged();}return true;}return false;}});tinymce.PluginManager.add('table',tinymce.plugins.TablePlugin);})();
\ No newline at end of file
+(function(c){var d=c.each;function b(f,g){var h=g.ownerDocument,e=h.createRange(),j;e.setStartBefore(g);e.setEnd(f.endContainer,f.endOffset);j=h.createElement("body");j.appendChild(e.cloneContents());return j.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(G,F,J){var f,K,C,o;s();o=F.getParent(J.getStart(),"th,td");if(o){K=E(o);C=H();o=w(K.x,K.y)}function z(M,L){M=M.cloneNode(L);M.removeAttribute("id");return M}function s(){var L=0;f=[];d(["thead","tbody","tfoot"],function(M){var N=F.select("> "+M+" tr",G);d(N,function(O,P){P+=L;d(F.select("> td, > th",O),function(V,Q){var R,S,T,U;if(f[P]){while(f[P][Q]){Q++}}T=h(V,"rowspan");U=h(V,"colspan");for(S=P;S<P+T;S++){if(!f[S]){f[S]=[]}for(R=Q;R<Q+U;R++){f[S][R]={part:M,real:S==P&&R==Q,elm:V,rowspan:T,colspan:U}}}})});L+=N.length})}function w(L,N){var M;M=f[N];if(M){return M[L]}}function h(M,L){return parseInt(M.getAttribute(L)||1)}function j(L){return F.hasClass(L.elm,"mceSelected")||L==o}function k(){var L=[];d(G.rows,function(M){d(M.cells,function(N){if(F.hasClass(N,"mceSelected")||N==o.elm){L.push(M);return false}})});return L}function r(){var L=F.createRng();L.setStartAfter(G);L.setEndAfter(G);J.setRng(L);F.remove(G)}function e(L){var M;c.walk(L,function(O){var N;if(O.nodeType==3){d(F.getParents(O.parentNode,null,L).reverse(),function(P){P=z(P,false);if(!M){M=N=P}else{if(N){N.appendChild(P)}}N=P});if(N){N.innerHTML=c.isIE?" ":'<br _mce_bogus="1" />'}return false}},"childNodes");L=z(L,false);L.rowSpan=L.colSpan=1;if(M){L.appendChild(M)}else{if(!c.isIE){L.innerHTML='<br _mce_bogus="1" />'}}return L}function q(){var L=F.createRng();d(F.select("tr",G),function(M){if(M.cells.length==0){F.remove(M)}});if(F.select("tr",G).length==0){L.setStartAfter(G);L.setEndAfter(G);J.setRng(L);F.remove(G);return}d(F.select("thead,tbody,tfoot",G),function(M){if(M.rows.length==0){F.remove(M)}});s();row=f[Math.min(f.length-1,K.y)];if(row){J.select(row[Math.min(row.length-1,K.x)].elm,true);J.collapse(true)}}function t(R,P,T,Q){var O,M,L,N,S;O=f[P][R].elm.parentNode;for(L=1;L<=T;L++){O=F.getNext(O,"tr");if(O){for(M=R;M>=0;M--){S=f[P+L][M].elm;if(S.parentNode==O){for(N=1;N<=Q;N++){F.insertAfter(e(S),S)}break}}if(M==-1){for(N=1;N<=Q;N++){O.insertBefore(e(O.cells[0]),O.cells[0])}}}}}function B(){d(f,function(L,M){d(L,function(O,N){var R,Q,S,P;if(j(O)){O=O.elm;R=h(O,"colspan");Q=h(O,"rowspan");if(R>1||Q>1){O.colSpan=O.rowSpan=1;for(P=0;P<R-1;P++){F.insertAfter(e(O),O)}t(N,M,Q-1,R)}}})})}function p(T,Q,W){var O,N,V,U,S,P,R,L,T,M;if(T){pos=E(T);O=pos.x;N=pos.y;V=O+(Q-1);U=N+(W-1)}else{O=K.x;N=K.y;V=C.x;U=C.y}R=w(O,N);L=w(V,U);if(R&&L&&R.part==L.part){B();s();R=w(O,N).elm;R.colSpan=(V-O)+1;R.rowSpan=(U-N)+1;for(P=N;P<=U;P++){for(S=O;S<=V;S++){T=f[P][S].elm;if(T!=R){M=c.grep(T.childNodes);d(M,function(Y,X){if(Y.nodeName!="BR"||X!=M.length-1){R.appendChild(Y)}});F.remove(T)}}}q()}}function l(O){var L,Q,N,P,R,S,M,T;d(f,function(U,V){d(U,function(X,W){if(j(X)){X=X.elm;R=X.parentNode;S=z(R,false);L=V;if(O){return false}}});if(O){return !L}});for(P=0;P<f[0].length;P++){Q=f[L][P].elm;if(Q!=N){if(!O){rowSpan=h(Q,"rowspan");if(rowSpan>1){Q.rowSpan=rowSpan+1;continue}}else{if(L>0&&f[L-1][P]){T=f[L-1][P].elm;rowSpan=h(T,"rowspan");if(rowSpan>1){T.rowSpan=rowSpan+1;continue}}}M=e(Q);M.colSpan=Q.colSpan;S.appendChild(M);N=Q}}if(S.hasChildNodes()){if(!O){F.insertAfter(S,R)}else{R.parentNode.insertBefore(S,R)}}}function g(M){var N,L;d(f,function(O,P){d(O,function(R,Q){if(j(R)){N=Q;if(M){return false}}});if(M){return !N}});d(f,function(R,S){var O=R[N].elm,P,Q;if(O!=L){Q=h(O,"colspan");P=h(O,"rowspan");if(Q==1){if(!M){F.insertAfter(e(O),O);t(N,S,P-1,Q)}else{O.parentNode.insertBefore(e(O),O);t(N,S,P-1,Q)}}else{O.colSpan++}L=O}})}function n(){var L=[];d(f,function(M,N){d(M,function(P,O){if(j(P)&&c.inArray(L,O)===-1){d(f,function(S){var Q=S[O].elm,R;R=h(Q,"colspan");if(R>1){Q.colSpan=R-1}else{F.remove(Q)}});L.push(O)}})});q()}function m(){var M;function L(P){var O,Q,N;O=F.getNext(P,"tr");d(P.cells,function(R){var S=h(R,"rowspan");if(S>1){R.rowSpan=S-1;Q=E(R);t(Q.x,Q.y,1,1)}});Q=E(P.cells[0]);d(f[Q.y],function(R){var S;R=R.elm;if(R!=N){S=h(R,"rowspan");if(S<=1){F.remove(R)}else{R.rowSpan=S-1}N=R}})}M=k();d(M.reverse(),function(N){L(N)});q()}function D(){var L=k();F.remove(L);q();return L}function I(){var L=k();d(L,function(N,M){L[M]=z(N,true)});return L}function A(N,M){var O=k(),L=O[M?0:O.length-1],P=L.cells.length;d(f,function(R){var Q;P=0;d(R,function(T,S){if(T.real){P+=T.colspan}if(T.elm.parentNode==L){Q=1}});if(Q){return false}});if(!M){N.reverse()}d(N,function(S){var R=S.cells.length,Q;for(i=0;i<R;i++){Q=S.cells[i];Q.colSpan=Q.rowSpan=1}for(i=R;i<P;i++){S.appendChild(e(S.cells[R-1]))}for(i=P;i<R;i++){F.remove(S.cells[i])}if(M){L.parentNode.insertBefore(S,L)}else{F.insertAfter(S,L)}})}function E(L){var M;d(f,function(N,O){d(N,function(Q,P){if(Q.elm==L){M={x:P,y:O};return false}});return !M});return M}function v(L){K=E(L)}function H(){var N,M,L;M=L=0;d(f,function(O,P){d(O,function(R,Q){var T,S;if(j(R)){R=f[P][Q];if(Q>M){M=Q}if(P>L){L=P}if(R.real){T=R.colspan-1;S=R.rowspan-1;if(T){if(Q+T>M){M=Q+T}}if(S){if(P+S>L){L=P+S}}}}})});return{x:M,y:L}}function u(R){var O,N,T,S,M,L,P,Q;C=E(R);if(K&&C){O=Math.min(K.x,C.x);N=Math.min(K.y,C.y);T=Math.max(K.x,C.x);S=Math.max(K.y,C.y);M=T;L=S;for(y=N;y<=L;y++){R=f[y][O];if(!R.real){if(O-(R.colspan-1)<O){O-=R.colspan-1}}}for(x=O;x<=M;x++){R=f[N][x];if(!R.real){if(N-(R.rowspan-1)<N){N-=R.rowspan-1}}}for(y=N;y<=S;y++){for(x=O;x<=T;x++){R=f[y][x];if(R.real){P=R.colspan-1;Q=R.rowspan-1;if(P){if(x+P>M){M=x+P}}if(Q){if(y+Q>L){L=y+Q}}}}}F.removeClass(F.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=N;y<=L;y++){for(x=O;x<=M;x++){F.addClass(f[y][x].elm,"mceSelected")}}}}c.extend(this,{deleteTable:r,split:B,merge:p,insertRow:l,insertCol:g,deleteCols:n,deleteRows:m,cutRows:D,copyRows:I,pasteRows:A,getPos:E,setStartCell:v,setEndCell:u})}c.create("tinymce.plugins.TablePlugin",{init:function(f,g){var e,k;function j(n){var m=f.selection,l=f.dom.getParent(n||m.getNode(),"table");if(l){return new a(l,f.dom,m)}}function h(){f.getBody().style.webkitUserSelect="";f.dom.removeClass(f.dom.select("td.mceSelected,th.mceSelected"),"mceSelected")}d([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(l){f.addButton(l[0],{title:l[1],cmd:l[2],ui:l[3]})});if(!c.isIE){f.onClick.add(function(l,m){m=m.target;if(m.nodeName==="TABLE"){l.selection.select(m)}})}f.onNodeChange.add(function(m,l,q){var o;q=m.selection.getStart();o=m.dom.getParent(q,"td,th,caption");l.setActive("table",q.nodeName==="TABLE"||!!o);if(o&&o.nodeName==="CAPTION"){o=0}l.setDisabled("delete_table",!o);l.setDisabled("delete_col",!o);l.setDisabled("delete_table",!o);l.setDisabled("delete_row",!o);l.setDisabled("col_after",!o);l.setDisabled("col_before",!o);l.setDisabled("row_after",!o);l.setDisabled("row_before",!o);l.setDisabled("row_props",!o);l.setDisabled("cell_props",!o);l.setDisabled("split_cells",!o);l.setDisabled("merge_cells",!o)});f.onInit.add(function(m){var l,p,q=m.dom,n;e=m.windowManager;m.onMouseDown.add(function(r,s){if(s.button!=2){h();p=q.getParent(s.target,"td,th");l=q.getParent(p,"table")}});q.bind(m.getDoc(),"mouseover",function(u){var s,r,t=u.target;if(p&&(n||t!=p)&&(t.nodeName=="TD"||t.nodeName=="TH")){r=q.getParent(t,"table");if(r==l){if(!n){n=j(r);n.setStartCell(p);m.getBody().style.webkitUserSelect="none"}n.setEndCell(t)}s=m.selection.getSel();if(s.removeAllRanges){s.removeAllRanges()}else{s.empty()}u.preventDefault()}});m.onMouseUp.add(function(A,B){var s,u=A.selection,C,D=u.getSel(),r,v,t,z;if(p){if(n){A.getBody().style.webkitUserSelect=""}function w(E,G){var F=new c.dom.TreeWalker(E,E);do{if(E.nodeType==3&&c.trim(E.nodeValue).length!=0){if(G){s.setStart(E,0)}else{s.setEnd(E,E.nodeValue.length)}return}if(E.nodeName=="BR"){if(G){s.setStartBefore(E)}else{s.setEndBefore(E)}return}}while(E=(G?F.next():F.prev()))}C=q.select("td.mceSelected,th.mceSelected");if(C.length>0){s=q.createRng();v=C[0];z=C[C.length-1];w(v,1);r=new c.dom.TreeWalker(v,q.getParent(C[0],"table"));do{if(v.nodeName=="TD"||v.nodeName=="TH"){if(!q.hasClass(v,"mceSelected")){break}t=v}}while(v=r.next());w(t);u.setRng(s)}A.nodeChanged();p=n=l=null}});m.onKeyUp.add(function(r,s){h()});if(m&&m.plugins.contextmenu){m.plugins.contextmenu.onContextMenu.add(function(t,r,v){var w,u=m.selection,s=u.getNode()||m.getBody();if(m.dom.getParent(v,"td")||m.dom.getParent(v,"th")||m.dom.select("td.mceSelected,th.mceSelected").length){r.removeAll();if(s.nodeName=="A"&&!m.dom.getAttrib(s,"name")){r.add({title:"advanced.link_desc",icon:"link",cmd:m.plugins.advlink?"mceAdvLink":"mceLink",ui:true});r.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});r.addSeparator()}if(s.nodeName=="IMG"&&s.className.indexOf("mceItem")==-1){r.add({title:"advanced.image_desc",icon:"image",cmd:m.plugins.advimage?"mceAdvImage":"mceImage",ui:true});r.addSeparator()}r.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});r.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});r.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});r.addSeparator();w=r.addMenu({title:"table.cell"});w.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});w.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});w.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});w=r.addMenu({title:"table.row"});w.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});w.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});w.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});w.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});w.addSeparator();w.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});w.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});w.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!k);w.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!k);w=r.addMenu({title:"table.col"});w.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});w.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});w.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{r.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(!c.isIE){function o(){var r;for(r=m.getBody().lastChild;r&&r.nodeType==3&&!r.nodeValue.length;r=r.previousSibling){}if(r&&r.nodeName=="TABLE"){m.dom.add(m.getBody(),"p",null,'<br mce_bogus="1" />')}}if(c.isGecko){m.onKeyDown.add(function(s,u){var r,t,v=s.dom;if(u.keyCode==37||u.keyCode==38){r=s.selection.getRng();t=v.getParent(r.startContainer,"table");if(t&&s.getBody().firstChild==t){if(b(r,t)){r=v.createRng();r.setStartBefore(t);r.setEndBefore(t);s.selection.setRng(r);u.preventDefault()}}}})}m.onKeyUp.add(o);m.onSetContent.add(o);m.onVisualAid.add(o);m.onPreProcess.add(function(r,t){var s=t.node.lastChild;if(s&&s.childNodes.length==1&&s.firstChild.nodeName=="BR"){r.dom.remove(s)}});o()}});d({mceTableSplitCells:function(l){l.split()},mceTableMergeCells:function(m){var n,o,l;l=f.dom.getParent(f.selection.getNode(),"th,td");if(l){n=l.rowSpan;o=l.colSpan}if(!f.dom.select("td.mceSelected,th.mceSelected").length){e.open({url:g+"/merge_cells.htm",width:240+parseInt(f.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(f.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:n,cols:o,onaction:function(p){m.merge(l,p.cols,p.rows)},plugin_url:g})}else{m.merge()}},mceTableInsertRowBefore:function(l){l.insertRow(true)},mceTableInsertRowAfter:function(l){l.insertRow()},mceTableInsertColBefore:function(l){l.insertCol(true)},mceTableInsertColAfter:function(l){l.insertCol()},mceTableDeleteCol:function(l){l.deleteCols()},mceTableDeleteRow:function(l){l.deleteRows()},mceTableCutRow:function(l){k=l.cutRows()},mceTableCopyRow:function(l){k=l.copyRows()},mceTablePasteRowBefore:function(l){l.pasteRows(k,true)},mceTablePasteRowAfter:function(l){l.pasteRows(k)},mceTableDelete:function(l){l.deleteTable()}},function(m,l){f.addCommand(l,function(){var n=j();if(n){m(n);f.execCommand("mceRepaint");h()}})});d({mceInsertTable:function(l){e.open({url:g+"/table.htm",width:400+parseInt(f.getLang("table.table_delta_width",0)),height:320+parseInt(f.getLang("table.table_delta_height",0)),inline:1},{plugin_url:g,action:l?l.action:0})},mceTableRowProps:function(){e.open({url:g+"/row.htm",width:400+parseInt(f.getLang("table.rowprops_delta_width",0)),height:295+parseInt(f.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:g})},mceTableCellProps:function(){e.open({url:g+"/cell.htm",width:400+parseInt(f.getLang("table.cellprops_delta_width",0)),height:295+parseInt(f.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:g})}},function(m,l){f.addCommand(l,function(n,o){m(o)})})}});c.PluginManager.add("table",c.plugins.TablePlugin)})(tinymce);
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 953 2008-11-04 10:16:50Z spocke $\r
+ * editor_plugin_src.js\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
-(function() {\r
+(function(tinymce) {\r
var each = tinymce.each;\r
\r
- tinymce.create('tinymce.plugins.TablePlugin', {\r
- init : function(ed, url) {\r
- var t = this;\r
+ // Checks if the selection/caret is at the start of the specified block element\r
+ function isAtStart(rng, par) {\r
+ var doc = par.ownerDocument, rng2 = doc.createRange(), elm;\r
\r
- t.editor = ed;\r
- t.url = url;\r
+ rng2.setStartBefore(par);\r
+ rng2.setEnd(rng.endContainer, rng.endOffset);\r
\r
- // Register buttons\r
- each([\r
- ['table', 'table.desc', 'mceInsertTable', true],\r
- ['delete_table', 'table.del', 'mceTableDelete'],\r
- ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],\r
- ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],\r
- ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],\r
- ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],\r
- ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],\r
- ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],\r
- ['row_props', 'table.row_desc', 'mceTableRowProps', true],\r
- ['cell_props', 'table.cell_desc', 'mceTableCellProps', true],\r
- ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],\r
- ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]\r
- ], function(c) {\r
- ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});\r
- });\r
+ elm = doc.createElement('body');\r
+ elm.appendChild(rng2.cloneContents());\r
\r
- if (ed.getParam('inline_styles')) {\r
- // Force move of attribs to styles in strict mode\r
- ed.onPreProcess.add(function(ed, o) {\r
- var dom = ed.dom;\r
+ // Check for text characters of other elements that should be treated as content\r
+ return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0;\r
+ };\r
\r
- each(dom.select('table', o.node), function(n) {\r
- var v;\r
+ /**\r
+ * Table Grid class.\r
+ */\r
+ function TableGrid(table, dom, selection) {\r
+ var grid, startPos, endPos, selectedCell;\r
\r
- if (v = dom.getAttrib(n, 'width')) {\r
- dom.setStyle(n, 'width', v);\r
- dom.setAttrib(n, 'width');\r
- }\r
+ buildGrid();\r
+ selectedCell = dom.getParent(selection.getStart(), 'th,td');\r
+ if (selectedCell) {\r
+ startPos = getPos(selectedCell);\r
+ endPos = findEndPos();\r
+ selectedCell = getCell(startPos.x, startPos.y);\r
+ }\r
\r
- if (v = dom.getAttrib(n, 'height')) {\r
- dom.setStyle(n, 'height', v);\r
- dom.setAttrib(n, 'height');\r
- }\r
- });\r
- });\r
- }\r
+ function cloneNode(node, children) {\r
+ node = node.cloneNode(children);\r
+ node.removeAttribute('id');\r
\r
- ed.onInit.add(function() {\r
- if (ed && ed.plugins.contextmenu) {\r
- ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {\r
- var sm, se = ed.selection, el = se.getNode() || ed.getBody();\r
+ return node;\r
+ }\r
\r
- if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th')) {\r
- m.removeAll();\r
+ function buildGrid() {\r
+ var startY = 0;\r
\r
- if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {\r
- m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});\r
- m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});\r
- m.addSeparator();\r
- }\r
+ grid = [];\r
\r
- if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {\r
- m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});\r
- m.addSeparator();\r
- }\r
+ each(['thead', 'tbody', 'tfoot'], function(part) {\r
+ var rows = dom.select('> ' + part + ' tr', table);\r
\r
- m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', ui : true, value : {action : 'insert'}});\r
- m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable', ui : true});\r
- m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete', ui : true});\r
- m.addSeparator();\r
+ each(rows, function(tr, y) {\r
+ y += startY;\r
\r
- // Cell menu\r
- sm = m.addMenu({title : 'table.cell'});\r
- sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps', ui : true});\r
- sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells', ui : true});\r
- sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells', ui : true});\r
+ each(dom.select('> td, > th', tr), function(td, x) {\r
+ var x2, y2, rowspan, colspan;\r
\r
- // Row menu\r
- sm = m.addMenu({title : 'table.row'});\r
- sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps', ui : true});\r
- sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});\r
- sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});\r
- sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});\r
- sm.addSeparator();\r
- sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});\r
- sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});\r
- sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'});\r
- sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'});\r
+ // Skip over existing cells produced by rowspan\r
+ if (grid[y]) {\r
+ while (grid[y][x])\r
+ x++;\r
+ }\r
\r
- // Column menu\r
- sm = m.addMenu({title : 'table.col'});\r
- sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});\r
- sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});\r
- sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});\r
- } else\r
- m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', ui : true});\r
+ // Get col/rowspan from cell\r
+ rowspan = getSpanVal(td, 'rowspan');\r
+ colspan = getSpanVal(td, 'colspan');\r
+\r
+ // Fill out rowspan/colspan right and down\r
+ for (y2 = y; y2 < y + rowspan; y2++) {\r
+ if (!grid[y2])\r
+ grid[y2] = [];\r
+\r
+ for (x2 = x; x2 < x + colspan; x2++) {\r
+ grid[y2][x2] = {\r
+ part : part,\r
+ real : y2 == y && x2 == x,\r
+ elm : td,\r
+ rowspan : rowspan,\r
+ colspan : colspan\r
+ };\r
+ }\r
+ }\r
});\r
- }\r
+ });\r
+\r
+ startY += rows.length;\r
});\r
+ };\r
\r
- // Add undo level when new rows are created using the tab key\r
- ed.onKeyDown.add(function(ed, e) {\r
- if (e.keyCode == 9 && ed.dom.getParent(ed.selection.getNode(), 'TABLE')) {\r
- if (!tinymce.isGecko && !tinymce.isOpera) {\r
- tinyMCE.execInstanceCommand(ed.editorId, "mceTableMoveToNextRow", true);\r
- return tinymce.dom.Event.cancel(e);\r
- }\r
+ function getCell(x, y) {\r
+ var row;\r
\r
- ed.undoManager.add();\r
- }\r
+ row = grid[y];\r
+ if (row)\r
+ return row[x];\r
+ };\r
+\r
+ function getSpanVal(td, name) {\r
+ return parseInt(td.getAttribute(name) || 1);\r
+ };\r
+\r
+ function isCellSelected(cell) {\r
+ return dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell;\r
+ };\r
+\r
+ function getSelectedRows() {\r
+ var rows = [];\r
+\r
+ each(table.rows, function(row) {\r
+ each(row.cells, function(cell) {\r
+ if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) {\r
+ rows.push(row);\r
+ return false;\r
+ }\r
+ });\r
});\r
\r
- // Select whole table is a table border is clicked\r
- if (!tinymce.isIE) {\r
- if (ed.getParam('table_selection', true)) {\r
- ed.onClick.add(function(ed, e) {\r
- e = e.target;\r
+ return rows;\r
+ };\r
\r
- if (e.nodeName === 'TABLE')\r
- ed.selection.select(e);\r
- });\r
- }\r
- }\r
+ function deleteTable() {\r
+ var rng = dom.createRng();\r
\r
- ed.onNodeChange.add(function(ed, cm, n) {\r
- var p = ed.dom.getParent(n, 'td,th,caption');\r
+ rng.setStartAfter(table);\r
+ rng.setEndAfter(table);\r
\r
- cm.setActive('table', n.nodeName === 'TABLE' || !!p);\r
- if (p && p.nodeName === 'CAPTION')\r
- p = null;\r
+ selection.setRng(rng);\r
\r
- cm.setDisabled('delete_table', !p);\r
- cm.setDisabled('delete_col', !p);\r
- cm.setDisabled('delete_table', !p);\r
- cm.setDisabled('delete_row', !p);\r
- cm.setDisabled('col_after', !p);\r
- cm.setDisabled('col_before', !p);\r
- cm.setDisabled('row_after', !p);\r
- cm.setDisabled('row_before', !p);\r
- cm.setDisabled('row_props', !p);\r
- cm.setDisabled('cell_props', !p);\r
- cm.setDisabled('split_cells', !p || (parseInt(ed.dom.getAttrib(p, 'colspan', '1')) < 2 && parseInt(ed.dom.getAttrib(p, 'rowspan', '1')) < 2));\r
- cm.setDisabled('merge_cells', !p);\r
- });\r
+ dom.remove(table);\r
+ };\r
\r
- // Padd empty table cells\r
- if (!tinymce.isIE) {\r
- ed.onBeforeSetContent.add(function(ed, o) {\r
- if (o.initial)\r
- o.content = o.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g, tinymce.isOpera ? '<$1$2> </$1>' : '<$1$2><br mce_bogus="1" /></$1>');\r
- });\r
- }\r
- },\r
-\r
- execCommand : function(cmd, ui, val) {\r
- var ed = this.editor, b;\r
-\r
- // Is table command\r
- switch (cmd) {\r
- case "mceTableMoveToNextRow":\r
- case "mceInsertTable":\r
- case "mceTableRowProps":\r
- case "mceTableCellProps":\r
- case "mceTableSplitCells":\r
- case "mceTableMergeCells":\r
- case "mceTableInsertRowBefore":\r
- case "mceTableInsertRowAfter":\r
- case "mceTableDeleteRow":\r
- case "mceTableInsertColBefore":\r
- case "mceTableInsertColAfter":\r
- case "mceTableDeleteCol":\r
- case "mceTableCutRow":\r
- case "mceTableCopyRow":\r
- case "mceTablePasteRowBefore":\r
- case "mceTablePasteRowAfter":\r
- case "mceTableDelete":\r
- ed.execCommand('mceBeginUndoLevel');\r
- this._doExecCommand(cmd, ui, val);\r
- ed.execCommand('mceEndUndoLevel');\r
-\r
- return true;\r
- }\r
+ function cloneCell(cell) {\r
+ var formatNode;\r
\r
- // Pass to next handler in chain\r
- return false;\r
- },\r
-\r
- getInfo : function() {\r
- return {\r
- longname : 'Tables',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',\r
- version : tinymce.majorVersion + "." + tinymce.minorVersion\r
- };\r
- },\r
-\r
- // Private plugin internal methods\r
-\r
- /**\r
- * Executes the table commands.\r
- */\r
- _doExecCommand : function(command, user_interface, value) {\r
- var inst = this.editor, ed = inst, url = this.url;\r
- var focusElm = inst.selection.getNode();\r
- var trElm = inst.dom.getParent(focusElm, "tr");\r
- var tdElm = inst.dom.getParent(focusElm, "td,th");\r
- var tableElm = inst.dom.getParent(focusElm, "table");\r
- var doc = inst.contentWindow.document;\r
- var tableBorder = tableElm ? tableElm.getAttribute("border") : "";\r
-\r
- // Get first TD if no TD found\r
- if (trElm && tdElm == null)\r
- tdElm = trElm.cells[0];\r
-\r
- function inArray(ar, v) {\r
- for (var i=0; i<ar.length; i++) {\r
- // Is array\r
- if (ar[i].length > 0 && inArray(ar[i], v))\r
- return true;\r
-\r
- // Found value\r
- if (ar[i] == v)\r
- return true;\r
- }\r
+ // Clone formats\r
+ tinymce.walk(cell, function(node) {\r
+ var curNode;\r
\r
- return false;\r
- }\r
+ if (node.nodeType == 3) {\r
+ each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) {\r
+ node = cloneNode(node, false);\r
\r
- function select(dx, dy) {\r
- var td;\r
+ if (!formatNode)\r
+ formatNode = curNode = node;\r
+ else if (curNode)\r
+ curNode.appendChild(node);\r
\r
- grid = getTableGrid(tableElm);\r
- dx = dx || 0;\r
- dy = dy || 0;\r
- dx = Math.max(cpos.cellindex + dx, 0);\r
- dy = Math.max(cpos.rowindex + dy, 0);\r
+ curNode = node;\r
+ });\r
\r
- // Recalculate grid and select\r
- inst.execCommand('mceRepaint');\r
- td = getCell(grid, dy, dx);\r
+ // Add something to the inner node\r
+ if (curNode)\r
+ curNode.innerHTML = tinymce.isIE ? ' ' : '<br _mce_bogus="1" />';\r
\r
- if (td) {\r
- inst.selection.select(td.firstChild || td);\r
- inst.selection.collapse(1);\r
+ return false;\r
}\r
- };\r
+ }, 'childNodes');\r
\r
- function makeTD() {\r
- var newTD = doc.createElement("td");\r
+ cell = cloneNode(cell, false);\r
+ cell.rowSpan = cell.colSpan = 1;\r
\r
+ if (formatNode) {\r
+ cell.appendChild(formatNode);\r
+ } else {\r
if (!tinymce.isIE)\r
- newTD.innerHTML = '<br mce_bogus="1"/>';\r
+ cell.innerHTML = '<br _mce_bogus="1" />';\r
}\r
\r
- function getColRowSpan(td) {\r
- var colspan = inst.dom.getAttrib(td, "colspan");\r
- var rowspan = inst.dom.getAttrib(td, "rowspan");\r
+ return cell;\r
+ };\r
\r
- colspan = colspan == "" ? 1 : parseInt(colspan);\r
- rowspan = rowspan == "" ? 1 : parseInt(rowspan);\r
+ function cleanup() {\r
+ var rng = dom.createRng();\r
\r
- return {colspan : colspan, rowspan : rowspan};\r
+ // Empty rows\r
+ each(dom.select('tr', table), function(tr) {\r
+ if (tr.cells.length == 0)\r
+ dom.remove(tr);\r
+ });\r
+\r
+ // Empty table\r
+ if (dom.select('tr', table).length == 0) {\r
+ rng.setStartAfter(table);\r
+ rng.setEndAfter(table);\r
+ selection.setRng(rng);\r
+ dom.remove(table);\r
+ return;\r
}\r
\r
- function getCellPos(grid, td) {\r
- var x, y;\r
+ // Empty header/body/footer\r
+ each(dom.select('thead,tbody,tfoot', table), function(part) {\r
+ if (part.rows.length == 0)\r
+ dom.remove(part);\r
+ });\r
\r
- for (y=0; y<grid.length; y++) {\r
- for (x=0; x<grid[y].length; x++) {\r
- if (grid[y][x] == td)\r
- return {cellindex : x, rowindex : y};\r
- }\r
- }\r
+ // Restore selection to start position if it still exists\r
+ buildGrid();\r
\r
- return null;\r
+ // Restore the selection to the closest table position\r
+ row = grid[Math.min(grid.length - 1, startPos.y)];\r
+ if (row) {\r
+ selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true);\r
+ selection.collapse(true);\r
}\r
+ };\r
\r
- function getCell(grid, row, col) {\r
- if (grid[row] && grid[row][col])\r
- return grid[row][col];\r
+ function fillLeftDown(x, y, rows, cols) {\r
+ var tr, x2, r, c, cell;\r
\r
- return null;\r
- }\r
+ tr = grid[y][x].elm.parentNode;\r
+ for (r = 1; r <= rows; r++) {\r
+ tr = dom.getNext(tr, 'tr');\r
\r
- function getNextCell(table, cell) {\r
- var cells = [], x = 0, i, j, cell, nextCell;\r
+ if (tr) {\r
+ // Loop left to find real cell\r
+ for (x2 = x; x2 >= 0; x2--) {\r
+ cell = grid[y + r][x2].elm;\r
\r
- for (i = 0; i < table.rows.length; i++)\r
- for (j = 0; j < table.rows[i].cells.length; j++, x++)\r
- cells[x] = table.rows[i].cells[j];\r
+ if (cell.parentNode == tr) {\r
+ // Append clones after\r
+ for (c = 1; c <= cols; c++)\r
+ dom.insertAfter(cloneCell(cell), cell);\r
\r
- for (i = 0; i < cells.length; i++)\r
- if (cells[i] == cell)\r
- if (nextCell = cells[i+1])\r
- return nextCell;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (x2 == -1) {\r
+ // Insert nodes before first cell\r
+ for (c = 1; c <= cols; c++)\r
+ tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]);\r
+ }\r
+ }\r
}\r
+ };\r
\r
- function getTableGrid(table) {\r
- var grid = [], rows = table.rows, x, y, td, sd, xstart, x2, y2;\r
+ function split() {\r
+ each(grid, function(row, y) {\r
+ each(row, function(cell, x) {\r
+ var colSpan, rowSpan, newCell, i;\r
\r
- for (y=0; y<rows.length; y++) {\r
- for (x=0; x<rows[y].cells.length; x++) {\r
- td = rows[y].cells[x];\r
- sd = getColRowSpan(td);\r
+ if (isCellSelected(cell)) {\r
+ cell = cell.elm;\r
+ colSpan = getSpanVal(cell, 'colspan');\r
+ rowSpan = getSpanVal(cell, 'rowspan');\r
\r
- // All ready filled\r
- for (xstart = x; grid[y] && grid[y][xstart]; xstart++) ;\r
+ if (colSpan > 1 || rowSpan > 1) {\r
+ cell.colSpan = cell.rowSpan = 1;\r
\r
- // Fill box\r
- for (y2=y; y2<y+sd['rowspan']; y2++) {\r
- if (!grid[y2])\r
- grid[y2] = [];\r
+ // Insert cells right\r
+ for (i = 0; i < colSpan - 1; i++)\r
+ dom.insertAfter(cloneCell(cell), cell);\r
+\r
+ fillLeftDown(x, y, rowSpan - 1, colSpan);\r
+ }\r
+ }\r
+ });\r
+ });\r
+ };\r
+\r
+ function merge(cell, cols, rows) {\r
+ var startX, startY, endX, endY, x, y, startCell, endCell, cell, children;\r
+\r
+ // Use specified cell and cols/rows\r
+ if (cell) {\r
+ pos = getPos(cell);\r
+ startX = pos.x;\r
+ startY = pos.y;\r
+ endX = startX + (cols - 1);\r
+ endY = startY + (rows - 1);\r
+ } else {\r
+ // Use selection\r
+ startX = startPos.x;\r
+ startY = startPos.y;\r
+ endX = endPos.x;\r
+ endY = endPos.y;\r
+ }\r
\r
- for (x2=xstart; x2<xstart+sd['colspan']; x2++)\r
- grid[y2][x2] = td;\r
+ // Find start/end cells\r
+ startCell = getCell(startX, startY);\r
+ endCell = getCell(endX, endY);\r
+\r
+ // Check if the cells exists and if they are of the same part for example tbody = tbody\r
+ if (startCell && endCell && startCell.part == endCell.part) {\r
+ // Split and rebuild grid\r
+ split();\r
+ buildGrid();\r
+\r
+ // Set row/col span to start cell\r
+ startCell = getCell(startX, startY).elm;\r
+ startCell.colSpan = (endX - startX) + 1;\r
+ startCell.rowSpan = (endY - startY) + 1;\r
+\r
+ // Remove other cells and add it's contents to the start cell\r
+ for (y = startY; y <= endY; y++) {\r
+ for (x = startX; x <= endX; x++) {\r
+ cell = grid[y][x].elm;\r
+\r
+ if (cell != startCell) {\r
+ // Move children to startCell\r
+ children = tinymce.grep(cell.childNodes);\r
+ each(children, function(node, i) {\r
+ // Jump over last BR element\r
+ if (node.nodeName != 'BR' || i != children.length - 1)\r
+ startCell.appendChild(node);\r
+ });\r
+\r
+ // Remove cell\r
+ dom.remove(cell);\r
}\r
}\r
}\r
\r
- return grid;\r
+ // Remove empty rows etc and restore caret location\r
+ cleanup();\r
}\r
+ };\r
+\r
+ function insertRow(before) {\r
+ var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell;\r
+\r
+ // Find first/last row\r
+ each(grid, function(row, y) {\r
+ each(row, function(cell, x) {\r
+ if (isCellSelected(cell)) {\r
+ cell = cell.elm;\r
+ rowElm = cell.parentNode;\r
+ newRow = cloneNode(rowElm, false);\r
+ posY = y;\r
+\r
+ if (before)\r
+ return false;\r
+ }\r
+ });\r
\r
- function trimRow(table, tr, td, new_tr) {\r
- var grid = getTableGrid(table), cpos = getCellPos(grid, td);\r
- var cells, lastElm;\r
-\r
- // Time to crop away some\r
- if (new_tr.cells.length != tr.childNodes.length) {\r
- cells = tr.childNodes;\r
- lastElm = null;\r
-\r
- for (var x=0; td = getCell(grid, cpos.rowindex, x); x++) {\r
- var remove = true;\r
- var sd = getColRowSpan(td);\r
-\r
- // Remove due to rowspan\r
- if (inArray(cells, td)) {\r
- new_tr.childNodes[x]._delete = true;\r
- } else if ((lastElm == null || td != lastElm) && sd.colspan > 1) { // Remove due to colspan\r
- for (var i=x; i<x+td.colSpan; i++)\r
- new_tr.childNodes[i]._delete = true;\r
- }\r
+ if (before)\r
+ return !posY;\r
+ });\r
\r
- if ((lastElm == null || td != lastElm) && sd.rowspan > 1)\r
- td.rowSpan = sd.rowspan + 1;\r
+ for (x = 0; x < grid[0].length; x++) {\r
+ cell = grid[posY][x].elm;\r
\r
- lastElm = td;\r
+ if (cell != lastCell) {\r
+ if (!before) {\r
+ rowSpan = getSpanVal(cell, 'rowspan');\r
+ if (rowSpan > 1) {\r
+ cell.rowSpan = rowSpan + 1;\r
+ continue;\r
+ }\r
+ } else {\r
+ // Check if cell above can be expanded\r
+ if (posY > 0 && grid[posY - 1][x]) {\r
+ otherCell = grid[posY - 1][x].elm;\r
+ rowSpan = getSpanVal(otherCell, 'rowspan');\r
+ if (rowSpan > 1) {\r
+ otherCell.rowSpan = rowSpan + 1;\r
+ continue;\r
+ }\r
+ }\r
}\r
\r
- deleteMarked(tableElm);\r
- }\r
- }\r
+ // Insert new cell into new row\r
+ newCell = cloneCell(cell)\r
+ newCell.colSpan = cell.colSpan;\r
+ newRow.appendChild(newCell);\r
\r
- function prevElm(node, name) {\r
- while ((node = node.previousSibling) != null) {\r
- if (node.nodeName == name)\r
- return node;\r
+ lastCell = cell;\r
}\r
+ }\r
\r
- return null;\r
+ if (newRow.hasChildNodes()) {\r
+ if (!before)\r
+ dom.insertAfter(newRow, rowElm);\r
+ else\r
+ rowElm.parentNode.insertBefore(newRow, rowElm);\r
}\r
+ };\r
\r
- function nextElm(node, names) {\r
- var namesAr = names.split(',');\r
+ function insertCol(before) {\r
+ var posX, lastCell;\r
\r
- while ((node = node.nextSibling) != null) {\r
- for (var i=0; i<namesAr.length; i++) {\r
- if (node.nodeName.toLowerCase() == namesAr[i].toLowerCase() )\r
- return node;\r
+ // Find first/last column\r
+ each(grid, function(row, y) {\r
+ each(row, function(cell, x) {\r
+ if (isCellSelected(cell)) {\r
+ posX = x;\r
+\r
+ if (before)\r
+ return false;\r
}\r
- }\r
+ });\r
\r
- return null;\r
- }\r
+ if (before)\r
+ return !posX;\r
+ });\r
\r
- function deleteMarked(tbl) {\r
- if (tbl.rows == 0)\r
- return;\r
+ each(grid, function(row, y) {\r
+ var cell = row[posX].elm, rowSpan, colSpan;\r
\r
- var tr = tbl.rows[0];\r
- do {\r
- var next = nextElm(tr, "TR");\r
+ if (cell != lastCell) {\r
+ colSpan = getSpanVal(cell, 'colspan');\r
+ rowSpan = getSpanVal(cell, 'rowspan');\r
\r
- // Delete row\r
- if (tr._delete) {\r
- tr.parentNode.removeChild(tr);\r
- continue;\r
- }\r
+ if (colSpan == 1) {\r
+ if (!before) {\r
+ dom.insertAfter(cloneCell(cell), cell);\r
+ fillLeftDown(posX, y, rowSpan - 1, colSpan);\r
+ } else {\r
+ cell.parentNode.insertBefore(cloneCell(cell), cell);\r
+ fillLeftDown(posX, y, rowSpan - 1, colSpan);\r
+ }\r
+ } else\r
+ cell.colSpan++;\r
+\r
+ lastCell = cell;\r
+ }\r
+ });\r
+ };\r
+\r
+ function deleteCols() {\r
+ var cols = [];\r
\r
- // Delete cells\r
- var td = tr.cells[0];\r
- if (td.cells > 1) {\r
- do {\r
- var nexttd = nextElm(td, "TD,TH");\r
+ // Get selected column indexes\r
+ each(grid, function(row, y) {\r
+ each(row, function(cell, x) {\r
+ if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) {\r
+ each(grid, function(row) {\r
+ var cell = row[x].elm, colSpan;\r
+\r
+ colSpan = getSpanVal(cell, 'colspan');\r
+\r
+ if (colSpan > 1)\r
+ cell.colSpan = colSpan - 1;\r
+ else\r
+ dom.remove(cell);\r
+ });\r
\r
- if (td._delete)\r
- td.parentNode.removeChild(td);\r
- } while ((td = nexttd) != null);\r
+ cols.push(x);\r
}\r
- } while ((tr = next) != null);\r
- }\r
+ });\r
+ });\r
\r
- function addRows(td_elm, tr_elm, rowspan) {\r
- // Add rows\r
- td_elm.rowSpan = 1;\r
- var trNext = nextElm(tr_elm, "TR");\r
- for (var i=1; i<rowspan && trNext; i++) {\r
- var newTD = doc.createElement("td");\r
+ cleanup();\r
+ };\r
\r
- if (!tinymce.isIE)\r
- newTD.innerHTML = '<br mce_bogus="1"/>';\r
+ function deleteRows() {\r
+ var rows;\r
\r
- if (tinymce.isIE)\r
- trNext.insertBefore(newTD, trNext.cells(td_elm.cellIndex));\r
- else\r
- trNext.insertBefore(newTD, trNext.cells[td_elm.cellIndex]);\r
+ function deleteRow(tr) {\r
+ var nextTr, pos, lastCell;\r
\r
- trNext = nextElm(trNext, "TR");\r
- }\r
- }\r
+ nextTr = dom.getNext(tr, 'tr');\r
\r
- function copyRow(doc, table, tr) {\r
- var grid = getTableGrid(table);\r
- var newTR = tr.cloneNode(false);\r
- var cpos = getCellPos(grid, tr.cells[0]);\r
- var lastCell = null;\r
- var tableBorder = inst.dom.getAttrib(table, "border");\r
- var tdElm = null;\r
-\r
- for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
- var newTD = null;\r
-\r
- if (lastCell != tdElm) {\r
- for (var i=0; i<tr.cells.length; i++) {\r
- if (tdElm == tr.cells[i]) {\r
- newTD = tdElm.cloneNode(true);\r
- break;\r
- }\r
- }\r
+ // Move down row spanned cells\r
+ each(tr.cells, function(cell) {\r
+ var rowSpan = getSpanVal(cell, 'rowspan');\r
+\r
+ if (rowSpan > 1) {\r
+ cell.rowSpan = rowSpan - 1;\r
+ pos = getPos(cell);\r
+ fillLeftDown(pos.x, pos.y, 1, 1);\r
}\r
+ });\r
+\r
+ // Delete cells\r
+ pos = getPos(tr.cells[0]);\r
+ each(grid[pos.y], function(cell) {\r
+ var rowSpan;\r
+\r
+ cell = cell.elm;\r
\r
- if (newTD == null) {\r
- newTD = doc.createElement("td");\r
+ if (cell != lastCell) {\r
+ rowSpan = getSpanVal(cell, 'rowspan');\r
\r
- if (!tinymce.isIE)\r
- newTD.innerHTML = '<br mce_bogus="1"/>';\r
+ if (rowSpan <= 1)\r
+ dom.remove(cell);\r
+ else\r
+ cell.rowSpan = rowSpan - 1;\r
+\r
+ lastCell = cell;\r
}\r
+ });\r
+ };\r
\r
- // Reset col/row span\r
- newTD.colSpan = 1;\r
- newTD.rowSpan = 1;\r
+ // Get selected rows and move selection out of scope\r
+ rows = getSelectedRows();\r
\r
- newTR.appendChild(newTD);\r
+ // Delete all selected rows\r
+ each(rows.reverse(), function(tr) {\r
+ deleteRow(tr);\r
+ });\r
\r
- lastCell = tdElm;\r
- }\r
+ cleanup();\r
+ };\r
\r
- return newTR;\r
- }\r
+ function cutRows() {\r
+ var rows = getSelectedRows();\r
\r
- // ---- Commands -----\r
+ dom.remove(rows);\r
+ cleanup();\r
\r
- // Handle commands\r
- switch (command) {\r
- case "mceTableMoveToNextRow":\r
- var nextCell = getNextCell(tableElm, tdElm);\r
+ return rows;\r
+ };\r
\r
- if (!nextCell) {\r
- inst.execCommand("mceTableInsertRowAfter", tdElm);\r
- nextCell = getNextCell(tableElm, tdElm);\r
- }\r
+ function copyRows() {\r
+ var rows = getSelectedRows();\r
\r
- inst.selection.select(nextCell);\r
- inst.selection.collapse(true);\r
+ each(rows, function(row, i) {\r
+ rows[i] = cloneNode(row, true);\r
+ });\r
\r
- return true;\r
+ return rows;\r
+ };\r
\r
- case "mceTableRowProps":\r
- if (trElm == null)\r
- return true;\r
+ function pasteRows(rows, before) {\r
+ var selectedRows = getSelectedRows(),\r
+ targetRow = selectedRows[before ? 0 : selectedRows.length - 1],\r
+ targetCellCount = targetRow.cells.length;\r
\r
- if (user_interface) {\r
- inst.windowManager.open({\r
- url : url + '/row.htm',\r
- width : 400 + parseInt(inst.getLang('table.rowprops_delta_width', 0)),\r
- height : 295 + parseInt(inst.getLang('table.rowprops_delta_height', 0)),\r
- inline : 1\r
- }, {\r
- plugin_url : url\r
- });\r
- }\r
+ // Calc target cell count\r
+ each(grid, function(row) {\r
+ var match;\r
\r
- return true;\r
+ targetCellCount = 0;\r
+ each(row, function(cell, x) {\r
+ if (cell.real)\r
+ targetCellCount += cell.colspan;\r
\r
- case "mceTableCellProps":\r
- if (tdElm == null)\r
- return true;\r
+ if (cell.elm.parentNode == targetRow)\r
+ match = 1;\r
+ });\r
\r
- if (user_interface) {\r
- inst.windowManager.open({\r
- url : url + '/cell.htm',\r
- width : 400 + parseInt(inst.getLang('table.cellprops_delta_width', 0)),\r
- height : 295 + parseInt(inst.getLang('table.cellprops_delta_height', 0)),\r
- inline : 1\r
- }, {\r
- plugin_url : url\r
- });\r
- }\r
+ if (match)\r
+ return false;\r
+ });\r
\r
- return true;\r
+ if (!before)\r
+ rows.reverse();\r
\r
- case "mceInsertTable":\r
- if (user_interface) {\r
- inst.windowManager.open({\r
- url : url + '/table.htm',\r
- width : 400 + parseInt(inst.getLang('table.table_delta_width', 0)),\r
- height : 320 + parseInt(inst.getLang('table.table_delta_height', 0)),\r
- inline : 1\r
- }, {\r
- plugin_url : url,\r
- action : value ? value.action : 0\r
- });\r
- }\r
+ each(rows, function(row) {\r
+ var cellCount = row.cells.length, cell;\r
\r
- return true;\r
+ // Remove col/rowspans\r
+ for (i = 0; i < cellCount; i++) {\r
+ cell = row.cells[i];\r
+ cell.colSpan = cell.rowSpan = 1;\r
+ }\r
\r
- case "mceTableDelete":\r
- var table = inst.dom.getParent(inst.selection.getNode(), "table");\r
- if (table) {\r
- table.parentNode.removeChild(table);\r
- inst.execCommand('mceRepaint');\r
- }\r
- return true;\r
-\r
- case "mceTableSplitCells":\r
- case "mceTableMergeCells":\r
- case "mceTableInsertRowBefore":\r
- case "mceTableInsertRowAfter":\r
- case "mceTableDeleteRow":\r
- case "mceTableInsertColBefore":\r
- case "mceTableInsertColAfter":\r
- case "mceTableDeleteCol":\r
- case "mceTableCutRow":\r
- case "mceTableCopyRow":\r
- case "mceTablePasteRowBefore":\r
- case "mceTablePasteRowAfter":\r
- // No table just return (invalid command)\r
- if (!tableElm)\r
- return true;\r
-\r
- // Table has a tbody use that reference\r
- // Changed logic by ApTest 2005.07.12 (www.aptest.com)\r
- // Now lookk at the focused element and take its parentNode. That will be a tbody or a table.\r
- if (trElm && tableElm != trElm.parentNode)\r
- tableElm = trElm.parentNode;\r
-\r
- if (tableElm && trElm) {\r
- switch (command) {\r
- case "mceTableCutRow":\r
- if (!trElm || !tdElm)\r
- return true;\r
-\r
- inst.tableRowClipboard = copyRow(doc, tableElm, trElm);\r
- inst.execCommand("mceTableDeleteRow");\r
- break;\r
-\r
- case "mceTableCopyRow":\r
- if (!trElm || !tdElm)\r
- return true;\r
-\r
- inst.tableRowClipboard = copyRow(doc, tableElm, trElm);\r
- break;\r
-\r
- case "mceTablePasteRowBefore":\r
- if (!trElm || !tdElm)\r
- return true;\r
-\r
- var newTR = inst.tableRowClipboard.cloneNode(true);\r
-\r
- var prevTR = prevElm(trElm, "TR");\r
- if (prevTR != null)\r
- trimRow(tableElm, prevTR, prevTR.cells[0], newTR);\r
-\r
- trElm.parentNode.insertBefore(newTR, trElm);\r
- break;\r
-\r
- case "mceTablePasteRowAfter":\r
- if (!trElm || !tdElm)\r
- return true;\r
- \r
- var nextTR = nextElm(trElm, "TR");\r
- var newTR = inst.tableRowClipboard.cloneNode(true);\r
-\r
- trimRow(tableElm, trElm, tdElm, newTR);\r
-\r
- if (nextTR == null)\r
- trElm.parentNode.appendChild(newTR);\r
- else\r
- nextTR.parentNode.insertBefore(newTR, nextTR);\r
-\r
- break;\r
-\r
- case "mceTableInsertRowBefore":\r
- if (!trElm || !tdElm)\r
- return true;\r
-\r
- var grid = getTableGrid(tableElm);\r
- var cpos = getCellPos(grid, tdElm);\r
- var newTR = doc.createElement("tr");\r
- var lastTDElm = null;\r
-\r
- cpos.rowindex--;\r
- if (cpos.rowindex < 0)\r
- cpos.rowindex = 0;\r
-\r
- // Create cells\r
- for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
-\r
- if (sd['rowspan'] == 1) {\r
- var newTD = doc.createElement("td");\r
-\r
- if (!tinymce.isIE)\r
- newTD.innerHTML = '<br mce_bogus="1"/>';\r
-\r
- newTD.colSpan = tdElm.colSpan;\r
-\r
- newTR.appendChild(newTD);\r
- } else\r
- tdElm.rowSpan = sd['rowspan'] + 1;\r
-\r
- lastTDElm = tdElm;\r
- }\r
- }\r
+ // Needs more cells\r
+ for (i = cellCount; i < targetCellCount; i++)\r
+ row.appendChild(cloneCell(row.cells[cellCount - 1]));\r
\r
- trElm.parentNode.insertBefore(newTR, trElm);\r
- select(0, 1);\r
- break;\r
+ // Needs less cells\r
+ for (i = targetCellCount; i < cellCount; i++)\r
+ dom.remove(row.cells[i]);\r
\r
- case "mceTableInsertRowAfter":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ // Add before/after\r
+ if (before)\r
+ targetRow.parentNode.insertBefore(row, targetRow);\r
+ else\r
+ dom.insertAfter(row, targetRow);\r
+ });\r
+ };\r
\r
- var grid = getTableGrid(tableElm);\r
- var cpos = getCellPos(grid, tdElm);\r
- var newTR = doc.createElement("tr");\r
- var lastTDElm = null;\r
+ function getPos(target) {\r
+ var pos;\r
\r
- // Create cells\r
- for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ each(grid, function(row, y) {\r
+ each(row, function(cell, x) {\r
+ if (cell.elm == target) {\r
+ pos = {x : x, y : y};\r
+ return false;\r
+ }\r
+ });\r
\r
- if (sd['rowspan'] == 1) {\r
- var newTD = doc.createElement("td");\r
+ return !pos;\r
+ });\r
\r
- if (!tinymce.isIE)\r
- newTD.innerHTML = '<br mce_bogus="1"/>';\r
+ return pos;\r
+ };\r
\r
- newTD.colSpan = tdElm.colSpan;\r
+ function setStartCell(cell) {\r
+ startPos = getPos(cell);\r
+ };\r
\r
- newTR.appendChild(newTD);\r
- } else\r
- tdElm.rowSpan = sd['rowspan'] + 1;\r
+ function findEndPos() {\r
+ var pos, maxX, maxY;\r
\r
- lastTDElm = tdElm;\r
- }\r
- }\r
+ maxX = maxY = 0;\r
\r
- if (newTR.hasChildNodes()) {\r
- var nextTR = nextElm(trElm, "TR");\r
- if (nextTR)\r
- nextTR.parentNode.insertBefore(newTR, nextTR);\r
- else\r
- tableElm.appendChild(newTR);\r
- }\r
+ each(grid, function(row, y) {\r
+ each(row, function(cell, x) {\r
+ var colSpan, rowSpan;\r
\r
- select(0, 1);\r
- break;\r
+ if (isCellSelected(cell)) {\r
+ cell = grid[y][x];\r
\r
- case "mceTableDeleteRow":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ if (x > maxX)\r
+ maxX = x;\r
\r
- var grid = getTableGrid(tableElm);\r
- var cpos = getCellPos(grid, tdElm);\r
+ if (y > maxY)\r
+ maxY = y;\r
\r
- // Only one row, remove whole table\r
- if (grid.length == 1 && tableElm.nodeName == 'TBODY') {\r
- inst.dom.remove(inst.dom.getParent(tableElm, "table"));\r
- return true;\r
- }\r
+ if (cell.real) {\r
+ colSpan = cell.colspan - 1;\r
+ rowSpan = cell.rowspan - 1;\r
\r
- // Move down row spanned cells\r
- var cells = trElm.cells;\r
- var nextTR = nextElm(trElm, "TR");\r
- for (var x=0; x<cells.length; x++) {\r
- if (cells[x].rowSpan > 1) {\r
- var newTD = cells[x].cloneNode(true);\r
- var sd = getColRowSpan(cells[x]);\r
+ if (colSpan) {\r
+ if (x + colSpan > maxX)\r
+ maxX = x + colSpan;\r
+ }\r
\r
- newTD.rowSpan = sd.rowspan - 1;\r
+ if (rowSpan) {\r
+ if (y + rowSpan > maxY)\r
+ maxY = y + rowSpan;\r
+ }\r
+ }\r
+ }\r
+ });\r
+ });\r
\r
- var nextTD = nextTR.cells[x];\r
+ return {x : maxX, y : maxY};\r
+ };\r
\r
- if (nextTD == null)\r
- nextTR.appendChild(newTD);\r
- else\r
- nextTR.insertBefore(newTD, nextTD);\r
- }\r
- }\r
+ function setEndCell(cell) {\r
+ var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan;\r
\r
- // Delete cells\r
- var lastTDElm = null;\r
- for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ endPos = getPos(cell);\r
\r
- if (sd.rowspan > 1) {\r
- tdElm.rowSpan = sd.rowspan - 1;\r
- } else {\r
- trElm = tdElm.parentNode;\r
+ if (startPos && endPos) {\r
+ // Get start/end positions\r
+ startX = Math.min(startPos.x, endPos.x);\r
+ startY = Math.min(startPos.y, endPos.y);\r
+ endX = Math.max(startPos.x, endPos.x);\r
+ endY = Math.max(startPos.y, endPos.y);\r
\r
- if (trElm.parentNode)\r
- trElm._delete = true;\r
- }\r
+ // Expand end positon to include spans\r
+ maxX = endX;\r
+ maxY = endY;\r
\r
- lastTDElm = tdElm;\r
- }\r
- }\r
+ // Expand startX\r
+ for (y = startY; y <= maxY; y++) {\r
+ cell = grid[y][startX];\r
\r
- deleteMarked(tableElm);\r
+ if (!cell.real) {\r
+ if (startX - (cell.colspan - 1) < startX)\r
+ startX -= cell.colspan - 1;\r
+ }\r
+ }\r
\r
- select(0, -1);\r
- break;\r
+ // Expand startY\r
+ for (x = startX; x <= maxX; x++) {\r
+ cell = grid[startY][x];\r
\r
- case "mceTableInsertColBefore":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ if (!cell.real) {\r
+ if (startY - (cell.rowspan - 1) < startY)\r
+ startY -= cell.rowspan - 1;\r
+ }\r
+ }\r
\r
- var grid = getTableGrid(inst.dom.getParent(tableElm, "table"));\r
- var cpos = getCellPos(grid, tdElm);\r
- var lastTDElm = null;\r
+ // Find max X, Y\r
+ for (y = startY; y <= endY; y++) {\r
+ for (x = startX; x <= endX; x++) {\r
+ cell = grid[y][x];\r
\r
- for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ if (cell.real) {\r
+ colSpan = cell.colspan - 1;\r
+ rowSpan = cell.rowspan - 1;\r
\r
- if (sd['colspan'] == 1) {\r
- var newTD = doc.createElement(tdElm.nodeName);\r
+ if (colSpan) {\r
+ if (x + colSpan > maxX)\r
+ maxX = x + colSpan;\r
+ }\r
\r
- if (!tinymce.isIE)\r
- newTD.innerHTML = '<br mce_bogus="1"/>';\r
+ if (rowSpan) {\r
+ if (y + rowSpan > maxY)\r
+ maxY = y + rowSpan;\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
- newTD.rowSpan = tdElm.rowSpan;\r
+ // Remove current selection\r
+ dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');\r
\r
- tdElm.parentNode.insertBefore(newTD, tdElm);\r
- } else\r
- tdElm.colSpan++;\r
+ // Add new selection\r
+ for (y = startY; y <= maxY; y++) {\r
+ for (x = startX; x <= maxX; x++)\r
+ dom.addClass(grid[y][x].elm, 'mceSelected');\r
+ }\r
+ }\r
+ };\r
+\r
+ // Expose to public\r
+ tinymce.extend(this, {\r
+ deleteTable : deleteTable,\r
+ split : split,\r
+ merge : merge,\r
+ insertRow : insertRow,\r
+ insertCol : insertCol,\r
+ deleteCols : deleteCols,\r
+ deleteRows : deleteRows,\r
+ cutRows : cutRows,\r
+ copyRows : copyRows,\r
+ pasteRows : pasteRows,\r
+ getPos : getPos,\r
+ setStartCell : setStartCell,\r
+ setEndCell : setEndCell\r
+ });\r
+ };\r
\r
- lastTDElm = tdElm;\r
- }\r
- }\r
+ tinymce.create('tinymce.plugins.TablePlugin', {\r
+ init : function(ed, url) {\r
+ var winMan, clipboardRows;\r
\r
- select();\r
- break;\r
+ function createTableGrid(node) {\r
+ var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table');\r
\r
- case "mceTableInsertColAfter":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ if (tblElm)\r
+ return new TableGrid(tblElm, ed.dom, selection);\r
+ };\r
\r
- var grid = getTableGrid(inst.dom.getParent(tableElm, "table"));\r
- var cpos = getCellPos(grid, tdElm);\r
- var lastTDElm = null;\r
+ function cleanup() {\r
+ // Restore selection possibilities\r
+ ed.getBody().style.webkitUserSelect = '';\r
+ ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');\r
+ };\r
\r
- for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ // Register buttons\r
+ each([\r
+ ['table', 'table.desc', 'mceInsertTable', true],\r
+ ['delete_table', 'table.del', 'mceTableDelete'],\r
+ ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],\r
+ ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],\r
+ ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],\r
+ ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],\r
+ ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],\r
+ ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],\r
+ ['row_props', 'table.row_desc', 'mceTableRowProps', true],\r
+ ['cell_props', 'table.cell_desc', 'mceTableCellProps', true],\r
+ ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],\r
+ ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]\r
+ ], function(c) {\r
+ ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});\r
+ });\r
\r
- if (sd['colspan'] == 1) {\r
- var newTD = doc.createElement(tdElm.nodeName);\r
+ // Select whole table is a table border is clicked\r
+ if (!tinymce.isIE) {\r
+ ed.onClick.add(function(ed, e) {\r
+ e = e.target;\r
\r
- if (!tinymce.isIE)\r
- newTD.innerHTML = '<br mce_bogus="1"/>';\r
+ if (e.nodeName === 'TABLE')\r
+ ed.selection.select(e);\r
+ });\r
+ }\r
\r
- newTD.rowSpan = tdElm.rowSpan;\r
+ // Handle node change updates\r
+ ed.onNodeChange.add(function(ed, cm, n) {\r
+ var p;\r
\r
- var nextTD = nextElm(tdElm, "TD,TH");\r
- if (nextTD == null)\r
- tdElm.parentNode.appendChild(newTD);\r
- else\r
- nextTD.parentNode.insertBefore(newTD, nextTD);\r
- } else\r
- tdElm.colSpan++;\r
+ n = ed.selection.getStart();\r
+ p = ed.dom.getParent(n, 'td,th,caption');\r
+ cm.setActive('table', n.nodeName === 'TABLE' || !!p);\r
\r
- lastTDElm = tdElm;\r
- }\r
- }\r
+ // Disable table tools if we are in caption\r
+ if (p && p.nodeName === 'CAPTION')\r
+ p = 0;\r
\r
- select(1);\r
- break;\r
+ cm.setDisabled('delete_table', !p);\r
+ cm.setDisabled('delete_col', !p);\r
+ cm.setDisabled('delete_table', !p);\r
+ cm.setDisabled('delete_row', !p);\r
+ cm.setDisabled('col_after', !p);\r
+ cm.setDisabled('col_before', !p);\r
+ cm.setDisabled('row_after', !p);\r
+ cm.setDisabled('row_before', !p);\r
+ cm.setDisabled('row_props', !p);\r
+ cm.setDisabled('cell_props', !p);\r
+ cm.setDisabled('split_cells', !p);\r
+ cm.setDisabled('merge_cells', !p);\r
+ });\r
\r
- case "mceTableDeleteCol":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ ed.onInit.add(function(ed) {\r
+ var startTable, startCell, dom = ed.dom, tableGrid;\r
\r
- var grid = getTableGrid(tableElm);\r
- var cpos = getCellPos(grid, tdElm);\r
- var lastTDElm = null;\r
+ winMan = ed.windowManager;\r
\r
- // Only one col, remove whole table\r
- if ((grid.length > 1 && grid[0].length <= 1) && tableElm.nodeName == 'TBODY') {\r
- inst.dom.remove(inst.dom.getParent(tableElm, "table"));\r
- return true;\r
- }\r
+ // Add cell selection logic\r
+ ed.onMouseDown.add(function(ed, e) {\r
+ if (e.button != 2) {\r
+ cleanup();\r
\r
- // Delete cells\r
- for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ startCell = dom.getParent(e.target, 'td,th');\r
+ startTable = dom.getParent(startCell, 'table');\r
+ }\r
+ });\r
\r
- if (sd['colspan'] > 1)\r
- tdElm.colSpan = sd['colspan'] - 1;\r
- else {\r
- if (tdElm.parentNode)\r
- tdElm.parentNode.removeChild(tdElm);\r
- }\r
+ dom.bind(ed.getDoc(), 'mouseover', function(e) {\r
+ var sel, table, target = e.target;\r
\r
- lastTDElm = tdElm;\r
- }\r
- }\r
+ if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) {\r
+ table = dom.getParent(target, 'table');\r
+ if (table == startTable) {\r
+ if (!tableGrid) {\r
+ tableGrid = createTableGrid(table);\r
+ tableGrid.setStartCell(startCell);\r
\r
- select(-1);\r
- break;\r
+ ed.getBody().style.webkitUserSelect = 'none';\r
+ }\r
\r
- case "mceTableSplitCells":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ tableGrid.setEndCell(target);\r
+ }\r
\r
- var spandata = getColRowSpan(tdElm);\r
+ // Remove current selection\r
+ sel = ed.selection.getSel();\r
\r
- var colspan = spandata["colspan"];\r
- var rowspan = spandata["rowspan"];\r
+ if (sel.removeAllRanges)\r
+ sel.removeAllRanges();\r
+ else\r
+ sel.empty();\r
\r
- // Needs splitting\r
- if (colspan > 1 || rowspan > 1) {\r
- // Generate cols\r
- tdElm.colSpan = 1;\r
- for (var i=1; i<colspan; i++) {\r
- var newTD = doc.createElement("td");\r
+ e.preventDefault();\r
+ }\r
+ });\r
\r
- if (!tinymce.isIE)\r
- newTD.innerHTML = '<br mce_bogus="1"/>';\r
+ ed.onMouseUp.add(function(ed, e) {\r
+ var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode;\r
\r
- trElm.insertBefore(newTD, nextElm(tdElm, "TD,TH"));\r
+ // Move selection to startCell\r
+ if (startCell) {\r
+ if (tableGrid)\r
+ ed.getBody().style.webkitUserSelect = '';\r
\r
- if (rowspan > 1)\r
- addRows(newTD, trElm, rowspan);\r
- }\r
+ function setPoint(node, start) {\r
+ var walker = new tinymce.dom.TreeWalker(node, node);\r
\r
- addRows(tdElm, trElm, rowspan);\r
- }\r
+ do {\r
+ // Text node\r
+ if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {\r
+ if (start)\r
+ rng.setStart(node, 0);\r
+ else\r
+ rng.setEnd(node, node.nodeValue.length);\r
\r
- // Apply visual aids\r
- tableElm = inst.dom.getParent(inst.selection.getNode(), "table");\r
- break;\r
+ return;\r
+ }\r
\r
- case "mceTableMergeCells":\r
- var rows = [];\r
- var sel = inst.selection.getSel();\r
- var grid = getTableGrid(tableElm);\r
-\r
- if (tinymce.isIE || sel.rangeCount == 1) {\r
- if (user_interface) {\r
- // Setup template\r
- var sp = getColRowSpan(tdElm);\r
-\r
- inst.windowManager.open({\r
- url : url + '/merge_cells.htm',\r
- width : 240 + parseInt(inst.getLang('table.merge_cells_delta_width', 0)),\r
- height : 110 + parseInt(inst.getLang('table.merge_cells_delta_height', 0)),\r
- inline : 1\r
- }, {\r
- action : "update",\r
- numcols : sp.colspan,\r
- numrows : sp.rowspan,\r
- plugin_url : url\r
- });\r
-\r
- return true;\r
- } else {\r
- var numRows = parseInt(value['numrows']);\r
- var numCols = parseInt(value['numcols']);\r
- var cpos = getCellPos(grid, tdElm);\r
-\r
- if (("" + numRows) == "NaN")\r
- numRows = 1;\r
-\r
- if (("" + numCols) == "NaN")\r
- numCols = 1;\r
-\r
- // Get rows and cells\r
- var tRows = tableElm.rows;\r
- for (var y=cpos.rowindex; y<grid.length; y++) {\r
- var rowCells = [];\r
-\r
- for (var x=cpos.cellindex; x<grid[y].length; x++) {\r
- var td = getCell(grid, y, x);\r
-\r
- if (td && !inArray(rows, td) && !inArray(rowCells, td)) {\r
- var cp = getCellPos(grid, td);\r
-\r
- // Within range\r
- if (cp.cellindex < cpos.cellindex+numCols && cp.rowindex < cpos.rowindex+numRows)\r
- rowCells[rowCells.length] = td;\r
- }\r
- }\r
-\r
- if (rowCells.length > 0)\r
- rows[rows.length] = rowCells;\r
-\r
- var td = getCell(grid, cpos.rowindex, cpos.cellindex);\r
- each(ed.dom.select('br', td), function(e, i) {\r
- if (i > 0 && ed.dom.getAttrib('mce_bogus'))\r
- ed.dom.remove(e);\r
- });\r
- }\r
+ // BR element\r
+ if (node.nodeName == 'BR') {\r
+ if (start)\r
+ rng.setStartBefore(node);\r
+ else\r
+ rng.setEndBefore(node);\r
\r
- //return true;\r
+ return;\r
}\r
- } else {\r
- var cells = [];\r
- var sel = inst.selection.getSel();\r
- var lastTR = null;\r
- var curRow = null;\r
- var x1 = -1, y1 = -1, x2, y2;\r
-\r
- // Only one cell selected, whats the point?\r
- if (sel.rangeCount < 2)\r
- return true;\r
-\r
- // Get all selected cells\r
- for (var i=0; i<sel.rangeCount; i++) {\r
- var rng = sel.getRangeAt(i);\r
- var tdElm = rng.startContainer.childNodes[rng.startOffset];\r
-\r
- if (!tdElm)\r
+ } while (node = (start ? walker.next() : walker.prev()));\r
+ };\r
+\r
+ // Try to expand text selection as much as we can only Gecko supports cell selection\r
+ selectedCells = dom.select('td.mceSelected,th.mceSelected');\r
+ if (selectedCells.length > 0) {\r
+ rng = dom.createRng();\r
+ node = selectedCells[0];\r
+ endNode = selectedCells[selectedCells.length - 1];\r
+\r
+ setPoint(node, 1);\r
+ walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table'));\r
+\r
+ do {\r
+ if (node.nodeName == 'TD' || node.nodeName == 'TH') {\r
+ if (!dom.hasClass(node, 'mceSelected'))\r
break;\r
\r
- if (tdElm.nodeName == "TD" || tdElm.nodeName == "TH")\r
- cells[cells.length] = tdElm;\r
+ lastNode = node;\r
}\r
+ } while (node = walker.next());\r
\r
- // Get rows and cells\r
- var tRows = tableElm.rows;\r
- for (var y=0; y<tRows.length; y++) {\r
- var rowCells = [];\r
+ setPoint(lastNode);\r
\r
- for (var x=0; x<tRows[y].cells.length; x++) {\r
- var td = tRows[y].cells[x];\r
+ sel.setRng(rng);\r
+ }\r
\r
- for (var i=0; i<cells.length; i++) {\r
- if (td == cells[i]) {\r
- rowCells[rowCells.length] = td;\r
- }\r
- }\r
- }\r
+ ed.nodeChanged();\r
+ startCell = tableGrid = startTable = null;\r
+ }\r
+ });\r
\r
- if (rowCells.length > 0)\r
- rows[rows.length] = rowCells;\r
- }\r
+ ed.onKeyUp.add(function(ed, e) {\r
+ cleanup();\r
+ });\r
\r
- // Find selected cells in grid and box\r
- var curRow = [];\r
- var lastTR = null;\r
- for (var y=0; y<grid.length; y++) {\r
- for (var x=0; x<grid[y].length; x++) {\r
- grid[y][x]._selected = false;\r
-\r
- for (var i=0; i<cells.length; i++) {\r
- if (grid[y][x] == cells[i]) {\r
- // Get start pos\r
- if (x1 == -1) {\r
- x1 = x;\r
- y1 = y;\r
- }\r
-\r
- // Get end pos\r
- x2 = x;\r
- y2 = y;\r
-\r
- grid[y][x]._selected = true;\r
- }\r
- }\r
- }\r
- }\r
+ // Add context menu\r
+ if (ed && ed.plugins.contextmenu) {\r
+ ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {\r
+ var sm, se = ed.selection, el = se.getNode() || ed.getBody();\r
\r
- // Is there gaps, if so deny\r
- for (var y=y1; y<=y2; y++) {\r
- for (var x=x1; x<=x2; x++) {\r
- if (!grid[y][x]._selected) {\r
- alert("Invalid selection for merge.");\r
- return true;\r
- }\r
- }\r
- }\r
+ if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) {\r
+ m.removeAll();\r
+\r
+ if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {\r
+ m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});\r
+ m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});\r
+ m.addSeparator();\r
}\r
\r
- // Validate selection and get total rowspan and colspan\r
- var rowSpan = 1, colSpan = 1;\r
+ if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {\r
+ m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});\r
+ m.addSeparator();\r
+ }\r
\r
- // Validate horizontal and get total colspan\r
- var lastRowSpan = -1;\r
- for (var y=0; y<rows.length; y++) {\r
- var rowColSpan = 0;\r
+ m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}});\r
+ m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'});\r
+ m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'});\r
+ m.addSeparator();\r
\r
- for (var x=0; x<rows[y].length; x++) {\r
- var sd = getColRowSpan(rows[y][x]);\r
+ // Cell menu\r
+ sm = m.addMenu({title : 'table.cell'});\r
+ sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'});\r
+ sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'});\r
+ sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'});\r
\r
- rowColSpan += sd['colspan'];\r
+ // Row menu\r
+ sm = m.addMenu({title : 'table.row'});\r
+ sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'});\r
+ sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});\r
+ sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});\r
+ sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});\r
+ sm.addSeparator();\r
+ sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});\r
+ sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});\r
+ sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows);\r
+ sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows);\r
\r
- if (lastRowSpan != -1 && sd['rowspan'] != lastRowSpan) {\r
- alert("Invalid selection for merge.");\r
- return true;\r
- }\r
+ // Column menu\r
+ sm = m.addMenu({title : 'table.col'});\r
+ sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});\r
+ sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});\r
+ sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});\r
+ } else\r
+ m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'});\r
+ });\r
+ }\r
\r
- lastRowSpan = sd['rowspan'];\r
- }\r
+ // Fixes an issue on Gecko where it's impossible to place the caret behind a table\r
+ // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled\r
+ if (!tinymce.isIE) {\r
+ function fixTableCaretPos() {\r
+ var last;\r
\r
- if (rowColSpan > colSpan)\r
- colSpan = rowColSpan;\r
+ // Skip empty text nodes form the end\r
+ for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ;\r
\r
- lastRowSpan = -1;\r
- }\r
+ if (last && last.nodeName == 'TABLE')\r
+ ed.dom.add(ed.getBody(), 'p', null, '<br mce_bogus="1" />');\r
+ };\r
\r
- // Validate vertical and get total rowspan\r
- var lastColSpan = -1;\r
- for (var x=0; x<rows[0].length; x++) {\r
- var colRowSpan = 0;\r
+ // Fixes an bug where it's impossible to place the caret before a table in Gecko\r
+ // this fix solves it by detecting when the caret is at the beginning of such a table\r
+ // and then manually moves the caret infront of the table\r
+ if (tinymce.isGecko) {\r
+ ed.onKeyDown.add(function(ed, e) {\r
+ var rng, table, dom = ed.dom;\r
\r
- for (var y=0; y<rows.length; y++) {\r
- var sd = getColRowSpan(rows[y][x]);\r
+ // On gecko it's not possible to place the caret before a table\r
+ if (e.keyCode == 37 || e.keyCode == 38) {\r
+ rng = ed.selection.getRng();\r
+ table = dom.getParent(rng.startContainer, 'table');\r
\r
- colRowSpan += sd['rowspan'];\r
+ if (table && ed.getBody().firstChild == table) {\r
+ if (isAtStart(rng, table)) {\r
+ rng = dom.createRng();\r
\r
- if (lastColSpan != -1 && sd['colspan'] != lastColSpan) {\r
- alert("Invalid selection for merge.");\r
- return true;\r
- }\r
+ rng.setStartBefore(table);\r
+ rng.setEndBefore(table);\r
\r
- lastColSpan = sd['colspan'];\r
+ ed.selection.setRng(rng);\r
+\r
+ e.preventDefault();\r
+ }\r
}\r
+ }\r
+ });\r
+ }\r
\r
- if (colRowSpan > rowSpan)\r
- rowSpan = colRowSpan;\r
+ ed.onKeyUp.add(fixTableCaretPos);\r
+ ed.onSetContent.add(fixTableCaretPos);\r
+ ed.onVisualAid.add(fixTableCaretPos);\r
\r
- lastColSpan = -1;\r
- }\r
+ ed.onPreProcess.add(function(ed, o) {\r
+ var last = o.node.lastChild;\r
\r
- // Setup td\r
- tdElm = rows[0][0];\r
- tdElm.rowSpan = rowSpan;\r
- tdElm.colSpan = colSpan;\r
+ if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR')\r
+ ed.dom.remove(last);\r
+ });\r
\r
- // Merge cells\r
- for (var y=0; y<rows.length; y++) {\r
- for (var x=0; x<rows[y].length; x++) {\r
- var html = rows[y][x].innerHTML;\r
- var chk = html.replace(/[ \t\r\n]/g, "");\r
+ fixTableCaretPos();\r
+ }\r
+ });\r
\r
- if (chk != "<br/>" && chk != "<br>" && chk != '<br mce_bogus="1"/>' && (x+y > 0))\r
- tdElm.innerHTML += html;\r
+ // Register action commands\r
+ each({\r
+ mceTableSplitCells : function(grid) {\r
+ grid.split();\r
+ },\r
\r
- // Not current cell\r
- if (rows[y][x] != tdElm && !rows[y][x]._deleted) {\r
- var cpos = getCellPos(grid, rows[y][x]);\r
- var tr = rows[y][x].parentNode;\r
+ mceTableMergeCells : function(grid) {\r
+ var rowSpan, colSpan, cell;\r
\r
- tr.removeChild(rows[y][x]);\r
- rows[y][x]._deleted = true;\r
+ cell = ed.dom.getParent(ed.selection.getNode(), 'th,td');\r
+ if (cell) {\r
+ rowSpan = cell.rowSpan;\r
+ colSpan = cell.colSpan;\r
+ }\r
\r
- // Empty TR, remove it\r
- if (!tr.hasChildNodes()) {\r
- tr.parentNode.removeChild(tr);\r
+ if (!ed.dom.select('td.mceSelected,th.mceSelected').length) {\r
+ winMan.open({\r
+ url : url + '/merge_cells.htm',\r
+ width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)),\r
+ height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ rows : rowSpan,\r
+ cols : colSpan,\r
+ onaction : function(data) {\r
+ grid.merge(cell, data.cols, data.rows);\r
+ },\r
+ plugin_url : url\r
+ });\r
+ } else\r
+ grid.merge();\r
+ },\r
\r
- var lastCell = null;\r
- for (var x=0; cellElm = getCell(grid, cpos.rowindex, x); x++) {\r
- if (cellElm != lastCell && cellElm.rowSpan > 1)\r
- cellElm.rowSpan--;\r
+ mceTableInsertRowBefore : function(grid) {\r
+ grid.insertRow(true);\r
+ },\r
\r
- lastCell = cellElm;\r
- }\r
+ mceTableInsertRowAfter : function(grid) {\r
+ grid.insertRow();\r
+ },\r
\r
- if (tdElm.rowSpan > 1)\r
- tdElm.rowSpan--;\r
- }\r
- }\r
- }\r
- }\r
+ mceTableInsertColBefore : function(grid) {\r
+ grid.insertCol(true);\r
+ },\r
\r
- // Remove all but one bogus br\r
- each(ed.dom.select('br', tdElm), function(e, i) {\r
- if (i > 0 && ed.dom.getAttrib(e, 'mce_bogus'))\r
- ed.dom.remove(e);\r
- });\r
+ mceTableInsertColAfter : function(grid) {\r
+ grid.insertCol();\r
+ },\r
\r
- break;\r
- }\r
+ mceTableDeleteCol : function(grid) {\r
+ grid.deleteCols();\r
+ },\r
\r
- tableElm = inst.dom.getParent(inst.selection.getNode(), "table");\r
- inst.addVisual(tableElm);\r
- inst.nodeChanged();\r
- }\r
+ mceTableDeleteRow : function(grid) {\r
+ grid.deleteRows();\r
+ },\r
\r
- return true;\r
- }\r
+ mceTableCutRow : function(grid) {\r
+ clipboardRows = grid.cutRows();\r
+ },\r
+\r
+ mceTableCopyRow : function(grid) {\r
+ clipboardRows = grid.copyRows();\r
+ },\r
+\r
+ mceTablePasteRowBefore : function(grid) {\r
+ grid.pasteRows(clipboardRows, true);\r
+ },\r
+\r
+ mceTablePasteRowAfter : function(grid) {\r
+ grid.pasteRows(clipboardRows);\r
+ },\r
\r
- // Pass to next handler in chain\r
- return false;\r
+ mceTableDelete : function(grid) {\r
+ grid.deleteTable();\r
+ }\r
+ }, function(func, name) {\r
+ ed.addCommand(name, function() {\r
+ var grid = createTableGrid();\r
+\r
+ if (grid) {\r
+ func(grid);\r
+ ed.execCommand('mceRepaint');\r
+ cleanup();\r
+ }\r
+ });\r
+ });\r
+\r
+ // Register dialog commands\r
+ each({\r
+ mceInsertTable : function(val) {\r
+ winMan.open({\r
+ url : url + '/table.htm',\r
+ width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)),\r
+ height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url,\r
+ action : val ? val.action : 0\r
+ });\r
+ },\r
+\r
+ mceTableRowProps : function() {\r
+ winMan.open({\r
+ url : url + '/row.htm',\r
+ width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)),\r
+ height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ },\r
+\r
+ mceTableCellProps : function() {\r
+ winMan.open({\r
+ url : url + '/cell.htm',\r
+ width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)),\r
+ height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ }\r
+ }, function(func, name) {\r
+ ed.addCommand(name, function(ui, val) {\r
+ func(val);\r
+ });\r
+ });\r
}\r
});\r
\r
// Register plugin\r
tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);\r
-})();
\ No newline at end of file
+})(tinymce);
\ No newline at end of file
document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')\r
\r
var inst = ed;\r
- var tdElm = ed.dom.getParent(ed.selection.getNode(), "td,th");\r
+ var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th");\r
var formObj = document.forms[0];\r
var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));\r
\r
var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));\r
var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));\r
var className = ed.dom.getAttrib(tdElm, 'class');\r
- var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;\r
+ var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
var id = ed.dom.getAttrib(tdElm, 'id');\r
var lang = ed.dom.getAttrib(tdElm, 'lang');\r
var dir = ed.dom.getAttrib(tdElm, 'dir');\r
addClassesToList('class', 'table_cell_styles');\r
TinyMCE_EditableSelects.init();\r
\r
- formObj.bordercolor.value = bordercolor;\r
- formObj.bgcolor.value = bgcolor;\r
- formObj.backgroundimage.value = backgroundimage;\r
- formObj.width.value = width;\r
- formObj.height.value = height;\r
- formObj.id.value = id;\r
- formObj.lang.value = lang;\r
- formObj.style.value = ed.dom.serializeStyle(st);\r
- selectByValue(formObj, 'align', align);\r
- selectByValue(formObj, 'valign', valign);\r
- selectByValue(formObj, 'class', className, true, true);\r
- selectByValue(formObj, 'celltype', celltype);\r
- selectByValue(formObj, 'dir', dir);\r
- selectByValue(formObj, 'scope', scope);\r
-\r
- // Resize some elements\r
- if (isVisible('backgroundimagebrowser'))\r
- document.getElementById('backgroundimage').style.width = '180px';\r
-\r
- updateColor('bordercolor_pick', 'bordercolor');\r
- updateColor('bgcolor_pick', 'bgcolor');\r
+ if (!ed.dom.hasClass(tdElm, 'mceSelected')) {\r
+ formObj.bordercolor.value = bordercolor;\r
+ formObj.bgcolor.value = bgcolor;\r
+ formObj.backgroundimage.value = backgroundimage;\r
+ formObj.width.value = width;\r
+ formObj.height.value = height;\r
+ formObj.id.value = id;\r
+ formObj.lang.value = lang;\r
+ formObj.style.value = ed.dom.serializeStyle(st);\r
+ selectByValue(formObj, 'align', align);\r
+ selectByValue(formObj, 'valign', valign);\r
+ selectByValue(formObj, 'class', className, true, true);\r
+ selectByValue(formObj, 'celltype', celltype);\r
+ selectByValue(formObj, 'dir', dir);\r
+ selectByValue(formObj, 'scope', scope);\r
+\r
+ // Resize some elements\r
+ if (isVisible('backgroundimagebrowser'))\r
+ document.getElementById('backgroundimage').style.width = '180px';\r
+\r
+ updateColor('bordercolor_pick', 'bordercolor');\r
+ updateColor('bgcolor_pick', 'bgcolor');\r
+ } else\r
+ tinyMCEPopup.dom.hide('action');\r
}\r
\r
function updateAction() {\r
var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];\r
\r
tinyMCEPopup.restoreSelection();\r
- el = ed.selection.getNode();\r
+ el = ed.selection.getStart();\r
tdElm = ed.dom.getParent(el, "td,th");\r
trElm = ed.dom.getParent(el, "tr");\r
tableElm = ed.dom.getParent(el, "table");\r
\r
+ // Cell is selected\r
+ if (ed.dom.hasClass(tdElm, 'mceSelected')) {\r
+ // Update all selected sells\r
+ tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) {\r
+ updateCell(td);\r
+ });\r
+\r
+ ed.addVisual();\r
+ ed.nodeChanged();\r
+ inst.execCommand('mceEndUndoLevel');\r
+ tinyMCEPopup.close();\r
+ return;\r
+ }\r
+\r
ed.execCommand('mceBeginUndoLevel');\r
\r
switch (getSelectValue(formObj, 'action')) {\r
tinyMCEPopup.requireLangPack();\r
\r
-function init() {\r
- var f = document.forms[0], v;\r
+var MergeCellsDialog = {\r
+ init : function() {\r
+ var f = document.forms[0];\r
\r
- tinyMCEPopup.resizeToInnerSize();\r
+ f.numcols.value = tinyMCEPopup.getWindowArg('cols', 1);\r
+ f.numrows.value = tinyMCEPopup.getWindowArg('rows', 1);\r
+ },\r
\r
- f.numcols.value = tinyMCEPopup.getWindowArg('numcols', 1);\r
- f.numrows.value = tinyMCEPopup.getWindowArg('numrows', 1);\r
-}\r
+ merge : function() {\r
+ var func, f = document.forms[0];\r
\r
-function mergeCells() {\r
- var args = [], f = document.forms[0];\r
+ tinyMCEPopup.restoreSelection();\r
\r
- tinyMCEPopup.restoreSelection();\r
+ func = tinyMCEPopup.getWindowArg('onaction');\r
\r
- if (!AutoValidator.validate(f)) {\r
- tinyMCEPopup.alert(tinyMCEPopup.getLang('invalid_data'));\r
- return false;\r
- }\r
-\r
- args["numcols"] = f.numcols.value;\r
- args["numrows"] = f.numrows.value;\r
+ func({\r
+ cols : f.numcols.value,\r
+ rows : f.numrows.value\r
+ });\r
\r
- tinyMCEPopup.execCommand("mceTableMergeCells", false, args);\r
- tinyMCEPopup.close();\r
-}\r
+ tinyMCEPopup.close();\r
+ }\r
+};\r
\r
-tinyMCEPopup.onInit.add(init);\r
+tinyMCEPopup.onInit.add(MergeCellsDialog.init, MergeCellsDialog);\r
\r
var inst = tinyMCEPopup.editor;\r
var dom = inst.dom;\r
- var trElm = dom.getParent(inst.selection.getNode(), "tr");\r
+ var trElm = dom.getParent(inst.selection.getStart(), "tr");\r
var formObj = document.forms[0];\r
var st = dom.parseStyle(dom.getAttrib(trElm, "style"));\r
\r
var height = trimSize(getStyle(trElm, 'height', 'height'));\r
var className = dom.getAttrib(trElm, 'class');\r
var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));\r
- var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;\r
+ var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
var id = dom.getAttrib(trElm, 'id');\r
var lang = dom.getAttrib(trElm, 'lang');\r
var dir = dom.getAttrib(trElm, 'dir');\r
\r
- // Setup form\r
- addClassesToList('class', 'table_row_styles');\r
- TinyMCE_EditableSelects.init();\r
-\r
- formObj.bgcolor.value = bgcolor;\r
- formObj.backgroundimage.value = backgroundimage;\r
- formObj.height.value = height;\r
- formObj.id.value = id;\r
- formObj.lang.value = lang;\r
- formObj.style.value = dom.serializeStyle(st);\r
- selectByValue(formObj, 'align', align);\r
- selectByValue(formObj, 'valign', valign);\r
- selectByValue(formObj, 'class', className, true, true);\r
selectByValue(formObj, 'rowtype', rowtype);\r
- selectByValue(formObj, 'dir', dir);\r
-\r
- // Resize some elements\r
- if (isVisible('backgroundimagebrowser'))\r
- document.getElementById('backgroundimage').style.width = '180px';\r
\r
- updateColor('bgcolor_pick', 'bgcolor');\r
+ // Any cells selected\r
+ if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) {\r
+ // Setup form\r
+ addClassesToList('class', 'table_row_styles');\r
+ TinyMCE_EditableSelects.init();\r
+\r
+ formObj.bgcolor.value = bgcolor;\r
+ formObj.backgroundimage.value = backgroundimage;\r
+ formObj.height.value = height;\r
+ formObj.id.value = id;\r
+ formObj.lang.value = lang;\r
+ formObj.style.value = dom.serializeStyle(st);\r
+ selectByValue(formObj, 'align', align);\r
+ selectByValue(formObj, 'valign', valign);\r
+ selectByValue(formObj, 'class', className, true, true);\r
+ selectByValue(formObj, 'dir', dir);\r
+\r
+ // Resize some elements\r
+ if (isVisible('backgroundimagebrowser'))\r
+ document.getElementById('backgroundimage').style.width = '180px';\r
+\r
+ updateColor('bgcolor_pick', 'bgcolor');\r
+ } else\r
+ tinyMCEPopup.dom.hide('action');\r
}\r
\r
function updateAction() {\r
var action = getSelectValue(formObj, 'action');\r
\r
tinyMCEPopup.restoreSelection();\r
- trElm = dom.getParent(inst.selection.getNode(), "tr");\r
- tableElm = dom.getParent(inst.selection.getNode(), "table");\r
+ trElm = dom.getParent(inst.selection.getStart(), "tr");\r
+ tableElm = dom.getParent(inst.selection.getStart(), "table");\r
+\r
+ // Update all selected rows\r
+ if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {\r
+ tinymce.each(tableElm.rows, function(tr) {\r
+ var i;\r
+\r
+ for (i = 0; i < tr.cells.length; i++) {\r
+ if (dom.hasClass(tr.cells[i], 'mceSelected')) {\r
+ updateRow(tr, true);\r
+ return;\r
+ }\r
+ }\r
+ });\r
+\r
+ inst.addVisual();\r
+ inst.nodeChanged();\r
+ inst.execCommand('mceEndUndoLevel');\r
+ tinyMCEPopup.close();\r
+ return;\r
+ }\r
\r
inst.execCommand('mceBeginUndoLevel');\r
\r
border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;\r
cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";\r
cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";\r
- align = formObj.elements['align'].options[formObj.elements['align'].selectedIndex].value;\r
- frame = formObj.elements['frame'].options[formObj.elements['frame'].selectedIndex].value;\r
- rules = formObj.elements['rules'].options[formObj.elements['rules'].selectedIndex].value;\r
+ align = getSelectValue(formObj, "align");\r
+ frame = getSelectValue(formObj, "tframe");\r
+ rules = getSelectValue(formObj, "rules");\r
width = formObj.elements['width'].value;\r
height = formObj.elements['height'].value;\r
bordercolor = formObj.elements['bordercolor'].value;\r
bgcolor = formObj.elements['bgcolor'].value;\r
- className = formObj.elements['class'].options[formObj.elements['class'].selectedIndex].value;\r
+ className = getSelectValue(formObj, "class");\r
id = formObj.elements['id'].value;\r
summary = formObj.elements['summary'].value;\r
style = formObj.elements['style'].value;\r
capEl = elm.ownerDocument.createElement('caption');\r
\r
if (!tinymce.isIE)\r
- capEl.innerHTML = '<br mce_bogus="1"/>';\r
+ capEl.innerHTML = '<br _mce_bogus="1"/>';\r
\r
elm.insertBefore(capEl, elm.firstChild);\r
}\r
html += makeAttrib('border', border);\r
html += makeAttrib('cellpadding', cellpadding);\r
html += makeAttrib('cellspacing', cellspacing);\r
+ html += makeAttrib('_mce_new', '1');\r
\r
if (width && inst.settings.inline_styles) {\r
if (style)\r
style += '; ';\r
\r
+ // Force px\r
+ if (/^[0-9\.]+$/.test(width))\r
+ width += 'px';\r
+\r
style += 'width: ' + width;\r
} else\r
html += makeAttrib('width', width);\r
\r
if (caption) {\r
if (!tinymce.isIE)\r
- html += '<caption><br mce_bogus="1"/></caption>';\r
+ html += '<caption><br _mce_bogus="1"/></caption>';\r
else\r
html += '<caption></caption>';\r
}\r
\r
for (var x=0; x<cols; x++) {\r
if (!tinymce.isIE)\r
- html += '<td><br mce_bogus="1"/></td>';\r
+ html += '<td><br _mce_bogus="1"/></td>';\r
else\r
html += '<td></td>';\r
}\r
html += "</table>";\r
\r
inst.execCommand('mceBeginUndoLevel');\r
- inst.execCommand('mceInsertContent', false, html);\r
+\r
+ // Move table\r
+ if (inst.settings.fix_table_elements) {\r
+ var patt = '';\r
+\r
+ inst.focus();\r
+ inst.selection.setContent('<br class="_mce_marker" />');\r
+\r
+ tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {\r
+ if (patt)\r
+ patt += ',';\r
+\r
+ patt += n + ' ._mce_marker';\r
+ });\r
+\r
+ tinymce.each(inst.dom.select(patt), function(n) {\r
+ inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);\r
+ });\r
+\r
+ dom.setOuterHTML(dom.select('br._mce_marker')[0], html);\r
+ } else\r
+ inst.execCommand('mceInsertContent', false, html);\r
+\r
+ tinymce.each(dom.select('table[_mce_new]'), function(node) {\r
+ var td = dom.select('td', node);\r
+\r
+ try {\r
+ // IE9 might fail to do this selection\r
+ inst.selection.select(td[0], true);\r
+ inst.selection.collapse();\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
+\r
+ dom.setAttrib(node, '_mce_new', '');\r
+ });\r
+\r
inst.addVisual();\r
inst.execCommand('mceEndUndoLevel');\r
\r
\r
var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');\r
var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";\r
- var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame;\r
+ var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = "";\r
var inst = tinyMCEPopup.editor, dom = inst.dom;\r
var formObj = document.forms[0];\r
var elm = dom.getParent(inst.selection.getNode(), "table");\r
style = dom.serializeStyle(st);\r
dir = dom.getAttrib(elm, 'dir');\r
lang = dom.getAttrib(elm, 'lang');\r
- background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+ background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;\r
\r
orgTableWidth = width;\r
\r
// Update form\r
selectByValue(formObj, 'align', align);\r
- selectByValue(formObj, 'frame', frame);\r
+ selectByValue(formObj, 'tframe', frame);\r
selectByValue(formObj, 'rules', rules);\r
selectByValue(formObj, 'class', className, true, true);\r
formObj.cols.value = cols;\r
var st = dom.parseStyle(formObj.style.value);\r
\r
if (st['background-image'])\r
- formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
else\r
formObj.backgroundimage.value = '';\r
\r
advanced_tab:"Erweitert",\r
general_props:"Allgemeine Einstellungen",\r
advanced_props:"Erweiterte Einstellungen",\r
-rowtype:"Row in table part",\r
+rowtype:"Gruppierung",\r
title:"Tabelle einf\u00FCgen/bearbeiten",\r
width:"Breite",\r
height:"H\u00F6he",\r
thead:"Tabellenkopf",\r
tbody:"Tabelleninhalt",\r
tfoot:"Tabellenfu\u00DF",\r
-scope:"Zusammenhang",\r
+scope:"Bezug",\r
rowgroup:"Vertikal gruppieren",\r
colgroup:"Horizontal gruppieren",\r
col_limit:"Sie haben die maximale Spaltenzahl von {$cols} \u00FCberschritten.",\r
row_limit:"Sie haben die maximale Zeilenzahl von {$rows} \u00FCberschritten.",\r
cell_limit:"Sie haben die maximale Zellenzahl von {$cells} \u00FCberschritten.",\r
-missing_scope:"Sind Sie sicher, dass Sie keinen Zusammenhang f\u00FCr diese \u00DCberschrift angeben wollen? Benutzer mit k\u00F6rperlichen Einschr\u00E4nkungen k\u00F6nnten Schwierigkeiten haben, den Inhalt der Tabelle zu verstehen.",\r
+missing_scope:"Wollen Sie wirklich keine Beziehung f\u00FCr diese \u00DCberschrift angeben? Benutzer mit k\u00F6rperlichen Einschr\u00E4nkungen k\u00F6nnten Schwierigkeiten haben, den Inhalt der Tabelle zu verstehen.",\r
caption:"Beschriftung der Tabelle",\r
-frame:"Gitter",\r
-frame_none:"keins",\r
-frame_groups:"Gruppen",\r
-frame_rows:"Zeilen",\r
-frame_cols:"Spalten",\r
-frame_all:"Alle",\r
-rules:"Rules",\r
-rules_void:"void",\r
-rules_above:"above",\r
-rules_below:"below",\r
-rules_hsides:"hsides",\r
-rules_lhs:"lhs",\r
-rules_rhs:"rhs",\r
-rules_vsides:"vsides",\r
-rules_box:"box",\r
-rules_border:"border"\r
+frame:"Rahmen",\r
+frame_none:"keine",\r
+frame_groups:"zwischen Gruppen",\r
+frame_rows:"zwischen Zeilen",\r
+frame_cols:"zwischen Spalten",\r
+frame_all:"zwischen allen Zellen",\r
+rules:"Gitter",\r
+rules_void:"keins",\r
+rules_above:"nur oben",\r
+rules_below:"nur unten",\r
+rules_hsides:"oben und unten",\r
+rules_lhs:"nur links",\r
+rules_rhs:"nur rechts",\r
+rules_vsides:"links und rechts",\r
+rules_box:"alle 4 Seiten (Box)",\r
+rules_border:"alle 4 Seiten (Border)"\r
});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('et.table_dlg',{\r
+general_tab:"\u00DCldine",\r
+advanced_tab:"T\u00E4psustatud",\r
+general_props:"\u00DCldised seaded",\r
+advanced_props:"T\u00E4psustatud seaded",\r
+rowtype:"Rida rea osas",\r
+title:"Sisesta/muuda tabelit",\r
+width:"Laius",\r
+height:"K\u00F5rgus",\r
+cols:"Veerge",\r
+rows:"Ridu",\r
+cellspacing:"Veeru laius",\r
+cellpadding:"Veeru t\u00E4ide",\r
+border:"Raam",\r
+align:"Joondus",\r
+align_default:"Vaikimisi",\r
+align_left:"Vasak",\r
+align_right:"Parem",\r
+align_middle:"Keskel",\r
+row_title:"Tabeli rea seaded",\r
+cell_title:"Tabeli veeru seaded",\r
+cell_type:"Veeru t\u00FC\u00FCp",\r
+valign:"Vertikaalne joondus",\r
+align_top:"\u00DCleval",\r
+align_bottom:"All",\r
+bordercolor:"Raami v\u00E4rv",\r
+bgcolor:"Tausta v\u00E4rv",\r
+merge_cells_title:"\u00DChenda lahtrid",\r
+id:"ID",\r
+style:"Stiil",\r
+langdir:"Keele suund",\r
+langcode:"Keele kood",\r
+mime:"M\u00E4rgista MIME t\u00FC\u00FCp",\r
+ltr:"Vasakult paremale",\r
+rtl:"Paremalt vasakule",\r
+bgimage:"Tausta pilt",\r
+summary:"Kokkuv\u00F5te",\r
+td:"Info",\r
+th:"P\u00E4is",\r
+cell_cell:"Uuenda antud lahtrit",\r
+cell_row:"Uuenda k\u00F5iki lahtreid reas",\r
+cell_all:"Uuenda k\u00F5iki lahtreid tabelis",\r
+row_row:"Uuenda antud rida",\r
+row_odd:"Uuenda paarituid ridu tabelis",\r
+row_even:"Uuenda paaris ridu tabelis",\r
+row_all:"Uuenda k\u00F5iki ridu tabelis",\r
+thead:"Tabeli p\u00E4is",\r
+tbody:"Tabeli sisu",\r
+tfoot:"Tabeli jalus",\r
+scope:"Ulatus",\r
+rowgroup:"Rea grupp",\r
+colgroup:"Veeru grupp",\r
+col_limit:"Oled j\u00F5udnud maksemaalse arvu veegudeni.",\r
+row_limit:"Oled j\u00F5udnud maksimaalse arvu ridadeni",\r
+cell_limit:"Oled j\u00F5udnud maksimaalse arvu elementideni",\r
+missing_scope:"Oled kindel, et soovid j\u00E4tkata t\u00E4psustamata antud tabeli p\u00E4ise nime?",\r
+caption:"Tabeli seletus",\r
+frame:"Raam",\r
+frame_none:"mitte \u00FCkski",\r
+frame_groups:"grupid",\r
+frame_rows:"read",\r
+frame_cols:"veerud",\r
+frame_all:"k\u00F5ik",\r
+rules:"Reeglid",\r
+rules_void:"t\u00FChi",\r
+rules_above:"\u00FCleval",\r
+rules_below:"all",\r
+rules_hsides:"hsides",\r
+rules_lhs:"lhs",\r
+rules_rhs:"rhs",\r
+rules_vsides:"vsides",\r
+rules_box:"kast",\r
+rules_border:"raam"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.table_dlg',{\r
+general_tab:"G\u00E9n\u00E9ral",\r
+advanced_tab:"Avanc\u00E9",\r
+general_props:"Propri\u00E9t\u00E9s g\u00E9n\u00E9rales",\r
+advanced_props:"Propri\u00E9t\u00E9s avanc\u00E9es",\r
+rowtype:"Type de ligne",\r
+title:"Ins\u00E9rer / modifier un tableau",\r
+width:"Largeur",\r
+height:"Hauteur",\r
+cols:"Colonnes",\r
+rows:"Lignes",\r
+cellspacing:"Espacement entre les cellules",\r
+cellpadding:"Espacement dans les cellules",\r
+border:"Bordure",\r
+align:"Alignement",\r
+align_default:"Par d\u00E9faut",\r
+align_left:"Gauche",\r
+align_right:"Droite",\r
+align_middle:"Centr\u00E9",\r
+row_title:"Propri\u00E9t\u00E9s de la ligne",\r
+cell_title:"Propri\u00E9t\u00E9s de la cellule",\r
+cell_type:"Type de cellule",\r
+valign:"Alignement vertical",\r
+align_top:"Haut",\r
+align_bottom:"Bas",\r
+bordercolor:"Couleur de la bordure",\r
+bgcolor:"Couleur du fond",\r
+merge_cells_title:"Fusionner les cellules",\r
+id:"Id",\r
+style:"Style",\r
+langdir:"Sens de lecture",\r
+langcode:"Code de la langue",\r
+mime:"Type MIME de la cible",\r
+ltr:"De gauche \u00E0 droite",\r
+rtl:"de droite \u00E0 gauche",\r
+bgimage:"Image de fond",\r
+summary:"R\u00E9sum\u00E9",\r
+td:"Donn\u00E9es",\r
+th:"Titre",\r
+cell_cell:"Mettre \u00E0 jour la cellule courante",\r
+cell_row:"Mettre \u00E0 jour toutes les cellules de la ligne",\r
+cell_all:"Mettre \u00E0 jour toutes les cellules du tableau",\r
+row_row:"Mettre \u00E0 jour la ligne courante",\r
+row_odd:"Mettre \u00E0 jour les lignes impaires",\r
+row_even:"Mettre \u00E0 jour les lignes paires",\r
+row_all:"Mettre \u00E0 jour toutes les lignes du tableau",\r
+thead:"En-t\u00EAtes de tableau",\r
+tbody:"Corps de tableau",\r
+tfoot:"Pied de tableau",\r
+scope:"Port\u00E9e",\r
+rowgroup:"Groupe de lignes",\r
+colgroup:"Groupe de colonnes",\r
+col_limit:"Vous avez d\u00E9pass\u00E9 le nombre maximum de colonnes ({$cols}).",\r
+row_limit:"Vous avez d\u00E9pass\u00E9 le nombre maximum de lignes ({$rows}).",\r
+cell_limit:"Vous avez d\u00E9pass\u00E9 le nombre maximum de cellules ({$cells}).",\r
+missing_scope:"\u00CAtes-vous s\u00FBr de vouloir continuer sans sp\u00E9cifier de port\u00E9e pour cette cellule de titre ? Sans port\u00E9e, cela peut \u00EAtre difficile pour certains utilisateurs de comprendre le contenu ou les donn\u00E9es affich\u00E9es dans le tableau.",\r
+caption:"Afficher la l\u00E9gende du tableau",\r
+frame:"Cadre",\r
+frame_none:"aucun",\r
+frame_groups:"groupe",\r
+frame_rows:"lignes",\r
+frame_cols:"colonnes",\r
+frame_all:"tous",\r
+rules:"R\u00E8gles",\r
+rules_void:"aucune",\r
+rules_above:"au-dessus",\r
+rules_below:"au-dessous",\r
+rules_hsides:"horizontales",\r
+rules_lhs:"\u00E0 gauche",\r
+rules_rhs:"\u00E0 droite",\r
+rules_vsides:"verticales",\r
+rules_box:"bo\u00EEte",\r
+rules_border:"bordure"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.table_dlg',{\r
+general_tab:"\u00C1ltal\u00E1nos",\r
+advanced_tab:"Halad\u00F3",\r
+general_props:"\u00C1ltal\u00E1nos tulajdons\u00E1gok",\r
+advanced_props:"Halad\u00F3 tulajdons\u00E1gok",\r
+rowtype:"Sor a t\u00E1bl\u00E1ban",\r
+title:"T\u00E1bl\u00E1zat besz\u00FAr\u00E1sa/szerkeszt\u00E9se",\r
+width:"Sz\u00E9less\u00E9g",\r
+height:"Magass\u00E1g",\r
+cols:"Oszlopok",\r
+rows:"Sorok",\r
+cellspacing:"Cellak\u00F6z",\r
+cellpadding:"Cella bels\u0151k\u00F6z",\r
+border:"Keret",\r
+align:"Igaz\u00EDt\u00E1s",\r
+align_default:"Alap\u00E9rtelmezett",\r
+align_left:"Balra",\r
+align_right:"Jobbra",\r
+align_middle:"K\u00F6z\u00E9pre",\r
+row_title:"Sor tulajdons\u00E1gai",\r
+cell_title:"Cella tulajdons\u00E1gai",\r
+cell_type:"Cellat\u00EDpus",\r
+valign:"F\u00FCgg\u0151leges igaz\u00EDt\u00E1s",\r
+align_top:"Fel",\r
+align_bottom:"Le",\r
+bordercolor:"Keretsz\u00EDn",\r
+bgcolor:"H\u00E1tt\u00E9rsz\u00EDn",\r
+merge_cells_title:"Cell\u00E1k \u00F6sszevon\u00E1sa",\r
+id:"Id",\r
+style:"St\u00EDlus",\r
+langdir:"\u00CDr\u00E1s ir\u00E1ny",\r
+langcode:"Nyelvk\u00F3d",\r
+mime:"C\u00E9l MIME t\u00EDpus",\r
+ltr:"Balr\u00F3l jobbra",\r
+rtl:"Jobbr\u00F3l balra",\r
+bgimage:"H\u00E1tt\u00E9rk\u00E9p",\r
+summary:"\u00D6sszegz\u00E9s",\r
+td:"Adat",\r
+th:"Fejl\u00E9c",\r
+cell_cell:"Cella friss\u00EDt\u00E9se",\r
+cell_row:"Sor \u00F6sszes cell\u00E1j\u00E1nak friss\u00EDt\u00E9se",\r
+cell_all:"T\u00E1bl\u00E1zat \u00F6sszes cell\u00E1j\u00E1nak friss\u00EDt\u00E9se",\r
+row_row:"Sor friss\u00EDt\u00E9se",\r
+row_odd:"P\u00E1ratlan sorok friss\u00EDt\u00E9se",\r
+row_even:"P\u00E1ros sorok friss\u00EDt\u00E9se",\r
+row_all:"Minden sor friss\u00EDt\u00E9se",\r
+thead:"T\u00E1bl\u00E1zat fej",\r
+tbody:"T\u00E1bl\u00E1zat test",\r
+tfoot:"T\u00E1bl\u00E1zat l\u00E1b",\r
+scope:"Hat\u00F3k\u00F6r",\r
+rowgroup:"Sor csoport",\r
+colgroup:"Oszlop csoport",\r
+col_limit:"T\u00FAll\u00E9pte a maxim\u00E1lis oszlopsz\u00E1mot, ami {$cols}.",\r
+row_limit:"T\u00FAll\u00E9pte a maxim\u00E1lis sorsz\u00E1mot, ami {$rows}.",\r
+cell_limit:"T\u00FAll\u00E9pte a maxim\u00E1lis cellasz\u00E1mot, ami {$cells}.",\r
+missing_scope:"Biztosan folytatni akarja an\u00E9lk\u00FCl, hogy hat\u00F3k\u00F6rt adna ennek a fejl\u00E9ccell\u00E1nak? Korl\u00E1toz\u00E1sokkal \u00E9l\u0151k sz\u00E1m\u00E1ra neh\u00E9z lesz meg\u00E9rteni a t\u00E1bl\u00E1zat tartalm\u00E1t.",\r
+caption:"C\u00EDmsor",\r
+frame:"Keret",\r
+frame_none:"nincs",\r
+frame_groups:"csoportok",\r
+frame_rows:"sorok",\r
+frame_cols:"oszlopok",\r
+frame_all:"mind",\r
+rules:"Vonalak",\r
+rules_void:"sehol",\r
+rules_above:"f\u00F6l\u00F6tte",\r
+rules_below:"alatta",\r
+rules_hsides:"v. oldalak",\r
+rules_lhs:"lhs",\r
+rules_rhs:"rhs",\r
+rules_vsides:"f. oldalak",\r
+rules_box:"doboz",\r
+rules_border:"keret"\r
+});
\ No newline at end of file
frame_cols:"colonne",\r
frame_all:"tutte",\r
rules:"Regole",\r
-rules_void:"void",\r
-rules_above:"above",\r
-rules_below:"below",\r
-rules_hsides:"hsides",\r
+rules_void:"vuoto",\r
+rules_above:"sopra",\r
+rules_below:"sotto",\r
+rules_hsides:"lato orizz.",\r
rules_lhs:"lhs",\r
rules_rhs:"rhs",\r
-rules_vsides:"vsides",\r
+rules_vsides:"lato vert.",\r
rules_box:"box",\r
-rules_border:"border"\r
+rules_border:"bordo"\r
});
\ No newline at end of file
row_row:"Huidige rij bijwerken",\r
row_odd:"Oneven rijen bijwerken",\r
row_even:"Even rijen bijwerken",\r
-row_all:"Alle rijen bijweken",\r
+row_all:"Alle rijen bijwerken",\r
thead:"Tabelkop",\r
tbody:"Tabellichaam",\r
tfoot:"Tabelvoet",\r
rules_void:"Geen",\r
rules_above:"Boven",\r
rules_below:"Onder",\r
-rules_hsides:"Horizontale zijdes",\r
+rules_hsides:"Horizontale zijden",\r
rules_lhs:"Linkerzijkant",\r
rules_rhs:"Rechterzijkant",\r
-rules_vsides:"Verticale zijdes",\r
+rules_vsides:"Verticale zijden",\r
rules_box:"Box",\r
rules_border:"Rand"\r
});
\ No newline at end of file
tinyMCE.addI18n('pt.table_dlg',{\r
general_tab:"Geral",\r
-advanced_tab:"Avan\u00C3\u00A7ado",\r
+advanced_tab:"Avan\u00E7ado",\r
general_props:"Propriedades gerais",\r
-advanced_props:"Propriedades avan\u00C3\u00A7adas",\r
+advanced_props:"Propriedades avan\u00E7adas",\r
rowtype:"Linha na parte da tabela",\r
title:"Inserir/modificar tabela",\r
width:"Largura",\r
height:"Altura",\r
cols:"Colunas",\r
rows:"Linhas",\r
-cellspacing:"Cellspacing",\r
-cellpadding:"Cellpadding",\r
+cellspacing:"Espa\u00E7amento da C\u00E9lula",\r
+cellpadding:"Enchimento da C\u00E9lula",\r
border:"Limites",\r
-align:"Alinhamento",\r
-align_default:"Padr\u00C3\u00A3o",\r
+align:"Alinha.",\r
+align_default:"Padr\u00E3o",\r
align_left:"Esquerda",\r
align_right:"Direita",\r
align_middle:"Centro",\r
row_title:"Propriedades de linhas",\r
-cell_title:"Propriedades de c\u00C3\u00A9lulas",\r
-cell_type:"Tipo de c\u00C3\u00A9lula",\r
-valign:"Alinhamento vertical",\r
+cell_title:"Propriedades de c\u00E9lulas",\r
+cell_type:"Tipo c\u00E9l.",\r
+valign:"Alinha. vert.",\r
align_top:"Topo",\r
align_bottom:"Abaixo",\r
bordercolor:"Cor dos limites",\r
bgcolor:"Cor de fundo",\r
-merge_cells_title:"Unir c\u00C3\u00A9lulas",\r
+merge_cells_title:"Unir c\u00E9lulas",\r
id:"Id",\r
style:"Estilo",\r
-langdir:"Dire\u00C3\u00A7\u00C3\u00A3o do texto",\r
-langcode:"C\u00C3\u00B3digo da linguagem",\r
+langdir:"Dire\u00E7\u00E3o do texto",\r
+langcode:"C\u00F3digo do idioma",\r
mime:"MIME alvo",\r
ltr:"Da esquerda para a direita",\r
rtl:"Da direita para a esquerda",\r
bgimage:"Imagem de fundo",\r
-summary:"Sum\u00C3\u00A1rio",\r
+summary:"Sum\u00E1rio",\r
td:"Dados",\r
th:"Campo",\r
-cell_cell:"Atualizar esta c\u00C3\u00A9lula",\r
-cell_row:"Atualizar todas as c\u00C3\u00A9lulas na linha",\r
-cell_all:"Atualizar todas as c\u00C3\u00A9lulas na tabela",\r
-row_row:"Atcualizar esta linha",\r
-row_odd:"Atualizar linhas \u00C3\u00ADmpares",\r
+cell_cell:"Atualizar esta c\u00E9lula",\r
+cell_row:"Atualizar todas as c\u00E9lulas na linha",\r
+cell_all:"Atualizar todas as c\u00E9lulas na tabela",\r
+row_row:"Atualizar esta linha",\r
+row_odd:"Atualizar linhas \u00EDmpares",\r
row_even:"Atualizar linhas pares",\r
row_all:"Atualizar todas as linhas",\r
thead:"Topo da tabela",\r
tbody:"Corpo da tabela",\r
-tfoot:"Rodap\u00C3\u00A9 da tabela",\r
+tfoot:"Rodap\u00E9 da tabela",\r
scope:"Alcance",\r
rowgroup:"Grupo linhas",\r
colgroup:"Grupo colunas",\r
-col_limit:"Excedeu o n\u00C3\u00BAmero m\u00C3\u00A1ximo de colunas de {$cols}.",\r
-row_limit:"Excedeu o n\u00C3\u00BAmero m\u00C3\u00A1ximo de linhas de {$rows}.",\r
-cell_limit:"Excedeu o n\u00C3\u00BAmero m\u00C3\u00A1ximo de c\u00C3\u00A9lulas de {$cells}.",\r
-missing_scope:"Tem certeza de que quer continuar sem especificar um escopo para esta c\u00C3\u00A9lula? (Isso poder\u00C3\u00A1 causar dificuldades a usu\u00C3\u00A1rios deficientes)",\r
-caption:"T\u00C3\u00ADtulo da tabela",\r
+col_limit:"Excedeu o n\u00FAmero m\u00E1ximo de colunas de {$cols}.",\r
+row_limit:"Excedeu o n\u00FAmero m\u00E1ximo de linhas de {$rows}.",\r
+cell_limit:"Excedeu o n\u00FAmero m\u00E1ximo de c\u00E9lulas de {$cells}.",\r
+missing_scope:"Tem certeza de que quer continuar sem especificar um escopo para esta c\u00E9lula? (Isso poder\u00E1 causar dificuldades a usu\u00E1rios deficientes)",\r
+caption:"T\u00EDtulo da tabela",\r
frame:"Frame",\r
frame_none:"Nenhum",\r
frame_groups:"Grupos",\r
--- /dev/null
+tinyMCE.addI18n('ru.table_dlg',{\r
+general_tab:"\u041E\u0431\u0449\u0435\u0435",\r
+advanced_tab:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E",\r
+general_props:"\u041E\u0431\u0449\u0438\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B",\r
+advanced_props:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B",\r
+rowtype:"\u0422\u0438\u043F \u0441\u0442\u0440\u043E\u043A\u0438",\r
+title:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0442\u0430\u0431\u043B\u0438\u0446\u044B",\r
+width:"\u0428\u0438\u0440\u0438\u043D\u0430",\r
+height:"\u0412\u044B\u0441\u043E\u0442\u0430",\r
+cols:"\u0421\u0442\u043E\u043B\u0431\u0446\u044B",\r
+rows:"\u0421\u0442\u0440\u043E\u043A\u0438",\r
+cellspacing:"\u0420\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043C\u0435\u0436\u0434\u0443 \u044F\u0447\u0435\u0439\u043A\u0430\u043C\u0438",\r
+cellpadding:"\u041E\u0442\u0441\u0442\u0443\u043F\u044B \u0432 \u044F\u0447\u0435\u0439\u043A\u0430\u0445",\r
+border:"\u0413\u0440\u0430\u043D\u0438\u0446\u0430",\r
+align:"\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435",\r
+align_default:"\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E",\r
+align_left:"\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_right:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_middle:"\u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443",\r
+row_title:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u0442\u0440\u043E\u043A\u0438",\r
+cell_title:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u044F\u0447\u0435\u0439\u043A\u0438",\r
+cell_type:"\u0422\u0438\u043F",\r
+valign:"\u0412\u0435\u0440\u0442. \u0432\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435",\r
+align_top:"\u041F\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+align_bottom:"\u041F\u043E \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+bordercolor:"\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B",\r
+bgcolor:"\u0426\u0432\u0435\u0442 \u0437\u0430\u043B\u0438\u0432\u043A\u0438",\r
+merge_cells_title:"\u041E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u044F\u0447\u0435\u0439\u043A\u0438",\r
+id:"\u0418\u043C\u044F",\r
+style:"\u0421\u0442\u0438\u043B\u044C",\r
+langdir:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430",\r
+langcode:"\u041A\u043E\u0434 \u044F\u0437\u044B\u043A\u0430",\r
+mime:"MIME \u0442\u0438\u043F \u0446\u0435\u043B\u0438",\r
+ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E",\r
+rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E",\r
+bgimage:"\u0424\u043E\u043D\u043E\u0432\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435",\r
+summary:"\u041E\u0431\u0449\u0435\u0435",\r
+td:"\u0414\u0430\u043D\u043D\u044B\u0435",\r
+th:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",\r
+cell_cell:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u044F\u0447\u0435\u0439\u043A\u0443",\r
+cell_row:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u044F\u0447\u0435\u0439\u043A\u0438 \u0432 \u0441\u0442\u0440\u043E\u043A\u0435",\r
+cell_all:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u044F\u0447\u0435\u0439\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435",\r
+row_row:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443",\r
+row_odd:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u043D\u0435\u0447\u0435\u0442\u043D\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435",\r
+row_even:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0447\u0435\u0442\u043D\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435",\r
+row_all:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435",\r
+thead:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",\r
+tbody:"\u0422\u0435\u043B\u043E",\r
+tfoot:"\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u0435",\r
+scope:"\u041E\u0431\u043B\u0430\u0441\u0442\u044C",\r
+rowgroup:"\u0413\u0440\u0443\u043F\u043F\u0430 \u0441\u0442\u0440\u043E\u043A",\r
+colgroup:"\u0413\u0440\u0443\u043F\u043F\u0430 \u0441\u0442\u043E\u043B\u0431\u0446\u043E\u0432",\r
+col_limit:"\u0414\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0432\u0439 \u043F\u0440\u0435\u0434\u0435\u043B, \u0432 $ \u043A\u043E\u043B\u043E\u043D\u043E\u043A.",\r
+row_limit:"\u0414\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0432\u0439 \u043F\u0440\u0435\u0434\u0435\u043B, \u0432 $ \u0441\u0442\u0440\u043E\u043A.",\r
+cell_limit:"\u0414\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0432\u0439 \u043F\u0440\u0435\u0434\u0435\u043B, \u0432 $ \u044F\u0447\u0435\u0435\u043A.",\r
+missing_scope:"\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0431\u0435\u0437 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u043D\u0438\u044F \u043E\u0431\u043B\u0430\u0441\u0442\u0438 \u0437\u0430\u0433\u043B\u043E\u043B\u0432\u043A\u0430? \u0411\u0435\u0437 \u044D\u0442\u043E\u0433\u043E \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0442\u0440\u0443\u0434\u043D\u0435\u043D\u043E \u0432\u043E\u0441\u043F\u0440\u0438\u044F\u0442\u0438\u0435 \u0442\u0430\u0431\u043B\u0438\u0446\u044B \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u043C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\u043C.",\r
+caption:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",\r
+frame:"\u041A\u0430\u0434\u0440",\r
+frame_none:"none",\r
+frame_groups:"groups",\r
+frame_rows:"rows",\r
+frame_cols:"cols",\r
+frame_all:"all",\r
+rules:"\u041F\u0440\u0430\u0432\u0438\u043B\u0430",\r
+rules_void:"void",\r
+rules_above:"above",\r
+rules_below:"below",\r
+rules_hsides:"hsides",\r
+rules_lhs:"lhs",\r
+rules_rhs:"rhs",\r
+rules_vsides:"vsides",\r
+rules_box:"box",\r
+rules_border:"border"\r
+});
\ No newline at end of file
<script type="text/javascript" src="../../utils/mctabs.js"></script>\r
<script type="text/javascript" src="../../utils/validate.js"></script>\r
<script type="text/javascript" src="js/merge_cells.js"></script>\r
- <base target="_self" />\r
</head>\r
-<body style="margin: 8px" style="display: none">\r
-<form onsubmit="mergeCells();return false;" action="#">\r
+<body style="margin: 8px">\r
+<form onsubmit="MergeCellsDialog.merge();return false;" action="#">\r
<fieldset>\r
<legend>{#table_dlg.merge_cells_title}</legend>\r
<table border="0" cellpadding="0" cellspacing="3" width="100%">\r
</fieldset>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#update}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
<script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
<script type="text/javascript" src="js/row.js"></script>\r
<link href="css/row.css" rel="stylesheet" type="text/css" />\r
- <base target="_self" />\r
</head>\r
<body id="tablerow" style="display: none">\r
- <form onsubmit="updateAction();return false;">\r
+ <form onsubmit="updateAction();return false;" action="#">\r
<div class="tabs">\r
<ul>\r
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>\r
</select>\r
</div>\r
\r
- <div style="float: left">\r
- <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
<script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
<script type="text/javascript" src="js/table.js"></script>\r
<link href="css/table.css" rel="stylesheet" type="text/css" />\r
- <base target="_self" />\r
</head>\r
<body id="table" style="display: none">\r
<form onsubmit="insertTable();return false;" action="#">\r
<td><label id="classlabel" for="class">{#class_name}</label></td>\r
<td colspan="3">\r
<select id="class" name="class" class="mceEditableSelect">\r
- <option value="" selected>{#not_set}</option>\r
+ <option value="" selected="selected">{#not_set}</option>\r
</select></td>\r
</tr>\r
<tr>\r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="frame">{#table_dlg.frame}</label></td> \r
+ <td class="column1"><label for="tframe">{#table_dlg.frame}</label></td> \r
<td>\r
- <select id="frame" name="frame" class="advfield"> \r
+ <select id="tframe" name="tframe" class="advfield"> \r
<option value="">{#not_set}</option>\r
<option value="void">{#table_dlg.rules_void}</option>\r
<option value="above">{#table_dlg.rules_above}</option> \r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#insert}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
-(function(){var each=tinymce.each;tinymce.create('tinymce.plugins.TemplatePlugin',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceTemplate',function(ui){ed.windowManager.open({file:url+'/template.htm',width:ed.getParam('template_popup_width',750),height:ed.getParam('template_popup_height',600),inline:1},{plugin_url:url});});ed.addCommand('mceInsertTemplate',t._insertTemplate,t);ed.addButton('template',{title:'template.desc',cmd:'mceTemplate'});ed.onPreProcess.add(function(ed,o){var dom=ed.dom;each(dom.select('div',o.node),function(e){if(dom.hasClass(e,'mceTmpl')){each(dom.select('*',e),function(e){if(dom.hasClass(e,ed.getParam('template_mdate_classes','mdate').replace(/\s+/g,'|')))e.innerHTML=t._getDateTime(new Date(),ed.getParam("template_mdate_format",ed.getLang("template.mdate_format")));});t._replaceVals(e);}});});},getInfo:function(){return{longname:'Template plugin',author:'Moxiecode Systems AB',authorurl:'http://www.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_insertTemplate:function(ui,v){var t=this,ed=t.editor,h,el,dom=ed.dom,sel=ed.selection.getContent();h=v.content;each(t.editor.getParam('template_replace_values'),function(v,k){if(typeof(v)!='function')h=h.replace(new RegExp('\\{\\$'+k+'\\}','g'),v);});el=dom.create('div',null,h);n=dom.select('.mceTmpl',el);if(n&&n.length>0){el=dom.create('div',null);el.appendChild(n[0].cloneNode(true));}function hasClass(n,c){return new RegExp('\\b'+c+'\\b','g').test(n.className);};each(dom.select('*',el),function(n){if(hasClass(n,ed.getParam('template_cdate_classes','cdate').replace(/\s+/g,'|')))n.innerHTML=t._getDateTime(new Date(),ed.getParam("template_cdate_format",ed.getLang("template.cdate_format")));if(hasClass(n,ed.getParam('template_mdate_classes','mdate').replace(/\s+/g,'|')))n.innerHTML=t._getDateTime(new Date(),ed.getParam("template_mdate_format",ed.getLang("template.mdate_format")));if(hasClass(n,ed.getParam('template_selected_content_classes','selcontent').replace(/\s+/g,'|')))n.innerHTML=sel;});t._replaceVals(el);ed.execCommand('mceInsertContent',false,el.innerHTML);ed.addVisual();},_replaceVals:function(e){var dom=this.editor.dom,vl=this.editor.getParam('template_replace_values');each(dom.select('*',e),function(e){each(vl,function(v,k){if(dom.hasClass(e,k)){if(typeof(vl[k])=='function')vl[k](e);}});});},_getDateTime:function(d,fmt){if(!fmt)return"";function addZeros(value,len){var i;value=""+value;if(value.length<len){for(i=0;i<(len-value.length);i++)value="0"+value;}return value;}fmt=fmt.replace("%D","%m/%d/%y");fmt=fmt.replace("%r","%I:%M:%S %p");fmt=fmt.replace("%Y",""+d.getFullYear());fmt=fmt.replace("%y",""+d.getYear());fmt=fmt.replace("%m",addZeros(d.getMonth()+1,2));fmt=fmt.replace("%d",addZeros(d.getDate(),2));fmt=fmt.replace("%H",""+addZeros(d.getHours(),2));fmt=fmt.replace("%M",""+addZeros(d.getMinutes(),2));fmt=fmt.replace("%S",""+addZeros(d.getSeconds(),2));fmt=fmt.replace("%I",""+((d.getHours()+11)%12+1));fmt=fmt.replace("%p",""+(d.getHours()<12?"AM":"PM"));fmt=fmt.replace("%B",""+tinyMCE.getLang("template_months_long").split(',')[d.getMonth()]);fmt=fmt.replace("%b",""+tinyMCE.getLang("template_months_short").split(',')[d.getMonth()]);fmt=fmt.replace("%A",""+tinyMCE.getLang("template_day_long").split(',')[d.getDay()]);fmt=fmt.replace("%a",""+tinyMCE.getLang("template_day_short").split(',')[d.getDay()]);fmt=fmt.replace("%%","%");return fmt;}});tinymce.PluginManager.add('template',tinymce.plugins.TemplatePlugin);})();
\ No newline at end of file
+(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length<d){for(f=0;f<(d-g.length);f++){g="0"+g}}return g}b=b.replace("%D","%m/%d/%y");b=b.replace("%r","%I:%M:%S %p");b=b.replace("%Y",""+e.getFullYear());b=b.replace("%y",""+e.getYear());b=b.replace("%m",c(e.getMonth()+1,2));b=b.replace("%d",c(e.getDate(),2));b=b.replace("%H",""+c(e.getHours(),2));b=b.replace("%M",""+c(e.getMinutes(),2));b=b.replace("%S",""+c(e.getSeconds(),2));b=b.replace("%I",""+((e.getHours()+11)%12+1));b=b.replace("%p",""+(e.getHours()<12?"AM":"PM"));b=b.replace("%B",""+this.editor.getLang("template_months_long").split(",")[e.getMonth()]);b=b.replace("%b",""+this.editor.getLang("template_months_short").split(",")[e.getMonth()]);b=b.replace("%A",""+this.editor.getLang("template_day_long").split(",")[e.getDay()]);b=b.replace("%a",""+this.editor.getLang("template_day_short").split(",")[e.getDay()]);b=b.replace("%%","%");return b}});tinymce.PluginManager.add("template",tinymce.plugins.TemplatePlugin)})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
+ * editor_plugin_src.js\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));\r
fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));\r
fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));\r
- fmt = fmt.replace("%B", "" + tinyMCE.getLang("template_months_long").split(',')[d.getMonth()]);\r
- fmt = fmt.replace("%b", "" + tinyMCE.getLang("template_months_short").split(',')[d.getMonth()]);\r
- fmt = fmt.replace("%A", "" + tinyMCE.getLang("template_day_long").split(',')[d.getDay()]);\r
- fmt = fmt.replace("%a", "" + tinyMCE.getLang("template_day_short").split(',')[d.getDay()]);\r
+ fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]);\r
+ fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]);\r
+ fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]);\r
+ fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]);\r
fmt = fmt.replace("%%", "%");\r
\r
return fmt;\r
title:"Vorlagen",\r
label:"Vorlage",\r
desc_label:"Beschreibung",\r
-desc:"Vorgefertigten Vorlageninhalt einf\u00FCgen",\r
+desc:"Inhalt aus Vorlage einf\u00FCgen",\r
select:"Vorlage ausw\u00E4hlen",\r
preview:"Vorschau",\r
-warning:"Warnung: Eine Vorlage mit einer anderen zu aktualisieren kann einen Datenverlust herbeif\u00FChren!",\r
+warning:"Warnung: Eine Vorlage mit einer anderen zu aktualisieren kann zu einem Datenverlust f\u00FChren!",\r
mdate_format:"%Y-%m-%d %H:%M:%S",\r
cdate_format:"%Y-%m-%d %H:%M:%S",\r
months_long:"Januar,Februar,M\u00E4rz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember",\r
-months_short:"Jan,Feb,M\u00E4rz,Apr,Mai,Juni,Juli,Aug,Sept,Okt,Nov,Dez",\r
+months_short:"Jan,Feb,M\u00E4r,Apr,Mai,Juni,Juli,Aug,Sept,Okt,Nov,Dez",\r
day_long:"Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag",\r
day_short:"So,Mo,Di,Mi,Do,Fr,Sa,So"\r
});
\ No newline at end of file
label:"Plantilla",\r
desc_label:"Descripci\u00F3n",\r
desc:"Insertar contenido de plantilla predefinida",\r
-select:"Seleccionar plantilla",\r
+select:"Elegir plantilla",\r
preview:"Vista previa",\r
warning:"Cuidado: Actualizar una plantilla con otra puede causar p\u00E9rdida de datos.",\r
mdate_format:"%d-%m-%Y %H:%M:%S",\r
--- /dev/null
+tinyMCE.addI18n('et.template_dlg',{\r
+title:"\u0160abloonid",\r
+label:"\u0160abloon",\r
+desc_label:"Kirjeldus",\r
+desc:"Sisesta eeldefineeritud \u0161ablooni sisu",\r
+select:"Vali \u0161abloon",\r
+preview:"Eelvaade",\r
+warning:"Hoiatus: \u0160ablooni uuendamine teistsugusega v\u00F5ib kaasa tuua andmete kaotsiminemist.",\r
+mdate_format:"%Y-%m-%d %H:%M:%S",\r
+cdate_format:"%Y-%m-%d %H:%M:%S",\r
+months_long:"Jaanuar,Veebruar,M\u00E4rts,Aprill,Mai,Juuni,Juuli,August,September,Oktoober,November,Detsember",\r
+months_short:"Jaan,Veeb,M\u00E4rts,Apr,Mai,Juuni,Juuli,Aug,Sep,Okt,Nov,Dets",\r
+day_long:"P\u00FChap\u00E4ev,Esmasp\u00E4ev,Teisip\u00E4ev,Kolmap\u00E4ev,Neljap\u00E4ev,reede,Laup\u00E4ev,P\u00FChap\u00E4ev",\r
+day_short:"P,E,T,K,N,R,L,P"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.template_dlg',{\r
+title:"Mod\u00E8les",\r
+label:"Mod\u00E8le",\r
+desc_label:"Description",\r
+desc:"Ins\u00E9rer un mod\u00E8le pr\u00E9d\u00E9fini",\r
+select:"Choisir un mod\u00E8le",\r
+preview:"Pr\u00E9visualisation",\r
+warning:"Attention : Mettre \u00E0 jour un mod\u00E8le pour un autre peut entra\u00EEner une perte de donn\u00E9es !",\r
+mdate_format:"%d/%m/%Y %H:%M:%S",\r
+cdate_format:"%d/%m/%Y %H:%M:%S",\r
+months_long:"Janvier,F\u00E9vrier,Mars,Avril,Mai,Juin,Juillet,Ao\u00FBt,Septembre,Octobre,Novembre,D\u00E9cembre",\r
+months_short:"Jan,F\u00E9v,Mar,Avr,Mai,Juin,Juil,Ao\u00FBt,Sep,Oct,Nov,D\u00E9c",\r
+day_long:"Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche",\r
+day_short:"Dim,Lun,Mar,Mer,Jeu,Ven,Sam,Dim"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.template_dlg',{\r
+title:"Sablon beilleszt\u00E9se",\r
+label:"Sablon",\r
+desc_label:"Le\u00EDr\u00E1s",\r
+desc:"Sablon beilleszt\u00E9se",\r
+select:"Sablon v\u00E1laszt\u00E1sa",\r
+preview:"El\u0151n\u00E9zet",\r
+warning:"Figyelem: Egy m\u00E1r alkalmazott sablon friss\u00EDt\u00E9se m\u00E1sikkal adatveszt\u00E9ssel j\u00E1rhat.",\r
+mdate_format:"%Y.%m.%d. %H:%M:%S",\r
+cdate_format:"%Y.%m.%d. %H:%M:%S",\r
+months_long:"janu\u00E1r,febru\u00E1r,m\u00E1rcius,\u00E1prilis,m\u00E1jus,j\u00FAnius,j\u00FAlius,augusztus,szeptember,okt\u00F3ber,november,december",\r
+months_short:"jan,feb,m\u00E1r,\u00E1pr,m\u00E1j,j\u00FAn,j\u00FAl,aug,szep,okt,nov,dec",\r
+day_long:"vas\u00E1rnap,h\u00E9tf\u0151,kedd,szerda,cs\u00FCt\u00F6rt\u00F6k,p\u00E9ntek,szombat,vas\u00E1rnap",\r
+day_short:"V,H,K,Sze,Cs,P,Szo,V"\r
+});
\ No newline at end of file
title:"Sjablonen",\r
label:"Sjabloon",\r
desc_label:"Beschrijving",\r
-desc:"Voorgedefineerd sjabloon invoegen",\r
+desc:"Voorgedefinieerd sjabloon invoegen",\r
select:"Selecteer een sjabloon",\r
preview:"Voorbeeld",\r
-warning:"Waarschuwing: het bijwerken van een sjabloon met een andere kan informatie verwijderen.",\r
+warning:"Waarschuwing: het bijwerken van een sjabloon met een andere kan het verlies van informatie tot gevolg hebben.",\r
mdate_format:"%d-%m-%Y %H:%M:%S",\r
cdate_format:"%d-%m-%Y %H:%M:%S",\r
months_long:"Januari,Februari,Maart,April,Mei,Juni,Juli,Augustus,September,Oktober,November,December",\r
months_short:"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Aug,Sep,Okt,Nov,Dec",\r
-day_long:"Zondag,Maandag,Dinsdag,Woensdag,Donderdag,Vrijdag,Zaterdag,Zonday",\r
-day_short:"Zon,Ma,Di,Woe,Do,Vrij,Zat,Zon"\r
+day_long:"Zondag,Maandag,Dinsdag,Woensdag,Donderdag,Vrijdag,Zaterdag,Zondag",\r
+day_short:"zo,ma,di,wo,do,vr,za,zo"\r
});
\ No newline at end of file
tinyMCE.addI18n('pt.template_dlg',{\r
title:"Templates",\r
label:"Template",\r
-desc_label:"Descri\u00C3\u00A7\u00C3\u00A3o",\r
+desc_label:"Descri\u00E7\u00E3o",\r
desc:"Inserir template",\r
select:"Selecionar template",\r
-preview:"Pr\u00C3\u00A9-Visualiza\u00C3\u00A7\u00C3\u00A3o",\r
-warning:"Aten\u00C3\u00A7\u00C3\u00A3o: Atualizar um template com outro pode causar a perda de dados.",\r
+preview:"Pr\u00E9-Visualiza\u00E7\u00E3o",\r
+warning:"Aten\u00E7\u00E3o: Atualizar um template com outro pode causar a perda de dados.",\r
mdate_format:"%d-%m-%Y %H:%M:%S",\r
cdate_format:"%d-%m-%Y %H:%M:%S",\r
-months_long:"Janeiro,Fevereiro,Mar\u00C3\u00A7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro",\r
+months_long:"Janeiro,Fevereiro,Mar\u00E7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro",\r
months_short:"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez",\r
-day_long:"Domingo,Segunda-Feira,Ter\u00C3\u00A7a-Feira,Quarta-Feira,Quinta-Feira,Sexta-Feira,S\u00C3\u00A1bado,Domingo",\r
+day_long:"Domingo,Segunda-feira,Ter\u00E7a-feira,Quarta-feira,Quinta-feira,Sexta-feira,S\u00E1bado,Domingo",\r
day_short:"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom"\r
});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('ru.template_dlg',{\r
+title:"\u0428\u0430\u0431\u043B\u043E\u043D\u044B",\r
+label:"\u0428\u0430\u0431\u043B\u043E\u043D",\r
+desc_label:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",\r
+desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D",\r
+select:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043B\u043E\u043D",\r
+preview:"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440",\r
+warning:"\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435: \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0448\u0430\u0431\u043B\u043E\u043D\u0430 \u043C\u043E\u0436\u0435\u0442 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043A \u043F\u043E\u0442\u0435\u0440\u044F\u043C \u0434\u0430\u043D\u043D\u044B\u0445/",\r
+mdate_format:"%Y.%m.%d %H:%M:%S",\r
+cdate_format:"%Y.%m.%d %H:%M:%S",\r
+months_long:"\u044F\u043D\u0432\u0430\u0440\u044C,\u0444\u0435\u0432\u0440\u0430\u043B\u044C,\u043C\u0430\u0440\u0442,\u0430\u043F\u0440\u0435\u043B\u044C,\u043C\u0430\u0439,\u0438\u044E\u043D\u044C,\u0438\u044E\u043B\u044C,\u0430\u0432\u0433\u0443\u0441\u0442,\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044C,\u043E\u043A\u0442\u044F\u0431\u0440\u044C,\u043D\u043E\u044F\u0431\u0440\u044C,\u0434\u0435\u043A\u0430\u0431\u0440\u044C",\r
+months_short:"\u044F\u043D\u0432,\u0444\u0435\u0432,\u043C\u0430\u0440\u0442,\u0430\u043F\u0440,\u043C\u0430\u0439,\u0438\u044E\u043D\u044C,\u0438\u044E\u043B\u044C,\u0430\u0432\u0433,\u0441\u0435\u043D,\u043E\u043A\u0442,\u043D\u043E\u044F,\u0434\u0435\u043A",\r
+day_long:"\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435,\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A,\u0432\u0442\u043E\u0440\u043D\u0438\u043A,\u0441\u0440\u0435\u0434\u0430,\u0447\u0435\u0442\u0432\u0435\u0440\u0433,\u043F\u044F\u0442\u043D\u0438\u0446\u0443,\u0441\u0443\u0431\u0431\u043E\u0442\u0430,\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435",\r
+day_short:"\u0432\u0441,\u043F\u043D,\u0432\u0442,\u0441\u0440,\u0447\u0442,\u043F\u0442,\u0441\u0431,\u0432\u0441"\r
+});
\ No newline at end of file
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
<script type="text/javascript" src="js/template.js"></script>\r
<link href="css/template.css" rel="stylesheet" type="text/css" />\r
- <base target="_self" />\r
</head>\r
<body onresize="TemplateDialog.resize();"> \r
<form onsubmit="TemplateDialog.insert();return false;">\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#insert}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
-\r
- <br style="clear:both" />\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body> \r
-(function(){tinymce.create('tinymce.plugins.VisualChars',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceVisualChars',t._toggleVisualChars,t);ed.addButton('visualchars',{title:'visualchars.desc',cmd:'mceVisualChars'});ed.onBeforeGetContent.add(function(ed,o){if(t.state){t.state=true;t._toggleVisualChars();}});},getInfo:function(){return{longname:'Visual characters',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_toggleVisualChars:function(){var t=this,ed=t.editor,nl,i,h,d=ed.getDoc(),b=ed.getBody(),nv,s=ed.selection,bo;t.state=!t.state;ed.controlManager.setActive('visualchars',t.state);if(t.state){nl=[];tinymce.walk(b,function(n){if(n.nodeType==3&&n.nodeValue&&n.nodeValue.indexOf('\u00a0')!=-1)nl.push(n);},'childNodes');for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;nv=nv.replace(/(\u00a0+)/g,'<span class="mceItemHidden mceVisualNbsp">$1</span>');nv=nv.replace(/\u00a0/g,'\u00b7');ed.dom.setOuterHTML(nl[i],nv,d);}}else{nl=tinymce.grep(ed.dom.select('span',b),function(n){return ed.dom.hasClass(n,'mceVisualNbsp');});for(i=0;i<nl.length;i++)ed.dom.setOuterHTML(nl[i],nl[i].innerHTML.replace(/(·|\u00b7)/g,' '),d);}}});tinymce.PluginManager.add('visualchars',tinymce.plugins.VisualChars);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g<a.length;g++){l=a[g].nodeValue;l=l.replace(/(\u00a0)/g,'<span _mce_bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
+ * editor_plugin_src.js\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});\r
\r
ed.onBeforeGetContent.add(function(ed, o) {\r
- if (t.state) {\r
+ if (t.state && o.format != 'raw' && !o.draft) {\r
t.state = true;\r
- t._toggleVisualChars();\r
+ t._toggleVisualChars(false);\r
}\r
});\r
},\r
\r
// Private methods\r
\r
- _toggleVisualChars : function() {\r
- var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo;\r
+ _toggleVisualChars : function(bookmark) {\r
+ var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm;\r
\r
t.state = !t.state;\r
ed.controlManager.setActive('visualchars', t.state);\r
\r
+ if (bookmark)\r
+ bm = s.getBookmark();\r
+\r
if (t.state) {\r
nl = [];\r
tinymce.walk(b, function(n) {\r
nl.push(n);\r
}, 'childNodes');\r
\r
- for (i=0; i<nl.length; i++) {\r
+ for (i = 0; i < nl.length; i++) {\r
nv = nl[i].nodeValue;\r
- nv = nv.replace(/(\u00a0+)/g, '<span class="mceItemHidden mceVisualNbsp">$1</span>');\r
- nv = nv.replace(/\u00a0/g, '\u00b7');\r
- ed.dom.setOuterHTML(nl[i], nv, d);\r
+ nv = nv.replace(/(\u00a0)/g, '<span _mce_bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');\r
+\r
+ div = ed.dom.create('div', null, nv);\r
+ while (node = div.lastChild)\r
+ ed.dom.insertAfter(node, nl[i]);\r
+\r
+ ed.dom.remove(nl[i]);\r
}\r
} else {\r
- nl = tinymce.grep(ed.dom.select('span', b), function(n) {\r
- return ed.dom.hasClass(n, 'mceVisualNbsp');\r
- });\r
+ nl = ed.dom.select('span.mceItemNbsp', b);\r
\r
- for (i=0; i<nl.length; i++)\r
- ed.dom.setOuterHTML(nl[i], nl[i].innerHTML.replace(/(·|\u00b7)/g, ' '), d);\r
+ for (i = nl.length - 1; i >= 0; i--)\r
+ ed.dom.remove(nl[i], 1);\r
}\r
+\r
+ s.moveToBookmark(bm);\r
}\r
});\r
\r
--- /dev/null
+(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(a,b){var c=this,d=0;c.countre=a.getParam("wordcount_countregex",/\S\s+/g);c.cleanre=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$¿'"_+=\\\/-]*/g);c.id=a.id+"-word-count";a.onPostRender.add(function(f,e){var g,h;h=f.getParam("wordcount_target_id");if(!h){g=tinymce.DOM.get(f.id+"_path_row");if(g){tinymce.DOM.add(g.parentNode,"div",{style:"float: right"},f.getLang("wordcount.words","Words: ")+'<span id="'+c.id+'">0</span>')}}else{tinymce.DOM.add(h,"span",{},'<span id="'+c.id+'">0</span>')}});a.onInit.add(function(e){e.selection.onSetContent.add(function(){c._count(e)});c._count(e)});a.onSetContent.add(function(e){c._count(e)});a.onKeyUp.add(function(f,g){if(g.keyCode==d){return}if(13==g.keyCode||8==d||46==d){c._count(f)}d=g.keyCode})},_count:function(b){var c=this,a=0;if(c.block){return}c.block=1;setTimeout(function(){var d=b.getContent({format:"raw"});if(d){d=d.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");d=d.replace(c.cleanre,"");d.replace(c.countre,function(){a++})}tinymce.DOM.setHTML(c.id,a.toString());setTimeout(function(){c.block=0},2000)},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})();
\ No newline at end of file
--- /dev/null
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+ tinymce.create('tinymce.plugins.WordCount', {\r
+ block : 0,\r
+ id : null,\r
+ countre : null,\r
+ cleanre : null,\r
+\r
+ init : function(ed, url) {\r
+ var t = this, last = 0;\r
+\r
+ t.countre = ed.getParam('wordcount_countregex', /\S\s+/g);\r
+ t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$¿'"_+=\\\/-]*/g);\r
+ t.id = ed.id + '-word-count';\r
+\r
+ ed.onPostRender.add(function(ed, cm) {\r
+ var row, id;\r
+\r
+ // Add it to the specified id or the theme advanced path\r
+ id = ed.getParam('wordcount_target_id');\r
+ if (!id) {\r
+ row = tinymce.DOM.get(ed.id + '_path_row');\r
+\r
+ if (row)\r
+ tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '<span id="' + t.id + '">0</span>');\r
+ } else\r
+ tinymce.DOM.add(id, 'span', {}, '<span id="' + t.id + '">0</span>');\r
+ });\r
+\r
+ ed.onInit.add(function(ed) {\r
+ ed.selection.onSetContent.add(function() {\r
+ t._count(ed);\r
+ });\r
+\r
+ t._count(ed);\r
+ });\r
+\r
+ ed.onSetContent.add(function(ed) {\r
+ t._count(ed);\r
+ });\r
+\r
+ ed.onKeyUp.add(function(ed, e) {\r
+ if (e.keyCode == last)\r
+ return;\r
+\r
+ if (13 == e.keyCode || 8 == last || 46 == last)\r
+ t._count(ed);\r
+\r
+ last = e.keyCode;\r
+ });\r
+ },\r
+\r
+ _count : function(ed) {\r
+ var t = this, tc = 0;\r
+\r
+ // Keep multiple calls from happening at the same time\r
+ if (t.block)\r
+ return;\r
+\r
+ t.block = 1;\r
+\r
+ setTimeout(function() {\r
+ var tx = ed.getContent({format : 'raw'});\r
+\r
+ if (tx) {\r
+ tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars\r
+ tx = tx.replace(t.cleanre, ''); // remove numbers and punctuation\r
+ tx.replace(t.countre, function() {tc++;}); // count the words\r
+ }\r
+\r
+ tinymce.DOM.setHTML(t.id, tc.toString());\r
+\r
+ setTimeout(function() {t.block = 0;}, 2000);\r
+ }, 1);\r
+ },\r
+\r
+ getInfo: function() {\r
+ return {\r
+ longname : 'Word Count plugin',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ }\r
+ });\r
+\r
+ tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount);\r
+})();\r
<script type="text/javascript" src="js/element_common.js"></script>\r
<script type="text/javascript" src="js/abbr.js"></script>\r
<link rel="stylesheet" type="text/css" href="css/popup.css" />\r
- <base target="_self" />\r
</head>\r
<body style="display: none">\r
<form onsubmit="insertAbbr();return false;" action="#">\r
</div>\r
</div>\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#update}" />\r
- </div>\r
- <div style="float: left">\r
- <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAbbr();" style="display: none;" />\r
- </div>\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAbbr();" style="display: none;" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
-\r
</form>\r
</body>\r
</html>\r
<script type="text/javascript" src="js/element_common.js"></script>\r
<script type="text/javascript" src="js/acronym.js"></script>\r
<link rel="stylesheet" type="text/css" href="css/popup.css" />\r
- <base target="_self" />\r
</head>\r
<body style="display: none">\r
<form onsubmit="insertAcronym();return false;" action="#">\r
</div>\r
</div>\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#update}" />\r
- </div>\r
- <div style="float: left">\r
- <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAcronym();" style="display: none;" />\r
- </div>\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAcronym();" style="display: none;" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
-\r
</form>\r
</body>\r
</html>\r
<script type="text/javascript" src="../../utils/form_utils.js"></script>\r
<script type="text/javascript" src="js/attributes.js"></script>\r
<link rel="stylesheet" type="text/css" href="css/attributes.css" />\r
- <base target="_self" />\r
</head>\r
<body style="display: none">\r
<form onsubmit="insertAction();return false;" action="#">\r
<td><label id="classlabel" for="classlist">{#class_name}</label></td>\r
<td>\r
<select id="classlist" name="classlist" class="mceEditableSelect">\r
- <option value="" selected>{#not_set}</option>\r
+ <option value="" selected="selected">{#not_set}</option>\r
</select>\r
</td>\r
</tr>\r
<tr>\r
- <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+ <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
<td><input id="style" name="style" type="text" value="" /></td> \r
</tr>\r
<tr>\r
</div>\r
</div>\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#insert}" />\r
- </div>\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
-\r
</form>\r
</body>\r
</html>\r
<script type="text/javascript" src="js/element_common.js"></script>\r
<script type="text/javascript" src="js/cite.js"></script>\r
<link rel="stylesheet" type="text/css" href="css/popup.css" />\r
- <base target="_self" />\r
</head>\r
<body style="display: none">\r
<form onsubmit="insertCite();return false;" action="#">\r
</div>\r
</div>\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#update}" />\r
- </div>\r
- <div style="float: left">\r
- <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeCite();" style="display: none;" />\r
- </div>\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeCite();" style="display: none;" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
-\r
</form>\r
</body>\r
</html>\r
<script type="text/javascript" src="js/element_common.js"></script>\r
<script type="text/javascript" src="js/del.js"></script>\r
<link rel="stylesheet" type="text/css" href="css/popup.css" />\r
- <base target="_self" />\r
</head>\r
<body id="xhtmlxtrasins" style="display: none">\r
<form onsubmit="insertDel();return false;" action="#">\r
<table border="0" cellspacing="0" cellpadding="0">\r
<tr> \r
<td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> \r
- <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" alt="{#xhtmlxtras_dlg.insert_date}" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>\r
+ <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>\r
</tr>\r
</table>\r
</td>\r
</div>\r
</div>\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#update}" />\r
- </div>\r
- <div style="float: left">\r
- <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeDel();" style="display: none;" />\r
- </div>\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeDel();" style="display: none;" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
-\r
</form>\r
-\r
</body>\r
</html>\r
-(function(){tinymce.create('tinymce.plugins.XHTMLXtrasPlugin',{init:function(ed,url){ed.addCommand('mceCite',function(){ed.windowManager.open({file:url+'/cite.htm',width:350+parseInt(ed.getLang('xhtmlxtras.cite_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.cite_delta_height',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAcronym',function(){ed.windowManager.open({file:url+'/acronym.htm',width:350+parseInt(ed.getLang('xhtmlxtras.acronym_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.acronym_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAbbr',function(){ed.windowManager.open({file:url+'/abbr.htm',width:350+parseInt(ed.getLang('xhtmlxtras.abbr_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.abbr_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceDel',function(){ed.windowManager.open({file:url+'/del.htm',width:340+parseInt(ed.getLang('xhtmlxtras.del_delta_width',0)),height:310+parseInt(ed.getLang('xhtmlxtras.del_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceIns',function(){ed.windowManager.open({file:url+'/ins.htm',width:340+parseInt(ed.getLang('xhtmlxtras.ins_delta_width',0)),height:310+parseInt(ed.getLang('xhtmlxtras.ins_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAttributes',function(){ed.windowManager.open({file:url+'/attributes.htm',width:380,height:370,inline:1},{plugin_url:url});});ed.addButton('cite',{title:'xhtmlxtras.cite_desc',cmd:'mceCite'});ed.addButton('acronym',{title:'xhtmlxtras.acronym_desc',cmd:'mceAcronym'});ed.addButton('abbr',{title:'xhtmlxtras.abbr_desc',cmd:'mceAbbr'});ed.addButton('del',{title:'xhtmlxtras.del_desc',cmd:'mceDel'});ed.addButton('ins',{title:'xhtmlxtras.ins_desc',cmd:'mceIns'});ed.addButton('attribs',{title:'xhtmlxtras.attribs_desc',cmd:'mceAttributes'});if(tinymce.isIE){function fix(ed,o){if(o.set){o.content=o.content.replace(/<abbr([^>]+)>/gi,'<html:abbr $1>');o.content=o.content.replace(/<\/abbr>/gi,'</html:abbr>');}};ed.onBeforeSetContent.add(fix);ed.onPostProcess.add(fix);}ed.onNodeChange.add(function(ed,cm,n,co){n=ed.dom.getParent(n,'CITE,ACRONYM,ABBR,DEL,INS');cm.setDisabled('cite',co);cm.setDisabled('acronym',co);cm.setDisabled('abbr',co);cm.setDisabled('del',co);cm.setDisabled('ins',co);cm.setDisabled('attribs',n&&n.nodeName=='BODY');cm.setActive('cite',0);cm.setActive('acronym',0);cm.setActive('abbr',0);cm.setActive('del',0);cm.setActive('ins',0);if(n){do{cm.setDisabled(n.nodeName.toLowerCase(),0);cm.setActive(n.nodeName.toLowerCase(),1);}while(n=n.parentNode);}});},getInfo:function(){return{longname:'XHTML Xtras Plugin',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('xhtmlxtras',tinymce.plugins.XHTMLXtrasPlugin);})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380,height:370,inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
+ * editor_plugin_src.js\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'});\r
ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'});\r
\r
- if (tinymce.isIE) {\r
- function fix(ed, o) {\r
- if (o.set) {\r
- o.content = o.content.replace(/<abbr([^>]+)>/gi, '<html:abbr $1>');\r
- o.content = o.content.replace(/<\/abbr>/gi, '</html:abbr>');\r
- }\r
- };\r
-\r
- ed.onBeforeSetContent.add(fix);\r
- ed.onPostProcess.add(fix);\r
- }\r
-\r
ed.onNodeChange.add(function(ed, cm, n, co) {\r
n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS');\r
\r
} while (n = n.parentNode);\r
}\r
});\r
+\r
+ ed.onPreInit.add(function() {\r
+ // Fixed IE issue where it can't handle these elements correctly\r
+ ed.dom.create('abbr');\r
+ });\r
},\r
\r
getInfo : function() {\r
<script type="text/javascript" src="js/element_common.js"></script>\r
<script type="text/javascript" src="js/ins.js"></script>\r
<link rel="stylesheet" type="text/css" href="css/popup.css" />\r
- <base target="_self" />\r
</head>\r
<body id="xhtmlxtrasins" style="display: none">\r
<form onsubmit="insertIns();return false;" action="#">\r
<table border="0" cellspacing="0" cellpadding="0">\r
<tr> \r
<td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> \r
- <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" alt="{#xhtmlxtras_dlg.insert_date}" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>\r
+ <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>\r
</tr>\r
</table>\r
</td>\r
</div>\r
</div>\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#update}" />\r
- </div>\r
- <div style="float: left">\r
- <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeIns();" style="display: none;" />\r
- </div>\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeIns();" style="display: none;" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
-\r
</form>\r
-\r
</body>\r
</html>\r
- /**\r
- * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+/**\r
+ * abbr.js\r
*\r
- * @author Moxiecode - based on work by Andrew Tetlaw\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
function init() {\r
}\r
\r
function insertAbbr() {\r
- SXE.insertElement(tinymce.isIE ? 'html:abbr' : 'abbr');\r
+ SXE.insertElement('abbr');\r
tinyMCEPopup.close();\r
}\r
\r
- /**\r
- * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+/**\r
+ * acronym.js\r
*\r
- * @author Moxiecode - based on work by Andrew Tetlaw\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
function init() {\r
- /**\r
- * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+/**\r
+ * attributes.js\r
*\r
- * @author Moxiecode - based on work by Andrew Tetlaw\r
- * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
function init() {\r
- /**\r
- * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+/**\r
+ * cite.js\r
*\r
- * @author Moxiecode - based on work by Andrew Tetlaw\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
function init() {\r
- /**\r
- * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+/**\r
+ * del.js\r
*\r
- * @author Moxiecode - based on work by Andrew Tetlaw\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
function init() {\r
- /**\r
- * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+/**\r
+ * element_common.js\r
*\r
- * @author Moxiecode - based on work by Andrew Tetlaw\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
tinyMCEPopup.requireLangPack();\r
if(s.length > 0) {\r
tagName = element_name;\r
\r
- if (tinymce.isIE && element_name.indexOf('html:') == 0)\r
- element_name = element_name.substring(5).toLowerCase();\r
-\r
insertInlineElement(element_name);\r
var elementArray = tinymce.grep(SXE.inst.dom.select(element_name));\r
for (var i=0; i<elementArray.length; i++) {\r
}\r
\r
SXE.showRemoveButton = function() {\r
- document.getElementById("remove").style.display = 'block';\r
+ document.getElementById("remove").style.display = '';\r
}\r
\r
SXE.containsClass = function(elm,cl) {\r
var ed = tinyMCEPopup.editor, dom = ed.dom;\r
\r
ed.getDoc().execCommand('FontName', false, 'mceinline');\r
- tinymce.each(dom.select(tinymce.isWebKit ? 'span' : 'font'), function(n) {\r
+ tinymce.each(dom.select('span,font'), function(n) {\r
if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline')\r
dom.replace(dom.create(en, {_mce_new : 1}), n, 1);\r
});\r
- /**\r
- * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+/**\r
+ * ins.js\r
*\r
- * @author Moxiecode - based on work by Andrew Tetlaw\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
function init() {\r
--- /dev/null
+tinyMCE.addI18n('et.xhtmlxtras_dlg',{\r
+attribute_label_title:"Pealkiri",\r
+attribute_label_id:"ID",\r
+attribute_label_class:"Klass",\r
+attribute_label_style:"Stiil",\r
+attribute_label_cite:"Tsitaat",\r
+attribute_label_datetime:"Kuup\u00E4ev/aeg",\r
+attribute_label_langdir:"Teksti suund",\r
+attribute_option_ltr:"Vasakult paremale",\r
+attribute_option_rtl:"Paremalt vasakule",\r
+attribute_label_langcode:"Keel",\r
+attribute_label_tabindex:"Sisujuht",\r
+attribute_label_accesskey:"Ligip\u00E4\u00E4suklahv",\r
+attribute_events_tab:"S\u00FCndmused",\r
+attribute_attrib_tab:"Atribuudid",\r
+general_tab:"\u00DCldine",\r
+attrib_tab:"Atribuudid",\r
+events_tab:"S\u00FCndmused",\r
+fieldset_general_tab:"\u00DCldised seaded",\r
+fieldset_attrib_tab:"Elementide atribuudid",\r
+fieldset_events_tab:"Elementide s\u00FCndmused",\r
+title_ins_element:"Elemendi sisestus",\r
+title_del_element:"Elemendi kustutus",\r
+title_acronym_element:"Elemendi akron\u00FC\u00FCm",\r
+title_abbr_element:"Elemendi l\u00FChend",\r
+title_cite_element:"Elemendi tsitaat",\r
+remove:"Eemalda",\r
+insert_date:"Sisesta hetke kuup\u00E4ev/aeg",\r
+option_ltr:"Vasakult paremale",\r
+option_rtl:"Paremalt vasakule",\r
+attribs_title:"Sisesta/muuda atribuute"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.xhtmlxtras_dlg',{\r
+attribute_label_title:"Titre",\r
+attribute_label_id:"ID",\r
+attribute_label_class:"Classe",\r
+attribute_label_style:"Style",\r
+attribute_label_cite:"Citation",\r
+attribute_label_datetime:"Date / heure",\r
+attribute_label_langdir:"Sens de lecture",\r
+attribute_option_ltr:"De gauche \u00E0 droite",\r
+attribute_option_rtl:"De droite \u00E0 gauche",\r
+attribute_label_langcode:"Langue",\r
+attribute_label_tabindex:"TabIndex",\r
+attribute_label_accesskey:"Accesskey",\r
+attribute_events_tab:"\u00C9v\u00E8nements",\r
+attribute_attrib_tab:"Attributs",\r
+general_tab:"G\u00E9n\u00E9ral",\r
+attrib_tab:"Attributs",\r
+events_tab:"\u00C9v\u00E9nements",\r
+fieldset_general_tab:"Param\u00E8tres g\u00E9n\u00E9raux",\r
+fieldset_attrib_tab:"Attributs",\r
+fieldset_events_tab:"\u00C9v\u00E9nements",\r
+title_ins_element:"Insertion",\r
+title_del_element:"Suppression",\r
+title_acronym_element:"Acronyme",\r
+title_abbr_element:"Abr\u00E9viation",\r
+title_cite_element:"Citation",\r
+remove:"Enlever",\r
+insert_date:"Ins\u00E9rer la date et l'heure actuelles",\r
+option_ltr:"De gauche \u00E0 droite",\r
+option_rtl:"De droite \u00E0 gauche",\r
+attribs_title:"Ins\u00E9rer / \u00E9diter les attributs"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.xhtmlxtras_dlg',{\r
+attribute_label_title:"C\u00EDm",\r
+attribute_label_id:"ID",\r
+attribute_label_class:"Class",\r
+attribute_label_style:"Style",\r
+attribute_label_cite:"Id\u00E9zet",\r
+attribute_label_datetime:"D\u00E1tum/Id\u0151",\r
+attribute_label_langdir:"Sz\u00F6veg ir\u00E1nya",\r
+attribute_option_ltr:"Balr\u00F3l jobbra",\r
+attribute_option_rtl:"Jobbr\u00F3l balra",\r
+attribute_label_langcode:"Nyelv",\r
+attribute_label_tabindex:"TabIndex",\r
+attribute_label_accesskey:"Gyorsbilenty\u0171",\r
+attribute_events_tab:"Esem\u00E9nyek",\r
+attribute_attrib_tab:"Tulajdons\u00E1gok",\r
+general_tab:"\u00C1ltal\u00E1nos",\r
+attrib_tab:"Tulajdons\u00E1gok",\r
+events_tab:"Esem\u00E9nyek",\r
+fieldset_general_tab:"\u00C1ltal\u00E1nos be\u00E1ll\u00EDt\u00E1sok",\r
+fieldset_attrib_tab:"Elem tulajdons\u00E1gok",\r
+fieldset_events_tab:"Elem esem\u00E9nyek",\r
+title_ins_element:"Besz\u00FArt elem",\r
+title_del_element:"T\u00F6r\u00F6lt elem",\r
+title_acronym_element:"Bet\u0171sz\u00F3 elem",\r
+title_abbr_element:"R\u00F6vid\u00EDt\u00E9s elem",\r
+title_cite_element:"Id\u00E9zet elem",\r
+remove:"Elt\u00E1vol\u00EDt\u00E1s",\r
+insert_date:"Aktu\u00E1lis d\u00E1tum/id\u0151 besz\u00FAr\u00E1sa",\r
+option_ltr:"Balr\u00F3l jobra",\r
+option_rtl:"Jobbr\u00F3l balra",\r
+attribs_title:"Tulajdons\u00E1gok besz\u00FAr\u00E1sa/szerkeszt\u00E9se"\r
+});
\ No newline at end of file
title_ins_element:"Invoegingselement",\r
title_del_element:"Verwijderingselement",\r
title_acronym_element:"Synoniem",\r
-title_abbr_element:"Afkoring",\r
+title_abbr_element:"Afkorting",\r
title_cite_element:"Citaat",\r
remove:"Verwijderen",\r
insert_date:"Huidige datum/tijd invoegen",\r
tinyMCE.addI18n('pt.xhtmlxtras_dlg',{\r
-attribute_label_title:"T\u00C3\u00ADtulo",\r
+attribute_label_title:"T\u00EDtulo",\r
attribute_label_id:"ID",\r
attribute_label_class:"Classe",\r
attribute_label_style:"Estilo",\r
attribute_label_cite:"Citar",\r
attribute_label_datetime:"Data/Hora",\r
-attribute_label_langdir:"Dire\u00C3\u00A7\u00C3\u00A3o do texto",\r
+attribute_label_langdir:"Dire\u00E7\u00E3o do texto",\r
attribute_option_ltr:"Da esquerda para a direita",\r
attribute_option_rtl:"Da direita para a esquerda",\r
-attribute_label_langcode:"Linguagem",\r
+attribute_label_langcode:"Idioma",\r
attribute_label_tabindex:"TabIndex",\r
attribute_label_accesskey:"Tecla de Atalho",\r
attribute_events_tab:"Eventos",\r
general_tab:"Geral",\r
attrib_tab:"Atributos",\r
events_tab:"Eventos",\r
-fieldset_general_tab:"Configura\u00C3\u00A7\u00C3\u00B5es gerais",\r
+fieldset_general_tab:"Configura\u00E7\u00F5es gerais",\r
fieldset_attrib_tab:"Atributos",\r
fieldset_events_tab:"Eventos",\r
title_ins_element:"Inserir",\r
title_del_element:"Apagar",\r
-title_acronym_element:"Acr\u00C3\u00B4nimo",\r
-title_abbr_element:"Abrevia\u00C3\u00A7\u00C3\u00A3o",\r
-title_cite_element:"Cita\u00C3\u00A7\u00C3\u00A3o",\r
+title_acronym_element:"Acr\u00F4nimo",\r
+title_abbr_element:"Abrevia\u00E7\u00E3o",\r
+title_cite_element:"Cita\u00E7\u00E3o",\r
remove:"Remover",\r
insert_date:"Inserir data/hora",\r
option_ltr:"Da esquerda para a direita",\r
--- /dev/null
+tinyMCE.addI18n('ru.xhtmlxtras_dlg',{\r
+attribute_label_title:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",\r
+attribute_label_id:"\u0418\u043C\u044F",\r
+attribute_label_class:"\u041A\u043B\u0430\u0441\u0441",\r
+attribute_label_style:"\u0421\u0442\u0438\u043B\u044C",\r
+attribute_label_cite:"\u0426\u0438\u0442\u0430\u0442\u0430",\r
+attribute_label_datetime:"\u0414\u0430\u0442\u0430/\u0412\u0440\u0435\u043C\u044F",\r
+attribute_label_langdir:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430",\r
+attribute_option_ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E",\r
+attribute_option_rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E",\r
+attribute_label_langcode:"\u042F\u0437\u044B\u043A",\r
+attribute_label_tabindex:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",\r
+attribute_label_accesskey:"\u041A\u043B\u044E\u0447 \u0434\u043E\u0441\u0442\u0443\u043F\u0430",\r
+attribute_events_tab:"\u0421\u043E\u0431\u044B\u0442\u0438\u044F",\r
+attribute_attrib_tab:"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B",\r
+general_tab:"\u041E\u0431\u0449\u0435\u0435",\r
+attrib_tab:"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B",\r
+events_tab:"\u0421\u043E\u0431\u044B\u0442\u0438\u044F",\r
+fieldset_general_tab:"\u041E\u0431\u0449\u0438\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B",\r
+fieldset_attrib_tab:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430",\r
+fieldset_events_tab:"\u0421\u043E\u0431\u044B\u0442\u0438\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430",\r
+title_ins_element:"\u0417\u0430\u043C\u0435\u043D\u0430",\r
+title_del_element:"\u0423\u0434\u0430\u043B\u0435\u043D\u0438\u0435",\r
+title_acronym_element:"\u0410\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0446\u0438\u044F",\r
+title_abbr_element:"\u0421\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u0438\u0435",\r
+title_cite_element:"\u0426\u0438\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435",\r
+remove:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",\r
+insert_date:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u0434\u0430\u0442\u0443/\u0432\u0440\u0435\u043C\u044F",\r
+option_ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E",\r
+option_rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E",\r
+attribs_title:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430"\r
+});
\ No newline at end of file
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
<title>{#advanced_dlg.about_title}</title>\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</body>\r
</html>\r
<title>{#advanced_dlg.anchor_title}</title>\r
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
<script type="text/javascript" src="js/anchor.js"></script>\r
- <base target="_self" />\r
</head>\r
<body style="display: none">\r
<form onsubmit="AnchorDialog.update();return false;" action="#">\r
<td colspan="2" class="title">{#advanced_dlg.anchor_title}</td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap">{#advanced_dlg.anchor_name}:</td>\r
+ <td class="nowrap">{#advanced_dlg.anchor_name}:</td>\r
<td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" /></td>\r
</tr>\r
</table>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#update}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
<title>{#advanced_dlg.charmap_title}</title>\r
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />\r
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
<script type="text/javascript" src="js/charmap.js"></script>\r
- <base target="_self" />\r
</head>\r
<body id="charmap" style="display:none">\r
<table align="center" border="0" cellspacing="0" cellpadding="2">\r
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
<script type="text/javascript" src="../../utils/mctabs.js"></script>\r
<script type="text/javascript" src="js/color_picker.js"></script>\r
- <base target="_self" />\r
</head>\r
<body id="colorpicker" style="display: none">\r
<form onsubmit="insertAction();return false" action="#">\r
<fieldset>\r
<legend>{#advanced_dlg.colorpicker_picker_title}</legend>\r
<div id="picker">\r
- <img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" />\r
+ <img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" alt="" />\r
\r
<div id="light">\r
<!-- Will be filled with divs -->\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#apply}" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#apply}" />\r
\r
<div id="preview"></div>\r
\r
-(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,extend=tinymce.extend,each=tinymce.each,Cookie=tinymce.util.Cookie,lastExtID,explode=tinymce.explode;tinymce.ThemeManager.requireLangPack('advanced');tinymce.create('tinymce.themes.AdvancedTheme',{sizes:[8,10,12,14,18,24,36],controls:{bold:['bold_desc','Bold'],italic:['italic_desc','Italic'],underline:['underline_desc','Underline'],strikethrough:['striketrough_desc','Strikethrough'],justifyleft:['justifyleft_desc','JustifyLeft'],justifycenter:['justifycenter_desc','JustifyCenter'],justifyright:['justifyright_desc','JustifyRight'],justifyfull:['justifyfull_desc','JustifyFull'],bullist:['bullist_desc','InsertUnorderedList'],numlist:['numlist_desc','InsertOrderedList'],outdent:['outdent_desc','Outdent'],indent:['indent_desc','Indent'],cut:['cut_desc','Cut'],copy:['copy_desc','Copy'],paste:['paste_desc','Paste'],undo:['undo_desc','Undo'],redo:['redo_desc','Redo'],link:['link_desc','mceLink'],unlink:['unlink_desc','unlink'],image:['image_desc','mceImage'],cleanup:['cleanup_desc','mceCleanup'],help:['help_desc','mceHelp'],code:['code_desc','mceCodeEditor'],hr:['hr_desc','InsertHorizontalRule'],removeformat:['removeformat_desc','RemoveFormat'],sub:['sub_desc','subscript'],sup:['sup_desc','superscript'],forecolor:['forecolor_desc','ForeColor'],forecolorpicker:['forecolor_desc','mceForeColor'],backcolor:['backcolor_desc','HiliteColor'],backcolorpicker:['backcolor_desc','mceBackColor'],charmap:['charmap_desc','mceCharMap'],visualaid:['visualaid_desc','mceToggleVisualAid'],anchor:['anchor_desc','mceInsertAnchor'],newdocument:['newdocument_desc','mceNewDocument'],blockquote:['blockquote_desc','mceBlockQuote']},stateControls:['bold','italic','underline','strikethrough','bullist','numlist','justifyleft','justifycenter','justifyright','justifyfull','sub','sup','blockquote'],init:function(ed,url){var t=this,s,v,o;t.editor=ed;t.url=url;t.onResolveName=new tinymce.util.Dispatcher(this);t.settings=s=extend({theme_advanced_path:true,theme_advanced_toolbar_location:'bottom',theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",readonly:ed.settings.readonly},ed.settings);if(!s.font_size_style_values)s.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt";if(tinymce.is(s.theme_advanced_font_sizes,'string')){s.font_size_style_values=tinymce.explode(s.font_size_style_values);s.font_size_classes=tinymce.explode(s.font_size_classes||'');o={};ed.settings.theme_advanced_font_sizes=s.theme_advanced_font_sizes;each(ed.getParam('theme_advanced_font_sizes','','hash'),function(v,k){var cl;if(k==v&&v>=1&&v<=7){k=v+' ('+t.sizes[v-1]+'pt)';if(ed.settings.convert_fonts_to_spans){cl=s.font_size_classes[v-1];v=s.font_size_style_values[v-1]||(t.sizes[v-1]+'pt');}}if(/\s*\./.test(v))cl=v.replace(/\./g,'');o[k]=cl?{'class':cl}:{fontSize:v};});s.theme_advanced_font_sizes=o;}if((v=s.theme_advanced_path_location)&&v!='none')s.theme_advanced_statusbar_location=s.theme_advanced_path_location;if(s.theme_advanced_statusbar_location=='none')s.theme_advanced_statusbar_location=0;ed.onInit.add(function(){ed.onNodeChange.add(t._nodeChanged,t);if(ed.settings.content_css!==false)ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/"+ed.settings.skin+"/content.css"));});ed.onSetProgressState.add(function(ed,b,ti){var co,id=ed.id,tb;if(b){t.progressTimer=setTimeout(function(){co=ed.getContainer();co=co.insertBefore(DOM.create('DIV',{style:'position:relative'}),co.firstChild);tb=DOM.get(ed.id+'_tbl');DOM.add(co,'div',{id:id+'_blocker','class':'mceBlocker',style:{width:tb.clientWidth+2,height:tb.clientHeight+2}});DOM.add(co,'div',{id:id+'_progress','class':'mceProgress',style:{left:tb.clientWidth/ 2, top : tb.clientHeight /2}});},ti||0);}else{DOM.remove(id+'_blocker');DOM.remove(id+'_progress');clearTimeout(t.progressTimer);}});DOM.loadCSS(s.editor_css?ed.documentBaseURI.toAbsolute(s.editor_css):url+"/skins/"+ed.settings.skin+"/ui.css");if(s.skin_variant)DOM.loadCSS(url+"/skins/"+ed.settings.skin+"/ui_"+s.skin_variant+".css");},createControl:function(n,cf){var cd,c;if(c=cf.createControl(n))return c;switch(n){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu();}if((cd=this.controls[n]))return cf.createButton(n,{title:"advanced."+cd[0],cmd:cd[1],ui:cd[2],value:cd[3]});},execCommand:function(cmd,ui,val){var f=this['_'+cmd];if(f){f.call(this,ui,val);return true;}return false;},_importClasses:function(e){var ed=this.editor,c=ed.controlManager.get('styleselect');if(c.getLength()==0){each(ed.dom.getClasses(),function(o){c.add(o['class'],o['class']);});}},_createStyleSelect:function(n){var t=this,ed=t.editor,cf=ed.controlManager,c=cf.createListBox('styleselect',{title:'advanced.style_select',onselect:function(v){if(c.selectedValue===v){ed.execCommand('mceSetStyleInfo',0,{command:'removeformat'});c.select();return false;}else ed.execCommand('mceSetCSSClass',0,v);}});if(c){each(ed.getParam('theme_advanced_styles','','hash'),function(v,k){if(v)c.add(t.editor.translate(k),v);});c.onPostRender.add(function(ed,n){if(!c.NativeListBox){Event.add(n.id+'_text','focus',t._importClasses,t);Event.add(n.id+'_text','mousedown',t._importClasses,t);Event.add(n.id+'_open','focus',t._importClasses,t);Event.add(n.id+'_open','mousedown',t._importClasses,t);}else Event.add(n.id,'focus',t._importClasses,t);});}return c;},_createFontSelect:function(){var c,t=this,ed=t.editor;c=ed.controlManager.createListBox('fontselect',{title:'advanced.fontdefault',cmd:'FontName'});if(c){each(ed.getParam('theme_advanced_fonts',t.settings.theme_advanced_fonts,'hash'),function(v,k){c.add(ed.translate(k),v,{style:v.indexOf('dings')==-1?'font-family:'+v:''});});}return c;},_createFontSizeSelect:function(){var t=this,ed=t.editor,c,i=0,cl=[];c=ed.controlManager.createListBox('fontsizeselect',{title:'advanced.font_size',onselect:function(v){if(v.fontSize)ed.execCommand('FontSize',false,v.fontSize);else{each(t.settings.theme_advanced_font_sizes,function(v,k){if(v['class'])cl.push(v['class']);});ed.editorCommands._applyInlineStyle('span',{'class':v['class']},{check_classes:cl});}}});if(c){each(t.settings.theme_advanced_font_sizes,function(v,k){var fz=v.fontSize;if(fz>=1&&fz<=7)fz=t.sizes[parseInt(fz)-1]+'pt';c.add(k,v,{'style':'font-size:'+fz,'class':'mceFontSize'+(i++)+(' '+(v['class']||''))});});}return c;},_createBlockFormats:function(){var c,fmts={p:'advanced.paragraph',address:'advanced.address',pre:'advanced.pre',h1:'advanced.h1',h2:'advanced.h2',h3:'advanced.h3',h4:'advanced.h4',h5:'advanced.h5',h6:'advanced.h6',div:'advanced.div',blockquote:'advanced.blockquote',code:'advanced.code',dt:'advanced.dt',dd:'advanced.dd',samp:'advanced.samp'},t=this;c=t.editor.controlManager.createListBox('formatselect',{title:'advanced.block',cmd:'FormatBlock'});if(c){each(t.editor.getParam('theme_advanced_blockformats',t.settings.theme_advanced_blockformats,'hash'),function(v,k){c.add(t.editor.translate(k!=v?k:fmts[v]),v,{'class':'mce_formatPreview mce_'+v});});}return c;},_createForeColorMenu:function(){var c,t=this,s=t.settings,o={},v;if(s.theme_advanced_more_colors){o.more_colors_func=function(){t._mceColorPicker(0,{color:c.value,func:function(co){c.setColor(co);}});};}if(v=s.theme_advanced_text_colors)o.colors=v;if(s.theme_advanced_default_foreground_color)o.default_color=s.theme_advanced_default_foreground_color;o.title='advanced.forecolor_desc';o.cmd='ForeColor';o.scope=this;c=t.editor.controlManager.createColorSplitButton('forecolor',o);return c;},_createBackColorMenu:function(){var c,t=this,s=t.settings,o={},v;if(s.theme_advanced_more_colors){o.more_colors_func=function(){t._mceColorPicker(0,{color:c.value,func:function(co){c.setColor(co);}});};}if(v=s.theme_advanced_background_colors)o.colors=v;if(s.theme_advanced_default_background_color)o.default_color=s.theme_advanced_default_background_color;o.title='advanced.backcolor_desc';o.cmd='HiliteColor';o.scope=this;c=t.editor.controlManager.createColorSplitButton('backcolor',o);return c;},renderUI:function(o){var n,ic,tb,t=this,ed=t.editor,s=t.settings,sc,p,nl;n=p=DOM.create('span',{id:ed.id+'_parent','class':'mceEditor '+ed.settings.skin+'Skin'+(s.skin_variant?' '+ed.settings.skin+'Skin'+t._ufirst(s.skin_variant):'')});if(!DOM.boxModel)n=DOM.add(n,'div',{'class':'mceOldBoxModel'});n=sc=DOM.add(n,'table',{id:ed.id+'_tbl','class':'mceLayout',cellSpacing:0,cellPadding:0});n=tb=DOM.add(n,'tbody');switch((s.theme_advanced_layout_manager||'').toLowerCase()){case"rowlayout":ic=t._rowLayout(s,tb,o);break;case"customlayout":ic=ed.execCallback("theme_advanced_custom_layout",s,tb,o,p);break;default:ic=t._simpleLayout(s,tb,o,p);}n=o.targetNode;nl=DOM.stdMode?sc.getElementsByTagName('tr'):sc.rows;DOM.addClass(nl[0],'mceFirst');DOM.addClass(nl[nl.length-1],'mceLast');each(DOM.select('tr',tb),function(n){DOM.addClass(n.firstChild,'mceFirst');DOM.addClass(n.childNodes[n.childNodes.length-1],'mceLast');});if(DOM.get(s.theme_advanced_toolbar_container))DOM.get(s.theme_advanced_toolbar_container).appendChild(p);else DOM.insertAfter(p,n);Event.add(ed.id+'_path_row','click',function(e){e=e.target;if(e.nodeName=='A'){t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/,'$1'));return Event.cancel(e);}});if(!ed.getParam('accessibility_focus')||ed.getParam('tab_focus'))Event.add(DOM.add(p,'a',{href:'#'},'<!-- IE -->'),'focus',function(){tinyMCE.get(ed.id).focus();});if(s.theme_advanced_toolbar_location=='external')o.deltaHeight=0;t.deltaHeight=o.deltaHeight;o.targetNode=null;return{iframeContainer:ic,editorContainer:ed.id+'_parent',sizeContainer:sc,deltaHeight:o.deltaHeight};},getInfo:function(){return{longname:'Advanced theme',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',version:tinymce.majorVersion+"."+tinymce.minorVersion}},resizeBy:function(dw,dh){var e=DOM.get(this.editor.id+'_tbl');this.resizeTo(e.clientWidth+dw,e.clientHeight+dh);},resizeTo:function(w,h){var ed=this.editor,s=ed.settings,e=DOM.get(ed.id+'_tbl'),ifr=DOM.get(ed.id+'_ifr'),dh;w=Math.max(s.theme_advanced_resizing_min_width||100,w);h=Math.max(s.theme_advanced_resizing_min_height||100,h);w=Math.min(s.theme_advanced_resizing_max_width||0xFFFF,w);h=Math.min(s.theme_advanced_resizing_max_height||0xFFFF,h);dh=e.clientHeight-ifr.clientHeight;DOM.setStyle(ifr,'height',h-dh);DOM.setStyles(e,{width:w,height:h});},destroy:function(){var id=this.editor.id;Event.clear(id+'_resize');Event.clear(id+'_path_row');Event.clear(id+'_external_close');},_simpleLayout:function(s,tb,o,p){var t=this,ed=t.editor,lo=s.theme_advanced_toolbar_location,sl=s.theme_advanced_statusbar_location,n,ic,etb,c;if(s.readonly){n=DOM.add(tb,'tr');n=ic=DOM.add(n,'td',{'class':'mceIframeContainer'});return ic;}if(lo=='top')t._addToolbars(tb,o);if(lo=='external'){n=c=DOM.create('div',{style:'position:relative'});n=DOM.add(n,'div',{id:ed.id+'_external','class':'mceExternalToolbar'});DOM.add(n,'a',{id:ed.id+'_external_close',href:'javascript:;','class':'mceExternalClose'});n=DOM.add(n,'table',{id:ed.id+'_tblext',cellSpacing:0,cellPadding:0});etb=DOM.add(n,'tbody');if(p.firstChild.className=='mceOldBoxModel')p.firstChild.appendChild(c);else p.insertBefore(c,p.firstChild);t._addToolbars(etb,o);ed.onMouseUp.add(function(){var e=DOM.get(ed.id+'_external');DOM.show(e);DOM.hide(lastExtID);var f=Event.add(ed.id+'_external_close','click',function(){DOM.hide(ed.id+'_external');Event.remove(ed.id+'_external_close','click',f);});DOM.show(e);DOM.setStyle(e,'top',0-DOM.getRect(ed.id+'_tblext').h-1);DOM.hide(e);DOM.show(e);e.style.filter='';lastExtID=ed.id+'_external';e=null;});}if(sl=='top')t._addStatusBar(tb,o);if(!s.theme_advanced_toolbar_container){n=DOM.add(tb,'tr');n=ic=DOM.add(n,'td',{'class':'mceIframeContainer'});}if(lo=='bottom')t._addToolbars(tb,o);if(sl=='bottom')t._addStatusBar(tb,o);return ic;},_rowLayout:function(s,tb,o){var t=this,ed=t.editor,dc,da,cf=ed.controlManager,n,ic,to,a;dc=s.theme_advanced_containers_default_class||'';da=s.theme_advanced_containers_default_align||'center';each(explode(s.theme_advanced_containers||''),function(c,i){var v=s['theme_advanced_container_'+c]||'';switch(v.toLowerCase()){case'mceeditor':n=DOM.add(tb,'tr');n=ic=DOM.add(n,'td',{'class':'mceIframeContainer'});break;case'mceelementpath':t._addStatusBar(tb,o);break;default:a=(s['theme_advanced_container_'+c+'_align']||da).toLowerCase();a='mce'+t._ufirst(a);n=DOM.add(DOM.add(tb,'tr'),'td',{'class':'mceToolbar '+(s['theme_advanced_container_'+c+'_class']||dc)+' '+a||da});to=cf.createToolbar("toolbar"+i);t._addControls(v,to);DOM.setHTML(n,to.renderHTML());o.deltaHeight-=s.theme_advanced_row_height;}});return ic;},_addControls:function(v,tb){var t=this,s=t.settings,di,cf=t.editor.controlManager;if(s.theme_advanced_disable&&!t._disabled){di={};each(explode(s.theme_advanced_disable),function(v){di[v]=1;});t._disabled=di;}else di=t._disabled;each(explode(v),function(n){var c;if(di&&di[n])return;if(n=='tablecontrols'){each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(n){n=t.createControl(n,cf);if(n)tb.add(n);});return;}c=t.createControl(n,cf);if(c)tb.add(c);});},_addToolbars:function(c,o){var t=this,i,tb,ed=t.editor,s=t.settings,v,cf=ed.controlManager,di,n,h=[],a;a=s.theme_advanced_toolbar_align.toLowerCase();a='mce'+t._ufirst(a);n=DOM.add(DOM.add(c,'tr'),'td',{'class':'mceToolbar '+a});if(!ed.getParam('accessibility_focus')||ed.getParam('tab_focus'))h.push(DOM.createHTML('a',{href:'#',onfocus:'tinyMCE.get(\''+ed.id+'\').focus();'},'<!-- IE -->'));h.push(DOM.createHTML('a',{href:'#',accesskey:'q',title:ed.getLang("advanced.toolbar_focus")},'<!-- IE -->'));for(i=1;(v=s['theme_advanced_buttons'+i]);i++){tb=cf.createToolbar("toolbar"+i,{'class':'mceToolbarRow'+i});if(s['theme_advanced_buttons'+i+'_add'])v+=','+s['theme_advanced_buttons'+i+'_add'];if(s['theme_advanced_buttons'+i+'_add_before'])v=s['theme_advanced_buttons'+i+'_add_before']+','+v;t._addControls(v,tb);h.push(tb.renderHTML());o.deltaHeight-=s.theme_advanced_row_height;}h.push(DOM.createHTML('a',{href:'#',accesskey:'z',title:ed.getLang("advanced.toolbar_focus"),onfocus:'tinyMCE.getInstanceById(\''+ed.id+'\').focus();'},'<!-- IE -->'));DOM.setHTML(n,h.join(''));},_addStatusBar:function(tb,o){var n,t=this,ed=t.editor,s=t.settings,r,mf,me,td;n=DOM.add(tb,'tr');n=td=DOM.add(n,'td',{'class':'mceStatusbar'});n=DOM.add(n,'div',{id:ed.id+'_path_row'},s.theme_advanced_path?ed.translate('advanced.path')+': ':' ');DOM.add(n,'a',{href:'#',accesskey:'x'});if(s.theme_advanced_resizing&&!tinymce.isOldWebKit){DOM.add(td,'a',{id:ed.id+'_resize',href:'javascript:;',onclick:"return false;",'class':'mceResize'});if(s.theme_advanced_resizing_use_cookie){ed.onPostRender.add(function(){var o=Cookie.getHash("TinyMCE_"+ed.id+"_size"),c=DOM.get(ed.id+'_tbl');if(!o)return;if(s.theme_advanced_resize_horizontal)c.style.width=Math.max(10,o.cw)+'px';c.style.height=Math.max(10,o.ch)+'px';DOM.get(ed.id+'_ifr').style.height=Math.max(10,parseInt(o.ch)+t.deltaHeight)+'px';});}ed.onPostRender.add(function(){Event.add(ed.id+'_resize','mousedown',function(e){var c,p,w,h,n,pa;c=DOM.get(ed.id+'_tbl');w=c.clientWidth;h=c.clientHeight;miw=s.theme_advanced_resizing_min_width||100;mih=s.theme_advanced_resizing_min_height||100;maw=s.theme_advanced_resizing_max_width||0xFFFF;mah=s.theme_advanced_resizing_max_height||0xFFFF;p=DOM.add(DOM.get(ed.id+'_parent'),'div',{'class':'mcePlaceHolder'});DOM.setStyles(p,{width:w,height:h});DOM.hide(c);DOM.show(p);r={x:e.screenX,y:e.screenY,w:w,h:h,dx:null,dy:null};mf=Event.add(DOM.doc,'mousemove',function(e){var w,h;r.dx=e.screenX-r.x;r.dy=e.screenY-r.y;w=Math.max(miw,r.w+r.dx);h=Math.max(mih,r.h+r.dy);w=Math.min(maw,w);h=Math.min(mah,h);if(s.theme_advanced_resize_horizontal)p.style.width=w+'px';p.style.height=h+'px';return Event.cancel(e);});me=Event.add(DOM.doc,'mouseup',function(e){var ifr;Event.remove(DOM.doc,'mousemove',mf);Event.remove(DOM.doc,'mouseup',me);c.style.display='';DOM.remove(p);if(r.dx===null)return;ifr=DOM.get(ed.id+'_ifr');if(s.theme_advanced_resize_horizontal)c.style.width=Math.max(10,r.w+r.dx)+'px';c.style.height=Math.max(10,r.h+r.dy)+'px';ifr.style.height=Math.max(10,ifr.clientHeight+r.dy)+'px';if(s.theme_advanced_resizing_use_cookie){Cookie.setHash("TinyMCE_"+ed.id+"_size",{cw:r.w+r.dx,ch:r.h+r.dy});}});return Event.cancel(e);});});}o.deltaHeight-=21;n=tb=null;},_nodeChanged:function(ed,cm,n,co){var t=this,p,de=0,v,c,s=t.settings,cl,fz,fn;if(s.readonly)return;tinymce.each(t.stateControls,function(c){cm.setActive(c,ed.queryCommandState(t.controls[c][1]));});cm.setActive('visualaid',ed.hasVisual);cm.setDisabled('undo',!ed.undoManager.hasUndo()&&!ed.typing);cm.setDisabled('redo',!ed.undoManager.hasRedo());cm.setDisabled('outdent',!ed.queryCommandState('Outdent'));p=DOM.getParent(n,'A');if(c=cm.get('link')){if(!p||!p.name){c.setDisabled(!p&&co);c.setActive(!!p);}}if(c=cm.get('unlink')){c.setDisabled(!p&&co);c.setActive(!!p&&!p.name);}if(c=cm.get('anchor')){c.setActive(!!p&&p.name);if(tinymce.isWebKit){p=DOM.getParent(n,'IMG');c.setActive(!!p&&DOM.getAttrib(p,'mce_name')=='a');}}p=DOM.getParent(n,'IMG');if(c=cm.get('image'))c.setActive(!!p&&n.className.indexOf('mceItem')==-1);if(c=cm.get('styleselect')){if(n.className){t._importClasses();c.select(n.className);}else c.select();}if(c=cm.get('formatselect')){p=DOM.getParent(n,DOM.isBlock);if(p)c.select(p.nodeName.toLowerCase());}if(ed.settings.convert_fonts_to_spans){ed.dom.getParent(n,function(n){if(n.nodeName==='SPAN'){if(!cl&&n.className)cl=n.className;if(!fz&&n.style.fontSize)fz=n.style.fontSize;if(!fn&&n.style.fontFamily)fn=n.style.fontFamily.replace(/[\"\']+/g,'').replace(/^([^,]+).*/,'$1').toLowerCase();}return false;});if(c=cm.get('fontselect')){c.select(function(v){return v.replace(/^([^,]+).*/,'$1').toLowerCase()==fn;});}if(c=cm.get('fontsizeselect')){c.select(function(v){if(v.fontSize&&v.fontSize===fz)return true;if(v['class']&&v['class']===cl)return true;});}}else{if(c=cm.get('fontselect'))c.select(ed.queryCommandValue('FontName'));if(c=cm.get('fontsizeselect')){v=ed.queryCommandValue('FontSize');c.select(function(iv){return iv.fontSize==v;});}}if(s.theme_advanced_path&&s.theme_advanced_statusbar_location){p=DOM.get(ed.id+'_path')||DOM.add(ed.id+'_path_row','span',{id:ed.id+'_path'});DOM.setHTML(p,'');ed.dom.getParent(n,function(n){var na=n.nodeName.toLowerCase(),u,pi,ti='';if(n.nodeType!=1||n.nodeName==='BR'||(DOM.hasClass(n,'mceItemHidden')||DOM.hasClass(n,'mceItemRemoved')))return;if(v=DOM.getAttrib(n,'mce_name'))na=v;if(tinymce.isIE&&n.scopeName!=='HTML')na=n.scopeName+':'+na;na=na.replace(/mce\:/g,'');switch(na){case'b':na='strong';break;case'i':na='em';break;case'img':if(v=DOM.getAttrib(n,'src'))ti+='src: '+v+' ';break;case'a':if(v=DOM.getAttrib(n,'name')){ti+='name: '+v+' ';na+='#'+v;}if(v=DOM.getAttrib(n,'href'))ti+='href: '+v+' ';break;case'font':if(s.convert_fonts_to_spans)na='span';if(v=DOM.getAttrib(n,'face'))ti+='font: '+v+' ';if(v=DOM.getAttrib(n,'size'))ti+='size: '+v+' ';if(v=DOM.getAttrib(n,'color'))ti+='color: '+v+' ';break;case'span':if(v=DOM.getAttrib(n,'style'))ti+='style: '+v+' ';break;}if(v=DOM.getAttrib(n,'id'))ti+='id: '+v+' ';if(v=n.className){v=v.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g,'');if(v&&v.indexOf('mceItem')==-1){ti+='class: '+v+' ';if(DOM.isBlock(n)||na=='img'||na=='span')na+='.'+v;}}na=na.replace(/(html:)/g,'');na={name:na,node:n,title:ti};t.onResolveName.dispatch(t,na);ti=na.title;na=na.name;pi=DOM.create('a',{'href':"javascript:;",onmousedown:"return false;",title:ti,'class':'mcePath_'+(de++)},na);if(p.hasChildNodes()){p.insertBefore(DOM.doc.createTextNode(' \u00bb '),p.firstChild);p.insertBefore(pi,p.firstChild);}else p.appendChild(pi);},ed.getBody());}},_sel:function(v){this.editor.execCommand('mceSelectNodeDepth',false,v);},_mceInsertAnchor:function(ui,v){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/anchor.htm',width:320+parseInt(ed.getLang('advanced.anchor_delta_width',0)),height:90+parseInt(ed.getLang('advanced.anchor_delta_height',0)),inline:true},{theme_url:this.url});},_mceCharMap:function(){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/charmap.htm',width:550+parseInt(ed.getLang('advanced.charmap_delta_width',0)),height:250+parseInt(ed.getLang('advanced.charmap_delta_height',0)),inline:true},{theme_url:this.url});},_mceHelp:function(){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/about.htm',width:480,height:380,inline:true},{theme_url:this.url});},_mceColorPicker:function(u,v){var ed=this.editor;v=v||{};ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/color_picker.htm',width:375+parseInt(ed.getLang('advanced.colorpicker_delta_width',0)),height:250+parseInt(ed.getLang('advanced.colorpicker_delta_height',0)),close_previous:false,inline:true},{input_color:v.color,func:v.func,theme_url:this.url});},_mceCodeEditor:function(ui,val){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/source_editor.htm',width:parseInt(ed.getParam("theme_advanced_source_editor_width",720)),height:parseInt(ed.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url});},_mceImage:function(ui,val){var ed=this.editor;if(ed.dom.getAttrib(ed.selection.getNode(),'class').indexOf('mceItem')!=-1)return;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/image.htm',width:355+parseInt(ed.getLang('advanced.image_delta_width',0)),height:275+parseInt(ed.getLang('advanced.image_delta_height',0)),inline:true},{theme_url:this.url});},_mceLink:function(ui,val){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/link.htm',width:310+parseInt(ed.getLang('advanced.link_delta_width',0)),height:200+parseInt(ed.getLang('advanced.link_delta_height',0)),inline:true},{theme_url:this.url});},_mceNewDocument:function(){var ed=this.editor;ed.windowManager.confirm('advanced.newdocument',function(s){if(s)ed.execCommand('mceSetContent',false,'');});},_mceForeColor:function(){var t=this;this._mceColorPicker(0,{color:t.fgColor,func:function(co){t.fgColor=co;t.editor.execCommand('ForeColor',false,co);}});},_mceBackColor:function(){var t=this;this._mceColorPicker(0,{color:t.bgColor,func:function(co){t.bgColor=co;t.editor.execCommand('HiliteColor',false,co);}});},_ufirst:function(s){return s.substring(0,1).toUpperCase()+s.substring(1);}});tinymce.ThemeManager.add('advanced',tinymce.themes.AdvancedTheme);}());
\ No newline at end of file
+(function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l)}if(j.settings.content_css!==false){j.dom.loadCSS(j.baseURI.toAbsolute(k+"/skins/"+j.settings.skin+"/content.css"))}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(k){var i=this.editor,j=i.controlManager.get("styleselect");if(j.getLength()==0){f(i.dom.getClasses(),function(n,l){var m="style_"+l;i.formatter.register(m,{inline:"span",attributes:{"class":n["class"]},selector:"*"});j.add(n["class"],m)})}},_createStyleSelect:function(m){var k=this,i=k.editor,j=i.controlManager,l;l=j.createListBox("styleselect",{title:"advanced.style_select",onselect:function(o){var p,n=[];f(l.items,function(q){n.push(q.value)});i.focus();i.undoManager.add();p=i.formatter.matchAll(n);if(!o||p[0]==o){i.formatter.remove(p[0])}else{i.formatter.apply(o)}i.undoManager.add();i.nodeChanged();return false}});i.onInit.add(function(){var o=0,n=i.getParam("style_formats");if(n){f(n,function(p){var q,r=0;f(p,function(){r++});if(r>1){q=p.name=p.name||"style_"+(o++);i.formatter.register(q,p);l.add(p.title,q)}else{l.add(p.title)}})}else{f(i.getParam("theme_advanced_styles","","hash"),function(r,q){var p;if(r){p="style_"+(o++);i.formatter.register(p,{inline:"span",classes:r,selector:"*"});l.add(k.editor.translate(q),p)}})}});if(l.getLength()==0){l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",k._importClasses,k);b.add(p.id+"_text","mousedown",k._importClasses,k);b.add(p.id+"_open","focus",k._importClasses,k);b.add(p.id+"_open","mousedown",k._importClasses,k)}else{b.add(p.id,"focus",k._importClasses,k)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(l){var m=k.items[k.selectedIndex];if(!l&&m){i.execCommand("FontName",false,m.value);return}i.execCommand("FontName",false,l);k.select(function(n){return l==n});return false}});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){var o=n.items[n.selectedIndex];if(!i&&o){o=o.value;if(o["class"]){k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}return}if(i["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:i["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,i.fontSize)}n.select(function(p){return i==p});return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",cmd:"FormatBlock"});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;m=j=d.create("span",{id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=d.stdMode?u.getElementsByTagName("tr"):u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_tbl");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,m,k){var j=this.editor,l=this.settings,n=d.get(j.id+"_tbl"),o=d.get(j.id+"_ifr");i=Math.max(l.theme_advanced_resizing_min_width||100,i);m=Math.max(l.theme_advanced_resizing_min_height||100,m);i=Math.min(l.theme_advanced_resizing_max_width||65535,i);m=Math.min(l.theme_advanced_resizing_max_height||65535,m);d.setStyle(n,"height","");d.setStyle(o,"height",m);if(l.theme_advanced_resize_horizontal){d.setStyle(n,"width","");d.setStyle(o,"width",i);if(i<n.clientWidth){i=n.clientWidth;d.setStyle(o,"width",n.clientWidth)}}if(k&&l.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+j.id+"_size",{cw:i,ch:m})}},destroy:function(){var i=this.editor.id;b.clear(i+"_resize");b.clear(i+"_path_row");b.clear(i+"_external_close")},_simpleLayout:function(y,r,k,i){var x=this,u=x.editor,v=y.theme_advanced_toolbar_location,m=y.theme_advanced_statusbar_location,l,j,q,w;if(y.readonly){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});return j}if(v=="top"){x._addToolbars(r,k)}if(v=="external"){l=w=d.create("div",{style:"position:relative"});l=d.add(l,"div",{id:u.id+"_external","class":"mceExternalToolbar"});d.add(l,"a",{id:u.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});l=d.add(l,"table",{id:u.id+"_tblext",cellSpacing:0,cellPadding:0});q=d.add(l,"tbody");if(i.firstChild.className=="mceOldBoxModel"){i.firstChild.appendChild(w)}else{i.insertBefore(w,i.firstChild)}x._addToolbars(q,k);u.onMouseUp.add(function(){var o=d.get(u.id+"_external");d.show(o);d.hide(g);var n=b.add(u.id+"_external_close","click",function(){d.hide(u.id+"_external");b.remove(u.id+"_external_close","click",n)});d.show(o);d.setStyle(o,"top",0-d.getRect(u.id+"_tblext").h-1);d.hide(o);d.show(o);o.style.filter="";g=u.id+"_external";o=null})}if(m=="top"){x._addStatusBar(r,k)}if(!y.theme_advanced_toolbar_container){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"})}if(v=="bottom"){x._addToolbars(r,k)}if(m=="bottom"){x._addStatusBar(r,k)}return j},_rowLayout:function(w,m,k){var v=this,p=v.editor,u,x,i=p.controlManager,l,j,r,q;u=w.theme_advanced_containers_default_class||"";x=w.theme_advanced_containers_default_align||"center";f(c(w.theme_advanced_containers||""),function(s,o){var n=w["theme_advanced_container_"+s]||"";switch(n.toLowerCase()){case"mceeditor":l=d.add(m,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":v._addStatusBar(m,k);break;default:q=(w["theme_advanced_container_"+s+"_align"]||x).toLowerCase();q="mce"+v._ufirst(q);l=d.add(d.add(m,"tr"),"td",{"class":"mceToolbar "+(w["theme_advanced_container_"+s+"_class"]||u)+" "+q||x});r=i.createToolbar("toolbar"+o);v._addControls(n,r);d.setHTML(l,r.renderHTML());k.deltaHeight-=w.theme_advanced_row_height}});return j},_addControls:function(j,i){var k=this,l=k.settings,m,n=k.editor.controlManager;if(l.theme_advanced_disable&&!k._disabled){m={};f(c(l.theme_advanced_disable),function(o){m[o]=1});k._disabled=m}else{m=k._disabled}f(c(j),function(p){var o;if(m&&m[p]){return}if(p=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(q){q=k.createControl(q,n);if(q){i.add(q)}});return}o=k.createControl(p,n);if(o){i.add(o)}})},_addToolbars:function(w,k){var z=this,p,m,r=z.editor,A=z.settings,y,j=r.controlManager,u,l,q=[],x;x=A.theme_advanced_toolbar_align.toLowerCase();x="mce"+z._ufirst(x);l=d.add(d.add(w,"tr"),"td",{"class":"mceToolbar "+x});if(!r.getParam("accessibility_focus")){q.push(d.createHTML("a",{href:"#",onfocus:"tinyMCE.get('"+r.id+"').focus();"},"<!-- IE -->"))}q.push(d.createHTML("a",{href:"#",accesskey:"q",title:r.getLang("advanced.toolbar_focus")},"<!-- IE -->"));for(p=1;(y=A["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(A["theme_advanced_buttons"+p+"_add"]){y+=","+A["theme_advanced_buttons"+p+"_add"]}if(A["theme_advanced_buttons"+p+"_add_before"]){y=A["theme_advanced_buttons"+p+"_add_before"]+","+y}z._addControls(y,m);q.push(m.renderHTML());k.deltaHeight-=A.theme_advanced_row_height}q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row"},w.theme_advanced_path?p.translate("advanced.path")+": ":" ");d.add(k,"a",{href:"#",accesskey:"x"});if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}v.resizeTo(n.cw,n.ch)})}p.onPostRender.add(function(){b.add(p.id+"_resize","click",function(n){n.preventDefault()});b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){G.preventDefault();n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E)}function B(G){b.remove(d.doc,"mousemove",t);b.remove(p.getDoc(),"mousemove",r);b.remove(d.doc,"mouseup",s);b.remove(p.getDoc(),"mouseup",o);n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E,true)}D.preventDefault();C=D.screenX;z=D.screenY;x=d.get(v.editor.id+"_ifr");A=n=x.clientWidth;F=E=x.clientHeight;t=b.add(d.doc,"mousemove",y);r=b.add(p.getDoc(),"mousemove",y);s=b.add(d.doc,"mouseup",B);o=b.add(p.getDoc(),"mouseup",B)})})}j.deltaHeight-=21;k=m=null},_nodeChanged:function(r,z,l,x,j){var C=this,i,y=0,B,u,D=C.settings,A,k,w,m,q;e.each(C.stateControls,function(n){z.setActive(n,r.queryCommandState(C.controls[n][1]))});function o(p){var s,n=j.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s<n.length;s++){if(t(n[s])){return n[s]}}}z.setActive("visualaid",r.hasVisual);z.setDisabled("undo",!r.undoManager.hasUndo()&&!r.typing);z.setDisabled("redo",!r.undoManager.hasRedo());z.setDisabled("outdent",!r.queryCommandState("Outdent"));i=o("A");if(u=z.get("link")){if(!i||!i.name){u.setDisabled(!i&&x);u.setActive(!!i)}}if(u=z.get("unlink")){u.setDisabled(!i&&x);u.setActive(!!i&&!i.name)}if(u=z.get("anchor")){u.setActive(!!i&&i.name)}i=o("IMG");if(u=z.get("image")){u.setActive(!!i&&l.className.indexOf("mceItem")==-1)}if(u=z.get("styleselect")){C._importClasses();m=[];f(u.items,function(n){m.push(n.value)});q=r.formatter.matchAll(m);u.select(q[0])}if(u=z.get("formatselect")){i=o(d.isBlock);if(i){u.select(i.nodeName.toLowerCase())}}o(function(p){if(p.nodeName==="SPAN"){if(!A&&p.className){A=p.className}if(!k&&p.style.fontSize){k=p.style.fontSize}if(!w&&p.style.fontFamily){w=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}}return false});if(u=z.get("fontselect")){u.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==w})}if(u=z.get("fontsizeselect")){if(D.theme_advanced_runtime_fontsize&&!k&&!A){k=r.dom.getStyle(l,"fontSize",true)}u.select(function(n){if(n.fontSize&&n.fontSize===k){return true}if(n["class"]&&n["class"]===A){return true}})}if(D.theme_advanced_path&&D.theme_advanced_statusbar_location){i=d.get(r.id+"_path")||d.add(r.id+"_path_row","span",{id:r.id+"_path"});d.setHTML(i,"");o(function(E){var p=E.nodeName.toLowerCase(),s,v,t="";if(E.nodeType!=1||E.nodeName==="BR"||(d.hasClass(E,"mceItemHidden")||d.hasClass(E,"mceItemRemoved"))){return}if(B=d.getAttrib(E,"mce_name")){p=B}if(e.isIE&&E.scopeName!=="HTML"){p=E.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(B=d.getAttrib(E,"src")){t+="src: "+B+" "}break;case"a":if(B=d.getAttrib(E,"name")){t+="name: "+B+" ";p+="#"+B}if(B=d.getAttrib(E,"href")){t+="href: "+B+" "}break;case"font":if(B=d.getAttrib(E,"face")){t+="font: "+B+" "}if(B=d.getAttrib(E,"size")){t+="size: "+B+" "}if(B=d.getAttrib(E,"color")){t+="color: "+B+" "}break;case"span":if(B=d.getAttrib(E,"style")){t+="style: "+B+" "}break}if(B=d.getAttrib(E,"id")){t+="id: "+B+" "}if(B=E.className){B=B.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(B){t+="class: "+B+" ";if(d.isBlock(E)||p=="img"||p=="span"){p+="."+B}}}p=p.replace(/(html:)/g,"");p={name:p,node:E,title:t};C.onResolveName.dispatch(C,p);t=p.title;p=p.name;v=d.create("a",{href:"javascript:;",onmousedown:"return false;",title:t,"class":"mcePath_"+(y++)},p);if(i.hasChildNodes()){i.insertBefore(d.doc.createTextNode(" \u00bb "),i.firstChild);i.insertBefore(v,i.firstChild)}else{i.appendChild(v)}},r.getBody())}},_sel:function(i){this.editor.execCommand("mceSelectNodeDepth",false,i)},_mceInsertAnchor:function(k,j){var i=this.editor;i.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(i.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(i.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var i=this.editor;i.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(i.getLang("advanced.charmap_delta_width",0)),height:250+parseInt(i.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var i=this.editor;i.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(k,j){var i=this.editor;j=j||{};i.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(i.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(i.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:j.color,func:j.func,theme_url:this.url})},_mceCodeEditor:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(i.getParam("theme_advanced_source_editor_width",720)),height:parseInt(i.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(j,k){var i=this.editor;if(i.dom.getAttrib(i.selection.getNode(),"class").indexOf("mceItem")!=-1){return}i.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(i.getLang("advanced.image_delta_width",0)),height:275+parseInt(i.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(i.getLang("advanced.link_delta_width",0)),height:200+parseInt(i.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var i=this.editor;i.windowManager.confirm("advanced.newdocument",function(j){if(j){i.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var i=this;this._mceColorPicker(0,{color:i.fgColor,func:function(j){i.fgColor=j;i.editor.execCommand("ForeColor",false,j)}})},_mceBackColor:function(){var i=this;this._mceColorPicker(0,{color:i.bgColor,func:function(j){i.bgColor=j;i.editor.execCommand("HiliteColor",false,j)}})},_ufirst:function(i){return i.substring(0,1).toUpperCase()+i.substring(1)}});e.ThemeManager.add("advanced",e.themes.AdvancedTheme)}(tinymce));
\ No newline at end of file
/**\r
- * $Id: editor_template_src.js 960 2008-11-12 18:30:32Z spocke $\r
+ * editor_template_src.js\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
-(function() {\r
+(function(tinymce) {\r
var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;\r
\r
// Tell it to load theme specific language pack(s)\r
\r
if (k == v && v >= 1 && v <= 7) {\r
k = v + ' (' + t.sizes[v - 1] + 'pt)';\r
-\r
- if (ed.settings.convert_fonts_to_spans) {\r
- cl = s.font_size_classes[v - 1];\r
- v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt');\r
- }\r
+ cl = s.font_size_classes[v - 1];\r
+ v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt');\r
}\r
\r
- if (/\s*\./.test(v))\r
+ if (/^\s*\./.test(v))\r
cl = v.replace(/\./g, '');\r
\r
o[k] = cl ? {'class' : cl} : {fontSize : v};\r
\r
// Init editor\r
ed.onInit.add(function() {\r
- ed.onNodeChange.add(t._nodeChanged, t);\r
+ if (!ed.settings.readonly)\r
+ ed.onNodeChange.add(t._nodeChanged, t);\r
\r
if (ed.settings.content_css !== false)\r
- ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/" + ed.settings.skin + "/content.css"));\r
+ ed.dom.loadCSS(ed.baseURI.toAbsolute(url + "/skins/" + ed.settings.skin + "/content.css"));\r
});\r
\r
ed.onSetProgressState.add(function(ed, b, ti) {\r
},\r
\r
_importClasses : function(e) {\r
- var ed = this.editor, c = ed.controlManager.get('styleselect');\r
+ var ed = this.editor, ctrl = ed.controlManager.get('styleselect');\r
+\r
+ if (ctrl.getLength() == 0) {\r
+ each(ed.dom.getClasses(), function(o, idx) {\r
+ var name = 'style_' + idx;\r
\r
- if (c.getLength() == 0) {\r
- each(ed.dom.getClasses(), function(o) {\r
- c.add(o['class'], o['class']);\r
+ ed.formatter.register(name, {\r
+ inline : 'span',\r
+ attributes : {'class' : o['class']},\r
+ selector : '*'\r
+ });\r
+\r
+ ctrl.add(o['class'], name);\r
});\r
}\r
},\r
\r
_createStyleSelect : function(n) {\r
- var t = this, ed = t.editor, cf = ed.controlManager, c = cf.createListBox('styleselect', {\r
+ var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl;\r
+\r
+ // Setup style select box\r
+ ctrl = ctrlMan.createListBox('styleselect', {\r
title : 'advanced.style_select',\r
- onselect : function(v) {\r
- if (c.selectedValue === v) {\r
- ed.execCommand('mceSetStyleInfo', 0, {command : 'removeformat'});\r
- c.select();\r
- return false;\r
- } else\r
- ed.execCommand('mceSetCSSClass', 0, v);\r
+ onselect : function(name) {\r
+ var matches, formatNames = [];\r
+\r
+ each(ctrl.items, function(item) {\r
+ formatNames.push(item.value);\r
+ });\r
+\r
+ ed.focus();\r
+ ed.undoManager.add();\r
+\r
+ // Toggle off the current format\r
+ matches = ed.formatter.matchAll(formatNames);\r
+ if (!name || matches[0] == name)\r
+ ed.formatter.remove(matches[0]);\r
+ else\r
+ ed.formatter.apply(name);\r
+\r
+ ed.undoManager.add();\r
+ ed.nodeChanged();\r
+\r
+ return false; // No auto select\r
}\r
});\r
\r
- if (c) {\r
- each(ed.getParam('theme_advanced_styles', '', 'hash'), function(v, k) {\r
- if (v)\r
- c.add(t.editor.translate(k), v);\r
- });\r
+ // Handle specified format\r
+ ed.onInit.add(function() {\r
+ var counter = 0, formats = ed.getParam('style_formats');\r
+\r
+ if (formats) {\r
+ each(formats, function(fmt) {\r
+ var name, keys = 0;\r
+\r
+ each(fmt, function() {keys++;});\r
+\r
+ if (keys > 1) {\r
+ name = fmt.name = fmt.name || 'style_' + (counter++);\r
+ ed.formatter.register(name, fmt);\r
+ ctrl.add(fmt.title, name);\r
+ } else\r
+ ctrl.add(fmt.title);\r
+ });\r
+ } else {\r
+ each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) {\r
+ var name;\r
+\r
+ if (val) {\r
+ name = 'style_' + (counter++);\r
+\r
+ ed.formatter.register(name, {\r
+ inline : 'span',\r
+ classes : val,\r
+ selector : '*'\r
+ });\r
+\r
+ ctrl.add(t.editor.translate(key), name);\r
+ }\r
+ });\r
+ }\r
+ });\r
\r
- c.onPostRender.add(function(ed, n) {\r
- if (!c.NativeListBox) {\r
+ // Auto import classes if the ctrl box is empty\r
+ if (ctrl.getLength() == 0) {\r
+ ctrl.onPostRender.add(function(ed, n) {\r
+ if (!ctrl.NativeListBox) {\r
Event.add(n.id + '_text', 'focus', t._importClasses, t);\r
Event.add(n.id + '_text', 'mousedown', t._importClasses, t);\r
Event.add(n.id + '_open', 'focus', t._importClasses, t);\r
});\r
}\r
\r
- return c;\r
+ return ctrl;\r
},\r
\r
_createFontSelect : function() {\r
var c, t = this, ed = t.editor;\r
\r
- c = ed.controlManager.createListBox('fontselect', {title : 'advanced.fontdefault', cmd : 'FontName'});\r
+ c = ed.controlManager.createListBox('fontselect', {\r
+ title : 'advanced.fontdefault',\r
+ onselect : function(v) {\r
+ var cur = c.items[c.selectedIndex];\r
+\r
+ if (!v && cur) {\r
+ ed.execCommand('FontName', false, cur.value);\r
+ return;\r
+ }\r
+\r
+ ed.execCommand('FontName', false, v);\r
+\r
+ // Fake selection, execCommand will fire a nodeChange and update the selection\r
+ c.select(function(sv) {\r
+ return v == sv;\r
+ });\r
+\r
+ return false; // No auto select\r
+ }\r
+ });\r
+\r
if (c) {\r
each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) {\r
c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''});\r
var t = this, ed = t.editor, c, i = 0, cl = [];\r
\r
c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) {\r
- if (v.fontSize)\r
- ed.execCommand('FontSize', false, v.fontSize);\r
- else {\r
- each(t.settings.theme_advanced_font_sizes, function(v, k) {\r
- if (v['class'])\r
- cl.push(v['class']);\r
- });\r
+ var cur = c.items[c.selectedIndex];\r
+\r
+ if (!v && cur) {\r
+ cur = cur.value;\r
\r
- ed.editorCommands._applyInlineStyle('span', {'class' : v['class']}, {check_classes : cl});\r
+ if (cur['class']) {\r
+ ed.formatter.toggle('fontsize_class', {value : cur['class']});\r
+ ed.undoManager.add();\r
+ ed.nodeChanged();\r
+ } else {\r
+ ed.execCommand('FontSize', false, cur.fontSize);\r
+ }\r
+\r
+ return;\r
}\r
+\r
+ if (v['class']) {\r
+ ed.focus();\r
+ ed.undoManager.add();\r
+ ed.formatter.toggle('fontsize_class', {value : v['class']});\r
+ ed.undoManager.add();\r
+ ed.nodeChanged();\r
+ } else\r
+ ed.execCommand('FontSize', false, v.fontSize);\r
+\r
+ // Fake selection, execCommand will fire a nodeChange and update the selection\r
+ c.select(function(sv) {\r
+ return v == sv;\r
+ });\r
+\r
+ return false; // No auto select\r
}});\r
\r
if (c) {\r
}\r
*/\r
\r
- if (!ed.getParam('accessibility_focus') || ed.getParam('tab_focus'))\r
+ if (!ed.getParam('accessibility_focus'))\r
Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();});\r
\r
if (s.theme_advanced_toolbar_location == 'external')\r
this.resizeTo(e.clientWidth + dw, e.clientHeight + dh);\r
},\r
\r
- resizeTo : function(w, h) {\r
- var ed = this.editor, s = ed.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'), dh;\r
+ resizeTo : function(w, h, store) {\r
+ var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr');\r
\r
// Boundery fix box\r
w = Math.max(s.theme_advanced_resizing_min_width || 100, w);\r
w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w);\r
h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h);\r
\r
- // Calc difference between iframe and container\r
- dh = e.clientHeight - ifr.clientHeight;\r
-\r
// Resize iframe and container\r
- DOM.setStyle(ifr, 'height', h - dh);\r
- DOM.setStyles(e, {width : w, height : h});\r
+ DOM.setStyle(e, 'height', '');\r
+ DOM.setStyle(ifr, 'height', h);\r
+\r
+ if (s.theme_advanced_resize_horizontal) {\r
+ DOM.setStyle(e, 'width', '');\r
+ DOM.setStyle(ifr, 'width', w);\r
+\r
+ // Make sure that the size is never smaller than the over all ui\r
+ if (w < e.clientWidth) {\r
+ w = e.clientWidth;\r
+ DOM.setStyle(ifr, 'width', e.clientWidth);\r
+ }\r
+ }\r
+\r
+ // Store away the size\r
+ if (store && s.theme_advanced_resizing_use_cookie) {\r
+ Cookie.setHash("TinyMCE_" + ed.id + "_size", {\r
+ cw : w,\r
+ ch : h\r
+ });\r
+ }\r
},\r
\r
destroy : function() {\r
\r
n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a});\r
\r
- if (!ed.getParam('accessibility_focus') || ed.getParam('tab_focus'))\r
+ if (!ed.getParam('accessibility_focus'))\r
h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));\r
\r
h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '<!-- IE -->'));\r
\r
n = DOM.add(tb, 'tr');\r
n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'});\r
- n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : ' ');\r
+ n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : ' ');\r
DOM.add(n, 'a', {href : '#', accesskey : 'x'});\r
\r
- if (s.theme_advanced_resizing && !tinymce.isOldWebKit) {\r
+ if (s.theme_advanced_resizing) {\r
DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'});\r
\r
if (s.theme_advanced_resizing_use_cookie) {\r
if (!o)\r
return;\r
\r
- if (s.theme_advanced_resize_horizontal)\r
- c.style.width = Math.max(10, o.cw) + 'px';\r
-\r
- c.style.height = Math.max(10, o.ch) + 'px';\r
- DOM.get(ed.id + '_ifr').style.height = Math.max(10, parseInt(o.ch) + t.deltaHeight) + 'px';\r
+ t.resizeTo(o.cw, o.ch);\r
});\r
}\r
\r
ed.onPostRender.add(function() {\r
- Event.add(ed.id + '_resize', 'mousedown', function(e) {\r
- var c, p, w, h, n, pa;\r
-\r
- // Measure container\r
- c = DOM.get(ed.id + '_tbl');\r
- w = c.clientWidth;\r
- h = c.clientHeight;\r
-\r
- miw = s.theme_advanced_resizing_min_width || 100;\r
- mih = s.theme_advanced_resizing_min_height || 100;\r
- maw = s.theme_advanced_resizing_max_width || 0xFFFF;\r
- mah = s.theme_advanced_resizing_max_height || 0xFFFF;\r
-\r
- // Setup placeholder\r
- p = DOM.add(DOM.get(ed.id + '_parent'), 'div', {'class' : 'mcePlaceHolder'});\r
- DOM.setStyles(p, {width : w, height : h});\r
-\r
- // Replace with placeholder\r
- DOM.hide(c);\r
- DOM.show(p);\r
-\r
- // Create internal resize obj\r
- r = {\r
- x : e.screenX,\r
- y : e.screenY,\r
- w : w,\r
- h : h,\r
- dx : null,\r
- dy : null\r
- };\r
-\r
- // Start listening\r
- mf = Event.add(DOM.doc, 'mousemove', function(e) {\r
- var w, h;\r
-\r
- // Calc delta values\r
- r.dx = e.screenX - r.x;\r
- r.dy = e.screenY - r.y;\r
-\r
- // Boundery fix box\r
- w = Math.max(miw, r.w + r.dx);\r
- h = Math.max(mih, r.h + r.dy);\r
- w = Math.min(maw, w);\r
- h = Math.min(mah, h);\r
+ Event.add(ed.id + '_resize', 'click', function(e) {\r
+ e.preventDefault();\r
+ });\r
\r
- // Resize placeholder\r
- if (s.theme_advanced_resize_horizontal)\r
- p.style.width = w + 'px';\r
+ Event.add(ed.id + '_resize', 'mousedown', function(e) {\r
+ var mouseMoveHandler1, mouseMoveHandler2,\r
+ mouseUpHandler1, mouseUpHandler2,\r
+ startX, startY, startWidth, startHeight, width, height, ifrElm;\r
\r
- p.style.height = h + 'px';\r
+ function resizeOnMove(e) {\r
+ e.preventDefault();\r
\r
- return Event.cancel(e);\r
- });\r
+ width = startWidth + (e.screenX - startX);\r
+ height = startHeight + (e.screenY - startY);\r
\r
- me = Event.add(DOM.doc, 'mouseup', function(e) {\r
- var ifr;\r
+ t.resizeTo(width, height);\r
+ };\r
\r
+ function endResize(e) {\r
// Stop listening\r
- Event.remove(DOM.doc, 'mousemove', mf);\r
- Event.remove(DOM.doc, 'mouseup', me);\r
-\r
- c.style.display = '';\r
- DOM.remove(p);\r
-\r
- if (r.dx === null)\r
- return;\r
-\r
- ifr = DOM.get(ed.id + '_ifr');\r
-\r
- if (s.theme_advanced_resize_horizontal)\r
- c.style.width = Math.max(10, r.w + r.dx) + 'px';\r
+ Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1);\r
+ Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2);\r
+ Event.remove(DOM.doc, 'mouseup', mouseUpHandler1);\r
+ Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2);\r
+\r
+ width = startWidth + (e.screenX - startX);\r
+ height = startHeight + (e.screenY - startY);\r
+ t.resizeTo(width, height, true);\r
+ };\r
\r
- c.style.height = Math.max(10, r.h + r.dy) + 'px';\r
- ifr.style.height = Math.max(10, ifr.clientHeight + r.dy) + 'px';\r
+ e.preventDefault();\r
\r
- if (s.theme_advanced_resizing_use_cookie) {\r
- Cookie.setHash("TinyMCE_" + ed.id + "_size", {\r
- cw : r.w + r.dx,\r
- ch : r.h + r.dy\r
- });\r
- }\r
- });\r
+ // Get the current rect size\r
+ startX = e.screenX;\r
+ startY = e.screenY;\r
+ ifrElm = DOM.get(t.editor.id + '_ifr');\r
+ startWidth = width = ifrElm.clientWidth;\r
+ startHeight = height = ifrElm.clientHeight;\r
\r
- return Event.cancel(e);\r
+ // Register envent handlers\r
+ mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove);\r
+ mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove);\r
+ mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize);\r
+ mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize);\r
});\r
});\r
}\r
n = tb = null;\r
},\r
\r
- _nodeChanged : function(ed, cm, n, co) {\r
- var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn;\r
-\r
- if (s.readonly)\r
- return;\r
+ _nodeChanged : function(ed, cm, n, co, ob) {\r
+ var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, formatNames, matches;\r
\r
tinymce.each(t.stateControls, function(c) {\r
cm.setActive(c, ed.queryCommandState(t.controls[c][1]));\r
});\r
\r
+ function getParent(name) {\r
+ var i, parents = ob.parents, func = name;\r
+\r
+ if (typeof(name) == 'string') {\r
+ func = function(node) {\r
+ return node.nodeName == name;\r
+ };\r
+ }\r
+\r
+ for (i = 0; i < parents.length; i++) {\r
+ if (func(parents[i]))\r
+ return parents[i];\r
+ }\r
+ };\r
+\r
cm.setActive('visualaid', ed.hasVisual);\r
cm.setDisabled('undo', !ed.undoManager.hasUndo() && !ed.typing);\r
cm.setDisabled('redo', !ed.undoManager.hasRedo());\r
cm.setDisabled('outdent', !ed.queryCommandState('Outdent'));\r
\r
- p = DOM.getParent(n, 'A');\r
+ p = getParent('A');\r
if (c = cm.get('link')) {\r
if (!p || !p.name) {\r
c.setDisabled(!p && co);\r
\r
if (c = cm.get('anchor')) {\r
c.setActive(!!p && p.name);\r
-\r
- if (tinymce.isWebKit) {\r
- p = DOM.getParent(n, 'IMG');\r
- c.setActive(!!p && DOM.getAttrib(p, 'mce_name') == 'a');\r
- }\r
}\r
\r
- p = DOM.getParent(n, 'IMG');\r
+ p = getParent('IMG');\r
if (c = cm.get('image'))\r
c.setActive(!!p && n.className.indexOf('mceItem') == -1);\r
\r
if (c = cm.get('styleselect')) {\r
- if (n.className) {\r
- t._importClasses();\r
- c.select(n.className);\r
- } else\r
- c.select();\r
+ t._importClasses();\r
+\r
+ formatNames = [];\r
+ each(c.items, function(item) {\r
+ formatNames.push(item.value);\r
+ });\r
+\r
+ matches = ed.formatter.matchAll(formatNames);\r
+ c.select(matches[0]);\r
}\r
\r
if (c = cm.get('formatselect')) {\r
- p = DOM.getParent(n, DOM.isBlock);\r
+ p = getParent(DOM.isBlock);\r
\r
if (p)\r
c.select(p.nodeName.toLowerCase());\r
}\r
\r
- if (ed.settings.convert_fonts_to_spans) {\r
- ed.dom.getParent(n, function(n) {\r
- if (n.nodeName === 'SPAN') {\r
- if (!cl && n.className)\r
- cl = n.className;\r
+ // Find out current fontSize, fontFamily and fontClass\r
+ getParent(function(n) {\r
+ if (n.nodeName === 'SPAN') {\r
+ if (!cl && n.className)\r
+ cl = n.className;\r
\r
- if (!fz && n.style.fontSize)\r
- fz = n.style.fontSize;\r
+ if (!fz && n.style.fontSize)\r
+ fz = n.style.fontSize;\r
\r
- if (!fn && n.style.fontFamily)\r
- fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase();\r
- }\r
+ if (!fn && n.style.fontFamily)\r
+ fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase();\r
+ }\r
\r
- return false;\r
+ return false;\r
+ });\r
+\r
+ if (c = cm.get('fontselect')) {\r
+ c.select(function(v) {\r
+ return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn;\r
});\r
+ }\r
\r
- if (c = cm.get('fontselect')) {\r
- c.select(function(v) {\r
- return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn;\r
- });\r
- }\r
+ // Select font size\r
+ if (c = cm.get('fontsizeselect')) {\r
+ // Use computed style\r
+ if (s.theme_advanced_runtime_fontsize && !fz && !cl)\r
+ fz = ed.dom.getStyle(n, 'fontSize', true);\r
\r
- if (c = cm.get('fontsizeselect')) {\r
- c.select(function(v) {\r
- if (v.fontSize && v.fontSize === fz)\r
- return true;\r
+ c.select(function(v) {\r
+ if (v.fontSize && v.fontSize === fz)\r
+ return true;\r
\r
- if (v['class'] && v['class'] === cl)\r
- return true;\r
- });\r
- }\r
- } else {\r
- if (c = cm.get('fontselect'))\r
- c.select(ed.queryCommandValue('FontName'));\r
-\r
- if (c = cm.get('fontsizeselect')) {\r
- v = ed.queryCommandValue('FontSize');\r
- c.select(function(iv) {\r
- return iv.fontSize == v;\r
- });\r
- }\r
+ if (v['class'] && v['class'] === cl)\r
+ return true;\r
+ });\r
}\r
\r
if (s.theme_advanced_path && s.theme_advanced_statusbar_location) {\r
p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'});\r
DOM.setHTML(p, '');\r
\r
- ed.dom.getParent(n, function(n) {\r
+ getParent(function(n) {\r
var na = n.nodeName.toLowerCase(), u, pi, ti = '';\r
\r
+ /*if (n.getAttribute('_mce_bogus'))\r
+ return;\r
+*/\r
// Ignore non element and hidden elements\r
if (n.nodeType != 1 || n.nodeName === 'BR' || (DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved')))\r
return;\r
break;\r
\r
case 'font':\r
- if (s.convert_fonts_to_spans)\r
- na = 'span';\r
-\r
if (v = DOM.getAttrib(n, 'face'))\r
ti += 'font: ' + v + ' ';\r
\r
ti += 'id: ' + v + ' ';\r
\r
if (v = n.className) {\r
- v = v.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g, '');\r
+ v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, '')\r
\r
- if (v && v.indexOf('mceItem') == -1) {\r
+ if (v) {\r
ti += 'class: ' + v + ' ';\r
\r
if (DOM.isBlock(n) || na == 'img' || na == 'span')\r
var ed = this.editor;\r
\r
ed.windowManager.open({\r
- url : tinymce.baseURL + '/themes/advanced/anchor.htm',\r
+ url : this.url + '/anchor.htm',\r
width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)),\r
height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)),\r
inline : true\r
var ed = this.editor;\r
\r
ed.windowManager.open({\r
- url : tinymce.baseURL + '/themes/advanced/charmap.htm',\r
+ url : this.url + '/charmap.htm',\r
width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)),\r
height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)),\r
inline : true\r
var ed = this.editor;\r
\r
ed.windowManager.open({\r
- url : tinymce.baseURL + '/themes/advanced/about.htm',\r
+ url : this.url + '/about.htm',\r
width : 480,\r
height : 380,\r
inline : true\r
v = v || {};\r
\r
ed.windowManager.open({\r
- url : tinymce.baseURL + '/themes/advanced/color_picker.htm',\r
+ url : this.url + '/color_picker.htm',\r
width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)),\r
height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)),\r
close_previous : false,\r
var ed = this.editor;\r
\r
ed.windowManager.open({\r
- url : tinymce.baseURL + '/themes/advanced/source_editor.htm',\r
+ url : this.url + '/source_editor.htm',\r
width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)),\r
height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)),\r
inline : true,\r
return;\r
\r
ed.windowManager.open({\r
- url : tinymce.baseURL + '/themes/advanced/image.htm',\r
+ url : this.url + '/image.htm',\r
width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)),\r
height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)),\r
inline : true\r
var ed = this.editor;\r
\r
ed.windowManager.open({\r
- url : tinymce.baseURL + '/themes/advanced/link.htm',\r
+ url : this.url + '/link.htm',\r
width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)),\r
height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)),\r
inline : true\r
});\r
\r
tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme);\r
-}());
\ No newline at end of file
+}(tinymce));
\ No newline at end of file
<script type="text/javascript" src="../../utils/mctabs.js"></script>\r
<script type="text/javascript" src="../../utils/form_utils.js"></script>\r
<script type="text/javascript" src="js/image.js"></script>\r
- <base target="_self" />\r
</head>\r
<body id="image" style="display: none">\r
<form onsubmit="ImageDialog.update();return false;" action="#">\r
<div id="general_panel" class="panel current">\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td nowrap="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>\r
+ <td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>\r
<td><table border="0" cellspacing="0" cellpadding="0">\r
<tr>\r
<td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>\r
<td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>\r
+ <td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>\r
<td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>\r
+ <td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>\r
<td><select id="align" name="align" onchange="ImageDialog.updateStyle();">\r
<option value="">{#not_set}</option>\r
<option value="baseline">{#advanced_dlg.image_align_baseline}</option>\r
</select></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>\r
+ <td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>\r
<td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />\r
x\r
<input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>\r
+ <td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>\r
<td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>\r
+ <td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>\r
<td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>\r
+ <td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>\r
<td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
</tr>\r
</table>\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#insert}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
var action, elm, f = document.forms[0];\r
\r
this.editor = ed;\r
- elm = ed.dom.getParent(ed.selection.getNode(), 'A,IMG');\r
+ elm = ed.dom.getParent(ed.selection.getNode(), 'A');\r
v = ed.dom.getAttrib(elm, 'name');\r
\r
if (v) {\r
},\r
\r
update : function() {\r
- var ed = this.editor;\r
- \r
+ var ed = this.editor, elm, name = document.forms[0].anchorName.value;\r
+\r
tinyMCEPopup.restoreSelection();\r
\r
if (this.action != 'update')\r
ed.selection.collapse(1);\r
\r
- // Webkit acts weird if empty inline element is inserted so we need to use a image instead\r
- if (tinymce.isWebKit)\r
- ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('img', {mce_name : 'a', name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}));\r
+ elm = ed.dom.getParent(ed.selection.getNode(), 'A');\r
+ if (elm)\r
+ elm.name = name;\r
else\r
- ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}, ''));\r
+ ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, ''));\r
\r
tinyMCEPopup.close();\r
}\r
+/**\r
+ * charmap.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
tinyMCEPopup.requireLangPack();\r
\r
var charmap = [\r
}\r
\r
// Merge\r
- st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st));\r
- this.styleVal = dom.serializeStyle(st);\r
+ st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img');\r
+ this.styleVal = dom.serializeStyle(st, 'img');\r
}\r
},\r
\r
\r
// Create new anchor elements\r
if (e == null) {\r
+ ed.getDoc().execCommand("unlink", false, null);\r
tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});\r
\r
tinymce.each(ed.dom.select("a"), function(n) {\r
ed.dom.setAttribs(e, {\r
href : f.href.value,\r
title : f.linktitle.value,\r
- target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : null,\r
- 'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : null\r
+ target : f.target_list ? getSelectValue(f, "target_list") : null,\r
+ 'class' : f.class_list ? getSelectValue(f, "class_list") : null\r
});\r
}\r
});\r
ed.dom.setAttribs(e, {\r
href : f.href.value,\r
title : f.linktitle.value,\r
- target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : null,\r
- 'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : null\r
+ target : f.target_list ? getSelectValue(f, "target_list") : null,\r
+ 'class' : f.class_list ? getSelectValue(f, "class_list") : null\r
});\r
}\r
\r
if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))\r
n.value = 'mailto:' + n.value;\r
\r
- if (/^\s*www./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))\r
+ if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))\r
n.value = 'http://' + n.value;\r
},\r
\r
tinyMCEPopup.onInit.add(onLoadInit);\r
\r
function saveContent() {\r
- tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value);\r
+ tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true});\r
tinyMCEPopup.close();\r
}\r
\r
if (tinymce.isGecko)\r
document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");\r
\r
- document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent();\r
+ document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true});\r
\r
if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {\r
setWrap('soft');\r
setWrap('off');\r
}\r
\r
-var wHeight=0, wWidth=0, owHeight=0, owWidth=0;\r
-\r
function resizeInputs() {\r
- var el = document.getElementById('htmlSource');\r
+ var vp = tinyMCEPopup.dom.getViewPort(window), el;\r
\r
- if (!tinymce.isIE) {\r
- wHeight = self.innerHeight - 65;\r
- wWidth = self.innerWidth - 16;\r
- } else {\r
- wHeight = document.body.clientHeight - 70;\r
- wWidth = document.body.clientWidth - 16;\r
- }\r
+ el = document.getElementById('htmlSource');\r
\r
- el.style.height = Math.abs(wHeight) + 'px';\r
- el.style.width = Math.abs(wWidth) + 'px';\r
+ if (el) {\r
+ el.style.width = (vp.w - 20) + 'px';\r
+ el.style.height = (vp.h - 65) + 'px';\r
+ }\r
}\r
block:"Vorlage",\r
paragraph:"Absatz",\r
div:"Zusammenh\u00E4ngender Bereich",\r
-address:"Addresse",\r
+address:"Adresse",\r
pre:"Rohdaten",\r
h1:"\u00DCberschrift 1",\r
h2:"\u00DCberschrift 2",\r
italic_desc:"Kursiv (Strg+I)",\r
underline_desc:"Unterstrichen (Strg+U)",\r
striketrough_desc:"Durchgestrichen",\r
-justifyleft_desc:"Links ausgerichtet",\r
-justifycenter_desc:"Mittig ausgerichtet",\r
-justifyright_desc:"Rechts ausgerichtet",\r
+justifyleft_desc:"Linksb\u00FCndig",\r
+justifycenter_desc:"Zentriert",\r
+justifyright_desc:"Rechtsb\u00FCndig",\r
justifyfull_desc:"Blocksatz",\r
bullist_desc:"Unsortierte Liste",\r
numlist_desc:"Sortierte Liste",\r
tinyMCE.addI18n('de.advanced_dlg',{\r
about_title:"\u00DCber TinyMCE",\r
-about_general:"\u00DCber\u2026",\r
+about_general:"\u00DCber",\r
about_help:"Hilfe",\r
about_license:"Lizenzbedingungen",\r
about_plugins:"Plugins",\r
image_alt:"Alternativtext",\r
image_list:"Bilderliste",\r
image_border:"Rahmen",\r
-image_dimensions:"Ausma\u00DFe",\r
+image_dimensions:"Abmessungen",\r
image_vspace:"Vertikaler Abstand",\r
image_hspace:"Horizontaler Abstand",\r
image_align:"Ausrichtung",\r
link_target_same:"Im selben Fenster \u00F6ffnen",\r
link_target_blank:"Neues Fenster \u00F6ffnen",\r
link_titlefield:"Titel",\r
-link_is_email:"Bei der Adresse scheint es sich um eine E-Mail-Adresse zu handeln. Wollen Sie das dazu ben\u00F6tigte mailto: voranstellen?",\r
-link_is_external:"Bei der Adresse scheint es sich um einen externen Link zu handeln. M\u00F6chten Sie, dass zur korrekten Verlinkung ein http:// vorangestellt wird?",\r
+link_is_email:"Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00F6chten Sie das dazu ben\u00F6tigte \"mailto:\" voranstellen?",\r
+link_is_external:"Diese Adresse scheint ein externer Link zu sein. M\u00F6chten Sie das dazu ben\u00F6tigte \"http://\" voranstellen?",\r
link_list:"Linkliste"\r
});
\ No newline at end of file
hr_desc:"Insertar regla horizontal",\r
removeformat_desc:"Limpiar formato",\r
custom1_desc:"Su descripci\u00F3n personal aqu\u00ED",\r
-forecolor_desc:"Seleccionar color del texto",\r
-backcolor_desc:"Seleccionar color de fondo",\r
+forecolor_desc:"Elegir color del texto",\r
+backcolor_desc:"Elegir color de fondo",\r
charmap_desc:"Insertar caracteres personalizados",\r
visualaid_desc:"Mostrar/ocultar l\u00EDnea de gu\u00EDa/elementos invisibles",\r
anchor_desc:"Insertar/editar ancla",\r
newdocument_desc:"Nuevo documento",\r
help_desc:"Ayuda",\r
blockquote_desc:"Cita",\r
-clipboard_msg:"Copiar/Cortar/Pegar no se encuentra disponible en Mozilla y Firefox.\r\n \u00BFDesea obtener m\u00E1s informaci\u00F3n acerca de este tema?",\r
+clipboard_msg:"Copiar/Cortar/Pegar no se encuentra disponible en Mozilla y Firefox.\n \u00BFQuiere m\u00E1s informaci\u00F3n sobre este tema?",\r
path:"Ruta",\r
-newdocument:" \u00BFEst\u00E1 seguro que desea limpiar todo el contenido?",\r
+newdocument:" \u00BFSeguro que desea limpiar todo el contenido?",\r
toolbar_focus:"Ir a los botones de herramientas - Alt+Q, Ir al editor - Alt-Z, Ir a la ruta del elemento - Alt-X",\r
more_colors:"M\u00E1s colores"\r
});
\ No newline at end of file
anchor_name:"Nombre del ancla",\r
code_title:"Editor del c\u00F3digo fuente HTML",\r
code_wordwrap:"Ajustar al margen",\r
-colorpicker_title:"Seleccionar color",\r
+colorpicker_title:"Elegir color",\r
colorpicker_picker_tab:"Selector",\r
colorpicker_picker_title:"Paleta de color",\r
colorpicker_palette_tab:"Paleta",\r
colorpicker_named_title:"Colores nombrados",\r
colorpicker_color:"Color:",\r
colorpicker_name:"Nombre:",\r
-charmap_title:"Seleccionar caracter personalizado",\r
+charmap_title:"Elegir caracter personalizado",\r
image_title:"Insertar/editar imagen",\r
image_src:"URL de la Imagen",\r
image_alt:"Descripci\u00F3n de la Imagen",\r
--- /dev/null
+tinyMCE.addI18n('et.advanced',{\r
+style_select:"Stiilid",\r
+font_size:"Fondi suurus",\r
+fontdefault:"Font",\r
+block:"Formaat",\r
+paragraph:"Paragraaf",\r
+div:"Div",\r
+address:"Aadress",\r
+pre:"Eelformeeritud",\r
+h1:"Heading 1",\r
+h2:"Heading 2",\r
+h3:"Heading 3",\r
+h4:"Heading 4",\r
+h5:"Heading 5",\r
+h6:"Heading 6",\r
+blockquote:"Plokkviide",\r
+code:"Kood",\r
+samp:"Koodi n\u00E4ide",\r
+dt:"Defineeringu tingimus",\r
+dd:"Defineeringu kirjeldus",\r
+bold_desc:"Rasvane (Ctrl+B)",\r
+italic_desc:"Kursiiv (Ctrl+I)",\r
+underline_desc:"Allajoonitud (Ctrl+U)",\r
+striketrough_desc:"L\u00E4bijoonitud",\r
+justifyleft_desc:"Vasak joondus",\r
+justifycenter_desc:"Keskjoondus",\r
+justifyright_desc:"Parem joondus",\r
+justifyfull_desc:"T\u00E4isjoondus",\r
+bullist_desc:"Ebakorrap\u00E4rane loetelu",\r
+numlist_desc:"Korrap\u00E4rane loetelu",\r
+outdent_desc:"Taanda v\u00E4lja",\r
+indent_desc:"Taanda sisse",\r
+undo_desc:"V\u00F5ta tagasi (Ctrl+Z)",\r
+redo_desc:"Tee uuesti (Ctrl+Y)",\r
+link_desc:"Sisesta/redigeeri link",\r
+unlink_desc:"Eemalda link",\r
+image_desc:"Sisesta/redigeeri pilt",\r
+cleanup_desc:"Puhasta segane kood",\r
+code_desc:"Redigeeri HTML l\u00E4htekoodi",\r
+sub_desc:"Alaindeks",\r
+sup_desc:"\u00DClaindeks",\r
+hr_desc:"Sisesta horisontaalne joonlaud",\r
+removeformat_desc:"Eemalda vormindus",\r
+custom1_desc:"Teie kohandatud kirjeldus siia",\r
+forecolor_desc:"Vali teksti v\u00E4rv",\r
+backcolor_desc:"Vali tausta v\u00E4rv",\r
+charmap_desc:"Sisesta kohandatud kirjam\u00E4rk",\r
+visualaid_desc:"L\u00FClita \u00FCmber juhtjooned/n\u00E4htamatud elemendid",\r
+anchor_desc:"Sisesta/redigeeri ankur",\r
+cut_desc:"L\u00F5ika",\r
+copy_desc:"Kopeeri",\r
+paste_desc:"Kleebi",\r
+image_props_desc:"Pildi kirjeldus",\r
+newdocument_desc:"Uus dokument",\r
+help_desc:"Abi",\r
+blockquote_desc:"Plokkviide",\r
+clipboard_msg:"Kopeeri/L\u00F5ika/Kleebi ei ole Mozillas ja Firefoxis saadaval. Kas soovid rohkem infot selle probleemi kohta?",\r
+path:"Tee",\r
+newdocument:"Oled sa kindel, et tahad kustutada k\u00F5ik sisud?",\r
+toolbar_focus:"H\u00FCppa t\u00F6\u00F6riista nuppudele - Alt+Q, H\u00FCppa redigeerijale - Alt-Z, H\u00FCppa elemendi teele - Alt-X",\r
+more_colors:"Rohkem v\u00E4rve"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('et.advanced_dlg',{\r
+about_title:"Teave TinyMCE kohta",\r
+about_general:"Teave",\r
+about_help:"Abi",\r
+about_license:"Litsents",\r
+about_plugins:"Lisad",\r
+about_plugin:"Lisa",\r
+about_author:"Autor",\r
+about_version:"Versioon",\r
+about_loaded:"Laetud lisad",\r
+anchor_title:"Sisesta/redigeeri ankur",\r
+anchor_name:"Ankru nimi",\r
+code_title:"HTML koodi redaktor",\r
+code_wordwrap:"S\u00F5na pakkimine",\r
+colorpicker_title:"Vali v\u00E4rv",\r
+colorpicker_picker_tab:"Korjaja",\r
+colorpicker_picker_title:"V\u00E4rvi korjaja",\r
+colorpicker_palette_tab:"Palett",\r
+colorpicker_palette_title:"Palett v\u00E4rvid",\r
+colorpicker_named_tab:"Nimetatud",\r
+colorpicker_named_title:"Nimetatud v\u00E4rvid",\r
+colorpicker_color:"V\u00E4rv:",\r
+colorpicker_name:"Nimi:",\r
+charmap_title:"Vali kohandatud t\u00E4hem\u00E4rk",\r
+image_title:"Sisestal/redigeeri pilt",\r
+image_src:"Pildi URL",\r
+image_alt:"Pildi kirjeldus",\r
+image_list:"Pildi loend",\r
+image_border:"Raam",\r
+image_dimensions:"Dimensioonid",\r
+image_vspace:"Vertikaalne vahe",\r
+image_hspace:"Horisontaalne vahe",\r
+image_align:"Reastus",\r
+image_align_baseline:"Kirjajoondus",\r
+image_align_top:"\u00DClemine",\r
+image_align_middle:"Keskmine",\r
+image_align_bottom:"Alumine",\r
+image_align_texttop:"Teksti tipp",\r
+image_align_textbottom:"Teksti p\u00F5hi",\r
+image_align_left:"Vasak",\r
+image_align_right:"Parem",\r
+link_title:"Sisesta/redigeeri link",\r
+link_url:"Link URL",\r
+link_target:"Sihtala",\r
+link_target_same:"Ava link samas aknas",\r
+link_target_blank:"Ava link uues aknas",\r
+link_titlefield:"Tiitel",\r
+link_is_email:"URL, mille te sisestasite, tundub olevat emaili aadress, kas soovite, et lisataks mailto: eesliite?",\r
+link_is_external:"URL, mille sisestasite, tundub olevat v\u00E4line link, kas soovite, et lisataks http:// eesliite?",\r
+link_list:"Lingi loetelu"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.advanced',{\r
+style_select:"Styles",\r
+font_size:"Taille police",\r
+fontdefault:"Police",\r
+block:"Format",\r
+paragraph:"Paragraphe",\r
+div:"Div",\r
+address:"Adresse",\r
+pre:"Pr\u00E9format\u00E9",\r
+h1:"Titre 1",\r
+h2:"Titre 2",\r
+h3:"Titre 3",\r
+h4:"Titre 4",\r
+h5:"Titre 5",\r
+h6:"Titre 6",\r
+blockquote:"Bloc de citation",\r
+code:"Code",\r
+samp:"Exemple de code",\r
+dt:"Terme \u00E0 d\u00E9finir",\r
+dd:"D\u00E9finition du terme",\r
+bold_desc:"Gras (Ctrl+B)",\r
+italic_desc:"Italique (Ctrl+I)",\r
+underline_desc:"Soulign\u00E9 (Ctrl+U)",\r
+striketrough_desc:"Barr\u00E9",\r
+justifyleft_desc:"Align\u00E9 \u00E0 gauche",\r
+justifycenter_desc:"Centr\u00E9",\r
+justifyright_desc:"Align\u00E9 \u00E0 droite",\r
+justifyfull_desc:"Justifi\u00E9",\r
+bullist_desc:"Liste \u00E0 puces",\r
+numlist_desc:"Liste num\u00E9rot\u00E9e",\r
+outdent_desc:"Retirer l'indentation",\r
+indent_desc:"Indenter",\r
+undo_desc:"Annuler (Ctrl+Z)",\r
+redo_desc:"R\u00E9tablir (Ctrl+Y)",\r
+link_desc:"Ins\u00E9rer / \u00E9diter le lien",\r
+unlink_desc:"Supprimer le lien",\r
+image_desc:"Ins\u00E9rer / \u00E9diter l'image",\r
+cleanup_desc:"Nettoyer le code",\r
+code_desc:"\u00C9diter le code source HTML",\r
+sub_desc:"Indice",\r
+sup_desc:"Exposant",\r
+hr_desc:"Ins\u00E9rer un trait horizontal",\r
+removeformat_desc:"Supprimer le formatage",\r
+custom1_desc:"Votre description personnalis\u00E9e ici",\r
+forecolor_desc:"Choisir la couleur du texte",\r
+backcolor_desc:"Choisir la couleur de surlignage",\r
+charmap_desc:"Ins\u00E9rer des caract\u00E8res sp\u00E9ciaux",\r
+visualaid_desc:"Activer / d\u00E9sactiver les guides et les \u00E9l\u00E9ments invisibles",\r
+anchor_desc:"Ins\u00E9rer / \u00E9diter une ancre",\r
+cut_desc:"Couper",\r
+copy_desc:"Copier",\r
+paste_desc:"Coller",\r
+image_props_desc:"Propri\u00E9t\u00E9s de l'image",\r
+newdocument_desc:"Nouveau document",\r
+help_desc:"Aide",\r
+blockquote_desc:"Citation",\r
+clipboard_msg:"Les fonctions Copier/Couper/Coller ne sont pas valables sur Mozilla et Firefox.\nSouhaitez-vous avoir plus d'informations sur ce sujet ?",\r
+path:"Chemin",\r
+newdocument:"\u00CAtes-vous s\u00FBr de vouloir effacer l'int\u00E9gralit\u00E9 du document ?",\r
+toolbar_focus:"Atteindre les boutons de l'\u00E9diteur - Alt+Q, Aller \u00E0 l'\u00E9diteur - Alt-Z, Aller au chemin de l'\u00E9l\u00E9ment - Alt-X",\r
+more_colors:"Plus de couleurs"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.advanced_dlg',{\r
+about_title:"\u00C0 propos de TinyMCE",\r
+about_general:"\u00C0 propos",\r
+about_help:"Aide",\r
+about_license:"Licence",\r
+about_plugins:"Plugins",\r
+about_plugin:"Plugin",\r
+about_author:"Auteur",\r
+about_version:"Version",\r
+about_loaded:"Plugins charg\u00E9s",\r
+anchor_title:"Ins\u00E9rer / \u00E9diter une ancre",\r
+anchor_name:"Nom de l'ancre",\r
+code_title:"\u00C9diteur de source HTML",\r
+code_wordwrap:"Retour \u00E0 la ligne",\r
+colorpicker_title:"Choisir une couleur",\r
+colorpicker_picker_tab:"Nuancier",\r
+colorpicker_picker_title:"Nuancier",\r
+colorpicker_palette_tab:"Palette",\r
+colorpicker_palette_title:"Couleurs de la palette",\r
+colorpicker_named_tab:"Noms",\r
+colorpicker_named_title:"Couleurs nomm\u00E9es",\r
+colorpicker_color:"Couleur :",\r
+colorpicker_name:"Nom :",\r
+charmap_title:"Choisir le caract\u00E8re \u00E0 ins\u00E9rer",\r
+image_title:"Ins\u00E9rer / \u00E9diter une image",\r
+image_src:"URL de l'image",\r
+image_alt:"Description de l'image",\r
+image_list:"Liste d'images",\r
+image_border:"Bordure",\r
+image_dimensions:"Dimensions",\r
+image_vspace:"Espacement vertical",\r
+image_hspace:"Espacement horizontal",\r
+image_align:"Alignement",\r
+image_align_baseline:"Normal",\r
+image_align_top:"En haut",\r
+image_align_middle:"Au milieu",\r
+image_align_bottom:"En bas",\r
+image_align_texttop:"Texte en haut",\r
+image_align_textbottom:"Texte en bas",\r
+image_align_left:"Gauche (flottant)",\r
+image_align_right:"Droite (flottant)",\r
+link_title:"Ins\u00E9rer / \u00E9diter un lien",\r
+link_url:"URL du lien",\r
+link_target:"Cible",\r
+link_target_same:"Ouvrir dans la m\u00EAme fen\u00EAtre",\r
+link_target_blank:"Ouvrir dans une nouvelle fen\u00EAtre",\r
+link_titlefield:"Titre",\r
+link_is_email:"L'URL que vous avez saisie semble \u00EAtre une adresse e-mail, souhaitez-vous ajouter le pr\u00E9fixe \u00AB mailto: \u00BB ?",\r
+link_is_external:"L'URL que vous avez saisie semble \u00EAtre une adresse web externe. Souhaitez-vous ajouter le pr\u00E9fixe \u00AB http:// \u00BB ?",\r
+link_list:"Liste de liens"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.advanced',{\r
+style_select:"St\u00EDlusok",\r
+font_size:"Bet\u0171m\u00E9ret",\r
+fontdefault:"Bet\u0171t\u00EDpus",\r
+block:"Form\u00E1tum",\r
+paragraph:"Bekezd\u00E9s",\r
+div:"Div",\r
+address:"C\u00EDm",\r
+pre:"El\u0151form\u00E1zott",\r
+h1:"C\u00EDmsor 1",\r
+h2:"C\u00EDmsor 2",\r
+h3:"C\u00EDmsor 3",\r
+h4:"C\u00EDmsor 4",\r
+h5:"C\u00EDmsor 5",\r
+h6:"C\u00EDmsor 6",\r
+blockquote:"Id\u00E9zet",\r
+code:"K\u00F3d",\r
+samp:"K\u00F3d minta",\r
+dt:"Defini\u00E1lt kifejez\u00E9s a defin\u00EDci\u00F3s list\u00E1ban",\r
+dd:"Defin\u00EDci\u00F3 a defin\u00EDci\u00F3s list\u00E1ban",\r
+bold_desc:"F\u00E9lk\u00F6v\u00E9r (Ctrl+B)",\r
+italic_desc:"D\u0151lt (Ctrl+I)",\r
+underline_desc:"Al\u00E1h\u00FAzott (Ctrl+U)",\r
+striketrough_desc:"\u00C1th\u00FAzott",\r
+justifyleft_desc:"Balra z\u00E1rt",\r
+justifycenter_desc:"K\u00F6z\u00E9pre z\u00E1rt",\r
+justifyright_desc:"Jobbra z\u00E1rt",\r
+justifyfull_desc:"Sorkiz\u00E1rt",\r
+bullist_desc:"Rendezetlen lista",\r
+numlist_desc:"Rendezett lista",\r
+outdent_desc:"Beh\u00FAz\u00E1s cs\u00F6kkent\u00E9se",\r
+indent_desc:"Beh\u00FAz\u00E1s n\u00F6vel\u00E9se",\r
+undo_desc:"Visszavon\u00E1s (Ctrl+Z)",\r
+redo_desc:"M\u00E9gis v\u00E9grehajt (Ctrl+Y)",\r
+link_desc:"Link besz\u00FAr\u00E1sa/szerkeszt\u00E9se",\r
+unlink_desc:"Link megsz\u00FCntet\u00E9se",\r
+image_desc:"K\u00E9p besz\u00FAr\u00E1sa/szerkeszt\u00E9se",\r
+cleanup_desc:"Rendetlen k\u00F3d takar\u00EDt\u00E1sa",\r
+code_desc:"HTML forr\u00E1s szerkeszt\u00E9se",\r
+sub_desc:"Als\u00F3 index",\r
+sup_desc:"Fels\u0151 index",\r
+hr_desc:"V\u00EDzszintes elv\u00E1laszt\u00F3 besz\u00FAr\u00E1sa",\r
+removeformat_desc:"Form\u00E1z\u00E1s elt\u00E1vol\u00EDt\u00E1sa",\r
+custom1_desc:"Az \u00F6n egyedi le\u00EDr\u00E1sa",\r
+forecolor_desc:"Sz\u00F6vegsz\u00EDn v\u00E1laszt\u00E1sa",\r
+backcolor_desc:"H\u00E1tt\u00E9rsz\u00EDn v\u00E1laszt\u00E1sa",\r
+charmap_desc:"Speci\u00E1lis karakter besz\u00FAr\u00E1sa",\r
+visualaid_desc:"Vezet\u0151vonalak/nem l\u00E1that\u00F3 elemek ki-/bekapcsol\u00E1sa",\r
+anchor_desc:"Horgony besz\u00FAr\u00E1sa/szerkeszt\u00E9se",\r
+cut_desc:"Kiv\u00E1g\u00E1s",\r
+copy_desc:"M\u00E1sol\u00E1s",\r
+paste_desc:"Besz\u00FAr\u00E1s",\r
+image_props_desc:"K\u00E9p tulajdons\u00E1gai",\r
+newdocument_desc:"\u00DAj dokumentum",\r
+help_desc:"Seg\u00EDts\u00E9g",\r
+blockquote_desc:"Id\u00E9zet",\r
+clipboard_msg:"A M\u00E1sol\u00E1s/Kiv\u00E1g\u00E1s/Besz\u00FAr\u00E1s funkci\u00F3k nem \u00E9rhet\u0151ek el Mozilla \u00E9s Firefox alatt. K\u00EDv\u00E1n t\u00F6bbet tudni err\u0151l a t\u00E9m\u00E1r\u00F3l?",\r
+path:"\u00DAtvonal",\r
+newdocument:"Biztosan t\u00F6rli az eddigi tartalmat?",\r
+toolbar_focus:"Eszk\u00F6zgombokra ugr\u00E1s - Alt+Q, Szerkeszt\u0151h\u00F6z ugr\u00E1s - Alt-Z, Elem\u00FAtvonalhoz ugr\u00E1s - Alt-X",\r
+more_colors:"T\u00F6bb sz\u00EDn"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.advanced_dlg',{\r
+about_title:"A TinyMCE-r\u0151l",\r
+about_general:"R\u00F3lunk",\r
+about_help:"Seg\u00EDts\u00E9g",\r
+about_license:"Licenc",\r
+about_plugins:"Pluginok",\r
+about_plugin:"Plugin",\r
+about_author:"Szerz\u0151",\r
+about_version:"Verzi\u00F3",\r
+about_loaded:"Bet\u00F6lt\u00F6tt pluginok",\r
+anchor_title:"Horgony besz\u00FAr\u00E1sa/szerkeszt\u00E9se",\r
+anchor_name:"Horgonyn\u00E9v",\r
+code_title:"HTML forr\u00E1s szerkeszt\u00E9se",\r
+code_wordwrap:"Sz\u00F6veg t\u00F6rdel\u00E9se",\r
+colorpicker_title:"Sz\u00EDnv\u00E1laszt\u00E1s",\r
+colorpicker_picker_tab:"V\u00E1laszt\u00F3",\r
+colorpicker_picker_title:"Sz\u00EDnv\u00E1laszt\u00F3",\r
+colorpicker_palette_tab:"Paletta",\r
+colorpicker_palette_title:"Paletta sz\u00EDnek",\r
+colorpicker_named_tab:"Elnevezettek",\r
+colorpicker_named_title:"Elnevezett sz\u00EDnek",\r
+colorpicker_color:"Sz\u00EDn:",\r
+colorpicker_name:"N\u00E9v:",\r
+charmap_title:"Egyedi karakter v\u00E1laszt\u00E1sa",\r
+image_title:"K\u00E9p besz\u00FAr\u00E1sa/szerkeszt\u00E9se",\r
+image_src:"K\u00E9p URL",\r
+image_alt:"K\u00E9p le\u00EDr\u00E1s",\r
+image_list:"K\u00E9p lista",\r
+image_border:"Keret",\r
+image_dimensions:"M\u00E9retek",\r
+image_vspace:"F\u00FCgg\u0151leges t\u00E1v",\r
+image_hspace:"V\u00EDzszintes t\u00E1v",\r
+image_align:"Igaz\u00EDt\u00E1s",\r
+image_align_baseline:"Alapvonalhoz",\r
+image_align_top:"Fentre",\r
+image_align_middle:"K\u00F6z\u00E9pre",\r
+image_align_bottom:"Lentre",\r
+image_align_texttop:"Sz\u00F6veg tetej\u00E9hez",\r
+image_align_textbottom:"Sz\u00F6veg alj\u00E1hoz",\r
+image_align_left:"Balra",\r
+image_align_right:"Jobbra",\r
+link_title:"Link besz\u00FAr\u00E1sa/szerkeszt\u00E9se",\r
+link_url:"Link URL",\r
+link_target:"Target",\r
+link_target_same:"Link azonos ablakba nyit\u00E1sa",\r
+link_target_blank:"Link \u00FAj ablakba nyit\u00E1sa",\r
+link_titlefield:"C\u00EDm",\r
+link_is_email:"A be\u00EDrt URL e-mail c\u00EDmnek t\u0171nik, k\u00EDv\u00E1nja a sz\u00FCks\u00E9ges mailto:-val kieg\u00E9sz\u00EDteni?",\r
+link_is_external:"A be\u00EDrt URL k\u00FCls\u0151 hivatkoz\u00E1snak t\u0171nik, k\u00EDv\u00E1nja a sz\u00FCks\u00E9ges http://-vel kieg\u00E9sz\u00EDteni?",\r
+link_list:"Link lista"\r
+});
\ No newline at end of file
charmap_title:"Seleziona carattere speciale",\r
image_title:"Inserisci/modifica immagine",\r
image_src:"URL immagine",\r
-image_alt:"Descrizione immagine",\r
+image_alt:"Descrizione",\r
image_list:"Lista immagini",\r
image_border:"Bordo",\r
image_dimensions:"Dimensioni",\r
-image_vspace:"Spaziatura verticale",\r
-image_hspace:"Spaziatura orizzontale",\r
+image_vspace:"Spaziatura vert.",\r
+image_hspace:"Spaziatura orizz.",\r
image_align:"Allineamentot",\r
image_align_baseline:"Alla base",\r
image_align_top:"In alto",\r
image_align_left:"A sinistra",\r
image_align_right:"A destra",\r
link_title:"Inserisci/modifica collegamento",\r
-link_url:"URL collegamento",\r
+link_url:"URL link",\r
link_target:"Target",\r
link_target_same:"Apri link nella stessa finestra",\r
link_target_blank:"Apri link in una nuova finestra",\r
link_titlefield:"Titolo",\r
link_is_email:"L'URL inserito sembra essere un indirizzo email. Aggiungere il necessario prefisso mailto: ?",\r
link_is_external:"L'URL inserito sembra essere un link esterno. Aggiungere il necessario prefisso http:// ?",\r
-link_list:"Lista collegamenti"\r
+link_list:"Lista link"\r
});
\ No newline at end of file
tinyMCE.addI18n('pt.advanced',{\r
style_select:"Estilos",\r
font_size:"Tamanho",\r
-fontdefault:"Fam\u00C3\u00ADlia(Fonte)",\r
-block:"Formata\u00C3\u00A7\u00C3\u00A3o",\r
-paragraph:"Par\u00C3\u00A1grafo",\r
+fontdefault:"Tipo de fonte",\r
+block:"Formata\u00E7\u00E3o",\r
+paragraph:"Par\u00E1grafo",\r
div:"Div",\r
-address:"Endere\u00C3\u00A7o",\r
-pre:"Pr\u00C3\u00A9-formatado",\r
-h1:"Cabe\u00C3\u00A7alho 1",\r
-h2:"Cabe\u00C3\u00A7alho 2",\r
-h3:"Cabe\u00C3\u00A7alho 3",\r
-h4:"Cabe\u00C3\u00A7alho 4",\r
-h5:"Cabe\u00C3\u00A7alho 5",\r
-h6:"Cabe\u00C3\u00A7alho 6",\r
-blockquote:"Cita\u00C3\u00A7\u00C3\u00A3o em bloco",\r
-code:"C\u00C3\u00B3digo",\r
-samp:"Amostra de c\u00C3\u00B3digo",\r
-dt:"Termo de defini\u00C3\u00A7\u00C3\u00A3o",\r
-dd:"Descri\u00C3\u00A7\u00C3\u00A3o de defini\u00C3\u00A7\u00C3\u00A3o",\r
+address:"Endere\u00E7o",\r
+pre:"Pr\u00E9-formatado",\r
+h1:"T\u00EDtulo 1",\r
+h2:"T\u00EDtulo 2",\r
+h3:"T\u00EDtulo 3",\r
+h4:"T\u00EDtulo 4",\r
+h5:"T\u00EDtulo 5",\r
+h6:"T\u00EDtulo 6",\r
+blockquote:"Cita\u00E7\u00E3o em bloco",\r
+code:"C\u00F3digo",\r
+samp:"Amostra de c\u00F3digo",\r
+dt:"Termo da defini\u00E7\u00E3o",\r
+dd:"Descri\u00E7\u00E3o da defini\u00E7\u00E3o",\r
bold_desc:"Negrito (Ctrl+B)",\r
-italic_desc:"It\u00C3\u00A1lico (Ctrl+I)",\r
+italic_desc:"It\u00E1lico (Ctrl+I)",\r
underline_desc:"Sublinhado (Ctrl+U)",\r
striketrough_desc:"Riscado",\r
-justifyleft_desc:"Alinhar \u00C3\u00A0\u00C3\u0082 esquerda",\r
+justifyleft_desc:"Alinhar \u00E0 esquerda",\r
justifycenter_desc:"Centralizar",\r
-justifyright_desc:"Alinhar \u00C3\u00A0\u00C3\u0082 direita",\r
+justifyright_desc:"Alinhar \u00E0 direita",\r
justifyfull_desc:"Justificar",\r
bullist_desc:"Marcadores",\r
-numlist_desc:"Numera\u00C3\u00A7\u00C3\u00A3o",\r
+numlist_desc:"Numera\u00E7\u00E3o",\r
outdent_desc:"Diminuir recuo",\r
indent_desc:"Aumentar recuo",\r
undo_desc:"Desfazer (Ctrl+Z)",\r
link_desc:"Inserir/editar hyperlink",\r
unlink_desc:"Remover hyperlink",\r
image_desc:"Inserir/editar imagem",\r
-cleanup_desc:"Limpar c\u00C3\u00B3digo incorreto",\r
-code_desc:"Editar c\u00C3\u00B3digo fonte",\r
-sub_desc:"Subscrito",\r
-sup_desc:"Superscrito",\r
+cleanup_desc:"Limpar c\u00F3digo incorreto",\r
+code_desc:"Editar c\u00F3digo fonte",\r
+sub_desc:"Inferior \u00E0 linha",\r
+sup_desc:"Superior \u00E0 linha",\r
hr_desc:"Inserir separador horizontal",\r
-removeformat_desc:"Remover formata\u00C3\u00A7\u00C3\u00A3o",\r
-custom1_desc:"Insira aqui a sua descri\u00C3\u00A7\u00C3\u00A3o personalizada",\r
-forecolor_desc:"Selecionar cor do texto",\r
-backcolor_desc:"Selecionar cor de fundo",\r
+removeformat_desc:"Remover formata\u00E7\u00E3o",\r
+custom1_desc:"Insira aqui a sua descri\u00E7\u00E3o personalizada",\r
+forecolor_desc:"Selecionar a cor do texto",\r
+backcolor_desc:"Selecionar a cor de fundo",\r
charmap_desc:"Inserir caracteres especiais",\r
-visualaid_desc:"Alternar guias/elementos invis\u00C3\u00ADveis",\r
-anchor_desc:"Inserir/editar \u00C3\u00A2ncora",\r
-cut_desc:"Cortar",\r
+visualaid_desc:"Alternar guias/elementos invis\u00EDveis",\r
+anchor_desc:"Inserir/editar \u00E2ncora",\r
+cut_desc:"Recortar",\r
copy_desc:"Copiar",\r
paste_desc:"Colar",\r
-image_props_desc:"Propriedades de imagem",\r
+image_props_desc:"Propriedades da imagem",\r
newdocument_desc:"Novo documento",\r
help_desc:"Ajuda",\r
-blockquote_desc:"Cita\u00C3\u00A7\u00C3\u00A3o em bloco",\r
-clipboard_msg:"Copiar/cortar/colar n\u00C3\u00A3o est\u00C3\u00A1 dispon\u00C3\u00ADvel no Mozilla e Firefox. Deseja obter mais informa\u00C3\u00A7\u00C3\u00B5es sobre isso?",\r
-path:"Endere\u00C3\u00A7o",\r
-newdocument:"Tem certeza de que deseja apagar tudo?",\r
-toolbar_focus:"Ir para ferramentas - Alt+Q, Ir para o editor - Alt-Z, Ir para endere\u00C3\u00A7o do elemento - Alt-X",\r
+blockquote_desc:"Cita\u00E7\u00E3o em bloco",\r
+clipboard_msg:"Copiar/recortar/colar n\u00E3o est\u00E1 dispon\u00EDvel no Mozilla e Firefox. Deseja mais informa\u00E7\u00F5es sobre este problema?",\r
+path:"Endere\u00E7o",\r
+newdocument:"Tem a certeza que deseja apagar tudo?",\r
+toolbar_focus:"Ir para as ferramentas - Alt+Q, Ir para o editor - Alt-Z, Ir para o endere\u00E7o do elemento - Alt-X",\r
more_colors:"Mais cores"\r
});
\ No newline at end of file
about_title:"Sobre o TinyMCE",\r
about_general:"Sobre",\r
about_help:"Ajuda",\r
-about_license:"Licen\u00C3\u00A7a",\r
+about_license:"Licen\u00E7a",\r
about_plugins:"Plugins",\r
about_plugin:"Plugin",\r
about_author:"Autor",\r
-about_version:"Vers\u00C3\u00A3o",\r
+about_version:"Vers\u00E3o",\r
about_loaded:"Plugins Instalados",\r
-anchor_title:"Inserir/editar \u00C3\u00A2ncora",\r
-anchor_name:"Nome da \u00C3\u00A2ncora",\r
+anchor_title:"Inserir/editar \u00E2ncora",\r
+anchor_name:"Nome da \u00E2ncora",\r
code_title:"Editor HTML",\r
-code_wordwrap:"Quebra autom\u00C3\u00A1tica de linha",\r
-colorpicker_title:"Seleccione uma cor",\r
+code_wordwrap:"Quebra autom\u00E1tica de linha",\r
+colorpicker_title:"Selecione uma cor",\r
colorpicker_picker_tab:"Editor",\r
colorpicker_picker_title:"Editor de Cores",\r
colorpicker_palette_tab:"Paleta",\r
colorpicker_name:"Nome:",\r
charmap_title:"Selecionar caracteres personalizados",\r
image_title:"Inserir/editar imagem",\r
-image_src:"Endere\u00C3\u00A7o da imagem",\r
-image_alt:"Descri\u00C3\u00A7\u00C3\u00A3o da imagem",\r
+image_src:"Endere\u00E7o da imagem",\r
+image_alt:"Descri\u00E7\u00E3o da imagem",\r
image_list:"Lista de imagens",\r
image_border:"Limites",\r
-image_dimensions:"Dimens\u00C3\u00B5es",\r
-image_vspace:"Espa\u00C3\u00A7o Vertical",\r
-image_hspace:"Espa\u00C3\u00A7o Horizontal",\r
+image_dimensions:"Dimens\u00F5es",\r
+image_vspace:"Espa\u00E7o Vertical",\r
+image_hspace:"Espa\u00E7o Horizontal",\r
image_align:"Alinhamento",\r
image_align_baseline:"Sobre a linha de texto",\r
image_align_top:"Topo",\r
link_target:"Alvo",\r
link_target_same:"Abrir hyperlink na mesma janela",\r
link_target_blank:"Abrir hyperlink em nova janela",\r
-link_titlefield:"T\u00C3\u00ADtulo",\r
-link_is_email:"A URL digitada parece ser um endere\u00C3\u00A7o de e-mail. Deseja acrescentar o (necess\u00C3\u00A1rio) prefixo mailto:?",\r
-link_is_external:"A URL digitada parece conduzir a um link externo. Deseja acrescentar o (necess\u00C3\u00A1rio) prefixo http://?",\r
+link_titlefield:"T\u00EDtulo",\r
+link_is_email:"A URL digitada parece ser um endere\u00E7o de e-mail. Deseja acrescentar o prefixo necess\u00E1rio mailto:?",\r
+link_is_external:"A URL digitada parece conduzir a um link externo. Deseja acrescentar o prefixo necess\u00E1rio http://?",\r
link_list:"Lista de Links"\r
});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('ru.advanced',{\r
+style_select:"\u0421\u0442\u0438\u043B\u044C",\r
+font_size:"\u0420\u0430\u0437\u043C\u0435\u0440",\r
+fontdefault:"\u0428\u0440\u0438\u0444\u0442",\r
+block:"\u0424\u043E\u0440\u043C\u0430\u0442",\r
+paragraph:"\u0410\u0431\u0437\u0430\u0446",\r
+div:"Div",\r
+address:"\u0410\u0434\u0440\u0435\u0441",\r
+pre:"\u041F\u0440\u0435\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439",\r
+h1:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 1",\r
+h2:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 2",\r
+h3:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 3",\r
+h4:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 4",\r
+h5:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 5",\r
+h6:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 6",\r
+blockquote:"\u0426\u0438\u0442\u0430\u0442\u0430",\r
+code:"\u041A\u043E\u0434",\r
+samp:"\u041F\u0440\u0438\u043C\u0435\u0440 \u043A\u043E\u0434\u0430",\r
+dt:"\u0422\u0435\u0440\u043C\u0438\u043D \u0441\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A\u0430",\r
+dd:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0441\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A\u0430",\r
+bold_desc:"\u041F\u043E\u043B\u0443\u0436\u0438\u0440\u043D\u044B\u0439 (Ctrl+B)",\r
+italic_desc:"\u041A\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)",\r
+underline_desc:"\u041F\u043E\u0434\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439 (Ctrl+U)",\r
+striketrough_desc:"\u0417\u0430\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439",\r
+justifyleft_desc:"\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+justifycenter_desc:"\u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443",\r
+justifyright_desc:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+justifyfull_desc:"\u041F\u043E \u0448\u0438\u0440\u0438\u043D\u0435",\r
+bullist_desc:"\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A",\r
+numlist_desc:"\u041D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A",\r
+outdent_desc:"\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F",\r
+indent_desc:"\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F",\r
+undo_desc:"\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C (Ctrl+Z)",\r
+redo_desc:"\u0412\u0435\u0440\u043D\u0443\u0442\u044C (Ctrl+Y)",\r
+link_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C/\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443",\r
+unlink_desc:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443",\r
+image_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C/\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435",\r
+cleanup_desc:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043B\u0438\u0448\u043D\u0438\u0439 \u043A\u043E\u0434",\r
+code_desc:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C HTML \u043A\u043E\u0434",\r
+sub_desc:"\u041F\u043E\u0434\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0439",\r
+sup_desc:"\u041D\u0430\u0434\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0439",\r
+hr_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0447\u0435\u0440\u0442\u0443",\r
+removeformat_desc:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442",\r
+custom1_desc:"\u0421\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0435 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",\r
+forecolor_desc:"\u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430",\r
+backcolor_desc:"\u0426\u0432\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0442\u0435\u043A\u0441\u0442\u0430",\r
+charmap_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0438\u043C\u0432\u043E\u043B",\r
+visualaid_desc:"\u0412\u0441\u0435 \u0437\u043D\u0430\u043A\u0438",\r
+anchor_desc:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C/\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u044F\u043A\u043E\u0440\u044C",\r
+cut_desc:"\u0412\u044B\u0440\u0435\u0437\u0430\u0442\u044C",\r
+copy_desc:"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C",\r
+paste_desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C",\r
+image_props_desc:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F",\r
+newdocument_desc:"\u041D\u043E\u0432\u044B\u0439 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442",\r
+help_desc:"\u041F\u043E\u043C\u043E\u0449\u044C",\r
+blockquote_desc:"\u0426\u0438\u0442\u0430\u0442\u0430",\r
+clipboard_msg:"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435, \u0432\u044B\u0440\u0435\u0437\u043A\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0430 \u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442 \u0432 Firefox.\r\n\u0425\u043E\u0442\u0438\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E?",\r
+path:"\u0422\u0435\u0433\u0438",\r
+newdocument:"\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0432\u0441\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C?",\r
+toolbar_focus:"\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043D\u0430 \u043F\u0430\u043D\u0435\u043B\u044C \u043A\u043D\u043E\u043F\u043E\u043A (Alt+Q). \u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0443 (Alt+Z). \u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0443 \u043F\u0443\u0442\u0438 (Alt+X).",\r
+more_colors:"\u0414\u0440\u0443\u0433\u0438\u0435 \u0446\u0432\u0435\u0442\u0430..."\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('ru.advanced_dlg',{\r
+about_title:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 TinyMCE",\r
+about_general:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",\r
+about_help:"\u041F\u043E\u043C\u043E\u0449\u044C",\r
+about_license:"\u041B\u0438\u0446\u0435\u043D\u0437\u0438\u044F",\r
+about_plugins:"\u041F\u043B\u0430\u0433\u0438\u043D\u044B",\r
+about_plugin:"\u041F\u043B\u0430\u0433\u0438\u043D",\r
+about_author:"\u0410\u0432\u0442\u043E\u0440",\r
+about_version:"\u0412\u0435\u0440\u0441\u0438\u044F",\r
+about_loaded:"\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044B\u0435 \u043F\u043B\u0430\u0433\u0438\u043D\u044B",\r
+anchor_title:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u044F\u043A\u043E\u0440\u044F",\r
+anchor_name:"\u0418\u043C\u044F \u044F\u043A\u043E\u0440\u044F",\r
+code_title:"\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 HTML \u043A\u043E\u0434\u0430",\r
+code_wordwrap:"\u041F\u0435\u0440\u0435\u043D\u043E\u0441 \u0441\u0442\u0440\u043E\u043A",\r
+colorpicker_title:"\u0426\u0432\u0435\u0442\u0430",\r
+colorpicker_picker_tab:"\u0421\u043F\u0435\u043A\u0442\u0440",\r
+colorpicker_picker_title:"\u0426\u0432\u0435\u0442\u0430",\r
+colorpicker_palette_tab:"\u041F\u0430\u043B\u0438\u0442\u0440\u0430",\r
+colorpicker_palette_title:"\u0426\u0432\u0435\u0442\u0430",\r
+colorpicker_named_tab:"\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",\r
+colorpicker_named_title:"\u0426\u0432\u0435\u0442\u0430",\r
+colorpicker_color:"\u041A\u043E\u0434:",\r
+colorpicker_name:"\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435:",\r
+charmap_title:"\u0412\u044B\u0431\u043E\u0440 \u0441\u0438\u043C\u0432\u043E\u043B\u0430",\r
+image_title:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F",\r
+image_src:"\u0410\u0434\u0440\u0435\u0441",\r
+image_alt:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",\r
+image_list:"\u0421\u043F\u0438\u0441\u043E\u043A \u043A\u0430\u0440\u0442\u0438\u043D\u043E\u043A",\r
+image_border:"\u0413\u0440\u0430\u043D\u0438\u0446\u0430",\r
+image_dimensions:"\u0420\u0430\u0437\u043C\u0435\u0440",\r
+image_vspace:"\u0412\u0435\u0440\u0442. \u043E\u0442\u0441\u0442\u0443\u043F",\r
+image_hspace:"\u0413\u043E\u0440\u0438\u0437. \u043E\u0442\u0441\u0442\u0443\u043F",\r
+image_align:"\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435",\r
+image_align_baseline:"\u041F\u043E \u0431\u0430\u0437\u043E\u0432\u043E\u0439 \u043B\u0438\u043D\u0438\u0438",\r
+image_align_top:"\u041F\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+image_align_middle:"\u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443",\r
+image_align_bottom:"\u041F\u043E \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+image_align_texttop:"\u041F\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E \u0442\u0435\u043A\u0441\u0442\u0430",\r
+image_align_textbottom:"\u041F\u043E \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E \u0442\u0435\u043A\u0441\u0442\u0430",\r
+image_align_left:"\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+image_align_right:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E",\r
+link_title:"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u0441\u044B\u043B\u043A\u0438",\r
+link_url:"\u0410\u0434\u0440\u0435\u0441",\r
+link_target:"\u0426\u0435\u043B\u044C",\r
+link_target_same:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u044D\u0442\u043E\u043C \u043E\u043A\u043D\u0435",\r
+link_target_blank:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043D\u043E\u0432\u043E\u043C \u043E\u043A\u043D\u0435",\r
+link_titlefield:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",\r
+link_is_email:"\u0412\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0439 \u0430\u0434\u0440\u0435\u0441 \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u0435\u0442 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0443\u044E \u043F\u043E\u0447\u0442\u0443, \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u0440\u0435\u0444\u0438\u043A\u0441 mailto:?",\r
+link_is_external:"\u0412\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0439 \u0430\u0434\u0440\u0435\u0441 \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u0435\u0442 \u0432\u043D\u0435\u0448\u043D\u044E\u044E \u0441\u0441\u044B\u043B\u043A\u0443, \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u0440\u0435\u0444\u0438\u043A\u0441 http://?",\r
+link_list:"\u0421\u043F\u0438\u0441\u043E\u043A \u0441\u0441\u044B\u043B\u043E\u043A"\r
+});
\ No newline at end of file
<script type="text/javascript" src="../../utils/form_utils.js"></script>\r
<script type="text/javascript" src="../../utils/validate.js"></script>\r
<script type="text/javascript" src="js/link.js"></script>\r
- <base target="_self" />\r
</head>\r
<body id="link" style="display: none">\r
<form onsubmit="LinkDialog.update();return false;" action="#">\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td nowrap="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>\r
+ <td class="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>\r
<td><table border="0" cellspacing="0" cellpadding="0"> \r
<tr> \r
<td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td> \r
<td><select id="target_list" name="target_list"></select></td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>\r
+ <td class="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>\r
<td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>\r
</tr>\r
<tr>\r
</div>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" id="insert" name="insert" value="{#insert}" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
- </div>\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</form>\r
</body>\r
h5 {font-size: .83em}\r
h6 {font-size: .75em}\r
.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}\r
-a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(img/items.gif) no-repeat bottom left;}\r
-img.mceItemAnchor {width:12px; height:12px; background:url(img/items.gif) no-repeat;}\r
+a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(img/items.gif) no-repeat 0 0;}\r
+span.mceItemNbsp {background: #DDD}\r
+td.mceSelected, th.mceSelected {background-color:#3399ff !important}\r
img {border:0;}\r
table {cursor:default}\r
table td, table th {cursor:text}\r
del {color:red; text-decoration:line-through}\r
cite {border-bottom:1px dashed blue}\r
acronym {border-bottom:1px dotted #CCC; cursor:help}\r
-abbr, html\:abbr {border-bottom:1px dashed #CCC; cursor:help}\r
+abbr {border-bottom:1px dashed #CCC; cursor:help}\r
\r
/* IE */\r
* html body {\r
scrollbar-shadow-color:#F0F0EE;\r
scrollbar-track-color:#F5F5F5;\r
}\r
+\r
+img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}\r
+font[face=mceinline] {font-family:inherit !important}\r
textarea {resize:none;outline:none;}\r
a:link, a:visited {color:black;}\r
a:hover {color:#2B6FB6;}\r
+.nowrap {white-space: nowrap}\r
\r
/* Forms */\r
fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}\r
background:url(img/buttons.png) 0 -26px;\r
cursor:pointer;\r
padding-bottom:2px;\r
+float:left;\r
}\r
\r
-#insert {background:url(img/buttons.png) 0 -52px;}\r
-#cancel {background:url(img/buttons.png) 0 0;}\r
+#insert {background:url(img/buttons.png) 0 -52px}\r
+#cancel {background:url(img/buttons.png) 0 0; float:right}\r
\r
/* Browse */\r
+a.pickcolor, a.browse {text-decoration:none}\r
a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}\r
.mceOldBoxModel a.browse span {width:22px; height:20px;}\r
a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}\r
#colorpicker #namedcolors {width:150px;}\r
#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}\r
#colorpicker #colornamecontainer {margin-top:5px;}\r
-#colorpicker #picker_panel fieldset {margin:auto;width:325px;}
\ No newline at end of file
+#colorpicker #picker_panel fieldset {margin:auto;width:325px;}\r
.defaultSkin table td {vertical-align:middle}\r
\r
/* Containers */\r
-.defaultSkin table {background:#F0F0EE}\r
+.defaultSkin table {direction:ltr; background:#F0F0EE}\r
.defaultSkin iframe {display:block; background:#FFF}\r
.defaultSkin .mceToolbar {height:26px}\r
.defaultSkin .mceLeft {text-align:left}\r
.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC}\r
.defaultSkin .mceStatusbar {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}\r
.defaultSkin .mceStatusbar div {float:left; margin:2px}\r
-.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}\r
+.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}\r
.defaultSkin .mceStatusbar a:hover {text-decoration:underline}\r
.defaultSkin table.mceToolbar {margin-left:3px}\r
.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}\r
.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}\r
\r
/* ListBox */\r
-.defaultSkin .mceListBox {direction:ltr}\r
.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}\r
.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}\r
.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}\r
.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}\r
.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}\r
.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}\r
-.defaultSkin .mceSplitButton span.mceAction {width:20px; background:url(../../img/icons.gif) 20px 20px;}\r
+.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);}\r
.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;}\r
.defaultSkin .mceSplitButton span.mceOpen {display:none}\r
.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}\r
/* Progress,Resize */\r
.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF}\r
.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}\r
-.defaultSkin .mcePlaceHolder {border:1px dotted gray}\r
\r
/* Formats */\r
.defaultSkin .mce_formatPreview a {font-size:10px}\r
.defaultSkin span.mce_del {background-position:-940px -20px}\r
.defaultSkin span.mce_ins {background-position:-960px -20px}\r
.defaultSkin span.mce_pagebreak {background-position:0 -40px}\r
-.defaultSkin .mce_spellchecker span.mceAction {background-position:-540px -20px}\r
+.defaultSkin span.mce_restoredraft {background-position:-20px -40px}\r
+.defaultSkin span.mce_spellchecker {background-position:-540px -20px}\r
h5 {font-size: .83em}\r
h6 {font-size: .75em}\r
.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}\r
-a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(../default/img/items.gif) no-repeat bottom left;}\r
-img.mceItemAnchor {width:12px; height:12px; background:url(../default/img/items.gif) no-repeat;}\r
+a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;}\r
+span.mceItemNbsp {background: #DDD}\r
+td.mceSelected, th.mceSelected {background-color:#3399ff !important}\r
img {border:0;}\r
table {cursor:default}\r
table td, table th {cursor:text}\r
del {color:red; text-decoration:line-through}\r
cite {border-bottom:1px dashed blue}\r
acronym {border-bottom:1px dotted #CCC; cursor:help}\r
-abbr, html\:abbr {border-bottom:1px dashed #CCC; cursor:help}\r
+abbr {border-bottom:1px dashed #CCC; cursor:help}\r
\r
/* IE */\r
* html body {\r
scrollbar-shadow-color:#F0F0EE;\r
scrollbar-track-color:#F5F5F5;\r
}\r
+\r
+img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}\r
+font[face=mceinline] {font-family:inherit !important}\r
textarea {resize:none;outline:none;}\r
a:link, a:visited {color:black;}\r
a:hover {color:#2B6FB6;}\r
+.nowrap {white-space: nowrap}\r
\r
/* Forms */\r
fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}\r
background:url(../default/img/buttons.png) 0 -26px;\r
cursor:pointer;\r
padding-bottom:2px;\r
+float:left;\r
}\r
\r
-#insert {background:url(../default/img/buttons.png) 0 -52px;}\r
-#cancel {background:url(../default/img/buttons.png) 0 0;}\r
+#insert {background:url(../default/img/buttons.png) 0 -52px}\r
+#cancel {background:url(../default/img/buttons.png) 0 0; float:right}\r
\r
/* Browse */\r
+a.pickcolor, a.browse {text-decoration:none}\r
a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}\r
.mceOldBoxModel a.browse span {width:22px; height:20px;}\r
a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}\r
.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD}\r
.o2k7Skin .mceStatusbar {display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px}\r
.o2k7Skin .mceStatusbar div {float:left; padding:2px}\r
-.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}\r
+.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}\r
.o2k7Skin .mceStatusbar a:hover {text-decoration:underline}\r
.o2k7Skin table.mceToolbar {margin-left:3px}\r
.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;}\r
.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px}\r
.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)}\r
.o2k7Skin .mceSplitButton a.mceAction {width:22px}\r
-.o2k7Skin .mceSplitButton span.mceAction {width:22px; background:url(../../img/icons.gif) 20px 20px}\r
+.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)}\r
.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0}\r
.o2k7Skin .mceSplitButton span.mceOpen {display:none}\r
.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px}\r
/* Progress,Resize */\r
.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF}\r
.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}\r
-.o2k7Skin .mcePlaceHolder {border:1px dotted gray}\r
\r
/* Formats */\r
.o2k7Skin .mce_formatPreview a {font-size:10px}\r
.o2k7Skin span.mce_del {background-position:-940px -20px}\r
.o2k7Skin span.mce_ins {background-position:-960px -20px}\r
.o2k7Skin span.mce_pagebreak {background-position:0 -40px}\r
-.o2k7Skin .mce_spellchecker span.mceAction {background-position:-540px -20px}\r
+.o2k7Skin span.mce_restoredraft {background-position:-20px -40px}\r
+.o2k7Skin span.mce_spellchecker {background-position:-540px -20px}\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\r
<title>{#advanced_dlg.code_title}</title>\r
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
<script type="text/javascript" src="js/source_editor.js"></script>\r
- <base target="_self" />\r
</head>\r
<body onresize="resizeInputs();" style="display:none; overflow:hidden;">\r
<form name="source" onsubmit="saveContent();return false;" action="#">\r
<textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>\r
\r
<div class="mceActionPanel">\r
- <div style="float: left">\r
- <input type="submit" name="insert" value="{#update}" id="insert" />\r
- </div>\r
-\r
- <div style="float: right">\r
- <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />\r
- </div>\r
+ <input type="submit" name="insert" value="{#update}" id="insert" />\r
+ <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />\r
</div>\r
</form>\r
</body>\r
-(function(){var DOM=tinymce.DOM;tinymce.ThemeManager.requireLangPack('simple');tinymce.create('tinymce.themes.SimpleTheme',{init:function(ed,url){var t=this,states=['Bold','Italic','Underline','Strikethrough','InsertUnorderedList','InsertOrderedList'],s=ed.settings;t.editor=ed;ed.onInit.add(function(){ed.onNodeChange.add(function(ed,cm){tinymce.each(states,function(c){cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));});});ed.dom.loadCSS(url+"/skins/"+s.skin+"/content.css");});DOM.loadCSS((s.editor_css?ed.documentBaseURI.toAbsolute(s.editor_css):'')||url+"/skins/"+s.skin+"/ui.css");},renderUI:function(o){var t=this,n=o.targetNode,ic,tb,ed=t.editor,cf=ed.controlManager,sc;n=DOM.insertAfter(DOM.create('span',{id:ed.id+'_container','class':'mceEditor '+ed.settings.skin+'SimpleSkin'}),n);n=sc=DOM.add(n,'table',{cellPadding:0,cellSpacing:0,'class':'mceLayout'});n=tb=DOM.add(n,'tbody');n=DOM.add(tb,'tr');n=ic=DOM.add(DOM.add(n,'td'),'div',{'class':'mceIframeContainer'});n=DOM.add(DOM.add(tb,'tr',{'class':'last'}),'td',{'class':'mceToolbar mceLast',align:'center'});tb=t.toolbar=cf.createToolbar("tools1");tb.add(cf.createButton('bold',{title:'simple.bold_desc',cmd:'Bold'}));tb.add(cf.createButton('italic',{title:'simple.italic_desc',cmd:'Italic'}));tb.add(cf.createButton('underline',{title:'simple.underline_desc',cmd:'Underline'}));tb.add(cf.createButton('strikethrough',{title:'simple.striketrough_desc',cmd:'Strikethrough'}));tb.add(cf.createSeparator());tb.add(cf.createButton('undo',{title:'simple.undo_desc',cmd:'Undo'}));tb.add(cf.createButton('redo',{title:'simple.redo_desc',cmd:'Redo'}));tb.add(cf.createSeparator());tb.add(cf.createButton('cleanup',{title:'simple.cleanup_desc',cmd:'mceCleanup'}));tb.add(cf.createSeparator());tb.add(cf.createButton('insertunorderedlist',{title:'simple.bullist_desc',cmd:'InsertUnorderedList'}));tb.add(cf.createButton('insertorderedlist',{title:'simple.numlist_desc',cmd:'InsertOrderedList'}));tb.renderTo(n);return{iframeContainer:ic,editorContainer:ed.id+'_container',sizeContainer:sc,deltaHeight:-20};},getInfo:function(){return{longname:'Simple theme',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add('simple',tinymce.themes.SimpleTheme);})();
\ No newline at end of file
+(function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})});c.dom.loadCSS(d+"/skins/"+f.skin+"/content.css")});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,deltaHeight:-20}},getInfo:function(){return{longname:"Simple theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add("simple",tinymce.themes.SimpleTheme)})();
\ No newline at end of file
/**\r
- * $Id: editor_template_src.js 920 2008-09-09 14:05:33Z spocke $\r
+ * editor_template_src.js\r
*\r
- * This file is meant to showcase how to create a simple theme. The advanced\r
- * theme is more suitable for production use.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
(function() {\r
italic_desc:"Kursiv (Strg+I)",\r
underline_desc:"Unterstrichen (Strg+U)",\r
striketrough_desc:"Durchgestrichen",\r
-bullist_desc:"Unsortierte Liste",\r
-numlist_desc:"Sortierte Liste",\r
+bullist_desc:"Aufz\u00E4hlung",\r
+numlist_desc:"Nummerierung",\r
undo_desc:"R\u00FCckg\u00E4ngig (Strg+Z)",\r
redo_desc:"Wiederholen (Strg+Y)",\r
-cleanup_desc:"Quellcode s\u00E4ubern"\r
+cleanup_desc:"Quellcode aufr\u00E4umen"\r
});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('et.simple',{\r
+bold_desc:"Rasvane (Ctrl+B)",\r
+italic_desc:"Kursiiv (Ctrl+I)",\r
+underline_desc:"Allajoonitud (Ctrl+U)",\r
+striketrough_desc:"L\u00E4bijoonitud",\r
+bullist_desc:"Ebakorrap\u00E4rane loetelu",\r
+numlist_desc:"Korrap\u00E4rane loetelu",\r
+undo_desc:"V\u00F5ta tagasi (Ctrl+Z)",\r
+redo_desc:"Tee uuesti (Ctrl+Y)",\r
+cleanup_desc:"Puhasta segane kood"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('fr.simple',{\r
+bold_desc:"Gras (Ctrl+B)",\r
+italic_desc:"Italique (Ctrl+I)",\r
+underline_desc:"Soulign\u00E9 (Ctrl+U)",\r
+striketrough_desc:"Barr\u00E9",\r
+bullist_desc:"Liste \u00E0 puces",\r
+numlist_desc:"Liste num\u00E9rot\u00E9e",\r
+undo_desc:"Annuler (Ctrl+Z)",\r
+redo_desc:"R\u00E9tablir (Ctrl+Y)",\r
+cleanup_desc:"Nettoyer le code"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('hu.simple',{\r
+bold_desc:"F\u00E9lk\u00F6v\u00E9r (Ctrl+B)",\r
+italic_desc:"D\u0151lt (Ctrl+I)",\r
+underline_desc:"Al\u00E1h\u00FAzott (Ctrl+U)",\r
+striketrough_desc:"\u00C1th\u00FAzott",\r
+bullist_desc:"Felsorol\u00E1sos lista",\r
+numlist_desc:"Sorrendezett lista",\r
+undo_desc:"Visszavon\u00E1s (Ctrl+Z)",\r
+redo_desc:"M\u00E9gis v\u00E9grehajt (Ctrl+Y)",\r
+cleanup_desc:"Rendetlen k\u00F3d tiszt\u00EDt\u00E1sa"\r
+});
\ No newline at end of file
tinyMCE.addI18n('pt.simple',{\r
bold_desc:"Negrito (Ctrl+B)",\r
-italic_desc:"It\u00C3\u00A1lico (Ctrl+I)",\r
+italic_desc:"It\u00E1lico (Ctrl+I)",\r
underline_desc:"Sublinhado (Ctrl+U)",\r
striketrough_desc:"Riscado",\r
-bullist_desc:"Lista n\u00C3\u00A3o-ordenada",\r
+bullist_desc:"Lista n\u00E3o-ordenada",\r
numlist_desc:"Lista ordenada",\r
undo_desc:"Desfazer (Ctrl+Z)",\r
redo_desc:"Refazer (Ctrl+Y)",\r
-cleanup_desc:"Limpar c\u00C3\u00B3digo incorreto"\r
+cleanup_desc:"Limpar c\u00F3digo incorreto"\r
});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('ru.simple',{\r
+bold_desc:"\u041F\u043E\u043B\u0443\u0436\u0438\u0440\u043D\u044B\u0439 (Ctrl+B)",\r
+italic_desc:"\u041A\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)",\r
+underline_desc:"\u041F\u043E\u0434\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439 (Ctrl+U)",\r
+striketrough_desc:"\u0417\u0430\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439",\r
+bullist_desc:"\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A",\r
+numlist_desc:"\u041D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A",\r
+undo_desc:"\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C (Ctrl+Z)",\r
+redo_desc:"\u0412\u0435\u0440\u043D\u0443\u0442\u044C (Ctrl+Y)",\r
+cleanup_desc:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043B\u0438\u0448\u043D\u0438\u0439 \u043A\u043E\u0434"\r
+});
\ No newline at end of file
-var tinymce={majorVersion:'3',minorVersion:'2.1.1',releaseDate:'2008-11-27',_init:function(){var t=this,d=document,w=window,na=navigator,ua=na.userAgent,i,nl,n,base,p,v;t.isOpera=w.opera&&opera.buildNumber;t.isWebKit=/WebKit/.test(ua);t.isOldWebKit=t.isWebKit&&!w.getSelection().getRangeAt;t.isIE=!t.isWebKit&&!t.isOpera&&(/MSIE/gi).test(ua)&&(/Explorer/gi).test(na.appName);t.isIE6=t.isIE&&/MSIE [56]/.test(ua);t.isGecko=!t.isWebKit&&/Gecko/.test(ua);t.isMac=ua.indexOf('Mac')!=-1;t.isAir=/adobeair/i.test(ua);if(w.tinyMCEPreInit){t.suffix=tinyMCEPreInit.suffix;t.baseURL=tinyMCEPreInit.base;t.query=tinyMCEPreInit.query;return;}t.suffix='';nl=d.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(v=nl[i].href){if(/^https?:\/\/[^\/]+$/.test(v))v+='/';base=v?v.match(/.*\//)[0]:'';}}function getBase(n){if(n.src&&/tiny_mce(|_dev|_src|_gzip|_jquery|_prototype).js/.test(n.src)){if(/_(src|dev)\.js/g.test(n.src))t.suffix='_src';if((p=n.src.indexOf('?'))!=-1)t.query=n.src.substring(p+1);t.baseURL=n.src.substring(0,n.src.lastIndexOf('/'));if(base&&t.baseURL.indexOf('://')==-1)t.baseURL=base+t.baseURL;return t.baseURL;}return null;};nl=d.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}n=d.getElementsByTagName('head')[0];if(n){nl=n.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}}return;},is:function(o,t){var n=typeof(o);if(!t)return n!='undefined';if(t=='array'&&(o instanceof Array))return true;return n==t;},each:function(o,cb,s){var n,l;if(!o)return 0;s=s||o;if(typeof(o.length)!='undefined'){for(n=0,l=o.length;n<l;n++){if(cb.call(s,o[n],n,o)===false)return 0;}}else{for(n in o){if(o.hasOwnProperty(n)){if(cb.call(s,o[n],n,o)===false)return 0;}}}return 1;},map:function(a,f){var o=[];tinymce.each(a,function(v){o.push(f(v));});return o;},grep:function(a,f){var o=[];tinymce.each(a,function(v){if(!f||f(v))o.push(v);});return o;},inArray:function(a,v){var i,l;if(a){for(i=0,l=a.length;i<l;i++){if(a[i]===v)return i;}}return-1;},extend:function(o,e){var i,a=arguments;for(i=1;i<a.length;i++){e=a[i];tinymce.each(e,function(v,n){if(typeof(v)!=='undefined')o[n]=v;});}return o;},trim:function(s){return(s?''+s:'').replace(/^\s*|\s*$/g,'');},create:function(s,p){var t=this,sp,ns,cn,scn,c,de=0;s=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);cn=s[3].match(/(^|\.)(\w+)$/i)[2];ns=t.createNS(s[3].replace(/\.\w+$/,''));if(ns[cn])return;if(s[2]=='static'){ns[cn]=p;if(this.onCreate)this.onCreate(s[2],s[3],ns[cn]);return;}if(!p[cn]){p[cn]=function(){};de=1;}ns[cn]=p[cn];t.extend(ns[cn].prototype,p);if(s[5]){sp=t.resolve(s[5]).prototype;scn=s[5].match(/\.(\w+)$/i)[1];c=ns[cn];if(de){ns[cn]=function(){return sp[scn].apply(this,arguments);};}else{ns[cn]=function(){this.parent=sp[scn];return c.apply(this,arguments);};}ns[cn].prototype[cn]=ns[cn];t.each(sp,function(f,n){ns[cn].prototype[n]=sp[n];});t.each(p,function(f,n){if(sp[n]){ns[cn].prototype[n]=function(){this.parent=sp[n];return f.apply(this,arguments);};}else{if(n!=cn)ns[cn].prototype[n]=f;}});}t.each(p['static'],function(f,n){ns[cn][n]=f;});if(this.onCreate)this.onCreate(s[2],s[3],ns[cn].prototype);},walk:function(o,f,n,s){s=s||this;if(o){if(n)o=o[n];tinymce.each(o,function(o,i){if(f.call(s,o,i,n)===false)return false;tinymce.walk(o,f,n,s);});}},createNS:function(n,o){var i,v;o=o||window;n=n.split('.');for(i=0;i<n.length;i++){v=n[i];if(!o[v])o[v]={};o=o[v];}return o;},resolve:function(n,o){var i,l;o=o||window;n=n.split('.');for(i=0,l=n.length;i<l;i++){o=o[n[i]];if(!o)break;}return o;},addUnload:function(f,s){var t=this,w=window;f={func:f,scope:s||this};if(!t.unloads){function unload(){var li=t.unloads,o,n;if(li){for(n in li){o=li[n];if(o&&o.func)o.func.call(o.scope,1);}if(w.detachEvent){w.detachEvent('onbeforeunload',fakeUnload);w.detachEvent('onunload',unload);}else if(w.removeEventListener)w.removeEventListener('unload',unload,false);t.unloads=o=li=w=unload=null;if(window.CollectGarbage)window.CollectGarbage();}};function fakeUnload(){var d=document;if(d.readyState=='interactive'){function stop(){d.detachEvent('onstop',stop);unload();d=null;};d.attachEvent('onstop',stop);window.setTimeout(function(){d.detachEvent('onstop',stop);},0);}};if(w.attachEvent){w.attachEvent('onunload',unload);w.attachEvent('onbeforeunload',fakeUnload);}else if(w.addEventListener)w.addEventListener('unload',unload,false);t.unloads=[f];}else t.unloads.push(f);return f;},removeUnload:function(f){var u=this.unloads,r=null;tinymce.each(u,function(o,i){if(o&&o.func==f){u.splice(i,1);r=f;return false;}});return r;},explode:function(s,d){return s?tinymce.map(s.split(d||','),tinymce.trim):s;},_addVer:function(u){var v;if(!this.query)return u;v=(u.indexOf('?')==-1?'?':'&')+this.query;if(u.indexOf('#')==-1)return u+v;return u.replace('#',v+'#');}};window.tinymce=tinymce;tinymce._init();tinymce.create('tinymce.util.Dispatcher',{scope:null,listeners:null,Dispatcher:function(s){this.scope=s||this;this.listeners=[];},add:function(cb,s){this.listeners.push({cb:cb,scope:s||this.scope});return cb;},addToTop:function(cb,s){this.listeners.unshift({cb:cb,scope:s||this.scope});return cb;},remove:function(cb){var l=this.listeners,o=null;tinymce.each(l,function(c,i){if(cb==c.cb){o=cb;l.splice(i,1);return false;}});return o;},dispatch:function(){var s,a=arguments,i,li=this.listeners,c;for(i=0;i<li.length;i++){c=li[i];s=c.cb.apply(c.scope,a);if(s===false)break;}return s;}});(function(){var each=tinymce.each;tinymce.create('tinymce.util.URI',{URI:function(u,s){var t=this,o,a,b;s=t.settings=s||{};if(/^(mailto|news|javascript|about):/i.test(u)||/^\s*#/.test(u)){t.source=u;return;}if(u.indexOf('/')===0&&u.indexOf('//')!==0)u=(s.base_uri?s.base_uri.protocol||'http':'http')+'://mce_host'+u;if(u.indexOf(':/')===-1&&u.indexOf('//')!==0)u=(s.base_uri.protocol||'http')+'://mce_host'+t.toAbsPath(s.base_uri.path,u);u=u.replace(/@@/g,'(mce_at)');u=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(v,i){var s=u[i];if(s)s=s.replace(/\(mce_at\)/g,'@@');t[v]=s;});if(b=s.base_uri){if(!t.protocol)t.protocol=b.protocol;if(!t.userInfo)t.userInfo=b.userInfo;if(!t.port&&t.host=='mce_host')t.port=b.port;if(!t.host||t.host=='mce_host')t.host=b.host;t.source='';}},setPath:function(p){var t=this;p=/^(.*?)\/?(\w+)?$/.exec(p);t.path=p[0];t.directory=p[1];t.file=p[2];t.source='';t.getURI();},toRelative:function(u){var t=this,o;if(u==="./")return u;u=new tinymce.util.URI(u,{base_uri:t});if((u.host!='mce_host'&&t.host!=u.host&&u.host)||t.port!=u.port||t.protocol!=u.protocol)return u.getURI();o=t.toRelPath(t.path,u.path);if(u.query)o+='?'+u.query;if(u.anchor)o+='#'+u.anchor;return o;},toAbsolute:function(u,nh){var u=new tinymce.util.URI(u,{base_uri:this});return u.getURI(this.host==u.host?nh:0);},toRelPath:function(base,path){var items,bp=0,out='',i,l;base=base.substring(0,base.lastIndexOf('/'));base=base.split('/');items=path.split('/');if(base.length>=items.length){for(i=0,l=base.length;i<l;i++){if(i>=items.length||base[i]!=items[i]){bp=i+1;break;}}}if(base.length<items.length){for(i=0,l=items.length;i<l;i++){if(i>=base.length||base[i]!=items[i]){bp=i+1;break;}}}if(bp==1)return path;for(i=0,l=base.length-(bp-1);i<l;i++)out+="../";for(i=bp-1,l=items.length;i<l;i++){if(i!=bp-1)out+="/"+items[i];else out+=items[i];}return out;},toAbsPath:function(base,path){var i,nb=0,o=[];base=base.split('/');path=path.split('/');each(base,function(k){if(k)o.push(k);});base=o;for(i=path.length-1,o=[];i>=0;i--){if(path[i].length==0||path[i]==".")continue;if(path[i]=='..'){nb++;continue;}if(nb>0){nb--;continue;}o.push(path[i]);}i=base.length-nb;if(i<=0)return'/'+o.reverse().join('/');return'/'+base.slice(0,i).join('/')+'/'+o.reverse().join('/');},getURI:function(nh){var s,t=this;if(!t.source||nh){s='';if(!nh){if(t.protocol)s+=t.protocol+'://';if(t.userInfo)s+=t.userInfo+'@';if(t.host)s+=t.host;if(t.port)s+=':'+t.port;}if(t.path)s+=t.path;if(t.query)s+='?'+t.query;if(t.anchor)s+='#'+t.anchor;t.source=s;}return t.source;}});})();(function(){var each=tinymce.each;tinymce.create('static tinymce.util.Cookie',{getHash:function(n){var v=this.get(n),h;if(v){each(v.split('&'),function(v){v=v.split('=');h=h||{};h[unescape(v[0])]=unescape(v[1]);});}return h;},setHash:function(n,v,e,p,d,s){var o='';each(v,function(v,k){o+=(!o?'':'&')+escape(k)+'='+escape(v);});this.set(n,o,e,p,d,s);},get:function(n){var c=document.cookie,e,p=n+"=",b;if(!c)return;b=c.indexOf("; "+p);if(b==-1){b=c.indexOf(p);if(b!=0)return null;}else b+=2;e=c.indexOf(";",b);if(e==-1)e=c.length;return unescape(c.substring(b+p.length,e));},set:function(n,v,e,p,d,s){document.cookie=n+"="+escape(v)+((e)?"; expires="+e.toGMTString():"")+((p)?"; path="+escape(p):"")+((d)?"; domain="+d:"")+((s)?"; secure":"");},remove:function(n,p){var d=new Date();d.setTime(d.getTime()-1000);this.set(n,'',d,p,d);}});})();tinymce.create('static tinymce.util.JSON',{serialize:function(o){var i,v,s=tinymce.util.JSON.serialize,t;if(o==null)return'null';t=typeof o;if(t=='string'){v='\bb\tt\nn\ff\rr\""\'\'\\\\';return'"'+o.replace(/([\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;})+'"';}if(t=='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;},parse:function(s){try{return eval('('+s+')');}catch(ex){}}});tinymce.create('static tinymce.util.XHR',{send:function(o){var x,t,w=window,c=0;o.scope=o.scope||this;o.success_scope=o.success_scope||o.scope;o.error_scope=o.error_scope||o.scope;o.async=o.async===false?false:true;o.data=o.data||'';function get(s){x=0;try{x=new ActiveXObject(s);}catch(ex){}return x;};x=w.XMLHttpRequest?new XMLHttpRequest():get('Microsoft.XMLHTTP')||get('Msxml2.XMLHTTP');if(x){if(x.overrideMimeType)x.overrideMimeType(o.content_type);x.open(o.type||(o.data?'POST':'GET'),o.url,o.async);if(o.content_type)x.setRequestHeader('Content-Type',o.content_type);x.send(o.data);function ready(){if(!o.async||x.readyState==4||c++>10000){if(o.success&&c<10000&&x.status==200)o.success.call(o.success_scope,''+x.responseText,x,o);else if(o.error)o.error.call(o.error_scope,c>10000?'TIMED_OUT':'GENERAL',x,o);x=null;}else w.setTimeout(ready,10);};if(!o.async)return ready();t=w.setTimeout(ready,10);}}});(function(){var extend=tinymce.extend,JSON=tinymce.util.JSON,XHR=tinymce.util.XHR;tinymce.create('tinymce.util.JSONRequest',{JSONRequest:function(s){this.settings=extend({},s);this.count=0;},send:function(o){var ecb=o.error,scb=o.success;o=extend(this.settings,o);o.success=function(c,x){c=JSON.parse(c);if(typeof(c)=='undefined'){c={error:'JSON Parse error.'};}if(c.error)ecb.call(o.error_scope||o.scope,c.error,x);else scb.call(o.success_scope||o.scope,c.result);};o.error=function(ty,x){ecb.call(o.error_scope||o.scope,ty,x);};o.data=JSON.serialize({id:o.id||'c'+(this.count++),method:o.method,params:o.params});o.content_type='application/json';XHR.send(o);},'static':{sendRPC:function(o){return new tinymce.util.JSONRequest().send(o);}}});}());(function(){var each=tinymce.each,is=tinymce.is;var isWebKit=tinymce.isWebKit,isIE=tinymce.isIE;tinymce.create('tinymce.dom.DOMUtils',{doc:null,root:null,files:null,listeners:{},pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,cache:{},idPattern:/^#[\w]+$/,elmPattern:/^[\w_*]+$/,elmClassPattern:/^([\w_]*)\.([\w_]+)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(d,s){var t=this;t.doc=d;t.win=window;t.files={};t.cssFlicker=false;t.counter=0;t.boxModel=!tinymce.isIE||d.compatMode=="CSS1Compat";t.stdMode=d.documentMode===8;this.settings=s=tinymce.extend({keep_values:false,hex_colors:1,process_html:1},s);if(tinymce.isIE6){try{d.execCommand('BackgroundImageCache',false,true);}catch(e){t.cssFlicker=true;}}tinymce.addUnload(t.destroy,t);},getRoot:function(){var t=this,s=t.settings;return(s&&t.get(s.root_element))||t.doc.body;},getViewPort:function(w){var d,b;w=!w?this.win:w;d=w.document;b=this.boxModel?d.documentElement:d.body;return{x:w.pageXOffset||b.scrollLeft,y:w.pageYOffset||b.scrollTop,w:w.innerWidth||b.clientWidth,h:w.innerHeight||b.clientHeight};},getRect:function(e){var p,t=this,sr;e=t.get(e);p=t.getPos(e);sr=t.getSize(e);return{x:p.x,y:p.y,w:sr.w,h:sr.h};},getSize:function(e){var t=this,w,h;e=t.get(e);w=t.getStyle(e,'width');h=t.getStyle(e,'height');if(w.indexOf('px')===-1)w=0;if(h.indexOf('px')===-1)h=0;return{w:parseInt(w)||e.offsetWidth||e.clientWidth,h:parseInt(h)||e.offsetHeight||e.clientHeight};},getParent:function(n,f,r){var na,se=this.settings;n=this.get(n);if(se.strict_root)r=r||this.getRoot();if(is(f,'string')){na=f.toUpperCase();f=function(n){var s=false;if(n.nodeType==1&&na==='*'){s=true;return false;}each(na.split(','),function(v){if(n.nodeType==1&&((se.strict&&n.nodeName.toUpperCase()==v)||n.nodeName.toUpperCase()==v)){s=true;return false;}});return s;};}while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode;}return null;},get:function(e){var n;if(e&&this.doc&&typeof(e)=='string'){n=e;e=this.doc.getElementById(e);if(e&&e.id!==n)return this.doc.getElementsByName(n)[1];}return e;},select:function(pa,s){var t=this,cs,c,pl,o=[],x,i,l,n,xp;s=t.get(s)||t.doc;if(s.querySelectorAll){if(s!=t.doc){i=s.id;s.id='_mc_tmp';pa='#_mc_tmp '+pa;}l=tinymce.grep(s.querySelectorAll(pa));s.id=i;return l;}if(!t.selectorRe)t.selectorRe=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@([\w\\]+)([\^\$\*!]?=)([\w\\]+)\])?(?:\:([\w\\]+))?/i;;if(tinymce.isAir){each(tinymce.explode(pa),function(v){if(!(xp=t.cache[v])){xp='';each(v.split(' '),function(v){v=t.selectorRe.exec(v);xp+=v[1]?'//'+v[1]:'//*';if(v[2])xp+="[@id='"+v[2]+"']";if(v[3]){each(v[3].split('.'),function(n){xp+="[@class = '"+n+"' or contains(concat(' ', @class, ' '), ' "+n+" ')]";});}});t.cache[v]=xp;}xp=t.doc.evaluate(xp,s,null,4,null);while(n=xp.iterateNext())o.push(n);});return o;}if(t.settings.strict){function get(s,n){return s.getElementsByTagName(n.toLowerCase());};}else{function get(s,n){return s.getElementsByTagName(n);};}if(t.elmPattern.test(pa)){x=get(s,pa);for(i=0,l=x.length;i<l;i++)o.push(x[i]);return o;}if(t.elmClassPattern.test(pa)){pl=t.elmClassPattern.exec(pa);x=get(s,pl[1]||'*');c=' '+pl[2]+' ';for(i=0,l=x.length;i<l;i++){n=x[i];if(n.className&&(' '+n.className+' ').indexOf(c)!==-1)o.push(n);}return o;}function collect(n){if(!n.mce_save){n.mce_save=1;o.push(n);}};function collectIE(n){if(!n.getAttribute('mce_save')){n.setAttribute('mce_save','1');o.push(n);}};function find(n,f,r){var i,l,nl=get(r,n);for(i=0,l=nl.length;i<l;i++)f(nl[i]);};each(pa.split(','),function(v,i){v=tinymce.trim(v);if(t.elmPattern.test(v)){each(get(s,v),function(n){collect(n);});return;}if(t.elmClassPattern.test(v)){x=t.elmClassPattern.exec(v);each(get(s,x[1]),function(n){if(t.hasClass(n,x[2]))collect(n);});return;}if(!(cs=t.cache[pa])){cs='x=(function(cf, s) {';pl=v.split(' ');each(pl,function(v){var p=t.selectorRe.exec(v);p[1]=p[1]||'*';cs+='find("'+p[1]+'", function(n) {';if(p[2])cs+='if (n.id !== "'+p[2]+'") return;';if(p[3]){cs+='var c = " " + n.className + " ";';cs+='if (';c='';each(p[3].split('.'),function(v){if(v)c+=(c?'||':'')+'c.indexOf(" '+v+' ") === -1';});cs+=c+') return;';}});cs+='cf(n);';for(i=pl.length-1;i>=0;i--)cs+='}, '+(i?'n':'s')+');';cs+='})';t.cache[pa]=cs=eval(cs);}cs(isIE?collectIE:collect,s);});each(o,function(n){if(isIE)n.removeAttribute('mce_save');else delete n.mce_save;});return o;},add:function(p,n,a,h,c){var t=this;return this.run(p,function(p){var e,k;e=is(n,'string')?t.doc.createElement(n):n;t.setAttribs(e,a);if(h){if(h.nodeType)e.appendChild(h);else t.setHTML(e,h);}return!c?p.appendChild(e):e;});},create:function(n,a,h){return this.add(this.doc.createElement(n),n,a,h,1);},createHTML:function(n,a,h){var o='',t=this,k;o+='<'+n;for(k in a){if(a.hasOwnProperty(k))o+=' '+k+'="'+t.encode(a[k])+'"';}if(tinymce.is(h))return o+'>'+h+'</'+n+'>';return o+' />';},remove:function(n,k){return this.run(n,function(n){var p,g;p=n.parentNode;if(!p)return null;if(k){each(n.childNodes,function(c){p.insertBefore(c.cloneNode(true),n);});}return p.removeChild(n);});},setStyle:function(n,na,v){var t=this;return t.run(n,function(e){var s,i;s=e.style;na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(t.pixelStyles.test(na)&&(tinymce.is(v,'number')||/^[\-0-9\.]+$/.test(v)))v+='px';switch(na){case'opacity':if(isIE){s.filter=v===''?'':"alpha(opacity="+(v*100)+")";if(!n.currentStyle||!n.currentStyle.hasLayout)s.display='inline-block';}s[na]=s['-moz-opacity']=s['-khtml-opacity']=v||'';break;case'float':isIE?s.styleFloat=v:s.cssFloat=v;break;default:s[na]=v||'';}if(t.settings.update_styles)t.setAttrib(e,'mce_style');});},getStyle:function(n,na,c){n=this.get(n);if(!n)return false;if(this.doc.defaultView&&c){na=na.replace(/[A-Z]/g,function(a){return'-'+a;});try{return this.doc.defaultView.getComputedStyle(n,null).getPropertyValue(na);}catch(ex){return null;}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(na=='float')na=isIE?'styleFloat':'cssFloat';if(n.currentStyle&&c)return n.currentStyle[na];return n.style[na];},setStyles:function(e,o){var t=this,s=t.settings,ol;ol=s.update_styles;s.update_styles=0;each(o,function(v,n){t.setStyle(e,n,v);});s.update_styles=ol;if(s.update_styles)t.setAttrib(e,s.cssText);},setAttrib:function(e,n,v){var t=this;if(!e||!n)return;if(t.settings.strict)n=n.toLowerCase();return this.run(e,function(e){var s=t.settings;switch(n){case"style":if(!is(v,'string')){each(v,function(v,n){t.setStyle(e,n,v);});return;}if(s.keep_values){if(v&&!t._isRes(v))e.setAttribute('mce_style',v,2);else e.removeAttribute('mce_style',2);}e.style.cssText=v;break;case"class":e.className=v||'';break;case"src":case"href":if(s.keep_values){if(s.url_converter)v=s.url_converter.call(s.url_converter_scope||t,v,n,e);t.setAttrib(e,'mce_'+n,v,2);}break;case"shape":e.setAttribute('mce_style',v);break;}if(is(v)&&v!==null&&v.length!==0)e.setAttribute(n,''+v,2);else e.removeAttribute(n,2);});},setAttribs:function(e,o){var t=this;return this.run(e,function(e){each(o,function(v,n){t.setAttrib(e,n,v);});});},getAttrib:function(e,n,dv){var v,t=this;e=t.get(e);if(!e||e.nodeType!==1)return false;if(!is(dv))dv='';if(/^(src|href|style|coords|shape)$/.test(n)){v=e.getAttribute("mce_"+n);if(v)return v;}if(isIE&&t.props[n]){v=e[t.props[n]];v=v&&v.nodeValue?v.nodeValue:v;}if(!v)v=e.getAttribute(n,2);if(n==='style'){v=v||e.style.cssText;if(v){v=t.serializeStyle(t.parseStyle(v));if(t.settings.keep_values&&!t._isRes(v))e.setAttribute('mce_style',v);}}if(isWebKit&&n==="class"&&v)v=v.replace(/(apple|webkit)\-[a-z\-]+/gi,'');if(isIE){switch(n){case'rowspan':case'colspan':if(v===1)v='';break;case'size':if(v==='+0'||v===20)v='';break;case'width':case'height':case'vspace':case'checked':case'disabled':case'readonly':if(v===0)v='';break;case'hspace':if(v===-1)v='';break;case'maxlength':case'tabindex':if(v===32768||v===2147483647||v==='32768')v='';break;case'compact':case'noshade':case'nowrap':if(v===65535)return n;return dv;case'shape':v=v.toLowerCase();break;default:if(n.indexOf('on')===0&&v)v=(''+v).replace(/^function\s+anonymous\(\)\s+\{\s+(.*)\s+\}$/,'$1');}}return(v!==undefined&&v!==null&&v!=='')?''+v:dv;},getPos:function(n){var t=this,x=0,y=0,e,d=t.doc,r;n=t.get(n);if(n&&isIE){n=n.getBoundingClientRect();e=t.boxModel?d.documentElement:d.body;x=t.getStyle(t.select('html')[0],'borderWidth');x=(x=='medium'||t.boxModel&&!t.isIE6)&&2||x;n.top+=t.win.self!=t.win.top?2:0;return{x:n.left+e.scrollLeft-x,y:n.top+e.scrollTop-x};}r=n;while(r){x+=r.offsetLeft||0;y+=r.offsetTop||0;r=r.offsetParent;}r=n;while(r){if(!/^table-row|inline.*/i.test(t.getStyle(r,"display",1))){x-=r.scrollLeft||0;y-=r.scrollTop||0;}r=r.parentNode;if(r==d.body)break;}return{x:x,y:y};},parseStyle:function(st){var t=this,s=t.settings,o={};if(!st)return o;function compress(p,s,ot){var t,r,b,l;t=o[p+'-top'+s];if(!t)return;r=o[p+'-right'+s];if(t!=r)return;b=o[p+'-bottom'+s];if(r!=b)return;l=o[p+'-left'+s];if(b!=l)return;o[ot]=l;delete o[p+'-top'+s];delete o[p+'-right'+s];delete o[p+'-bottom'+s];delete o[p+'-left'+s];};function compress2(ta,a,b,c){var t;t=o[a];if(!t)return;t=o[b];if(!t)return;t=o[c];if(!t)return;o[ta]=o[a]+' '+o[b]+' '+o[c];delete o[a];delete o[b];delete o[c];};st=st.replace(/&(#?[a-z0-9]+);/g,'&$1_MCE_SEMI_');each(st.split(';'),function(v){var sv,ur=[];if(v){v=v.replace(/_MCE_SEMI_/g,';');v=v.replace(/url\([^\)]+\)/g,function(v){ur.push(v);return'url('+ur.length+')';});v=v.split(':');sv=tinymce.trim(v[1]);sv=sv.replace(/url\(([^\)]+)\)/g,function(a,b){return ur[parseInt(b)-1];});sv=sv.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});if(s.url_converter){sv=sv.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(x,c){return'url('+s.url_converter.call(s.url_converter_scope||t,t.decode(c),'style',null)+')';});}o[tinymce.trim(v[0]).toLowerCase()]=sv;}});compress("border","","border");compress("border","-width","border-width");compress("border","-color","border-color");compress("border","-style","border-style");compress("padding","","padding");compress("margin","","margin");compress2('border','border-width','border-style','border-color');if(isIE){if(o.border=='medium none')o.border='';}return o;},serializeStyle:function(o){var s='';each(o,function(v,k){if(k&&v){if(tinymce.isGecko&&k.indexOf('-moz-')===0)return;switch(k){case'color':case'background-color':v=v.toLowerCase();break;}s+=(s?' ':'')+k+': '+v+';';}});return s;},loadCSS:function(u){var t=this,d=t.doc;if(!u)u='';each(u.split(','),function(u){if(t.files[u])return;t.files[u]=true;t.add(t.select('head')[0],'link',{rel:'stylesheet',href:tinymce._addVer(u)});});},addClass:function(e,c){return this.run(e,function(e){var o;if(!c)return 0;if(this.hasClass(e,c))return e.className;o=this.removeClass(e,c);return e.className=(o!=''?(o+' '):'')+c;});},removeClass:function(e,c){var t=this,re;return t.run(e,function(e){var v;if(t.hasClass(e,c)){if(!re)re=new RegExp("(^|\\s+)"+c+"(\\s+|$)","g");v=e.className.replace(re,' ');return e.className=tinymce.trim(v!=' '?v:'');}return e.className;});},hasClass:function(n,c){n=this.get(n);if(!n||!c)return false;return(' '+n.className+' ').indexOf(' '+c+' ')!==-1;},show:function(e){return this.setStyle(e,'display','block');},hide:function(e){return this.setStyle(e,'display','none');},isHidden:function(e){e=this.get(e);return!e||e.style.display=='none'||this.getStyle(e,'display')=='none';},uniqueId:function(p){return(!p?'mce_':p)+(this.counter++);},setHTML:function(e,h){var t=this;return this.run(e,function(e){var x,i,nl,n,p,x;h=t.processHTML(h);if(isIE){function set(){try{e.innerHTML='<br />'+h;e.removeChild(e.firstChild);}catch(ex){while(e.firstChild)e.firstChild.removeNode();x=t.create('div');x.innerHTML='<br />'+h;each(x.childNodes,function(n,i){if(i)e.appendChild(n);});}};if(t.settings.fix_ie_paragraphs)h=h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi,'<p$1 mce_keep="true"> </p>');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("p");for(i=nl.length-1,x=0;i>=0;i--){n=nl[i];if(!n.hasChildNodes()){if(!n.mce_keep){x=1;break;}n.removeAttribute('mce_keep');}}}if(x){h=h.replace(/<p ([^>]+)>|<p>/g,'<div $1 mce_tmp="1">');h=h.replace(/<\/p>/g,'</div>');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("DIV");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.mce_tmp){p=t.doc.createElement('p');n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(a,b){var v;if(b!=='mce_tmp'){v=n.getAttribute(b);if(!v&&b==='class')v=n.className;p.setAttribute(b,v);}});for(x=0;x<n.childNodes.length;x++)p.appendChild(n.childNodes[x].cloneNode(true));n.swapNode(p);}}}}}else e.innerHTML=h;return h;});},processHTML:function(h){var t=this,s=t.settings;if(!s.process_html)return h;if(tinymce.isGecko){h=h.replace(/<(\/?)strong>|<strong( [^>]+)>/gi,'<$1b$2>');h=h.replace(/<(\/?)em>|<em( [^>]+)>/gi,'<$1i$2>');}else if(isIE){h=h.replace(/'/g,''');h=h.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi,'');}h=h.replace(/<a( )([^>]+)\/>|<a\/>/gi,'<a$1$2></a>');if(s.keep_values){if(/<script|style/.test(h)){function trim(s){s=s.replace(/(<!--\[CDATA\[|\]\]-->)/g,'\n');s=s.replace(/^[\r\n]*|[\r\n]*$/g,'');s=s.replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g,'');s=s.replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g,'');return s;};h=h.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/g,function(v,a,b){b=trim(b);if(!a)a=' type="text/javascript"';if(b)b='<!--\n'+b+'\n// -->';return'<mce:script'+a+'>'+b+'</mce:script>';});h=h.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/g,function(v,a,b){b=trim(b);return'<mce:style'+a+'><!--\n'+b+'\n--></mce:style><style'+a+' mce_bogus="1">'+b+'</style>';});}h=h.replace(/<!\[CDATA\[([\s\S]+)\]\]>/g,'<!--[CDATA[$1]]-->');h=h.replace(/<([\w:]+) [^>]*(src|href|style|shape|coords)[^>]*>/gi,function(a,n){function handle(m,b,c){var u=c;if(a.indexOf('mce_'+b)!=-1)return m;if(b=='style'){if(t._isRes(c))return m;if(s.hex_colors){u=u.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});}if(s.url_converter){u=u.replace(/url\([\'\"]?([^\)\'\"]+)\)/g,function(x,c){return'url('+t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n))+')';});}}else if(b!='coords'&&b!='shape'){if(s.url_converter)u=t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n));}return' '+b+'="'+c+'" mce_'+b+'="'+u+'"';};a=a.replace(/ (src|href|style|coords|shape)=[\"]([^\"]+)[\"]/gi,handle);a=a.replace(/ (src|href|style|coords|shape)=[\']([^\']+)[\']/gi,handle);return a.replace(/ (src|href|style|coords|shape)=([^\s\"\'>]+)/gi,handle);});}return h;},getOuterHTML:function(e){var d;e=this.get(e);if(!e)return null;if(isIE)return e.outerHTML;d=(e.ownerDocument||this.doc).createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML;},setOuterHTML:function(e,h,d){var t=this;return this.run(e,function(e){var n,tp;e=t.get(e);d=d||e.ownerDocument||t.doc;if(isIE&&e.nodeType==1)e.outerHTML=h;else{tp=d.createElement("body");tp.innerHTML=h;n=tp.lastChild;while(n){t.insertAfter(n.cloneNode(true),e);n=n.previousSibling;}t.remove(e);}});},decode:function(s){var e,n,v;if(/&[^;]+;/.test(s)){e=this.doc.createElement("div");e.innerHTML=s;n=e.firstChild;v='';if(n){do{v+=n.nodeValue;}while(n.nextSibling);}return v||s;}return s;},encode:function(s){return s?(''+s).replace(/[<>&\"]/g,function(c,b){switch(c){case'&':return'&';case'"':return'"';case'<':return'<';case'>':return'>';}return c;}):s;},insertAfter:function(n,r){var t=this;r=t.get(r);return this.run(n,function(n){var p,ns;p=r.parentNode;ns=r.nextSibling;if(ns)p.insertBefore(n,ns);else p.appendChild(n);return n;});},isBlock:function(n){if(n.nodeType&&n.nodeType!==1)return false;n=n.nodeName||n;return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n);},replace:function(n,o,k){if(is(o,'array'))n=n.cloneNode(true);return this.run(o,function(o){if(k){each(o.childNodes,function(c){n.appendChild(c.cloneNode(true));});}return o.parentNode.replaceChild(n,o);});},toHex:function(s){var c=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);function hex(s){s=parseInt(s).toString(16);return s.length>1?s:'0'+s;};if(c){s='#'+hex(c[1])+hex(c[2])+hex(c[3]);return s;}return s;},getClasses:function(){var t=this,cl=[],i,lo={},f=t.settings.class_filter,ov;if(t.classes)return t.classes;function addClasses(s){each(s.imports,function(r){addClasses(r);});each(s.cssRules||s.rules,function(r){switch(r.type||1){case 1:if(r.selectorText){each(r.selectorText.split(','),function(v){v=v.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(v)||!/\.[\w\-]+$/.test(v))return;ov=v;v=v.replace(/.*\.([a-z0-9_\-]+).*/i,'$1');if(f&&!(v=f(v,ov)))return;if(!lo[v]){cl.push({'class':v});lo[v]=1;}});}break;case 3:addClasses(r.styleSheet);break;}});};try{each(t.doc.styleSheets,addClasses);}catch(ex){}if(cl.length>0)t.classes=cl;return cl;},run:function(e,f,s){var t=this,o;if(t.doc&&typeof(e)==='string')e=t.get(e);if(!e)return false;s=s||this;if(!e.nodeType&&(e.length||e.length===0)){o=[];each(e,function(e,i){if(e){if(typeof(e)=='string')e=t.doc.getElementById(e);o.push(f.call(s,e,i));}});return o;}return f.call(s,e);},getAttribs:function(n){var o;n=this.get(n);if(!n)return[];if(isIE){o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;}return n.attributes;},destroy:function(s){var t=this;t.win=t.doc=t.root=null;if(!s)tinymce.removeUnload(t.destroy);},_isRes:function(c){return/^(top|left|bottom|right|width|height)/i.test(c)||/;\s*(top|left|bottom|right|width|height)/i.test(c);}});tinymce.DOM=new tinymce.dom.DOMUtils(document,{process_html:0});})();(function(){var each=tinymce.each,DOM=tinymce.DOM,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit,Event;tinymce.create('static tinymce.dom.Event',{inits:[],events:[],add:function(o,n,f,s){var cb,t=this,el=t.events,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.add(o,n,f,s));});return r;}o=DOM.get(o);if(!o)return;cb=function(e){e=e||window.event;if(e&&!e.target&&isIE)e.target=e.srcElement;if(!s)return f(e);return f.call(s,e);};if(n=='unload'){tinymce.unloads.unshift({func:cb});return cb;}if(n=='init'){if(t.domLoaded)cb();else t.inits.push(cb);return cb;}el.push({obj:o,name:n,func:f,cfunc:cb,scope:s});t._add(o,n,cb);return f;},remove:function(o,n,f){var t=this,a=t.events,s=false,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.remove(o,n,f));});return r;}o=DOM.get(o);each(a,function(e,i){if(e.obj==o&&e.name==n&&(!f||(e.func==f||e.cfunc==f))){a.splice(i,1);t._remove(o,n,e.cfunc);s=true;return false;}});return s;},clear:function(o){var t=this,a=t.events,i,e;if(o){o=DOM.get(o);for(i=a.length-1;i>=0;i--){e=a[i];if(e.obj===o){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;a.splice(i,1);}}}},cancel:function(e){if(!e)return false;this.stop(e);return this.prevent(e);},stop:function(e){if(e.stopPropagation)e.stopPropagation();else e.cancelBubble=true;return false;},prevent:function(e){if(e.preventDefault)e.preventDefault();else e.returnValue=false;return false;},_unload:function(){var t=Event;each(t.events,function(e,i){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;});t.events=[];t=null;},_add:function(o,n,f){if(o.attachEvent)o.attachEvent('on'+n,f);else if(o.addEventListener)o.addEventListener(n,f,false);else o['on'+n]=f;},_remove:function(o,n,f){if(o){try{if(o.detachEvent)o.detachEvent('on'+n,f);else if(o.removeEventListener)o.removeEventListener(n,f,false);else o['on'+n]=null;}catch(ex){}}},_pageInit:function(){var e=Event;if(e.domLoaded)return;e._remove(window,'DOMContentLoaded',e._pageInit);e.domLoaded=true;each(e.inits,function(c){c();});e.inits=[];},_wait:function(){var t;if(window.tinyMCE_GZ&&tinyMCE_GZ.loaded){Event.domLoaded=1;return;}if(isIE&&document.location.protocol!='https:'){document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');DOM.get("__ie_onload").onreadystatechange=function(){if(this.readyState=="complete"){Event._pageInit();DOM.get("__ie_onload").onreadystatechange=null;}};}else{Event._add(window,'DOMContentLoaded',Event._pageInit,Event);if(isIE||isWebKit){t=setInterval(function(){if(/loaded|complete/.test(document.readyState)){clearInterval(t);Event._pageInit();}},10);}}}});Event=tinymce.dom.Event;Event._wait();tinymce.addUnload(Event._unload);})();(function(){var each=tinymce.each;tinymce.create('tinymce.dom.Element',{Element:function(id,s){var t=this,dom,el;s=s||{};t.id=id;t.dom=dom=s.dom||tinymce.DOM;t.settings=s;if(!tinymce.isIE)el=t.dom.get(t.id);each(['getPos','getRect','getParent','add','setStyle','getStyle','setStyles','setAttrib','setAttribs','getAttrib','addClass','removeClass','hasClass','getOuterHTML','setOuterHTML','remove','show','hide','isHidden','setHTML','get'],function(k){t[k]=function(){var a=arguments,o;if(tinymce.isOpera){a=[id];each(arguments,function(v){a.push(v);});}else Array.prototype.unshift.call(a,el||id);o=dom[k].apply(dom,a);t.update(k);return o;};});},on:function(n,f,s){return tinymce.dom.Event.add(this.id,n,f,s);},getXY:function(){return{x:parseInt(this.getStyle('left')),y:parseInt(this.getStyle('top'))};},getSize:function(){var n=this.dom.get(this.id);return{w:parseInt(this.getStyle('width')||n.clientWidth),h:parseInt(this.getStyle('height')||n.clientHeight)};},moveTo:function(x,y){this.setStyles({left:x,top:y});},moveBy:function(x,y){var p=this.getXY();this.moveTo(p.x+x,p.y+y);},resizeTo:function(w,h){this.setStyles({width:w,height:h});},resizeBy:function(w,h){var s=this.getSize();this.resizeTo(s.w+w,s.h+h);},update:function(k){var t=this,b,dom=t.dom;if(tinymce.isIE6&&t.settings.blocker){k=k||'';if(k.indexOf('get')===0||k.indexOf('has')===0||k.indexOf('is')===0)return;if(k=='remove'){dom.remove(t.blocker);return;}if(!t.blocker){t.blocker=dom.uniqueId();b=dom.add(t.settings.container||dom.getRoot(),'iframe',{id:t.blocker,style:'position:absolute;',frameBorder:0,src:'javascript:""'});dom.setStyle(b,'opacity',0);}else b=dom.get(t.blocker);dom.setStyle(b,'left',t.getStyle('left',1));dom.setStyle(b,'top',t.getStyle('top',1));dom.setStyle(b,'width',t.getStyle('width',1));dom.setStyle(b,'height',t.getStyle('height',1));dom.setStyle(b,'display',t.getStyle('display',1));dom.setStyle(b,'zIndex',parseInt(t.getStyle('zIndex',1)||0)-1);}}});})();(function(){function trimNl(s){return s.replace(/[\n\r]+/g,'');};var is=tinymce.is,isIE=tinymce.isIE,each=tinymce.each;tinymce.create('tinymce.dom.Selection',{Selection:function(dom,win,serializer){var t=this;t.dom=dom;t.win=win;t.serializer=serializer;each(['onBeforeSetContent','onBeforeGetContent','onSetContent','onGetContent'],function(e){t[e]=new tinymce.util.Dispatcher(t);});tinymce.addUnload(t.destroy,t);},getContent:function(s){var t=this,r=t.getRng(),e=t.dom.create("body"),se=t.getSel(),wb,wa,n;s=s||{};wb=wa='';s.get=true;s.format=s.format||'html';t.onBeforeGetContent.dispatch(t,s);if(s.format=='text')return t.isCollapsed()?'':(r.text||(se.toString?se.toString():''));if(r.cloneContents){n=r.cloneContents();if(n)e.appendChild(n);}else if(is(r.item)||is(r.htmlText))e.innerHTML=r.item?r.item(0).outerHTML:r.htmlText;else e.innerHTML=r.toString();if(/^\s/.test(e.innerHTML))wb=' ';if(/\s+$/.test(e.innerHTML))wa=' ';s.getInner=true;s.content=t.isCollapsed()?'':wb+t.serializer.serialize(e,s)+wa;t.onGetContent.dispatch(t,s);return s.content;},setContent:function(h,s){var t=this,r=t.getRng(),c,d=t.win.document;s=s||{format:'html'};s.set=true;h=s.content=t.dom.processHTML(h);t.onBeforeSetContent.dispatch(t,s);h=s.content;if(r.insertNode){h+='<span id="__caret">_</span>';r.deleteContents();r.insertNode(t.getRng().createContextualFragment(h));c=t.dom.get('__caret');r=d.createRange();r.setStartBefore(c);r.setEndAfter(c);t.setRng(r);d.execCommand('Delete',false,null);t.dom.remove('__caret');}else{if(r.item){d.execCommand('Delete',false,null);r=t.getRng();}r.pasteHTML(h);}t.onSetContent.dispatch(t,s);},getStart:function(){var t=this,r=t.getRng(),e;if(isIE){if(r.item)return r.item(0);r=r.duplicate();r.collapse(1);e=r.parentElement();if(e&&e.nodeName=='BODY')return e.firstChild;return e;}else{e=r.startContainer;if(e.nodeName=='BODY')return e.firstChild;return t.dom.getParent(e,function(n){return n.nodeType==1;});}},getEnd:function(){var t=this,r=t.getRng(),e;if(isIE){if(r.item)return r.item(0);r=r.duplicate();r.collapse(0);e=r.parentElement();if(e&&e.nodeName=='BODY')return e.lastChild;return e;}else{e=r.endContainer;if(e.nodeName=='BODY')return e.lastChild;return t.dom.getParent(e,function(n){return n.nodeType==1;});}},getBookmark:function(si){var t=this,r=t.getRng(),tr,sx,sy,vp=t.dom.getViewPort(t.win),e,sp,bp,le,c=-0xFFFFFF,s,ro=t.dom.getRoot(),wb=0,wa=0,nv;sx=vp.x;sy=vp.y;if(si=='simple')return{rng:r,scrollX:sx,scrollY:sy};if(isIE){if(r.item){e=r.item(0);each(t.dom.select(e.nodeName),function(n,i){if(e==n){sp=i;return false;}});return{tag:e.nodeName,index:sp,scrollX:sx,scrollY:sy};}tr=t.dom.doc.body.createTextRange();tr.moveToElementText(ro);tr.collapse(true);bp=Math.abs(tr.move('character',c));tr=r.duplicate();tr.collapse(true);sp=Math.abs(tr.move('character',c));tr=r.duplicate();tr.collapse(false);le=Math.abs(tr.move('character',c))-sp;return{start:sp-bp,length:le,scrollX:sx,scrollY:sy};}e=t.getNode();s=t.getSel();if(!s)return null;if(e&&e.nodeName=='IMG'){return{scrollX:sx,scrollY:sy};}function getPos(r,sn,en){var w=t.dom.doc.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d;}p+=trimNl(n.nodeValue||'').length;}return null;};if(s.anchorNode==s.focusNode&&s.anchorOffset==s.focusOffset){e=getPos(ro,s.anchorNode,s.focusNode);if(!e)return{scrollX:sx,scrollY:sy};trimNl(s.anchorNode.nodeValue||'').replace(/^\s+/,function(a){wb=a.length;});return{start:Math.max(e.start+s.anchorOffset-wb,0),end:Math.max(e.end+s.focusOffset-wb,0),scrollX:sx,scrollY:sy,beg:s.anchorOffset-wb==0};}else{e=getPos(ro,r.startContainer,r.endContainer);if(!e)return{scrollX:sx,scrollY:sy};return{start:Math.max(e.start+r.startOffset-wb,0),end:Math.max(e.end+r.endOffset-wa,0),scrollX:sx,scrollY:sy,beg:r.startOffset-wb==0};}},moveToBookmark:function(b){var t=this,r=t.getRng(),s=t.getSel(),ro=t.dom.getRoot(),sd,nvl,nv;function getPos(r,sp,ep){var w=t.dom.doc.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={},o,v,wa,wb;while((n=w.nextNode())!=null){wa=wb=0;nv=n.nodeValue||'';nvl=trimNl(nv).length;p+=nvl;if(p>=sp&&!d.startNode){o=sp-(p-nvl);if(b.beg&&o>=nvl)continue;d.startNode=n;d.startOffset=o+wb;}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-nvl)+wb;return d;}}return null;};if(!b)return false;t.win.scrollTo(b.scrollX,b.scrollY);if(isIE){if(r=b.rng){try{r.select();}catch(ex){}return true;}t.win.focus();if(b.tag){r=ro.createControlRange();each(t.dom.select(b.tag),function(n,i){if(i==b.index)r.addElement(n);});}else{try{if(b.start<0)return true;r=s.createRange();r.moveToElementText(ro);r.collapse(true);r.moveStart('character',b.start);r.moveEnd('character',b.length);}catch(ex2){return true;}}try{r.select();}catch(ex){}return true;}if(!s)return false;if(b.rng){s.removeAllRanges();s.addRange(b.rng);}else{if(is(b.start)&&is(b.end)){try{sd=getPos(ro,b.start,b.end);if(sd){r=t.dom.doc.createRange();r.setStart(sd.startNode,sd.startOffset);r.setEnd(sd.endNode,sd.endOffset);s.removeAllRanges();s.addRange(r);}if(!tinymce.isOpera)t.win.focus();}catch(ex){}}}},select:function(n,c){var t=this,r=t.getRng(),s=t.getSel(),b,fn,ln,d=t.win.document;function first(n){return n?d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false).nextNode():null;};function last(n){var c,o,w;if(!n)return null;w=d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while(c=w.nextNode())o=c;return o;};if(isIE){try{b=d.body;if(/^(IMG|TABLE)$/.test(n.nodeName)){r=b.createControlRange();r.addElement(n);}else{r=b.createTextRange();r.moveToElementText(n);}r.select();}catch(ex){}}else{if(c){fn=first(n);ln=last(n);if(fn&&ln){r=d.createRange();r.setStart(fn,0);r.setEnd(ln,ln.nodeValue.length);}else r.selectNode(n);}else r.selectNode(n);t.setRng(r);}return n;},isCollapsed:function(){var t=this,r=t.getRng(),s=t.getSel();if(!r||r.item)return false;return!s||r.boundingWidth==0||r.collapsed;},collapse:function(b){var t=this,r=t.getRng(),n;if(r.item){n=r.item(0);r=this.win.document.body.createTextRange();r.moveToElementText(n);}r.collapse(!!b);t.setRng(r);},getSel:function(){var t=this,w=this.win;return w.getSelection?w.getSelection():w.document.selection;},getRng:function(){var t=this,s=t.getSel(),r;try{if(s)r=s.rangeCount>0?s.getRangeAt(0):(s.createRange?s.createRange():t.win.document.createRange());}catch(ex){}if(!r)r=isIE?t.win.document.body.createTextRange():t.win.document.createRange();return r;},setRng:function(r){var s;if(!isIE){s=this.getSel();if(s){s.removeAllRanges();s.addRange(r);}}else{try{r.select();}catch(ex){}}},setNode:function(n){var t=this;t.setContent(t.dom.getOuterHTML(n));return n;},getNode:function(){var t=this,r=t.getRng(),s=t.getSel(),e;if(!isIE){if(!r)return t.dom.getRoot();e=r.commonAncestorContainer;if(!r.collapsed){if(tinymce.isWebKit&&s.anchorNode&&s.anchorNode.nodeType==1)return s.anchorNode.childNodes[s.anchorOffset];if(r.startContainer==r.endContainer){if(r.startOffset-r.endOffset<2){if(r.startContainer.hasChildNodes())e=r.startContainer.childNodes[r.startOffset];}}}return t.dom.getParent(e,function(n){return n.nodeType==1;});}return r.item?r.item(0):r.parentElement();},destroy:function(s){var t=this;t.win=null;if(!s)tinymce.removeUnload(t.destroy);}});})();(function(){tinymce.create('tinymce.dom.XMLWriter',{node:null,XMLWriter:function(s){function getXML(){var i=document.implementation;if(!i||!i.createDocument){try{return new ActiveXObject('MSXML2.DOMDocument');}catch(ex){}try{return new ActiveXObject('Microsoft.XmlDom');}catch(ex){}}else return i.createDocument('','',null);};this.doc=getXML();this.valid=tinymce.isOpera||tinymce.isWebKit;this.reset();},reset:function(){var t=this,d=t.doc;if(d.firstChild)d.removeChild(d.firstChild);t.node=d.appendChild(d.createElement("html"));},writeStartElement:function(n){var t=this;t.node=t.node.appendChild(t.doc.createElement(n));},writeAttribute:function(n,v){if(this.valid)v=v.replace(/>/g,'%MCGT%');this.node.setAttribute(n,v);},writeEndElement:function(){this.node=this.node.parentNode;},writeFullEndElement:function(){var t=this,n=t.node;n.appendChild(t.doc.createTextNode(""));t.node=n.parentNode;},writeText:function(v){if(this.valid)v=v.replace(/>/g,'%MCGT%');this.node.appendChild(this.doc.createTextNode(v));},writeCDATA:function(v){this.node.appendChild(this.doc.createCDATA(v));},writeComment:function(v){if(tinymce.isIE)v=v.replace(/^\-|\-$/g,' ');this.node.appendChild(this.doc.createComment(v.replace(/\-\-/g,' ')));},getContent:function(){var h;h=this.doc.xml||new XMLSerializer().serializeToString(this.doc);h=h.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g,'');h=h.replace(/ ?\/>/g,' />');if(this.valid)h=h.replace(/\%MCGT%/g,'>');return h;}});})();(function(){tinymce.create('tinymce.dom.StringWriter',{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(s){this.settings=tinymce.extend({indent_char:' ',indentation:1},s);this.reset();},reset:function(){this.indent='';this.str="";this.tags=[];this.count=0;},writeStartElement:function(n){this._writeAttributesEnd();this.writeRaw('<'+n);this.tags.push(n);this.inAttr=true;this.count++;this.elementCount=this.count;},writeAttribute:function(n,v){var t=this;t.writeRaw(" "+t.encode(n)+'="'+t.encode(v)+'"');},writeEndElement:function(){var n;if(this.tags.length>0){n=this.tags.pop();if(this._writeAttributesEnd(1))this.writeRaw('</'+n+'>');if(this.settings.indentation>0)this.writeRaw('\n');}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw('</'+this.tags.pop()+'>');if(this.settings.indentation>0)this.writeRaw('\n');}},writeText:function(v){this._writeAttributesEnd();this.writeRaw(this.encode(v));this.count++;},writeCDATA:function(v){this._writeAttributesEnd();this.writeRaw('<![CDATA['+v+']]>');this.count++;},writeComment:function(v){this._writeAttributesEnd();this.writeRaw('<!-- '+v+'-->');this.count++;},writeRaw:function(v){this.str+=v;},encode:function(s){return s.replace(/[<>&"]/g,function(v){switch(v){case'<':return'<';case'>':return'>';case'&':return'&';case'"':return'"';}return v;});},getContent:function(){return this.str;},_writeAttributesEnd:function(s){if(!this.inAttr)return;this.inAttr=false;if(s&&this.elementCount==this.count){this.writeRaw(' />');return false;}this.writeRaw('>');return true;}});})();(function(){var extend=tinymce.extend,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher,isIE=tinymce.isIE,isGecko=tinymce.isGecko;function getIEAtts(n){var o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;};function wildcardToRE(s){return s.replace(/([?+*])/g,'.$1');};tinymce.create('tinymce.dom.Serializer',{Serializer:function(s){var t=this;t.key=0;t.onPreProcess=new Dispatcher(t);t.onPostProcess=new Dispatcher(t);if(tinymce.relaxedDomain&&tinymce.isGecko){t.writer=new tinymce.dom.StringWriter();}else{try{t.writer=new tinymce.dom.XMLWriter();}catch(ex){t.writer=new tinymce.dom.StringWriter();}}t.settings=s=extend({dom:tinymce.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(mce_|_moz_)/,closed:/(br|hr|input|meta|img|link|param)/,entity_encoding:'named',entities:'160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro',bool_attrs:/(checked|disabled|readonly|selected|nowrap)/,valid_elements:'*[*]',extended_valid_elements:0,valid_child_elements:0,invalid_elements:0,fix_table_elements:0,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,font_size_style_values:0,apply_source_formatting:0,indent_mode:'simple',indent_char:'\t',indent_levels:1,remove_linebreaks:1,remove_redundant_brs:1,element_format:'xhtml'},s);t.dom=s.dom;if(s.remove_redundant_brs){t.onPostProcess.add(function(se,o){o.content=o.content.replace(/<br \/>(\s*<\/li>)/g,'$1');});}if(s.element_format=='html'){t.onPostProcess.add(function(se,o){o.content=o.content.replace(/<([^>]+) \/>/g,'<$1>');});}if(s.fix_list_elements){t.onPreProcess.add(function(se,o){var nl,x,a=['ol','ul'],i,n,p,r=/^(OL|UL)$/,np;function prevNode(e,n){var a=n.split(','),i;while((e=e.previousSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e;}}return null;};for(x=0;x<a.length;x++){nl=t.dom.select(a[x],o.node);for(i=0;i<nl.length;i++){n=nl[i];p=n.parentNode;if(r.test(p.nodeName)){np=prevNode(n,'LI');if(!np){np=t.dom.create('li');np.innerHTML=' ';np.appendChild(n);p.insertBefore(np,p.firstChild);}else np.appendChild(n);}}}});}if(s.fix_table_elements){t.onPreProcess.add(function(se,o){each(t.dom.select('table',o.node),function(e){var pa=t.dom.getParent(e,'H1,H2,H3,H4,H5,H6,P'),pa2,n,tm,pl=[],i,ns;if(pa){pa2=pa.cloneNode(false);pl.push(e);for(n=e;n=n.parentNode;){pl.push(n);if(n==pa)break;}tm=pa2;for(i=pl.length-1;i>=0;i--){if(i==pl.length-1){while(ns=pl[i-1].nextSibling)tm.appendChild(ns.parentNode.removeChild(ns));}else{n=pl[i].cloneNode(false);if(i!=0){while(ns=pl[i-1].nextSibling)n.appendChild(ns.parentNode.removeChild(ns));}tm=tm.appendChild(n);}}e=t.dom.insertAfter(e.parentNode.removeChild(e),pa);t.dom.insertAfter(e,pa);t.dom.insertAfter(pa2,e);}});});}},setEntities:function(s){var t=this,a,i,l={},re='',v;if(t.entityLookup)return;a=s.split(',');for(i=0;i<a.length;i+=2){v=a[i];if(v==34||v==38||v==60||v==62)continue;l[String.fromCharCode(a[i])]=a[i+1];v=parseInt(a[i]).toString(16);re+='\\u'+'0000'.substring(v.length)+v;}if(!re){t.settings.entity_encoding='raw';return;}t.entitiesRE=new RegExp('['+re+']','g');t.entityLookup=l;},setValidChildRules:function(s){this.childRules=null;this.addValidChildRules(s);},addValidChildRules:function(s){var t=this,inst,intr,bloc;if(!s)return;inst='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';intr='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';bloc='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';each(s.split(','),function(s){var p=s.split(/\[|\]/),re;s='';each(p[1].split('|'),function(v){if(s)s+='|';switch(v){case'%itrans':v=intr;break;case'%itrans_na':v=intr.substring(2);break;case'%istrict':v=inst;break;case'%istrict_na':v=inst.substring(2);break;case'%btrans':v=bloc;break;case'%bstrict':v=bloc;break;}s+=v;});re=new RegExp('^('+s.toLowerCase()+')$','i');each(p[0].split('/'),function(s){t.childRules=t.childRules||{};t.childRules[s]=re;});});s='';each(t.childRules,function(v,k){if(s)s+='|';s+=k;});t.parentElementsRE=new RegExp('^('+s.toLowerCase()+')$','i');},setRules:function(s){var t=this;t._setup();t.rules={};t.wildRules=[];t.validElements={};return t.addRules(s);},addRules:function(s){var t=this,dr;if(!s)return;t._setup();each(s.split(','),function(s){var p=s.split(/\[|\]/),tn=p[0].split('/'),ra,at,wat,va=[];if(dr)at=tinymce.extend([],dr.attribs);if(p.length>1){each(p[1].split('|'),function(s){var ar={},i;at=at||[];s=s.replace(/::/g,'~');s=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(s);s[2]=s[2].replace(/~/g,':');if(s[1]=='!'){ra=ra||[];ra.push(s[2]);}if(s[1]=='-'){for(i=0;i<at.length;i++){if(at[i].name==s[2]){at.splice(i,1);return;}}}switch(s[3]){case'=':ar.defaultVal=s[4]||'';break;case':':ar.forcedVal=s[4];break;case'<':ar.validVals=s[4].split('?');break;}if(/[*.?]/.test(s[2])){wat=wat||[];ar.nameRE=new RegExp('^'+wildcardToRE(s[2])+'$');wat.push(ar);}else{ar.name=s[2];at.push(ar);}va.push(s[2]);});}each(tn,function(s,i){var pr=s.charAt(0),x=1,ru={};if(dr){if(dr.noEmpty)ru.noEmpty=dr.noEmpty;if(dr.fullEnd)ru.fullEnd=dr.fullEnd;if(dr.padd)ru.padd=dr.padd;}switch(pr){case'-':ru.noEmpty=true;break;case'+':ru.fullEnd=true;break;case'#':ru.padd=true;break;default:x=0;}tn[i]=s=s.substring(x);t.validElements[s]=1;if(/[*.?]/.test(tn[0])){ru.nameRE=new RegExp('^'+wildcardToRE(tn[0])+'$');t.wildRules=t.wildRules||{};t.wildRules.push(ru);}else{ru.name=tn[0];if(tn[0]=='@')dr=ru;t.rules[s]=ru;}ru.attribs=at;if(ra)ru.requiredAttribs=ra;if(wat){s='';each(va,function(v){if(s)s+='|';s+='('+wildcardToRE(v)+')';});ru.validAttribsRE=new RegExp('^'+s.toLowerCase()+'$');ru.wildAttribs=wat;}});});s='';each(t.validElements,function(v,k){if(s)s+='|';if(k!='@')s+=k;});t.validElementsRE=new RegExp('^('+wildcardToRE(s.toLowerCase())+')$');},findRule:function(n){var t=this,rl=t.rules,i,r;t._setup();r=rl[n];if(r)return r;rl=t.wildRules;for(i=0;i<rl.length;i++){if(rl[i].nameRE.test(n))return rl[i];}return null;},findAttribRule:function(ru,n){var i,wa=ru.wildAttribs;for(i=0;i<wa.length;i++){if(wa[i].nameRE.test(n))return wa[i];}return null;},serialize:function(n,o){var h,t=this;t._setup();o=o||{};o.format=o.format||'html';t.processObj=o;n=n.cloneNode(true);t.key=''+(parseInt(t.key)+1);if(!o.no_events){o.node=n;t.onPreProcess.dispatch(t,o);}t.writer.reset();t._serializeNode(n,o.getInner);o.content=t.writer.getContent();if(!o.no_events)t.onPostProcess.dispatch(t,o);t._postProcess(o);o.node=null;return tinymce.trim(o.content);},_postProcess:function(o){var t=this,s=t.settings,h=o.content,sc=[],p;if(o.format=='html'){p=t._protect({content:h,patterns:[{pattern:/(<script[^>]*>)(.*?)(<\/script>)/g},{pattern:/(<style[^>]*>)(.*?)(<\/style>)/g},{pattern:/(<pre[^>]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/(<!--\[CDATA\[)(.*?)(\]\]-->)/g}]});h=p.content;if(s.entity_encoding!=='raw')h=t._encode(h);if(!o.set){h=h.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g,s.entity_encoding=='numeric'?'<p$1> </p>':'<p$1> </p>');if(s.remove_linebreaks){h=h.replace(/\r?\n|\r/g,' ');h=h.replace(/(<[^>]+>)\s+/g,'$1 ');h=h.replace(/\s+(<\/[^>]+>)/g,' $1');h=h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,'<$1 $2>');h=h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,'<$1>');h=h.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,'</$1>');}if(s.apply_source_formatting&&s.indent_mode=='simple'){h=h.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,'\n<$1$2$3>\n');h=h.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,'\n<$1$2>');h=h.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,'</$1>\n');h=h.replace(/\n\n/g,'\n');}}h=t._unprotect(h,p);h=h.replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g,'<![CDATA[$1]]>');if(s.entity_encoding=='raw')h=h.replace(/<p> <\/p>|<p([^>]+)> <\/p>/g,'<p$1>\u00a0</p>');}o.content=h;},_serializeNode:function(n,inn){var t=this,s=t.settings,w=t.writer,hc,el,cn,i,l,a,at,no,v,nn,ru,ar,iv;if(!s.node_filter||s.node_filter(n)){switch(n.nodeType){case 1:if(n.hasAttribute?n.hasAttribute('mce_bogus'):n.getAttribute('mce_bogus'))return;iv=false;hc=n.hasChildNodes();nn=n.getAttribute('mce_name')||n.nodeName.toLowerCase();if(isIE){if(n.scopeName!=='HTML'&&n.scopeName!=='html')nn=n.scopeName+':'+nn;}if(nn.indexOf('mce:')===0)nn=nn.substring(4);if(!t.validElementsRE.test(nn)||(t.invalidElementsRE&&t.invalidElementsRE.test(nn))||inn){iv=true;break;}if(isIE){if(s.fix_content_duplication){if(n.mce_serialized==t.key)return;n.mce_serialized=t.key;}if(nn.charAt(0)=='/')nn=nn.substring(1);}else if(isGecko){if(n.nodeName==='BR'&&n.getAttribute('type')=='_moz')return;}if(t.childRules){if(t.parentElementsRE.test(t.elementName)){if(!t.childRules[t.elementName].test(nn)){iv=true;break;}}t.elementName=nn;}ru=t.findRule(nn);nn=ru.name||nn;if((!hc&&ru.noEmpty)||(isIE&&!nn)){iv=true;break;}if(ru.requiredAttribs){a=ru.requiredAttribs;for(i=a.length-1;i>=0;i--){if(this.dom.getAttrib(n,a[i])!=='')break;}if(i==-1){iv=true;break;}}w.writeStartElement(nn);if(ru.attribs){for(i=0,at=ru.attribs,l=at.length;i<l;i++){a=at[i];v=t._getAttrib(n,a);if(v!==null)w.writeAttribute(a.name,v);}}if(ru.validAttribsRE){at=isIE?getIEAtts(n):n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified){a=no.nodeName.toLowerCase();if(s.invalid_attrs.test(a)||!ru.validAttribsRE.test(a))continue;ar=t.findAttribRule(ru,a);v=t._getAttrib(n,ar,a);if(v!==null)w.writeAttribute(a,v);}}}if(ru.padd){if(hc&&(cn=n.firstChild)&&cn.nodeType===1&&n.childNodes.length===1){if(cn.hasAttribute?cn.hasAttribute('mce_bogus'):cn.getAttribute('mce_bogus'))w.writeText('\u00a0');}else if(!hc)w.writeText('\u00a0');}break;case 3:if(t.childRules&&t.parentElementsRE.test(t.elementName)){if(!t.childRules[t.elementName].test(n.nodeName))return;}return w.writeText(n.nodeValue);case 4:return w.writeCDATA(n.nodeValue);case 8:return w.writeComment(n.nodeValue);}}else if(n.nodeType==1)hc=n.hasChildNodes();if(hc){cn=n.firstChild;while(cn){t._serializeNode(cn);t.elementName=nn;cn=cn.nextSibling;}}if(!iv){if(hc||!s.closed.test(nn))w.writeFullEndElement();else w.writeEndElement();}},_protect:function(o){var t=this;o.items=o.items||[];function enc(s){return s.replace(/[\r\n\\]/g,function(c){if(c==='\n')return'\\n';else if(c==='\\')return'\\\\';return'\\r';});};function dec(s){return s.replace(/\\[\\rn]/g,function(c){if(c==='\\n')return'\n';else if(c==='\\\\')return'\\';return'\r';});};each(o.patterns,function(p){o.content=dec(enc(o.content).replace(p.pattern,function(x,a,b,c){b=dec(b);if(p.encode)b=t._encode(b);o.items.push(b);return a+'<!--mce:'+(o.items.length-1)+'-->'+c;}));});return o;},_unprotect:function(h,o){h=h.replace(/\<!--mce:([0-9]+)--\>/g,function(a,b){return o.items[parseInt(b)];});o.items=[];return h;},_encode:function(h){var t=this,s=t.settings,l;if(s.entity_encoding!=='raw'){if(s.entity_encoding.indexOf('named')!=-1){t.setEntities(s.entities);l=t.entityLookup;h=h.replace(t.entitiesRE,function(a){var v;if(v=l[a])a='&'+v+';';return a;});}if(s.entity_encoding.indexOf('numeric')!=-1){h=h.replace(/[\u007E-\uFFFF]/g,function(a){return'&#'+a.charCodeAt(0)+';';});}}return h;},_setup:function(){var t=this,s=this.settings;if(t.done)return;t.done=1;t.setRules(s.valid_elements);t.addRules(s.extended_valid_elements);t.addValidChildRules(s.valid_child_elements);if(s.invalid_elements)t.invalidElementsRE=new RegExp('^('+wildcardToRE(s.invalid_elements.replace(/,/g,'|').toLowerCase())+')$');if(s.attrib_value_filter)t.attribValueFilter=s.attribValueFilter;},_getAttrib:function(n,a,na){var i,v;na=na||a.name;if(a.forcedVal&&(v=a.forcedVal)){if(v==='{$uid}')return this.dom.uniqueId();return v;}v=this.dom.getAttrib(n,na);if(this.settings.bool_attrs.test(na)&&v){v=(''+v).toLowerCase();if(v==='false'||v==='0')return null;v=na;}switch(na){case'rowspan':case'colspan':if(v=='1')v='';break;}if(this.attribValueFilter)v=this.attribValueFilter(na,v,n);if(a.validVals){for(i=a.validVals.length-1;i>=0;i--){if(v==a.validVals[i])break;}if(i==-1)return null;}if(v===''&&typeof(a.defaultVal)!='undefined'){v=a.defaultVal;if(v==='{$uid}')return this.dom.uniqueId();return v;}else{if(na=='class'&&this.processObj.get)v=v.replace(/\s?mceItem\w+\s?/g,'');}if(v==='')return null;return v;}});})();(function(){var each=tinymce.each,Event=tinymce.dom.Event;tinymce.create('tinymce.dom.ScriptLoader',{ScriptLoader:function(s){this.settings=s||{};this.queue=[];this.lookup={};},isDone:function(u){return this.lookup[u]?this.lookup[u].state==2:0;},markDone:function(u){this.lookup[u]={state:2,url:u};},add:function(u,cb,s,pr){var t=this,lo=t.lookup,o;if(o=lo[u]){if(cb&&o.state==2)cb.call(s||this);return o;}o={state:0,url:u,func:cb,scope:s||this};if(pr)t.queue.unshift(o);else t.queue.push(o);lo[u]=o;return o;},load:function(u,cb,s){var t=this,o;if(o=t.lookup[u]){if(cb&&o.state==2)cb.call(s||t);return o;}function loadScript(u){if(Event.domLoaded||t.settings.strict_mode){tinymce.util.XHR.send({url:tinymce._addVer(u),error:t.settings.error,async:false,success:function(co){t.eval(co);}});}else document.write('<script type="text/javascript" src="'+tinymce._addVer(u)+'"></script>');};if(!tinymce.is(u,'string')){each(u,function(u){loadScript(u);});if(cb)cb.call(s||t);}else{loadScript(u);if(cb)cb.call(s||t);}},loadQueue:function(cb,s){var t=this;if(!t.queueLoading){t.queueLoading=1;t.queueCallbacks=[];t.loadScripts(t.queue,function(){t.queueLoading=0;if(cb)cb.call(s||t);each(t.queueCallbacks,function(o){o.func.call(o.scope);});});}else if(cb)t.queueCallbacks.push({func:cb,scope:s||t});},eval:function(co){var w=window;if(!w.execScript){try{eval.call(w,co);}catch(ex){eval(co,w);}}else w.execScript(co);},loadScripts:function(sc,cb,s){var t=this,lo=t.lookup;function done(o){o.state=2;if(o.func)o.func.call(o.scope||t);};function allDone(){var l;l=sc.length;each(sc,function(o){o=lo[o.url];if(o.state===2){done(o);l--;}else load(o);});if(l===0&&cb){cb.call(s||t);cb=0;}};function load(o){if(o.state>0)return;o.state=1;tinymce.dom.ScriptLoader.loadScript(o.url,function(){done(o);allDone();});};each(sc,function(o){var u=o.url;if(!lo[u]){lo[u]=o;t.queue.push(o);}else o=lo[u];if(o.state>0)return;if(!Event.domLoaded&&!t.settings.strict_mode){var ix,ol='';if(cb||o.func){o.state=1;ix=tinymce.dom.ScriptLoader._addOnLoad(function(){done(o);allDone();});if(tinymce.isIE)ol=' onreadystatechange="';else ol=' onload="';ol+='tinymce.dom.ScriptLoader._onLoad(this,\''+u+'\','+ix+');"';}document.write('<script type="text/javascript" src="'+tinymce._addVer(u)+'"'+ol+'></script>');if(!o.func)done(o);}else load(o);});allDone();},'static':{_addOnLoad:function(f){var t=this;t._funcs=t._funcs||[];t._funcs.push(f);return t._funcs.length-1;},_onLoad:function(e,u,ix){if(!tinymce.isIE||e.readyState=='complete')this._funcs[ix].call(this);},loadScript:function(u,cb){var id=tinymce.DOM.uniqueId(),e;function done(){Event.clear(id);tinymce.DOM.remove(id);if(cb){cb.call(document,u);cb=0;}};if(tinymce.isIE){tinymce.util.XHR.send({url:tinymce._addVer(u),async:false,success:function(co){window.execScript(co);done();}});}else{e=tinymce.DOM.create('script',{id:id,type:'text/javascript',src:tinymce._addVer(u)});Event.add(e,'load',done);(document.getElementsByTagName('head')[0]||document.body).appendChild(e);}}}});tinymce.ScriptLoader=new tinymce.dom.ScriptLoader();})();(function(){var DOM=tinymce.DOM,is=tinymce.is;tinymce.create('tinymce.ui.Control',{Control:function(id,s){this.id=id;this.settings=s=s||{};this.rendered=false;this.onRender=new tinymce.util.Dispatcher(this);this.classPrefix='';this.scope=s.scope||this;this.disabled=0;this.active=0;},setDisabled:function(s){var e;if(s!=this.disabled){e=DOM.get(this.id);if(e&&this.settings.unavailable_prefix){if(s){this.prevTitle=e.title;e.title=this.settings.unavailable_prefix+": "+e.title;}else e.title=this.prevTitle;}this.setState('Disabled',s);this.setState('Enabled',!s);this.disabled=s;}},isDisabled:function(){return this.disabled;},setActive:function(s){if(s!=this.active){this.setState('Active',s);this.active=s;}},isActive:function(){return this.active;},setState:function(c,s){var n=DOM.get(this.id);c=this.classPrefix+c;if(s)DOM.addClass(n,c);else DOM.removeClass(n,c);},isRendered:function(){return this.rendered;},renderHTML:function(){},renderTo:function(n){DOM.setHTML(n,this.renderHTML());},postRender:function(){var t=this,b;if(is(t.disabled)){b=t.disabled;t.disabled=-1;t.setDisabled(b);}if(is(t.active)){b=t.active;t.active=-1;t.setActive(b);}},remove:function(){DOM.remove(this.id);this.destroy();},destroy:function(){tinymce.dom.Event.clear(this.id);}});})();tinymce.create('tinymce.ui.Container:tinymce.ui.Control',{Container:function(id,s){this.parent(id,s);this.controls=[];this.lookup={};},add:function(c){this.lookup[c.id]=c;this.controls.push(c);return c;},get:function(n){return this.lookup[n];}});tinymce.create('tinymce.ui.Separator:tinymce.ui.Control',{Separator:function(id,s){this.parent(id,s);this.classPrefix='mceSeparator';},renderHTML:function(){return tinymce.DOM.createHTML('span',{'class':this.classPrefix});}});(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,walk=tinymce.walk;tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control',{MenuItem:function(id,s){this.parent(id,s);this.classPrefix='mceMenuItem';},setSelected:function(s){this.setState('Selected',s);this.selected=s;},isSelected:function(){return this.selected;},postRender:function(){var t=this;t.parent();if(is(t.selected))t.setSelected(t.selected);}});})();(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,walk=tinymce.walk;tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem',{Menu:function(id,s){var t=this;t.parent(id,s);t.items={};t.collapsed=false;t.menuCount=0;t.onAddItem=new tinymce.util.Dispatcher(this);},expand:function(d){var t=this;if(d){walk(t,function(o){if(o.expand)o.expand();},'items',t);}t.collapsed=false;},collapse:function(d){var t=this;if(d){walk(t,function(o){if(o.collapse)o.collapse();},'items',t);}t.collapsed=true;},isCollapsed:function(){return this.collapsed;},add:function(o){if(!o.settings)o=new tinymce.ui.MenuItem(o.id||DOM.uniqueId(),o);this.onAddItem.dispatch(this,o);return this.items[o.id]=o;},addSeparator:function(){return this.add({separator:true});},addMenu:function(o){if(!o.collapse)o=this.createMenu(o);this.menuCount++;return this.add(o);},hasMenus:function(){return this.menuCount!==0;},remove:function(o){delete this.items[o.id];},removeAll:function(){var t=this;walk(t,function(o){if(o.removeAll)o.removeAll();else o.remove();o.destroy();},'items',t);t.items={};},createMenu:function(o){var m=new tinymce.ui.Menu(o.id||DOM.uniqueId(),o);m.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return m;}});})();(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,Event=tinymce.dom.Event,Element=tinymce.dom.Element;tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu',{DropMenu:function(id,s){s=s||{};s.container=s.container||DOM.doc.body;s.offset_x=s.offset_x||0;s.offset_y=s.offset_y||0;s.vp_offset_x=s.vp_offset_x||0;s.vp_offset_y=s.vp_offset_y||0;if(is(s.icons)&&!s.icons)s['class']+=' mceNoIcons';this.parent(id,s);this.onShowMenu=new tinymce.util.Dispatcher(this);this.onHideMenu=new tinymce.util.Dispatcher(this);this.classPrefix='mceMenu';},createMenu:function(s){var t=this,cs=t.settings,m;s.container=s.container||cs.container;s.parent=t;s.constrain=s.constrain||cs.constrain;s['class']=s['class']||cs['class'];s.vp_offset_x=s.vp_offset_x||cs.vp_offset_x;s.vp_offset_y=s.vp_offset_y||cs.vp_offset_y;m=new tinymce.ui.DropMenu(s.id||DOM.uniqueId(),s);m.onAddItem.add(t.onAddItem.dispatch,t.onAddItem);return m;},update:function(){var t=this,s=t.settings,tb=DOM.get('menu_'+t.id+'_tbl'),co=DOM.get('menu_'+t.id+'_co'),tw,th;tw=s.max_width?Math.min(tb.clientWidth,s.max_width):tb.clientWidth;th=s.max_height?Math.min(tb.clientHeight,s.max_height):tb.clientHeight;if(!DOM.boxModel)t.element.setStyles({width:tw+2,height:th+2});else t.element.setStyles({width:tw,height:th});if(s.max_width)DOM.setStyle(co,'width',tw);if(s.max_height){DOM.setStyle(co,'height',th);if(tb.clientHeight<s.max_height)DOM.setStyle(co,'overflow','hidden');}},showMenu:function(x,y,px){var t=this,s=t.settings,co,vp=DOM.getViewPort(),w,h,mx,my,ot=2,dm,tb,cp=t.classPrefix;t.collapse(1);if(t.isMenuVisible)return;if(!t.rendered){co=DOM.add(t.settings.container,t.renderNode());each(t.items,function(o){o.postRender();});t.element=new Element('menu_'+t.id,{blocker:1,container:s.container});}else co=DOM.get('menu_'+t.id);if(!tinymce.isOpera)DOM.setStyles(co,{left:-0xFFFF,top:-0xFFFF});DOM.show(co);t.update();x+=s.offset_x||0;y+=s.offset_y||0;vp.w-=4;vp.h-=4;if(s.constrain){w=co.clientWidth-ot;h=co.clientHeight-ot;mx=vp.x+vp.w;my=vp.y+vp.h;if((x+s.vp_offset_x+w)>mx)x=px?px-w:Math.max(0,(mx-s.vp_offset_x)-w);if((y+s.vp_offset_y+h)>my)y=Math.max(0,(my-s.vp_offset_y)-h);}DOM.setStyles(co,{left:x,top:y});t.element.update();t.isMenuVisible=1;t.mouseClickFunc=Event.add(co,'click',function(e){var m;e=e.target;if(e&&(e=DOM.getParent(e,'TR'))&&!DOM.hasClass(e,cp+'ItemSub')){m=t.items[e.id];if(m.isDisabled())return;dm=t;while(dm){if(dm.hideMenu)dm.hideMenu();dm=dm.settings.parent;}if(m.settings.onclick)m.settings.onclick(e);return Event.cancel(e);}});if(t.hasMenus()){t.mouseOverFunc=Event.add(co,'mouseover',function(e){var m,r,mi;e=e.target;if(e&&(e=DOM.getParent(e,'TR'))){m=t.items[e.id];if(t.lastMenu)t.lastMenu.collapse(1);if(m.isDisabled())return;if(e&&DOM.hasClass(e,cp+'ItemSub')){r=DOM.getRect(e);m.showMenu((r.x+r.w-ot),r.y-ot,r.x);t.lastMenu=m;DOM.addClass(DOM.get(m.id).firstChild,cp+'ItemActive');}}});}t.onShowMenu.dispatch(t);if(s.keyboard_focus){Event.add(co,'keydown',t._keyHandler,t);DOM.select('a','menu_'+t.id)[0].focus();t._focusIdx=0;}},hideMenu:function(c){var t=this,co=DOM.get('menu_'+t.id),e;if(!t.isMenuVisible)return;Event.remove(co,'mouseover',t.mouseOverFunc);Event.remove(co,'click',t.mouseClickFunc);Event.remove(co,'keydown',t._keyHandler);DOM.hide(co);t.isMenuVisible=0;if(!c)t.collapse(1);if(t.element)t.element.hide();if(e=DOM.get(t.id))DOM.removeClass(e.firstChild,t.classPrefix+'ItemActive');t.onHideMenu.dispatch(t);},add:function(o){var t=this,co;o=t.parent(o);if(t.isRendered&&(co=DOM.get('menu_'+t.id)))t._add(DOM.select('tbody',co)[0],o);return o;},collapse:function(d){this.parent(d);this.hideMenu(1);},remove:function(o){DOM.remove(o.id);this.destroy();return this.parent(o);},destroy:function(){var t=this,co=DOM.get('menu_'+t.id);Event.remove(co,'mouseover',t.mouseOverFunc);Event.remove(co,'click',t.mouseClickFunc);if(t.element)t.element.remove();DOM.remove(co);},renderNode:function(){var t=this,s=t.settings,n,tb,co,w;w=DOM.create('div',{id:'menu_'+t.id,'class':s['class'],'style':'position:absolute;left:0;top:0;z-index:200000'});co=DOM.add(w,'div',{id:'menu_'+t.id+'_co','class':t.classPrefix+(s['class']?' '+s['class']:'')});t.element=new Element('menu_'+t.id,{blocker:1,container:s.container});if(s.menu_line)DOM.add(co,'span',{'class':t.classPrefix+'Line'});n=DOM.add(co,'table',{id:'menu_'+t.id+'_tbl',border:0,cellPadding:0,cellSpacing:0});tb=DOM.add(n,'tbody');each(t.items,function(o){t._add(tb,o);});t.rendered=true;return w;},_keyHandler:function(e){var t=this,kc=e.keyCode;function focus(d){var i=t._focusIdx+d,e=DOM.select('a','menu_'+t.id)[i];if(e){t._focusIdx=i;e.focus();}};switch(kc){case 38:focus(-1);return;case 40:focus(1);return;case 13:return;case 27:return this.hideMenu();}},_add:function(tb,o){var n,s=o.settings,a,ro,it,cp=this.classPrefix,ic;if(s.separator){ro=DOM.add(tb,'tr',{id:o.id,'class':cp+'ItemSeparator'});DOM.add(ro,'td',{'class':cp+'ItemSeparator'});if(n=ro.previousSibling)DOM.addClass(n,'mceLast');return;}n=ro=DOM.add(tb,'tr',{id:o.id,'class':cp+'Item '+cp+'ItemEnabled'});n=it=DOM.add(n,'td');n=a=DOM.add(n,'a',{href:'javascript:;',onclick:"return false;",onmousedown:'return false;'});DOM.addClass(it,s['class']);ic=DOM.add(n,'span',{'class':'mceIcon'+(s.icon?' mce_'+s.icon:'')});if(s.icon_src)DOM.add(ic,'img',{src:s.icon_src});n=DOM.add(n,s.element||'span',{'class':'mceText',title:o.settings.title},o.settings.title);if(o.settings.style)DOM.setAttrib(n,'style',o.settings.style);if(tb.childNodes.length==1)DOM.addClass(ro,'mceFirst');if((n=ro.previousSibling)&&DOM.hasClass(n,cp+'ItemSeparator'))DOM.addClass(ro,'mceFirst');if(o.collapse)DOM.addClass(ro,cp+'ItemSub');if(n=ro.previousSibling)DOM.removeClass(n,'mceLast');DOM.addClass(ro,'mceLast');}});})();(function(){var DOM=tinymce.DOM;tinymce.create('tinymce.ui.Button:tinymce.ui.Control',{Button:function(id,s){this.parent(id,s);this.classPrefix='mceButton';},renderHTML:function(){var cp=this.classPrefix,s=this.settings,h,l;l=DOM.encode(s.label||'');h='<a id="'+this.id+'" href="javascript:;" class="'+cp+' '+cp+'Enabled '+s['class']+(l?' '+cp+'Labeled':'')+'" onmousedown="return false;" onclick="return false;" title="'+DOM.encode(s.title)+'">';if(s.image)h+='<img class="mceIcon" src="'+s.image+'" />'+l+'</a>';else h+='<span class="mceIcon '+s['class']+'"></span>'+(l?'<span class="'+cp+'Label">'+l+'</span>':'')+'</a>';return h;},postRender:function(){var t=this,s=t.settings;tinymce.dom.Event.add(t.id,'click',function(e){if(!t.isDisabled())return s.onclick.call(s.scope,e);});}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher;tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control',{ListBox:function(id,s){var t=this;t.parent(id,s);t.items=[];t.onChange=new Dispatcher(t);t.onPostRender=new Dispatcher(t);t.onAdd=new Dispatcher(t);t.onRenderMenu=new tinymce.util.Dispatcher(this);t.classPrefix='mceListBox';},select:function(va){var t=this,fv,f;if(va==undefined)return t.selectByIndex(-1);if(va&&va.call)f=va;else{f=function(v){return v==va;};}if(va!=t.selectedValue){each(t.items,function(o,i){if(f(o.value)){fv=1;t.selectByIndex(i);return false;}});if(!fv)t.selectByIndex(-1);}},selectByIndex:function(idx){var t=this,e,o;if(idx!=t.selectedIndex){e=DOM.get(t.id+'_text');o=t.items[idx];if(o){t.selectedValue=o.value;t.selectedIndex=idx;DOM.setHTML(e,DOM.encode(o.title));DOM.removeClass(e,'mceTitle');}else{DOM.setHTML(e,DOM.encode(t.settings.title));DOM.addClass(e,'mceTitle');t.selectedValue=t.selectedIndex=null;}e=0;}else t.selectedValue=t.selectedIndex=null;},add:function(n,v,o){var t=this;o=o||{};o=tinymce.extend(o,{title:n,value:v});t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return this.items.length;},renderHTML:function(){var h='',t=this,s=t.settings,cp=t.classPrefix;h='<table id="'+t.id+'" cellpadding="0" cellspacing="0" class="'+cp+' '+cp+'Enabled'+(s['class']?(' '+s['class']):'')+'"><tbody><tr>';h+='<td>'+DOM.createHTML('a',{id:t.id+'_text',href:'javascript:;','class':'mceText',onclick:"return false;",onmousedown:'return false;'},DOM.encode(t.settings.title))+'</td>';h+='<td>'+DOM.createHTML('a',{id:t.id+'_open',tabindex:-1,href:'javascript:;','class':'mceOpen',onclick:"return false;",onmousedown:'return false;'},'<span></span>')+'</td>';h+='</tr></tbody></table>';return h;},showMenu:function(){var t=this,p1,p2,e=DOM.get(this.id),m;if(t.isDisabled()||t.items.length==0)return;if(t.menu&&t.menu.isMenuVisible)return t.hideMenu();if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}p1=DOM.getPos(this.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.keyboard_focus=!tinymce.isOpera;if(t.oldID)m.items[t.oldID].setSelected(0);each(t.items,function(o){if(o.value===t.selectedValue){m.items[o.id].setSelected(1);t.oldID=o.id;}});m.showMenu(0,e.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);DOM.addClass(t.id,t.classPrefix+'Selected');},hideMenu:function(e){var t=this;if(e&&e.type=="mousedown"&&(e.target.id==t.id+'_text'||e.target.id==t.id+'_open'))return;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceMenu');})){DOM.removeClass(t.id,t.classPrefix+'Selected');Event.remove(DOM.doc,'mousedown',t.hideMenu,t);if(t.menu)t.menu.hideMenu();}},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':t.classPrefix+'Menu mceNoIcons',max_width:150,max_height:150});m.onHideMenu.add(t.hideMenu,t);m.add({title:t.settings.title,'class':'mceMenuItemTitle',onclick:function(){if(t.settings.onselect('')!==false)t.select('');}});each(t.items,function(o){o.id=DOM.uniqueId();o.onclick=function(){if(t.settings.onselect(o.value)!==false)t.select(o.value);};m.add(o);});t.onRenderMenu.dispatch(t,m);t.menu=m;},postRender:function(){var t=this,cp=t.classPrefix;Event.add(t.id,'click',t.showMenu,t);Event.add(t.id+'_text','focus',function(e){if(!t._focused){t.keyDownHandler=Event.add(t.id+'_text','keydown',function(e){var idx=-1,v,kc=e.keyCode;each(t.items,function(v,i){if(t.selectedValue==v.value)idx=i;});if(kc==38)v=t.items[idx-1];else if(kc==40)v=t.items[idx+1];else if(kc==13){v=t.selectedValue;t.selectedValue=null;t.settings.onselect(v);return Event.cancel(e);}if(v){t.hideMenu();t.select(v.value);}});}t._focused=1;});Event.add(t.id+'_text','blur',function(){Event.remove(t.id+'_text','keydown',t.keyDownHandler);t._focused=0;});if(tinymce.isIE6||!DOM.boxModel){Event.add(t.id,'mouseover',function(){if(!DOM.hasClass(t.id,cp+'Disabled'))DOM.addClass(t.id,cp+'Hover');});Event.add(t.id,'mouseout',function(){if(!DOM.hasClass(t.id,cp+'Disabled'))DOM.removeClass(t.id,cp+'Hover');});}t.onPostRender.dispatch(t,DOM.get(t.id));},destroy:function(){this.parent();Event.clear(this.id+'_text');}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher;tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox',{NativeListBox:function(id,s){this.parent(id,s);this.classPrefix='mceNativeListBox';},setDisabled:function(s){DOM.get(this.id).disabled=s;},isDisabled:function(){return DOM.get(this.id).disabled;},select:function(va){var t=this,fv,f;if(va==undefined)return t.selectByIndex(-1);if(va&&va.call)f=va;else{f=function(v){return v==va;};}if(va!=t.selectedValue){each(t.items,function(o,i){if(f(o.value)){fv=1;t.selectByIndex(i);return false;}});if(!fv)t.selectByIndex(-1);}},selectByIndex:function(idx){DOM.get(this.id).selectedIndex=idx+1;this.selectedValue=this.items[idx]?this.items[idx].value:null;},add:function(n,v,a){var o,t=this;a=a||{};a.value=v;if(t.isRendered())DOM.add(DOM.get(this.id),'option',a,n);o={title:n,value:v,attribs:a};t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return DOM.get(this.id).options.length-1;},renderHTML:function(){var h,t=this;h=DOM.createHTML('option',{value:''},'-- '+t.settings.title+' --');each(t.items,function(it){h+=DOM.createHTML('option',{value:it.value},it.title);});h=DOM.createHTML('select',{id:t.id,'class':'mceNativeListBox'},h);return h;},postRender:function(){var t=this,ch;t.rendered=true;function onChange(e){var v=t.items[e.target.selectedIndex-1];if(v&&(v=v.value)){t.onChange.dispatch(t,v);if(t.settings.onselect)t.settings.onselect(v);}};Event.add(t.id,'change',onChange);Event.add(t.id,'keydown',function(e){var bf;Event.remove(t.id,'change',ch);bf=Event.add(t.id,'blur',function(){Event.add(t.id,'change',onChange);Event.remove(t.id,'blur',bf);});if(e.keyCode==13||e.keyCode==32){onChange(e);return Event.cancel(e);}});t.onPostRender.dispatch(t,DOM.get(t.id));}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button',{MenuButton:function(id,s){this.parent(id,s);this.onRenderMenu=new tinymce.util.Dispatcher(this);s.menu_container=s.menu_container||DOM.doc.body;},showMenu:function(){var t=this,p1,p2,e=DOM.get(t.id),m;if(t.isDisabled())return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}if(t.isMenuVisible)return t.hideMenu();p1=DOM.getPos(t.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.vp_offset_x=p2.x;m.settings.vp_offset_y=p2.y;m.settings.keyboard_focus=t._focused;m.showMenu(0,e.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);t.setState('Selected',1);t.isMenuVisible=1;},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':this.classPrefix+'Menu',icons:t.settings.icons});m.onHideMenu.add(t.hideMenu,t);t.onRenderMenu.dispatch(t,m);t.menu=m;},hideMenu:function(e){var t=this;if(e&&e.type=="mousedown"&&DOM.getParent(e.target,function(e){return e.id===t.id||e.id===t.id+'_open';}))return;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceMenu');})){t.setState('Selected',0);Event.remove(DOM.doc,'mousedown',t.hideMenu,t);if(t.menu)t.menu.hideMenu();}t.isMenuVisible=0;},postRender:function(){var t=this,s=t.settings;Event.add(t.id,'click',function(){if(!t.isDisabled()){if(s.onclick)s.onclick(t.value);t.showMenu();}});}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton',{SplitButton:function(id,s){this.parent(id,s);this.classPrefix='mceSplitButton';},renderHTML:function(){var h,t=this,s=t.settings,h1;h='<tbody><tr>';if(s.image)h1=DOM.createHTML('img ',{src:s.image,'class':'mceAction '+s['class']});else h1=DOM.createHTML('span',{'class':'mceAction '+s['class']},'');h+='<td>'+DOM.createHTML('a',{id:t.id+'_action',href:'javascript:;','class':'mceAction '+s['class'],onclick:"return false;",onmousedown:'return false;',title:s.title},h1)+'</td>';h1=DOM.createHTML('span',{'class':'mceOpen '+s['class']});h+='<td>'+DOM.createHTML('a',{id:t.id+'_open',href:'javascript:;','class':'mceOpen '+s['class'],onclick:"return false;",onmousedown:'return false;',title:s.title},h1)+'</td>';h+='</tr></tbody>';return DOM.createHTML('table',{id:t.id,'class':'mceSplitButton mceSplitButtonEnabled '+s['class'],cellpadding:'0',cellspacing:'0',onmousedown:'return false;',title:s.title},h);},postRender:function(){var t=this,s=t.settings;if(s.onclick){Event.add(t.id+'_action','click',function(){if(!t.isDisabled())s.onclick(t.value);});}Event.add(t.id+'_open','click',t.showMenu,t);Event.add(t.id+'_open','focus',function(){t._focused=1;});Event.add(t.id+'_open','blur',function(){t._focused=0;});if(tinymce.isIE6||!DOM.boxModel){Event.add(t.id,'mouseover',function(){if(!DOM.hasClass(t.id,'mceSplitButtonDisabled'))DOM.addClass(t.id,'mceSplitButtonHover');});Event.add(t.id,'mouseout',function(){if(!DOM.hasClass(t.id,'mceSplitButtonDisabled'))DOM.removeClass(t.id,'mceSplitButtonHover');});}},destroy:function(){this.parent();Event.clear(this.id+'_action');Event.clear(this.id+'_open');}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,is=tinymce.is,each=tinymce.each;tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton',{ColorSplitButton:function(id,s){var t=this;t.parent(id,s);t.settings=s=tinymce.extend({colors:'000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF',grid_width:8,default_color:'#888888'},t.settings);t.onShowMenu=new tinymce.util.Dispatcher(t);t.onHideMenu=new tinymce.util.Dispatcher(t);t.value=s.default_color;},showMenu:function(){var t=this,r,p,e,p2;if(t.isDisabled())return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}if(t.isMenuVisible)return t.hideMenu();e=DOM.get(t.id);DOM.show(t.id+'_menu');DOM.addClass(e,'mceSplitButtonSelected');p2=DOM.getPos(e);DOM.setStyles(t.id+'_menu',{left:p2.x,top:p2.y+e.clientHeight,zIndex:200000});e=0;Event.add(DOM.doc,'mousedown',t.hideMenu,t);if(t._focused){t._keyHandler=Event.add(t.id+'_menu','keydown',function(e){if(e.keyCode==27)t.hideMenu();});DOM.select('a',t.id+'_menu')[0].focus();}t.onShowMenu.dispatch(t);t.isMenuVisible=1;},hideMenu:function(e){var t=this;if(e&&e.type=="mousedown"&&DOM.getParent(e.target,function(e){return e.id===t.id+'_open';}))return;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceSplitButtonMenu');})){DOM.removeClass(t.id,'mceSplitButtonSelected');Event.remove(DOM.doc,'mousedown',t.hideMenu,t);Event.remove(t.id+'_menu','keydown',t._keyHandler);DOM.hide(t.id+'_menu');}t.onHideMenu.dispatch(t);t.isMenuVisible=0;},renderMenu:function(){var t=this,m,i=0,s=t.settings,n,tb,tr,w;w=DOM.add(s.menu_container,'div',{id:t.id+'_menu','class':s['menu_class']+' '+s['class'],style:'position:absolute;left:0;top:-1000px;'});m=DOM.add(w,'div',{'class':s['class']+' mceSplitButtonMenu'});DOM.add(m,'span',{'class':'mceMenuLine'});n=DOM.add(m,'table',{'class':'mceColorSplitMenu'});tb=DOM.add(n,'tbody');i=0;each(is(s.colors,'array')?s.colors:s.colors.split(','),function(c){c=c.replace(/^#/,'');if(!i--){tr=DOM.add(tb,'tr');i=s.grid_width-1;}n=DOM.add(tr,'td');n=DOM.add(n,'a',{href:'javascript:;',style:{backgroundColor:'#'+c},mce_color:'#'+c});});if(s.more_colors_func){n=DOM.add(tb,'tr');n=DOM.add(n,'td',{colspan:s.grid_width,'class':'mceMoreColors'});n=DOM.add(n,'a',{id:t.id+'_more',href:'javascript:;',onclick:'return false;','class':'mceMoreColors'},s.more_colors_title);Event.add(n,'click',function(e){s.more_colors_func.call(s.more_colors_scope||this);return Event.cancel(e);});}DOM.addClass(m,'mceColorSplitMenu');Event.add(t.id+'_menu','click',function(e){var c;e=e.target;if(e.nodeName=='A'&&(c=e.getAttribute('mce_color')))t.setColor(c);return Event.cancel(e);});return w;},setColor:function(c){var t=this;DOM.setStyle(t.id+'_preview','backgroundColor',c);t.value=c;t.hideMenu();t.settings.onselect(c);},postRender:function(){var t=this,id=t.id;t.parent();DOM.add(id+'_action','div',{id:id+'_preview','class':'mceColorPreview'});DOM.setStyle(t.id+'_preview','backgroundColor',t.value);},destroy:function(){this.parent();Event.clear(this.id+'_menu');Event.clear(this.id+'_more');DOM.remove(this.id+'_menu');}});})();tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container',{renderHTML:function(){var t=this,h='',c,co,dom=tinymce.DOM,s=t.settings,i,pr,nx,cl;cl=t.controls;for(i=0;i<cl.length;i++){co=cl[i];pr=cl[i-1];nx=cl[i+1];if(i===0){c='mceToolbarStart';if(co.Button)c+=' mceToolbarStartButton';else if(co.SplitButton)c+=' mceToolbarStartSplitButton';else if(co.ListBox)c+=' mceToolbarStartListBox';h+=dom.createHTML('td',{'class':c},dom.createHTML('span',null,'<!-- IE -->'));}if(pr&&co.ListBox){if(pr.Button||pr.SplitButton)h+=dom.createHTML('td',{'class':'mceToolbarEnd'},dom.createHTML('span',null,'<!-- IE -->'));}if(dom.stdMode)h+='<td style="position: relative">'+co.renderHTML()+'</td>';else h+='<td>'+co.renderHTML()+'</td>';if(nx&&co.ListBox){if(nx.Button||nx.SplitButton)h+=dom.createHTML('td',{'class':'mceToolbarStart'},dom.createHTML('span',null,'<!-- IE -->'));}}c='mceToolbarEnd';if(co.Button)c+=' mceToolbarEndButton';else if(co.SplitButton)c+=' mceToolbarEndSplitButton';else if(co.ListBox)c+=' mceToolbarEndListBox';h+=dom.createHTML('td',{'class':c},dom.createHTML('span',null,'<!-- IE -->'));return dom.createHTML('table',{id:t.id,'class':'mceToolbar'+(s['class']?' '+s['class']:''),cellpadding:'0',cellspacing:'0',align:t.settings.align||''},'<tbody><tr>'+h+'</tr></tbody>');}});(function(){var Dispatcher=tinymce.util.Dispatcher,each=tinymce.each;tinymce.create('tinymce.AddOnManager',{items:[],urls:{},lookup:{},onAdd:new Dispatcher(this),get:function(n){return this.lookup[n];},requireLangPack:function(n){var u,s=tinymce.EditorManager.settings;if(s&&s.language){u=this.urls[n]+'/langs/'+s.language+'.js';if(!tinymce.dom.Event.domLoaded&&!s.strict_mode)tinymce.ScriptLoader.load(u);else tinymce.ScriptLoader.add(u);}},add:function(id,o){this.items.push(o);this.lookup[id]=o;this.onAdd.dispatch(this,id,o);return o;},load:function(n,u,cb,s){var t=this;if(t.urls[n])return;if(u.indexOf('/')!=0&&u.indexOf('://')==-1)u=tinymce.baseURL+'/'+u;t.urls[n]=u.substring(0,u.lastIndexOf('/'));tinymce.ScriptLoader.add(u,cb,s);}});tinymce.PluginManager=new tinymce.AddOnManager();tinymce.ThemeManager=new tinymce.AddOnManager();}());(function(){var each=tinymce.each,extend=tinymce.extend,DOM=tinymce.DOM,Event=tinymce.dom.Event,ThemeManager=tinymce.ThemeManager,PluginManager=tinymce.PluginManager,explode=tinymce.explode;tinymce.create('static tinymce.EditorManager',{editors:{},i18n:{},activeEditor:null,preInit:function(){var t=this,lo=window.location;tinymce.documentBaseURL=lo.href.replace(/[\?#].*$/,'').replace(/[\/\\][^\/]+$/,'');if(!/[\/\\]$/.test(tinymce.documentBaseURL))tinymce.documentBaseURL+='/';tinymce.baseURL=new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);tinymce.EditorManager.baseURI=new tinymce.util.URI(tinymce.baseURL);if(document.domain&&lo.hostname!=document.domain)tinymce.relaxedDomain=document.domain;if(!tinymce.relaxedDomain&&tinymce.EditorManager.baseURI.host!=lo.hostname&&lo.hostname)document.domain=tinymce.relaxedDomain=lo.hostname.replace(/.*\.(.+\..+)$/,'$1');t.onBeforeUnload=new tinymce.util.Dispatcher(t);Event.add(window,'beforeunload',function(e){t.onBeforeUnload.dispatch(t,e);});},init:function(s){var t=this,pl,sl=tinymce.ScriptLoader,c,e,el=[],ed;function execCallback(se,n,s){var f=se[n];if(!f)return;if(tinymce.is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);}return f.apply(s||this,Array.prototype.slice.call(arguments,2));};s=extend({theme:"simple",language:"en",strict_loading_mode:document.contentType=='application/xhtml+xml'},s);t.settings=s;if(!Event.domLoaded&&!s.strict_loading_mode){if(s.language)sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme&&s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme])ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');if(s.plugins){pl=explode(s.plugins);if(tinymce.inArray(pl,'compat2x')!=-1)PluginManager.load('compat2x','plugins/compat2x/editor_plugin'+tinymce.suffix+'.js');each(pl,function(v){if(v&&v.charAt(0)!='-'&&!PluginManager.urls[v]){if(!tinymce.isWebKit&&v=='safari')return;PluginManager.load(v,'plugins/'+v+'/editor_plugin'+tinymce.suffix+'.js');}});}sl.loadQueue();}Event.add(document,'init',function(){var l,co;execCallback(s,'onpageload');if(s.browsers){l=false;each(explode(s.browsers),function(v){switch(v){case'ie':case'msie':if(tinymce.isIE)l=true;break;case'gecko':if(tinymce.isGecko)l=true;break;case'safari':case'webkit':if(tinymce.isWebKit)l=true;break;case'opera':if(tinymce.isOpera)l=true;break;}});if(!l)return;}switch(s.mode){case"exact":l=s.elements||'';if(l.length>0){each(explode(l),function(v){if(DOM.get(v)){ed=new tinymce.Editor(v,s);el.push(ed);ed.render(1);}else{c=0;each(document.forms,function(f){each(f.elements,function(e){if(e.name===v){v='mce_editor_'+c;DOM.setAttrib(e,'id',v);ed=new tinymce.Editor(v,s);el.push(ed);ed.render(1);}});});}});}break;case"textareas":case"specific_textareas":function hasClass(n,c){return c.constructor===RegExp?c.test(n.className):DOM.hasClass(n,c);};each(DOM.select('textarea'),function(v){if(s.editor_deselector&&hasClass(v,s.editor_deselector))return;if(!s.editor_selector||hasClass(v,s.editor_selector)){e=DOM.get(v.name);if(!v.id&&!e)v.id=v.name;if(!v.id||t.get(v.id))v.id=DOM.uniqueId();ed=new tinymce.Editor(v.id,s);el.push(ed);ed.render(1);}});break;}if(s.oninit){l=co=0;each(el,function(ed){co++;if(!ed.initialized){ed.onInit.add(function(){l++;if(l==co)execCallback(s,'oninit');});}else l++;if(l==co)execCallback(s,'oninit');});}});},get:function(id){return this.editors[id];},getInstanceById:function(id){return this.get(id);},add:function(e){this.editors[e.id]=e;this._setActive(e);return e;},remove:function(e){var t=this;if(!t.editors[e.id])return null;delete t.editors[e.id];if(t.activeEditor==e){each(t.editors,function(e){t._setActive(e);return false;});}e.destroy();return e;},execCommand:function(c,u,v){var t=this,ed=t.get(v),w;switch(c){case"mceFocus":ed.focus();return true;case"mceAddEditor":case"mceAddControl":if(!t.get(v))new tinymce.Editor(v,t.settings).render();return true;case"mceAddFrameControl":w=v.window;w.tinyMCE=tinyMCE;w.tinymce=tinymce;tinymce.DOM.doc=w.document;tinymce.DOM.win=w;ed=new tinymce.Editor(v.element_id,v);ed.render();if(tinymce.isIE){function clr(){ed.destroy();w.detachEvent('onunload',clr);w=w.tinyMCE=w.tinymce=null;};w.attachEvent('onunload',clr);}v.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(ed)ed.remove();return true;case'mceToggleEditor':if(!ed){t.execCommand('mceAddControl',0,v);return true;}if(ed.isHidden())ed.show();else ed.hide();return true;}if(t.activeEditor)return t.activeEditor.execCommand(c,u,v);return false;},execInstanceCommand:function(id,c,u,v){var ed=this.get(id);if(ed)return ed.execCommand(c,u,v);return false;},triggerSave:function(){each(this.editors,function(e){e.save();});},addI18n:function(p,o){var lo,i18n=this.i18n;if(!tinymce.is(p,'string')){each(p,function(o,lc){each(o,function(o,g){each(o,function(o,k){if(g==='common')i18n[lc+'.'+k]=o;else i18n[lc+'.'+g+'.'+k]=o;});});});}else{each(o,function(o,k){i18n[p+'.'+k]=o;});}},_setActive:function(e){this.selectedInstance=this.activeEditor=e;}});tinymce.EditorManager.preInit();})();var tinyMCE=window.tinyMCE=tinymce.EditorManager;(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,extend=tinymce.extend,Dispatcher=tinymce.util.Dispatcher;var each=tinymce.each,isGecko=tinymce.isGecko,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit;var is=tinymce.is,ThemeManager=tinymce.ThemeManager,PluginManager=tinymce.PluginManager,EditorManager=tinymce.EditorManager;var inArray=tinymce.inArray,grep=tinymce.grep,explode=tinymce.explode;tinymce.create('tinymce.Editor',{Editor:function(id,s){var t=this;t.id=t.editorId=id;t.execCommands={};t.queryStateCommands={};t.queryValueCommands={};t.plugins={};each(['onPreInit','onBeforeRenderUI','onPostRender','onInit','onRemove','onActivate','onDeactivate','onClick','onEvent','onMouseUp','onMouseDown','onDblClick','onKeyDown','onKeyUp','onKeyPress','onContextMenu','onSubmit','onReset','onPaste','onPreProcess','onPostProcess','onBeforeSetContent','onBeforeGetContent','onSetContent','onGetContent','onLoadContent','onSaveContent','onNodeChange','onChange','onBeforeExecCommand','onExecCommand','onUndo','onRedo','onVisualAid','onSetProgressState'],function(e){t[e]=new Dispatcher(t);});t.settings=s=extend({id:id,language:'en',docs_language:'en',theme:'simple',skin:'default',delta_width:0,delta_height:0,popup_css:'',plugins:'',document_base_url:tinymce.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',visual_table_class:'mceItemTable',visual:1,inline_styles:true,convert_fonts_to_spans:true,font_size_style_values:'xx-small,x-small,small,medium,large,x-large,xx-large',apply_source_formatting:1,directionality:'ltr',forced_root_block:'p',valid_elements:'@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p[align],-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote[cite],-table[border=0|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value|tabindex|accesskey],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big',hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:'30px',keep_styles:1},s);t.documentBaseURI=new tinymce.util.URI(s.document_base_url||tinymce.documentBaseURL,{base_uri:tinyMCE.baseURI});t.baseURI=EditorManager.baseURI;t.execCallback('setup',t);},render:function(nst){var t=this,s=t.settings,id=t.id,sl=tinymce.ScriptLoader;if(!Event.domLoaded){Event.add(document,'init',function(){t.render();});return;}if(!nst){s.strict_loading_mode=1;tinyMCE.settings=s;}if(!t.getElement())return;if(s.strict_loading_mode){sl.settings.strict_mode=s.strict_loading_mode;tinymce.DOM.settings.strict=1;}if(!/TEXTAREA|INPUT/i.test(t.getElement().nodeName)&&s.hidden_input&&DOM.getParent(id,'form'))DOM.insertAfter(DOM.create('input',{type:'hidden',name:id}),id);t.windowManager=new tinymce.WindowManager(t);if(s.encoding=='xml'){t.onGetContent.add(function(ed,o){if(o.save)o.content=DOM.encode(o.content);});}if(s.add_form_submit_trigger){t.onSubmit.addToTop(function(){if(t.initialized){t.save();t.isNotDirty=1;}});}if(s.add_unload_trigger&&!s.ask){t._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(t.initialized&&!t.destroyed&&!t.isHidden())t.save({format:'raw',no_events:true});});}tinymce.addUnload(t.destroy,t);if(s.submit_patch){t.onBeforeRenderUI.add(function(){var n=t.getElement().form;if(!n)return;if(n._mceOldSubmit)return;if(!n.submit.nodeType&&!n.submit.length){t.formElement=n;n._mceOldSubmit=n.submit;n.submit=function(){EditorManager.triggerSave();t.isNotDirty=1;return this._mceOldSubmit(this);};}n=null;});}function loadScripts(){if(s.language)sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme])ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');each(explode(s.plugins),function(p){if(p&&p.charAt(0)!='-'&&!PluginManager.urls[p]){if(!isWebKit&&p=='safari')return;PluginManager.load(p,'plugins/'+p+'/editor_plugin'+tinymce.suffix+'.js');}});sl.loadQueue(function(){if(s.ask){function ask(){window.setTimeout(function(){Event.remove(t.id,'focus',ask);t.windowManager.confirm(t.getLang('edit_confirm'),function(s){if(s)t.init();});},0);};Event.add(t.id,'focus',ask);return;}if(!t.removed)t.init();});};if(s.plugins.indexOf('compat2x')!=-1){PluginManager.load('compat2x','plugins/compat2x/editor_plugin'+tinymce.suffix+'.js');sl.loadQueue(loadScripts);}else loadScripts();},init:function(){var n,t=this,s=t.settings,w,h,e=t.getElement(),o,ti,u,bi,bc,re;EditorManager.add(t);s.theme=s.theme.replace(/-/,'');o=ThemeManager.get(s.theme);t.theme=new o();if(t.theme.init&&s.init_theme)t.theme.init(t,ThemeManager.urls[s.theme]||tinymce.documentBaseURL.replace(/\/$/,''));each(explode(s.plugins.replace(/\-/g,'')),function(p){var c=PluginManager.get(p),u=PluginManager.urls[p]||tinymce.documentBaseURL.replace(/\/$/,''),po;if(c){po=new c(t,u);t.plugins[p]=po;if(po.init)po.init(t,u);}});if(s.popup_css!==false){if(s.popup_css)s.popup_css=t.documentBaseURI.toAbsolute(s.popup_css);else s.popup_css=t.baseURI.toAbsolute("themes/"+s.theme+"/skins/"+s.skin+"/dialog.css");}if(s.popup_css_add)s.popup_css+=','+t.documentBaseURI.toAbsolute(s.popup_css_add);t.controlManager=new tinymce.ControlManager(t);t.undoManager=new tinymce.UndoManager(t);t.undoManager.onAdd.add(function(um,l){if(!l.initial)return t.onChange.dispatch(t,l,um);});t.undoManager.onUndo.add(function(um,l){return t.onUndo.dispatch(t,l,um);});t.undoManager.onRedo.add(function(um,l){return t.onRedo.dispatch(t,l,um);});if(s.custom_undo_redo){t.onExecCommand.add(function(ed,cmd,ui,val,a){if(cmd!='Undo'&&cmd!='Redo'&&cmd!='mceRepaint'&&(!a||!a.skip_undo))t.undoManager.add();});}t.onExecCommand.add(function(ed,c){if(!/^(FontName|FontSize)$/.test(c))t.nodeChanged();});if(isGecko){function repaint(a,o){if(!o||!o.initial)t.execCommand('mceRepaint');};t.onUndo.add(repaint);t.onRedo.add(repaint);t.onSetContent.add(repaint);}t.onBeforeRenderUI.dispatch(t,t.controlManager);if(s.render_ui){w=s.width||e.style.width||e.offsetWidth;h=s.height||e.style.height||e.offsetHeight;t.orgDisplay=e.style.display;re=/^[0-9\.]+(|px)$/i;if(re.test(''+w))w=Math.max(parseInt(w)+(o.deltaWidth||0),100);if(re.test(''+h))h=Math.max(parseInt(h)+(o.deltaHeight||0),100);o=t.theme.renderUI({targetNode:e,width:w,height:h,deltaWidth:s.delta_width,deltaHeight:s.delta_height});t.editorContainer=o.editorContainer;}DOM.setStyles(o.sizeContainer||o.editorContainer,{width:w,height:h});h=(o.iframeHeight||h)+(typeof(h)=='number'?(o.deltaHeight||0):'');if(h<100)h=100;t.iframeHTML=s.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+t.documentBaseURI.getURI()+'" />';t.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(tinymce.relaxedDomain)t.iframeHTML+='<script type="text/javascript">document.domain = "'+tinymce.relaxedDomain+'";</script>';bi=s.body_id||'tinymce';if(bi.indexOf('=')!=-1){bi=t.getParam('body_id','','hash');bi=bi[t.id]||bi;}bc=s.body_class||'';if(bc.indexOf('=')!=-1){bc=t.getParam('body_class','','hash');bc=bc[t.id]||'';}t.iframeHTML+='</head><body id="'+bi+'" class="mceContentBody '+bc+'"></body></html>';if(tinymce.relaxedDomain){if(isIE||(tinymce.isOpera&&parseFloat(opera.version())>=9.5))u='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';else if(tinymce.isOpera)u='javascript:(function(){document.open();document.domain="'+document.domain+'";document.close();ed.setupIframe();})()';}n=DOM.add(o.iframeContainer,'iframe',{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:'0',style:{width:'100%',height:h}});t.contentAreaContainer=o.iframeContainer;DOM.get(o.editorContainer).style.display=t.orgDisplay;DOM.get(t.id).style.display='none';if(tinymce.isOldWebKit){Event.add(n,'load',t.setupIframe,t);n.src=tinymce.baseURL+'/plugins/safari/blank.htm';}else{if(!isIE||!tinymce.relaxedDomain)t.setupIframe();e=n=o=null;}},setupIframe:function(){var t=this,s=t.settings,e=DOM.get(t.id),d=t.getDoc(),h,b;if(!isIE||!tinymce.relaxedDomain){d.open();d.write(t.iframeHTML);d.close();}if(!isIE){try{if(!s.readonly)d.designMode='On';}catch(ex){}}if(isIE){b=t.getBody();DOM.hide(b);if(!s.readonly)b.contentEditable=true;DOM.show(b);}t.dom=new tinymce.DOM.DOMUtils(t.getDoc(),{keep_values:true,url_converter:t.convertURL,url_converter_scope:t,hex_colors:s.force_hex_style_colors,class_filter:s.class_filter,update_styles:1,fix_ie_paragraphs:1});t.serializer=new tinymce.dom.Serializer({entity_encoding:s.entity_encoding,entities:s.entities,valid_elements:s.verify_html===false?'*[*]':s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,invalid_elements:s.invalid_elements,fix_table_elements:s.fix_table_elements,fix_list_elements:s.fix_list_elements,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans,font_size_classes:s.font_size_classes,font_size_style_values:s.font_size_style_values,apply_source_formatting:s.apply_source_formatting,remove_linebreaks:s.remove_linebreaks,element_format:s.element_format,dom:t.dom});t.selection=new tinymce.dom.Selection(t.dom,t.getWin(),t.serializer);t.forceBlocks=new tinymce.ForceBlocks(t,{forced_root_block:s.forced_root_block});t.editorCommands=new tinymce.EditorCommands(t);t.serializer.onPreProcess.add(function(se,o){return t.onPreProcess.dispatch(t,o,se);});t.serializer.onPostProcess.add(function(se,o){return t.onPostProcess.dispatch(t,o,se);});t.onPreInit.dispatch(t);if(!s.gecko_spellcheck)t.getBody().spellcheck=0;if(!s.readonly)t._addEvents();t.controlManager.onPostRender.dispatch(t,t.controlManager);t.onPostRender.dispatch(t);if(s.directionality)t.getBody().dir=s.directionality;if(s.nowrap)t.getBody().style.whiteSpace="nowrap";if(s.auto_resize)t.onNodeChange.add(t.resizeToContent,t);if(s.custom_elements){function handleCustom(ed,o){each(explode(s.custom_elements),function(v){var n;if(v.indexOf('~')===0){v=v.substring(1);n='span';}else n='div';o.content=o.content.replace(new RegExp('<('+v+')([^>]*)>','g'),'<'+n+' mce_name="$1"$2>');o.content=o.content.replace(new RegExp('</('+v+')>','g'),'</'+n+'>');});};t.onBeforeSetContent.add(handleCustom);t.onPostProcess.add(function(ed,o){if(o.set)handleCustom(ed,o)});}if(s.handle_node_change_callback){t.onNodeChange.add(function(ed,cm,n){t.execCallback('handle_node_change_callback',t.id,n,-1,-1,true,t.selection.isCollapsed());});}if(s.save_callback){t.onSaveContent.add(function(ed,o){var h=t.execCallback('save_callback',t.id,o.content,t.getBody());if(h)o.content=h;});}if(s.onchange_callback){t.onChange.add(function(ed,l){t.execCallback('onchange_callback',t,l);});}if(s.convert_newlines_to_brs){t.onBeforeSetContent.add(function(ed,o){if(o.initial)o.content=o.content.replace(/\r?\n/g,'<br />');});}if(s.fix_nesting&&isIE){t.onBeforeSetContent.add(function(ed,o){o.content=t._fixNesting(o.content);});}if(s.preformatted){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^\s*<pre.*?>/,'');o.content=o.content.replace(/<\/pre>\s*$/,'');if(o.set)o.content='<pre class="mceItemHidden">'+o.content+'</pre>';});}if(s.verify_css_classes){t.serializer.attribValueFilter=function(n,v){var s,cl;if(n=='class'){if(!t.classesRE){cl=t.dom.getClasses();if(cl.length>0){s='';each(cl,function(o){s+=(s?'|':'')+o['class'];});t.classesRE=new RegExp('('+s+')','gi');}}return!t.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v)||t.classesRE.test(v)?v:'';}return v;};}if(s.convert_fonts_to_spans)t._convertFonts();if(s.inline_styles)t._convertInlineElements();if(s.cleanup_callback){t.onBeforeSetContent.add(function(ed,o){o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);});t.onPreProcess.add(function(ed,o){if(o.set)t.execCallback('cleanup_callback','insert_to_editor_dom',o.node,o);if(o.get)t.execCallback('cleanup_callback','get_from_editor_dom',o.node,o);});t.onPostProcess.add(function(ed,o){if(o.set)o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);if(o.get)o.content=t.execCallback('cleanup_callback','get_from_editor',o.content,o);});}if(s.save_callback){t.onGetContent.add(function(ed,o){if(o.save)o.content=t.execCallback('save_callback',t.id,o.content,t.getBody());});}if(s.handle_event_callback){t.onEvent.add(function(ed,e,o){if(t.execCallback('handle_event_callback',e,ed,o)===false)Event.cancel(e);});}t.onSetContent.add(function(){t.addVisual(t.getBody());});if(s.padd_empty_editor){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^(<p[^>]*>( | |\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,'');});}if(isGecko&&!s.readonly){try{d.designMode='Off';d.designMode='On';}catch(ex){}}setTimeout(function(){if(t.removed)return;t.load({initial:true,format:(s.cleanup_on_startup?'html':'raw')});t.startContent=t.getContent({format:'raw'});t.undoManager.add({initial:true});t.initialized=true;t.onInit.dispatch(t);t.execCallback('setupcontent_callback',t.id,t.getBody(),t.getDoc());t.execCallback('init_instance_callback',t);t.focus(true);t.nodeChanged({initial:1});if(s.content_css){tinymce.each(explode(s.content_css),function(u){t.dom.loadCSS(t.documentBaseURI.toAbsolute(u));});}if(s.auto_focus){setTimeout(function(){var ed=EditorManager.get(s.auto_focus);ed.selection.select(ed.getBody(),1);ed.selection.collapse(1);ed.getWin().focus();},100);}},1);e=null;},focus:function(sf){var oed,t=this,ce=t.settings.content_editable;if(!sf){if(!ce&&(!isIE||t.selection.getNode().ownerDocument!=t.getDoc()))t.getWin().focus();}if(EditorManager.activeEditor!=t){if((oed=EditorManager.activeEditor)!=null)oed.onDeactivate.dispatch(oed,t);t.onActivate.dispatch(t,oed);}EditorManager._setActive(t);},execCallback:function(n){var t=this,f=t.settings[n],s;if(!f)return;if(t.callbackLookup&&(s=t.callbackLookup[n])){f=s.func;s=s.scope;}if(is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);t.callbackLookup=t.callbackLookup||{};t.callbackLookup[n]={func:f,scope:s};}return f.apply(s||t,Array.prototype.slice.call(arguments,1));},translate:function(s){var c=this.settings.language||'en',i18n=EditorManager.i18n;if(!s)return'';return i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return i18n[c+'.'+b]||'{#'+b+'}';});},getLang:function(n,dv){return EditorManager.i18n[(this.settings.language||'en')+'.'+n]||(is(dv)?dv:'{#'+n+'}');},getParam:function(n,dv,ty){var tr=tinymce.trim,v=is(this.settings[n])?this.settings[n]:dv,o;if(ty==='hash'){o={};if(is(v,'string')){each(v.indexOf('=')>0?v.split(/[;,](?![^=;,]*(?:[;,]|$))/):v.split(','),function(v){v=v.split('=');if(v.length>1)o[tr(v[0])]=tr(v[1]);else o[tr(v[0])]=tr(v);});}else o=v;return o;}return v;},nodeChanged:function(o){var t=this,s=t.selection,n=s.getNode()||t.getBody();if(t.initialized){t.onNodeChange.dispatch(t,o?o.controlManager||t.controlManager:t.controlManager,isIE&&n.ownerDocument!=t.getDoc()?t.getBody():n,s.isCollapsed(),o);}},addButton:function(n,s){var t=this;t.buttons=t.buttons||{};t.buttons[n]=s;},addCommand:function(n,f,s){this.execCommands[n]={func:f,scope:s||this};},addQueryStateHandler:function(n,f,s){this.queryStateCommands[n]={func:f,scope:s||this};},addQueryValueHandler:function(n,f,s){this.queryValueCommands[n]={func:f,scope:s||this};},addShortcut:function(pa,desc,cmd_func,sc){var t=this,c;if(!t.settings.custom_shortcuts)return false;t.shortcuts=t.shortcuts||{};if(is(cmd_func,'string')){c=cmd_func;cmd_func=function(){t.execCommand(c,false,null);};}if(is(cmd_func,'object')){c=cmd_func;cmd_func=function(){t.execCommand(c[0],c[1],c[2]);};}each(explode(pa),function(pa){var o={func:cmd_func,scope:sc||this,desc:desc,alt:false,ctrl:false,shift:false};each(explode(pa,'+'),function(v){switch(v){case'alt':case'ctrl':case'shift':o[v]=true;break;default:o.charCode=v.charCodeAt(0);o.keyCode=v.toUpperCase().charCodeAt(0);}});t.shortcuts[(o.ctrl?'ctrl':'')+','+(o.alt?'alt':'')+','+(o.shift?'shift':'')+','+o.keyCode]=o;});return true;},execCommand:function(cmd,ui,val,a){var t=this,s=0,o,st;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd)&&(!a||!a.skip_focus))t.focus();o={};t.onBeforeExecCommand.dispatch(t,cmd,ui,val,o);if(o.terminate)return false;if(t.execCallback('execcommand_callback',t.id,t.selection.getNode(),cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(o=t.execCommands[cmd]){st=o.func.call(o.scope,ui,val);if(st!==true){t.onExecCommand.dispatch(t,cmd,ui,val,a);return st;}}each(t.plugins,function(p){if(p.execCommand&&p.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);s=1;return false;}});if(s)return true;if(t.theme.execCommand&&t.theme.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(t.editorCommands.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}t.getDoc().execCommand(cmd,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);},queryCommandState:function(c){var t=this,o,s;if(t._isHidden())return;if(o=t.queryStateCommands[c]){s=o.func.call(o.scope);if(s!==true)return s;}o=t.editorCommands.queryCommandState(c);if(o!==-1)return o;try{return this.getDoc().queryCommandState(c);}catch(ex){}},queryCommandValue:function(c){var t=this,o,s;if(t._isHidden())return;if(o=t.queryValueCommands[c]){s=o.func.call(o.scope);if(s!==true)return s;}o=t.editorCommands.queryCommandValue(c);if(is(o))return o;try{return this.getDoc().queryCommandValue(c);}catch(ex){}},show:function(){var t=this;DOM.show(t.getContainer());DOM.hide(t.id);t.load();},hide:function(){var t=this,d=t.getDoc();if(isIE&&d)d.execCommand('SelectAll');t.save();DOM.hide(t.getContainer());DOM.setStyle(t.id,'display',t.orgDisplay);},isHidden:function(){return!DOM.isHidden(this.id);},setProgressState:function(b,ti,o){this.onSetProgressState.dispatch(this,b,ti,o);return b;},resizeToContent:function(){var t=this;DOM.setStyle(t.id+"_ifr",'height',t.getBody().scrollHeight);},load:function(o){var t=this,e=t.getElement(),h;if(e){o=o||{};o.load=true;h=t.setContent(is(e.value)?e.value:e.innerHTML,o);o.element=e;if(!o.no_events)t.onLoadContent.dispatch(t,o);o.element=e=null;return h;}},save:function(o){var t=this,e=t.getElement(),h,f;if(!e||!t.initialized)return;o=o||{};o.save=true;if(!o.no_events){t.undoManager.typing=0;t.undoManager.add();}o.element=e;h=o.content=t.getContent(o);if(!o.no_events)t.onSaveContent.dispatch(t,o);h=o.content;if(!/TEXTAREA|INPUT/i.test(e.nodeName)){e.innerHTML=h;if(f=DOM.getParent(t.id,'form')){each(f.elements,function(e){if(e.name==t.id){e.value=h;return false;}});}}else e.value=h;o.element=e=null;return h;},setContent:function(h,o){var t=this;o=o||{};o.format=o.format||'html';o.set=true;o.content=h;if(!o.no_events)t.onBeforeSetContent.dispatch(t,o);if(!tinymce.isIE&&(h.length===0||/^\s+$/.test(h))){o.content=t.dom.setHTML(t.getBody(),'<br mce_bogus="1" />');o.format='raw';}o.content=t.dom.setHTML(t.getBody(),tinymce.trim(o.content));if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;o.content=t.dom.setHTML(t.getBody(),t.serializer.serialize(t.getBody(),o));}if(!o.no_events)t.onSetContent.dispatch(t,o);return o.content;},getContent:function(o){var t=this,h;o=o||{};o.format=o.format||'html';o.get=true;if(!o.no_events)t.onBeforeGetContent.dispatch(t,o);if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;h=t.serializer.serialize(t.getBody(),o);}else h=t.getBody().innerHTML;h=h.replace(/^\s*|\s*$/g,'');o.content=h;if(!o.no_events)t.onGetContent.dispatch(t,o);return o.content;},isDirty:function(){var t=this;return tinymce.trim(t.startContent)!=tinymce.trim(t.getContent({format:'raw',no_events:1}))&&!t.isNotDirty;},getContainer:function(){var t=this;if(!t.container)t.container=DOM.get(t.editorContainer||t.id+'_parent');return t.container;},getContentAreaContainer:function(){return this.contentAreaContainer;},getElement:function(){return DOM.get(this.settings.content_element||this.id);},getWin:function(){var t=this,e;if(!t.contentWindow){e=DOM.get(t.id+"_ifr");if(e)t.contentWindow=e.contentWindow;}return t.contentWindow;},getDoc:function(){var t=this,w;if(!t.contentDocument){w=t.getWin();if(w)t.contentDocument=w.document;}return t.contentDocument;},getBody:function(){return this.bodyElement||this.getDoc().body;},convertURL:function(u,n,e){var t=this,s=t.settings;if(s.urlconverter_callback)return t.execCallback('urlconverter_callback',u,e,true,n);if(!s.convert_urls||(e&&e.nodeName=='LINK')||u.indexOf('file:')===0)return u;if(s.relative_urls)return t.documentBaseURI.toRelative(u);u=t.documentBaseURI.toAbsolute(u,s.remove_script_host);return u;},addVisual:function(e){var t=this,s=t.settings;e=e||t.getBody();if(!is(t.hasVisual))t.hasVisual=s.visual;each(t.dom.select('table,a',e),function(e){var v;switch(e.nodeName){case'TABLE':v=t.dom.getAttrib(e,'border');if(!v||v=='0'){if(t.hasVisual)t.dom.addClass(e,s.visual_table_class);else t.dom.removeClass(e,s.visual_table_class);}return;case'A':v=t.dom.getAttrib(e,'name');if(v){if(t.hasVisual)t.dom.addClass(e,'mceItemAnchor');else t.dom.removeClass(e,'mceItemAnchor');}return;}});t.onVisualAid.dispatch(t,e,t.hasVisual);},remove:function(){var t=this,e=t.getContainer();t.removed=1;t.hide();t.execCallback('remove_instance_callback',t);t.onRemove.dispatch(t);t.onExecCommand.listeners=[];EditorManager.remove(t);DOM.remove(e);},destroy:function(s){var t=this;if(t.destroyed)return;if(!s){tinymce.removeUnload(t.destroy);tinyMCE.onBeforeUnload.remove(t._beforeUnload);if(t.theme.destroy)t.theme.destroy();t.controlManager.destroy();t.selection.destroy();t.dom.destroy();if(!t.settings.content_editable){Event.clear(t.getWin());Event.clear(t.getDoc());}Event.clear(t.getBody());Event.clear(t.formElement);}if(t.formElement){t.formElement.submit=t.formElement._mceOldSubmit;t.formElement._mceOldSubmit=null;}t.contentAreaContainer=t.formElement=t.container=t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null;if(t.selection)t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null;t.destroyed=1;},_addEvents:function(){var t=this,i,s=t.settings,lo={mouseup:'onMouseUp',mousedown:'onMouseDown',click:'onClick',keyup:'onKeyUp',keydown:'onKeyDown',keypress:'onKeyPress',submit:'onSubmit',reset:'onReset',contextmenu:'onContextMenu',dblclick:'onDblClick',paste:'onPaste'};function eventHandler(e,o){var ty=e.type;if(t.removed)return;if(t.onEvent.dispatch(t,e,o)!==false){t[lo[e.fakeType||e.type]].dispatch(t,e,o);}};each(lo,function(v,k){switch(k){case'contextmenu':if(tinymce.isOpera){Event.add(t.getBody(),'mousedown',function(e){if(e.ctrlKey){e.fakeType='contextmenu';eventHandler(e);}});}else Event.add(t.getBody(),k,eventHandler);break;case'paste':Event.add(t.getBody(),k,function(e){var tx,h,el,r;if(e.clipboardData)tx=e.clipboardData.getData('text/plain');else if(tinymce.isIE)tx=t.getWin().clipboardData.getData('Text');eventHandler(e,{text:tx,html:h});});break;case'submit':case'reset':Event.add(t.getElement().form||DOM.getParent(t.id,'form'),k,eventHandler);break;default:Event.add(s.content_editable?t.getBody():t.getDoc(),k,eventHandler);}});Event.add(s.content_editable?t.getBody():(isGecko?t.getDoc():t.getWin()),'focus',function(e){t.focus(true);});if(tinymce.isGecko){Event.add(t.getDoc(),'DOMNodeInserted',function(e){var v;e=e.target;if(e.nodeType===1&&e.nodeName==='IMG'&&(v=e.getAttribute('mce_src')))e.src=t.documentBaseURI.toAbsolute(v);});}if(isGecko){function setOpts(){var t=this,d=t.getDoc(),s=t.settings;if(isGecko&&!s.readonly){if(t._isHidden()){try{if(!s.content_editable)d.designMode='On';}catch(ex){}}try{d.execCommand("styleWithCSS",0,false);}catch(ex){if(!t._isHidden())try{d.execCommand("useCSS",0,true);}catch(ex){}}if(!s.table_inline_editing)try{d.execCommand('enableInlineTableEditing',false,false);}catch(ex){}if(!s.object_resizing)try{d.execCommand('enableObjectResizing',false,false);}catch(ex){}}};t.onBeforeExecCommand.add(setOpts);t.onMouseDown.add(setOpts);}t.onMouseUp.add(t.nodeChanged);t.onClick.add(t.nodeChanged);t.onKeyUp.add(function(ed,e){var c=e.keyCode;if((c>=33&&c<=36)||(c>=37&&c<=40)||c==13||c==45||c==46||c==8||(tinymce.isMac&&(c==91||c==93))||e.ctrlKey)t.nodeChanged();});t.onReset.add(function(){t.setContent(t.startContent,{format:'raw'});});if(t.getParam('tab_focus')){function tabCancel(ed,e){if(e.keyCode===9)return Event.cancel(e);};function tabHandler(ed,e){var x,i,f,el,v;function find(d){f=DOM.getParent(ed.id,'form');el=f.elements;if(f){each(el,function(e,i){if(e.id==ed.id){x=i;return false;}});if(d>0){for(i=x+1;i<el.length;i++){if(el[i].type!='hidden')return el[i];}}else{for(i=x-1;i>=0;i--){if(el[i].type!='hidden')return el[i];}}}return null;};if(e.keyCode===9){v=explode(ed.getParam('tab_focus'));if(v.length==1){v[1]=v[0];v[0]=':prev';}if(e.shiftKey){if(v[0]==':prev')el=find(-1);else el=DOM.get(v[0]);}else{if(v[1]==':next')el=find(1);else el=DOM.get(v[1]);}if(el){if(ed=EditorManager.get(el.id||el.name))ed.focus();else window.setTimeout(function(){window.focus();el.focus();},10);return Event.cancel(e);}}};t.onKeyUp.add(tabCancel);if(isGecko){t.onKeyPress.add(tabHandler);t.onKeyDown.add(tabCancel);}else t.onKeyDown.add(tabHandler);}if(s.custom_shortcuts){if(s.custom_undo_redo_keyboard_shortcuts){t.addShortcut('ctrl+z',t.getLang('undo_desc'),'Undo');t.addShortcut('ctrl+y',t.getLang('redo_desc'),'Redo');}if(isGecko){t.addShortcut('ctrl+b',t.getLang('bold_desc'),'Bold');t.addShortcut('ctrl+i',t.getLang('italic_desc'),'Italic');t.addShortcut('ctrl+u',t.getLang('underline_desc'),'Underline');}for(i=1;i<=6;i++)t.addShortcut('ctrl+'+i,'',['FormatBlock',false,'<h'+i+'>']);t.addShortcut('ctrl+7','',['FormatBlock',false,'<p>']);t.addShortcut('ctrl+8','',['FormatBlock',false,'<div>']);t.addShortcut('ctrl+9','',['FormatBlock',false,'<address>']);function find(e){var v=null;if(!e.altKey&&!e.ctrlKey&&!e.metaKey)return v;each(t.shortcuts,function(o){if(tinymce.isMac&&o.ctrl!=e.metaKey)return;else if(!tinymce.isMac&&o.ctrl!=e.ctrlKey)return;if(o.alt!=e.altKey)return;if(o.shift!=e.shiftKey)return;if(e.keyCode==o.keyCode||(e.charCode&&e.charCode==o.charCode)){v=o;return false;}});return v;};t.onKeyUp.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyPress.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyDown.add(function(ed,e){var o=find(e);if(o){o.func.call(o.scope);return Event.cancel(e);}});}if(tinymce.isIE){Event.add(t.getDoc(),'controlselect',function(e){var re=t.resizeInfo,cb;e=e.target;if(e.nodeName!=='IMG')return;if(re)Event.remove(re.node,re.ev,re.cb);if(!t.dom.hasClass(e,'mceItemNoResize')){ev='resizeend';cb=Event.add(e,ev,function(e){var v;e=e.target;if(v=t.dom.getStyle(e,'width')){t.dom.setAttrib(e,'width',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'width','');}if(v=t.dom.getStyle(e,'height')){t.dom.setAttrib(e,'height',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'height','');}});}else{ev='resizestart';cb=Event.add(e,'resizestart',Event.cancel,Event);}re=t.resizeInfo={node:e,ev:ev,cb:cb};});t.onKeyDown.add(function(ed,e){switch(e.keyCode){case 8:if(t.selection.getRng().item){t.selection.getRng().item(0).removeNode();return Event.cancel(e);}}});}if(tinymce.isOpera){t.onClick.add(function(ed,e){Event.prevent(e);});}if(s.custom_undo_redo){function addUndo(){t.undoManager.typing=0;t.undoManager.add();};if(tinymce.isIE){Event.add(t.getWin(),'blur',function(e){var n;if(t.selection){n=t.selection.getNode();if(!t.removed&&n.ownerDocument&&n.ownerDocument!=t.getDoc())addUndo();}});}else{Event.add(t.getDoc(),'blur',function(){if(t.selection&&!t.removed)addUndo();});}t.onMouseDown.add(addUndo);t.onKeyUp.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45||e.ctrlKey){t.undoManager.typing=0;t.undoManager.add();}});t.onKeyDown.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45){if(t.undoManager.typing){t.undoManager.add();t.undoManager.typing=0;}return;}if(!t.undoManager.typing){t.undoManager.add();t.undoManager.typing=1;}});}},_convertInlineElements:function(){var t=this,s=t.settings,dom=t.dom,v,e,na,st,sp;function convert(ed,o){if(!s.inline_styles)return;if(o.get){each(t.dom.select('table,u,strike',o.node),function(n){switch(n.nodeName){case'TABLE':if(v=dom.getAttrib(n,'height')){dom.setStyle(n,'height',v);dom.setAttrib(n,'height','');}break;case'U':case'STRIKE':n.style.textDecoration=n.nodeName=='U'?'underline':'line-through';dom.setAttrib(n,'mce_style','');dom.setAttrib(n,'mce_name','span');break;}});}else if(o.set){each(t.dom.select('table,span',o.node).reverse(),function(n){if(n.nodeName=='TABLE'){if(v=dom.getStyle(n,'height'))dom.setAttrib(n,'height',v.replace(/[^0-9%]+/g,''));}else{if(n.style.textDecoration=='underline')na='u';else if(n.style.textDecoration=='line-through')na='strike';else na='';if(na){n.style.textDecoration='';dom.setAttrib(n,'mce_style','');e=dom.create(na,{style:dom.getAttrib(n,'style')});dom.replace(e,n,1);}}});}};t.onPreProcess.add(convert);if(!s.cleanup_on_startup){t.onSetContent.add(function(ed,o){if(o.initial)convert(t,{node:t.getBody(),set:1});});}},_convertFonts:function(){var t=this,s=t.settings,dom=t.dom,fz,fzn,sl,cl;if(!s.inline_styles)return;fz=[8,10,12,14,18,24,36];fzn=['xx-small','x-small','small','medium','large','x-large','xx-large'];if(sl=s.font_size_style_values)sl=explode(sl);if(cl=s.font_size_classes)cl=explode(cl);function process(no){var n,sp,nl,x;if(!s.inline_styles)return;nl=t.dom.select('font',no);for(x=nl.length-1;x>=0;x--){n=nl[x];sp=dom.create('span',{style:dom.getAttrib(n,'style'),'class':dom.getAttrib(n,'class')});dom.setStyles(sp,{fontFamily:dom.getAttrib(n,'face'),color:dom.getAttrib(n,'color'),backgroundColor:n.style.backgroundColor});if(n.size){if(sl)dom.setStyle(sp,'fontSize',sl[parseInt(n.size)-1]);else dom.setAttrib(sp,'class',cl[parseInt(n.size)-1]);}dom.setAttrib(sp,'mce_style','');dom.replace(sp,n,1);}};t.onPreProcess.add(function(ed,o){if(o.get)process(o.node);});t.onSetContent.add(function(ed,o){if(o.initial)process(o.node);});},_isHidden:function(){var s;if(!isGecko)return 0;s=this.selection.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},_fixNesting:function(s){var d=[],i;s=s.replace(/<(\/)?([^\s>]+)[^>]*?>/g,function(a,b,c){var e;if(b==='/'){if(!d.length)return'';if(c!==d[d.length-1].tag){for(i=d.length-1;i>=0;i--){if(d[i].tag===c){d[i].close=1;break;}}return'';}else{d.pop();if(d.length&&d[d.length-1].close){a=a+'</'+d[d.length-1].tag+'>';d.pop();}}}else{if(/^(br|hr|input|meta|img|link|param)$/i.test(c))return a;if(/\/>$/.test(a))return a;d.push({tag:c});}return a;});for(i=d.length-1;i>=0;i--)s+='</'+d[i].tag+'>';return s;}});})();(function(){var each=tinymce.each,isIE=tinymce.isIE,isGecko=tinymce.isGecko,isOpera=tinymce.isOpera,isWebKit=tinymce.isWebKit;function isBlock(n){return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n.nodeName);};tinymce.create('tinymce.EditorCommands',{EditorCommands:function(ed){this.editor=ed;},execCommand:function(cmd,ui,val){var t=this,ed=t.editor,f;switch(cmd){case'Cut':case'Copy':case'Paste':try{ed.getDoc().execCommand(cmd,ui,val);}catch(ex){if(isGecko){ed.windowManager.confirm(ed.getLang('clipboard_msg'),function(s){if(s)window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');});}else ed.windowManager.alert(ed.getLang('clipboard_no_support'));}return true;case'mceResetDesignMode':case'mceBeginUndoLevel':return true;case'unlink':t.UnLink();return true;case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':t.mceJustify(cmd,cmd.substring(7).toLowerCase());return true;case'mceEndUndoLevel':case'mceAddUndoLevel':ed.undoManager.add();return true;default:f=this[cmd];if(f){f.call(this,ui,val);return true;}}return false;},Indent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){d.setStyle(e,'paddingLeft',(parseInt(e.style.paddingLeft||0)+iv)+iu);});return;}ed.getDoc().execCommand('Indent',false,null);if(isIE){d.getParent(s.getNode(),function(n){if(n.nodeName=='BLOCKQUOTE'){n.dir=n.style.cssText='';}});}},Outdent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,v,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){v=Math.max(0,parseInt(e.style.paddingLeft||0)-iv);d.setStyle(e,'paddingLeft',v?v+iu:'');});return;}ed.getDoc().execCommand('Outdent',false,null);},mceSetAttribute:function(u,v){var ed=this.editor,d=ed.dom,e;if(e=d.getParent(ed.selection.getNode(),d.isBlock))d.setAttrib(e,v.name,v.value);},mceSetContent:function(u,v){this.editor.setContent(v);},mceToggleVisualAid:function(){var ed=this.editor;ed.hasVisual=!ed.hasVisual;ed.addVisual();},mceReplaceContent:function(u,v){var s=this.editor.selection;s.setContent(v.replace(/\{\$selection\}/g,s.getContent({format:'text'})));},mceInsertLink:function(u,v){var ed=this.editor,s=ed.selection,e=ed.dom.getParent(s.getNode(),'A');if(tinymce.is(v,'string'))v={href:v};function set(e){each(v,function(v,k){ed.dom.setAttrib(e,k,v);});};if(!e){ed.execCommand('CreateLink',false,'javascript:mctmp(0);');each(ed.dom.select('a'),function(e){if(e.href=='javascript:mctmp(0);')set(e);});}else{if(v.href)set(e);else ed.dom.remove(e,1);}},UnLink:function(){var ed=this.editor,s=ed.selection;if(s.isCollapsed())s.select(s.getNode());ed.getDoc().execCommand('unlink',false,null);s.collapse(0);},FontName:function(u,v){var t=this,ed=t.editor,s=ed.selection,e;if(!v){if(s.isCollapsed())s.select(s.getNode());t.RemoveFormat();}else{if(ed.settings.convert_fonts_to_spans)t._applyInlineStyle('span',{style:{fontFamily:v}});else ed.getDoc().execCommand('FontName',false,v);}},FontSize:function(u,v){var ed=this.editor,s=ed.settings,fc,fs;if(s.convert_fonts_to_spans&&v>=1&&v<=7){fs=tinymce.explode(s.font_size_style_values);fc=tinymce.explode(s.font_size_classes);if(fc)v=fc[v-1]||v;else v=fs[v-1]||v;}if(v>=1&&v<=7)ed.getDoc().execCommand('FontSize',false,v);else this._applyInlineStyle('span',{style:{fontSize:v}});},queryCommandValue:function(c){var f=this['queryValue'+c];if(f)return f.call(this,c);return false;},queryCommandState:function(cmd){var f;switch(cmd){case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':return this.queryStateJustify(cmd,cmd.substring(7).toLowerCase());default:if(f=this['queryState'+cmd])return f.call(this,cmd);}return-1;},_queryState:function(c){try{return this.editor.getDoc().queryCommandState(c);}catch(ex){}},_queryVal:function(c){try{return this.editor.getDoc().queryCommandValue(c);}catch(ex){}},queryValueFontSize:function(){var ed=this.editor,v=0,p;if(p=ed.dom.getParent(ed.selection.getNode(),'SPAN'))v=p.style.fontSize;if(!v&&(isOpera||isWebKit)){if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.size;return v;}return v||this._queryVal('FontSize');},queryValueFontName:function(){var ed=this.editor,v=0,p;if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.face;if(p=ed.dom.getParent(ed.selection.getNode(),'SPAN'))v=p.style.fontFamily.replace(/, /g,',').replace(/[\'\"]/g,'').toLowerCase();if(!v)v=this._queryVal('FontName');return v;},mceJustify:function(c,v){var ed=this.editor,se=ed.selection,n=se.getNode(),nn=n.nodeName,bl,nb,dom=ed.dom,rm;if(ed.settings.inline_styles&&this.queryStateJustify(c,v))rm=1;bl=dom.getParent(n,ed.dom.isBlock);if(nn=='IMG'){if(v=='full')return;if(rm){if(v=='center')dom.setStyle(bl||n.parentNode,'textAlign','');dom.setStyle(n,'float','');this.mceRepaint();return;}if(v=='center'){if(bl&&/^(TD|TH)$/.test(bl.nodeName))bl=0;if(!bl||bl.childNodes.length>1){nb=dom.create('p');nb.appendChild(n.cloneNode(false));if(bl)dom.insertAfter(nb,bl);else dom.insertAfter(nb,n);dom.remove(n);n=nb.firstChild;bl=nb;}dom.setStyle(bl,'textAlign',v);dom.setStyle(n,'float','');}else{dom.setStyle(n,'float',v);dom.setStyle(bl||n.parentNode,'textAlign','');}this.mceRepaint();return;}if(ed.settings.inline_styles&&ed.settings.forced_root_block){if(rm)v='';each(this._getSelectedBlocks(dom.getParent(se.getStart(),dom.isBlock),dom.getParent(se.getEnd(),dom.isBlock)),function(e){dom.setAttrib(e,'align','');dom.setStyle(e,'textAlign',v=='full'?'justify':v);});return;}else if(!rm)ed.getDoc().execCommand(c,false,null);if(ed.settings.inline_styles){if(rm){dom.getParent(ed.selection.getNode(),function(n){if(n.style&&n.style.textAlign)dom.setStyle(n,'textAlign','');});return;}each(dom.select('*'),function(n){var v=n.align;if(v){if(v=='full')v='justify';dom.setStyle(n,'textAlign',v);dom.setAttrib(n,'align','');}});}},mceSetCSSClass:function(u,v){this.mceSetStyleInfo(0,{command:'setattrib',name:'class',value:v});},getSelectedElement:function(){var t=this,ed=t.editor,dom=ed.dom,se=ed.selection,r=se.getRng(),r1,r2,sc,ec,so,eo,e,sp,ep,re;if(se.isCollapsed()||r.item)return se.getNode();re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if(isIE){r1=r.duplicate();r1.collapse(true);sc=r1.parentElement();r2=r.duplicate();r2.collapse(false);ec=r2.parentElement();if(sc!=ec){r1.move('character',1);sc=r1.parentElement();}if(sc==ec){r1=r.duplicate();r1.moveToElementText(sc);if(r1.compareEndPoints('StartToStart',r)==0&&r1.compareEndPoints('EndToEnd',r)==0)return re&&re.test(sc.nodeName)?null:sc;}}else{function getParent(n){return dom.getParent(n,function(n){return n.nodeType==1;});};sc=r.startContainer;ec=r.endContainer;so=r.startOffset;eo=r.endOffset;if(!r.collapsed){if(sc==ec){if(so-eo<2){if(sc.hasChildNodes()){sp=sc.childNodes[so];return re&&re.test(sp.nodeName)?null:sp;}}}}if(sc.nodeType!=3||ec.nodeType!=3)return null;if(so==0){sp=getParent(sc);if(sp&&sp.firstChild!=sc)sp=null;}if(so==sc.nodeValue.length){e=sc.nextSibling;if(e&&e.nodeType==1)sp=sc.nextSibling;}if(eo==0){e=ec.previousSibling;if(e&&e.nodeType==1)ep=e;}if(eo==ec.nodeValue.length){ep=getParent(ec);if(ep&&ep.lastChild!=ec)ep=null;}if(sp==ep)return re&&sp&&re.test(sp.nodeName)?null:sp;}return null;},InsertHorizontalRule:function(){if(isGecko||isIE)this.editor.selection.setContent('<hr />');else this.editor.getDoc().execCommand('InsertHorizontalRule',false,'');},RemoveFormat:function(){var t=this,ed=t.editor,s=ed.selection,b;if(isWebKit)s.setContent(s.getContent({format:'raw'}).replace(/(<(span|b|i|strong|em|strike) [^>]+>|<(span|b|i|strong|em|strike)>|<\/(span|b|i|strong|em|strike)>|)/g,''),{format:'raw'});else ed.getDoc().execCommand('RemoveFormat',false,null);t.mceSetStyleInfo(0,{command:'removeformat'});ed.addVisual();},mceSetStyleInfo:function(u,v){var t=this,ed=t.editor,d=ed.getDoc(),dom=ed.dom,e,b,s=ed.selection,nn=v.wrapper||'span',b=s.getBookmark(),re;function set(n,e){if(n.nodeType==1){switch(v.command){case'setattrib':return dom.setAttrib(n,v.name,v.value);case'setstyle':return dom.setStyle(n,v.name,v.value);case'removeformat':return dom.setAttrib(n,'class','');}}};re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if((e=t.getSelectedElement())&&!ed.settings.force_span_wrappers)set(e,1);else{d.execCommand('FontName',false,'__');each(isWebKit?dom.select('span'):dom.select('font'),function(n){var sp,e;if(dom.getAttrib(n,'face')=='__'||n.style.fontFamily==='__'){sp=dom.create(nn,{mce_new:'1'});set(sp);each(n.childNodes,function(n){sp.appendChild(n.cloneNode(true));});dom.replace(sp,n);}});}each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!dom.getAttrib(n,'mce_new')){p=dom.getParent(n,function(n){return n.nodeType==1&&dom.getAttrib(n,'mce_new');});if(p)dom.remove(n,1);}});each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!p||!dom.getAttrib(n,'mce_new'))return;if(ed.settings.force_span_wrappers&&p.nodeName!='SPAN')return;if(p.nodeName==nn.toUpperCase()&&p.childNodes.length==1)return dom.remove(p,1);if(n.nodeType==1&&(!re||!re.test(p.nodeName))&&p.childNodes.length==1){set(p);dom.setAttrib(n,'class','');}});each(dom.select(nn).reverse(),function(n){if(dom.getAttrib(n,'mce_new')||(dom.getAttribs(n).length<=1&&n.className==='')){if(!dom.getAttrib(n,'class')&&!dom.getAttrib(n,'style'))return dom.remove(n,1);dom.setAttrib(n,'mce_new','');}});s.moveToBookmark(b);},queryStateJustify:function(c,v){var ed=this.editor,n=ed.selection.getNode(),dom=ed.dom;if(n&&n.nodeName=='IMG'){if(dom.getStyle(n,'float')==v)return 1;return n.parentNode.style.textAlign==v;}n=dom.getParent(ed.selection.getStart(),function(n){return n.nodeType==1&&n.style.textAlign;});if(v=='full')v='justify';if(ed.settings.inline_styles)return(n&&n.style.textAlign==v);return this._queryState(c);},ForeColor:function(ui,v){var ed=this.editor;if(ed.settings.convert_fonts_to_spans){this._applyInlineStyle('span',{style:{color:v}});return;}else ed.getDoc().execCommand('ForeColor',false,v);},HiliteColor:function(ui,val){var t=this,ed=t.editor,d=ed.getDoc();if(ed.settings.convert_fonts_to_spans){this._applyInlineStyle('span',{style:{backgroundColor:val}});return;}function set(s){if(!isGecko)return;try{d.execCommand("styleWithCSS",0,s);}catch(ex){d.execCommand("useCSS",0,!s);}};if(isGecko||isOpera){set(true);d.execCommand('hilitecolor',false,val);set(false);}else d.execCommand('BackColor',false,val);},Undo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.undo();ed.nodeChanged();}else ed.getDoc().execCommand('Undo',false,null);},Redo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.redo();ed.nodeChanged();}else ed.getDoc().execCommand('Redo',false,null);},FormatBlock:function(ui,val){var t=this,ed=t.editor,s=ed.selection,dom=ed.dom,bl,nb,b;function isBlock(n){return/^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(n.nodeName);};bl=dom.getParent(s.getNode(),function(n){return isBlock(n);});if(bl){if((isIE&&isBlock(bl.parentNode))||bl.nodeName=='DIV'){nb=ed.dom.create(val);each(dom.getAttribs(bl),function(v){dom.setAttrib(nb,v.nodeName,dom.getAttrib(bl,v.nodeName));});b=s.getBookmark();dom.replace(nb,bl,1);s.moveToBookmark(b);ed.nodeChanged();return;}}val=ed.settings.forced_root_block?(val||'<p>'):val;if(val.indexOf('<')==-1)val='<'+val+'>';if(tinymce.isGecko)val=val.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi,'$1');ed.getDoc().execCommand('FormatBlock',false,val);},mceCleanup:function(){var ed=this.editor,s=ed.selection,b=s.getBookmark();ed.setContent(ed.getContent());s.moveToBookmark(b);},mceRemoveNode:function(ui,val){var ed=this.editor,s=ed.selection,b,n=val||s.getNode();if(n==ed.getBody())return;b=s.getBookmark();ed.dom.remove(n,1);s.moveToBookmark(b);ed.nodeChanged();},mceSelectNodeDepth:function(ui,val){var ed=this.editor,s=ed.selection,c=0;ed.dom.getParent(s.getNode(),function(n){if(n.nodeType==1&&c++==val){s.select(n);ed.nodeChanged();return false;}},ed.getBody());},mceSelectNode:function(u,v){this.editor.selection.select(v);},mceInsertContent:function(ui,val){this.editor.selection.setContent(val);},mceInsertRawHTML:function(ui,val){var ed=this.editor;ed.selection.setContent('tiny_mce_marker');ed.setContent(ed.getContent().replace(/tiny_mce_marker/g,val));},mceRepaint:function(){var s,b,e=this.editor;if(tinymce.isGecko){try{s=e.selection;b=s.getBookmark(true);if(s.getSel())s.getSel().selectAllChildren(e.getBody());s.collapse(true);s.moveToBookmark(b);}catch(ex){}}},queryStateUnderline:function(){var ed=this.editor,n=ed.selection.getNode();if(n&&n.nodeName=='A')return false;return this._queryState('Underline');},queryStateOutdent:function(){var ed=this.editor,n;if(ed.settings.inline_styles){if((n=ed.dom.getParent(ed.selection.getStart(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;if((n=ed.dom.getParent(ed.selection.getEnd(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;}return this.queryStateInsertUnorderedList()||this.queryStateInsertOrderedList()||(!ed.settings.inline_styles&&!!ed.dom.getParent(ed.selection.getNode(),'BLOCKQUOTE'));},queryStateInsertUnorderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'UL');},queryStateInsertOrderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'OL');},queryStatemceBlockQuote:function(){return!!this.editor.dom.getParent(this.editor.selection.getStart(),function(n){return n.nodeName==='BLOCKQUOTE';});},mceBlockQuote:function(){var t=this,ed=t.editor,s=ed.selection,dom=ed.dom,sb,eb,n,bm,bq,r,bq2,i,nl;function getBQ(e){return dom.getParent(e,function(n){return n.nodeName==='BLOCKQUOTE';});};sb=dom.getParent(s.getStart(),isBlock);eb=dom.getParent(s.getEnd(),isBlock);if(bq=getBQ(sb)){if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();if(getBQ(eb)){bq2=bq.cloneNode(false);while(n=eb.nextSibling)bq2.appendChild(n.parentNode.removeChild(n));}if(bq2)dom.insertAfter(bq2,bq);nl=t._getSelectedBlocks(sb,eb);for(i=nl.length-1;i>=0;i--){dom.insertAfter(nl[i],bq);}if(/^\s*$/.test(bq.innerHTML))dom.remove(bq,1);if(bq2&&/^\s*$/.test(bq2.innerHTML))dom.remove(bq2,1);if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(0);if(dom.getParent(s.getStart(),isBlock)!=sb){r=s.getRng();r.move('character',-1);r.select();}}}else t.editor.selection.moveToBookmark(bm);return;}if(isIE&&!sb&&!eb){t.editor.getDoc().execCommand('Indent');n=getBQ(s.getNode());n.style.margin=n.dir='';return;}if(!sb||!eb)return;if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();each(t._getSelectedBlocks(getBQ(s.getStart()),getBQ(s.getEnd())),function(e){if(e.nodeName=='BLOCKQUOTE'&&!bq){bq=e;return;}if(!bq){bq=dom.create('blockquote');e.parentNode.insertBefore(bq,e);}if(e.nodeName=='BLOCKQUOTE'&&bq){n=e.firstChild;while(n){bq.appendChild(n.cloneNode(true));n=n.nextSibling;}dom.remove(e);return;}bq.appendChild(dom.remove(e));});if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(1);}}else s.moveToBookmark(bm);},_applyInlineStyle:function(na,at,op){var t=this,ed=t.editor,dom=ed.dom,bm,lo={},kh;na=na.toUpperCase();if(op&&op.check_classes&&at['class'])op.check_classes.push(at['class']);function replaceFonts(){var bm;each(dom.select(tinymce.isWebKit&&!tinymce.isAir?'span':'font'),function(n){if(n.style.fontFamily=='mceinline'||n.face=='mceinline'){if(!bm)bm=ed.selection.getBookmark();at._mce_new='1';dom.replace(dom.create(na,at),n,1);}});each(dom.select(na),function(n){if(n.getAttribute('_mce_new')){function removeStyle(n){if(n.nodeType==1){each(at.style,function(v,k){dom.setStyle(n,k,'');});if(at['class']&&n.className&&op){each(op.check_classes,function(c){if(dom.hasClass(n,c))dom.removeClass(n,c);});}}};each(dom.select(na,n),removeStyle);if(n.parentNode&&n.parentNode.nodeType==1&&n.parentNode.childNodes.length==1)removeStyle(n.parentNode);dom.getParent(n.parentNode,function(pn){if(pn.nodeType==1){if(at.style){each(at.style,function(v,k){var sv;if(!lo[k]&&(sv=dom.getStyle(pn,k))){if(sv===v)dom.setStyle(n,k,'');lo[k]=1;}});}if(at['class']&&pn.className&&op){each(op.check_classes,function(c){if(dom.hasClass(pn,c))dom.removeClass(n,c);});}}return false;});n.removeAttribute('_mce_new');}});each(dom.select(na).reverse(),function(n){var c=0;each(dom.getAttribs(n),function(an){if(an.nodeName.substring(0,1)!='_'&&dom.getAttrib(n,an.nodeName)!=''){c++;}});if(c==0)dom.remove(n,1);});ed.selection.moveToBookmark(bm);return!!bm;};ed.focus();ed.getDoc().execCommand('FontName',false,'mceinline');replaceFonts();if(kh=t._applyInlineStyle.keyhandler){ed.onKeyUp.remove(kh);ed.onKeyPress.remove(kh);ed.onKeyDown.remove(kh);ed.onSetContent.remove(t._applyInlineStyle.chandler);}if(ed.selection.isCollapsed()){t._pendingStyles=tinymce.extend(t._pendingStyles||{},at.style);t._applyInlineStyle.chandler=ed.onSetContent.add(function(){delete t._pendingStyles;});t._applyInlineStyle.keyhandler=kh=function(e){if(t._pendingStyles){at.style=t._pendingStyles;delete t._pendingStyles;}if(replaceFonts()){ed.onKeyDown.remove(t._applyInlineStyle.keyhandler);ed.onKeyPress.remove(t._applyInlineStyle.keyhandler);}if(e.type=='keyup')ed.onKeyUp.remove(t._applyInlineStyle.keyhandler);};ed.onKeyDown.add(kh);ed.onKeyPress.add(kh);ed.onKeyUp.add(kh);}else t._pendingStyles=0;},_getSelectedBlocks:function(st,en){var ed=this.editor,dom=ed.dom,s=ed.selection,sb,eb,n,bl=[];sb=dom.getParent(st||s.getStart(),isBlock);eb=dom.getParent(en||s.getEnd(),isBlock);if(sb)bl.push(sb);if(sb&&eb&&sb!=eb){n=sb;while((n=n.nextSibling)&&n!=eb){if(isBlock(n))bl.push(n);}}if(eb&&sb!=eb)bl.push(eb);return bl;}});})();tinymce.create('tinymce.UndoManager',{index:0,data:null,typing:0,UndoManager:function(ed){var t=this,Dispatcher=tinymce.util.Dispatcher;t.editor=ed;t.data=[];t.onAdd=new Dispatcher(this);t.onUndo=new Dispatcher(this);t.onRedo=new Dispatcher(this);},add:function(l){var t=this,i,ed=t.editor,b,s=ed.settings,la;l=l||{};l.content=l.content||ed.getContent({format:'raw',no_events:1});l.content=l.content.replace(/^\s*|\s*$/g,'');la=t.data[t.index>0&&(t.index==0||t.index==t.data.length)?t.index-1:t.index];if(!l.initial&&la&&l.content==la.content)return null;if(s.custom_undo_redo_levels){if(t.data.length>s.custom_undo_redo_levels){for(i=0;i<t.data.length-1;i++)t.data[i]=t.data[i+1];t.data.length--;t.index=t.data.length;}}if(s.custom_undo_redo_restore_selection&&!l.initial)l.bookmark=b=l.bookmark||ed.selection.getBookmark();if(t.index<t.data.length)t.index++;if(t.data.length===0&&!l.initial)return null;t.data.length=t.index+1;t.data[t.index++]=l;if(l.initial)t.index=0;if(t.data.length==2&&t.data[0].initial)t.data[0].bookmark=b;t.onAdd.dispatch(t,l);ed.isNotDirty=0;return l;},undo:function(){var t=this,ed=t.editor,l=l,i;if(t.typing){t.add();t.typing=0;}if(t.index>0){if(t.index==t.data.length&&t.index>1){i=t.index;t.typing=0;if(!t.add())t.index=i;--t.index;}l=t.data[--t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onUndo.dispatch(t,l);}return l;},redo:function(){var t=this,ed=t.editor,l=null;if(t.index<t.data.length-1){l=t.data[++t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onRedo.dispatch(t,l);}return l;},clear:function(){var t=this;t.data=[];t.index=0;t.typing=0;t.add({initial:true});},hasUndo:function(){return this.index!=0||this.typing;},hasRedo:function(){return this.index<this.data.length-1;}});(function(){var Event,isIE,isGecko,isOpera,each,extend;Event=tinymce.dom.Event;isIE=tinymce.isIE;isGecko=tinymce.isGecko;isOpera=tinymce.isOpera;each=tinymce.each;extend=tinymce.extend;tinymce.create('tinymce.ForceBlocks',{ForceBlocks:function(ed){var t=this,s=ed.settings,elm;t.editor=ed;t.dom=ed.dom;elm=(s.forced_root_block||'p').toLowerCase();s.element=elm.toUpperCase();ed.onPreInit.add(t.setup,t);t.reOpera=new RegExp('(\\u00a0| | )<\/'+elm+'>','gi');t.rePadd=new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR1=new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR2=new RegExp('<p( )([^>]+)>( | )<\\\/p>|<p>( | )<\\\/p>'.replace(/p/g,elm),'gi');t.reBR2Nbsp=new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g,elm),'gi');t.reTrailBr=new RegExp('\\s*<br \\/>\\s*<\\\/p>'.replace(/p/g,elm),'gi');function padd(ed,o){if(isOpera)o.content=o.content.replace(t.reOpera,'</'+elm+'>');o.content=o.content.replace(t.rePadd,'<'+elm+'$1$2$3$4$5$6>\u00a0</'+elm+'>');if(!isIE&&!isOpera&&o.set){o.content=o.content.replace(t.reNbsp2BR1,'<'+elm+'$1$2><br /></'+elm+'>');o.content=o.content.replace(t.reNbsp2BR2,'<'+elm+'$1$2><br /></'+elm+'>');}else{o.content=o.content.replace(t.reBR2Nbsp,'<'+elm+'$1$2>\u00a0</'+elm+'>');o.content=o.content.replace(t.reTrailBr,'</'+elm+'>');}};ed.onBeforeSetContent.add(padd);ed.onPostProcess.add(padd);if(s.forced_root_block){ed.onInit.add(t.forceRoots,t);ed.onSetContent.add(t.forceRoots,t);ed.onBeforeGetContent.add(t.forceRoots,t);}},setup:function(){var t=this,ed=t.editor,s=ed.settings;if(s.forced_root_block){ed.onKeyUp.add(t.forceRoots,t);ed.onPreProcess.add(t.forceRoots,t);}if(s.force_br_newlines){if(isIE){ed.onKeyPress.add(function(ed,e){var n,s=ed.selection;if(e.keyCode==13&&s.getNode().nodeName!='LI'){s.setContent('<br id="__" /> ',{format:'raw'});n=ed.dom.get('__');n.removeAttribute('id');s.select(n);s.collapse();return Event.cancel(e);}});}return;}if(!isIE&&s.force_p_newlines){ed.onKeyPress.add(function(ed,e){if(e.keyCode==13&&!e.shiftKey){if(!t.insertPara(e))Event.cancel(e);}});if(isGecko){ed.onKeyDown.add(function(ed,e){if((e.keyCode==8||e.keyCode==46)&&!e.shiftKey)t.backspaceDelete(e,e.keyCode==8);});}}function ren(rn,na){var ne=ed.dom.create(na);each(rn.attributes,function(a){if(a.specified&&a.nodeValue)ne.setAttribute(a.nodeName.toLowerCase(),a.nodeValue);});each(rn.childNodes,function(n){ne.appendChild(n.cloneNode(true));});rn.parentNode.replaceChild(ne,rn);return ne;};if(isIE&&s.element!='P'){ed.onKeyPress.add(function(ed,e){t.lastElm=ed.selection.getNode().nodeName;});ed.onKeyUp.add(function(ed,e){var bl,sel=ed.selection,n=sel.getNode(),b=ed.getBody();if(b.childNodes.length===1&&n.nodeName=='P'){n=ren(n,s.element);sel.select(n);sel.collapse();ed.nodeChanged();}else if(e.keyCode==13&&!e.shiftKey&&t.lastElm!='P'){bl=ed.dom.getParent(n,'P');if(bl){ren(bl,s.element);ed.nodeChanged();}}});}},find:function(n,t,s){var ed=this.editor,w=ed.getDoc().createTreeWalker(n,4,null,false),c=-1;while(n=w.nextNode()){c++;if(t==0&&n==s)return c;if(t==1&&c==s)return n;}return-1;},forceRoots:function(ed,e){var t=this,ed=t.editor,b=ed.getBody(),d=ed.getDoc(),se=ed.selection,s=se.getSel(),r=se.getRng(),si=-2,ei,so,eo,tr,c=-0xFFFFFF;var nx,bl,bp,sp,le,nl=b.childNodes,i,n,eid;for(i=nl.length-1;i>=0;i--){nx=nl[i];if(nx.nodeType==3||(!t.dom.isBlock(nx)&&nx.nodeType!=8)){if(!bl){if(nx.nodeType!=3||/[^\s]/g.test(nx.nodeValue)){if(si==-2&&r){if(!isIE){if(r.startContainer.nodeType==1&&(n=r.startContainer.childNodes[r.startOffset])&&n.nodeType==1){eid=n.getAttribute("id");n.setAttribute("id","__mce");}else{if(ed.dom.getParent(r.startContainer,function(e){return e===b;})){so=r.startOffset;eo=r.endOffset;si=t.find(b,0,r.startContainer);ei=t.find(b,0,r.endContainer);}}}else{tr=d.body.createTextRange();tr.moveToElementText(b);tr.collapse(1);bp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(1);sp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(0);le=(tr.move('character',c)*-1)-sp;si=sp-bp;ei=le;}}bl=ed.dom.create(ed.settings.forced_root_block);bl.appendChild(nx.cloneNode(1));nx.parentNode.replaceChild(bl,nx);}}else{if(bl.hasChildNodes())bl.insertBefore(nx,bl.firstChild);else bl.appendChild(nx);}}else bl=null;}if(si!=-2){if(!isIE){bl=b.getElementsByTagName(ed.settings.element)[0];r=d.createRange();if(si!=-1)r.setStart(t.find(b,1,si),so);else r.setStart(bl,0);if(ei!=-1)r.setEnd(t.find(b,1,ei),eo);else r.setEnd(bl,0);if(s){s.removeAllRanges();s.addRange(r);}}else{try{r=s.createRange();r.moveToElementText(b);r.collapse(1);r.moveStart('character',si);r.moveEnd('character',ei);r.select();}catch(ex){}}}else if(!isIE&&(n=ed.dom.get('__mce'))){if(eid)n.setAttribute('id',eid);else n.removeAttribute('id');r=d.createRange();r.setStartBefore(n);r.setEndBefore(n);se.setRng(r);}},getParentBlock:function(n){var d=this.dom;return d.getParent(n,d.isBlock);},insertPara:function(e){var t=this,ed=t.editor,dom=ed.dom,d=ed.getDoc(),se=ed.settings,s=ed.selection.getSel(),r=s.getRangeAt(0),b=d.body;var rb,ra,dir,sn,so,en,eo,sb,eb,bn,bef,aft,sc,ec,n,vp=dom.getViewPort(ed.getWin()),y,ch,car;function isEmpty(n){n=n.innerHTML;n=n.replace(/<(img|hr|table)/gi,'-');n=n.replace(/<[^>]+>/g,'');return n.replace(/[ \t\r\n]+/g,'')=='';};rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(true);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(true);dir=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;sn=dir?s.anchorNode:s.focusNode;so=dir?s.anchorOffset:s.focusOffset;en=dir?s.focusNode:s.anchorNode;eo=dir?s.focusOffset:s.anchorOffset;if(sn===en&&/^(TD|TH)$/.test(sn.nodeName)){dom.remove(sn.firstChild);ed.dom.add(sn,se.element,null,'<br />');aft=ed.dom.add(sn,se.element,null,'<br />');r=d.createRange();r.selectNodeContents(aft);r.collapse(1);ed.selection.setRng(r);return false;}if(sn==b&&en==b&&b.firstChild&&ed.dom.isBlock(b.firstChild)){sn=en=sn.firstChild;so=eo=0;rb=d.createRange();rb.setStart(sn,0);ra=d.createRange();ra.setStart(en,0);}sn=sn.nodeName=="HTML"?d.body:sn;sn=sn.nodeName=="BODY"?sn.firstChild:sn;en=en.nodeName=="HTML"?d.body:en;en=en.nodeName=="BODY"?en.firstChild:en;sb=t.getParentBlock(sn);eb=t.getParentBlock(en);bn=sb?sb.nodeName:se.element;if(t.dom.getParent(sb,function(n){return/OL|UL|PRE/.test(n.nodeName);}))return true;if(sb&&(sb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(sb.style.position))){bn=se.element;sb=null;}if(eb&&(eb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(eb.style.position))){bn=se.element;eb=null;}if(/(TD|TABLE|TH|CAPTION)/.test(bn)||(sb&&bn=="DIV"&&/left|right/gi.test(sb.style.cssFloat))){bn=se.element;sb=eb=null;}bef=(sb&&sb.nodeName==bn)?sb.cloneNode(0):ed.dom.create(bn);aft=(eb&&eb.nodeName==bn)?eb.cloneNode(0):ed.dom.create(bn);aft.removeAttribute('id');if(/^(H[1-6])$/.test(bn)&&sn.nodeValue&&so==sn.nodeValue.length)aft=ed.dom.create(se.element);n=sc=sn;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;sc=n;}while((n=n.previousSibling?n.previousSibling:n.parentNode));n=ec=en;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;ec=n;}while((n=n.nextSibling?n.nextSibling:n.parentNode));if(sc.nodeName==bn)rb.setStart(sc,0);else rb.setStartBefore(sc);rb.setEnd(sn,so);bef.appendChild(rb.cloneContents()||d.createTextNode(''));try{ra.setEndAfter(ec);}catch(ex){}ra.setStart(en,eo);aft.appendChild(ra.cloneContents()||d.createTextNode(''));r=d.createRange();if(!sc.previousSibling&&sc.parentNode.nodeName==bn){r.setStartBefore(sc.parentNode);}else{if(rb.startContainer.nodeName==bn&&rb.startOffset==0)r.setStartBefore(rb.startContainer);else r.setStart(rb.startContainer,rb.startOffset);}if(!ec.nextSibling&&ec.parentNode.nodeName==bn)r.setEndAfter(ec.parentNode);else r.setEnd(ra.endContainer,ra.endOffset);r.deleteContents();if(isOpera)ed.getWin().scrollTo(0,vp.y);if(bef.firstChild&&bef.firstChild.nodeName==bn)bef.innerHTML=bef.firstChild.innerHTML;if(aft.firstChild&&aft.firstChild.nodeName==bn)aft.innerHTML=aft.firstChild.innerHTML;if(isEmpty(bef))bef.innerHTML='<br />';function appendStyles(e,en){var nl=[],nn,n,i;e.innerHTML='';if(se.keep_styles){n=en;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)){nn=n.cloneNode(false);dom.setAttrib(nn,'id','');nl.push(nn);}}while(n=n.parentNode);}if(nl.length>0){for(i=nl.length-1,nn=e;i>=0;i--)nn=nn.appendChild(nl[i]);nl[0].innerHTML=isOpera?' ':'<br />';return nl[0];}else e.innerHTML=isOpera?' ':'<br />';};if(isEmpty(aft))car=appendStyles(aft,en);if(isOpera&&parseFloat(opera.version())<9.5){r.insertNode(bef);r.insertNode(aft);}else{r.insertNode(aft);r.insertNode(bef);}aft.normalize();bef.normalize();function first(n){return d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false).nextNode()||n;};r=d.createRange();r.selectNodeContents(isGecko?first(car||aft):car||aft);r.collapse(1);s.removeAllRanges();s.addRange(r);y=ed.dom.getPos(aft).y;ch=aft.clientHeight;if(y<vp.y||y+ch>vp.y+vp.h){ed.getWin().scrollTo(0,y<vp.y?y:y-vp.h+25);}return false;},backspaceDelete:function(e,bs){var t=this,ed=t.editor,b=ed.getBody(),n,se=ed.selection,r=se.getRng(),sc=r.startContainer,n,w,tn;if(sc&&ed.dom.isBlock(sc)&&!/^(TD|TH)$/.test(sc.nodeName)&&bs){if(sc.childNodes.length==0||(sc.childNodes.length==1&&sc.firstChild.nodeName=='BR')){n=sc;while((n=n.previousSibling)&&!ed.dom.isBlock(n));if(n){if(sc!=b.firstChild){w=ed.dom.doc.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while(tn=w.nextNode())n=tn;r=ed.getDoc().createRange();r.setStart(n,n.nodeValue?n.nodeValue.length:0);r.setEnd(n,n.nodeValue?n.nodeValue.length:0);se.setRng(r);ed.dom.remove(sc);}return Event.cancel(e);}}}function handler(e){var pr;e=e.target;if(e&&e.parentNode&&e.nodeName=='BR'&&(n=t.getParentBlock(e))){pr=e.previousSibling;Event.remove(b,'DOMNodeInserted',handler);if(pr&&pr.nodeType==3&&/\s+$/.test(pr.nodeValue))return;if(e.previousSibling||e.nextSibling)ed.dom.remove(e);}};Event._add(b,'DOMNodeInserted',handler);window.setTimeout(function(){Event._remove(b,'DOMNodeInserted',handler);},1);}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,extend=tinymce.extend;tinymce.create('tinymce.ControlManager',{ControlManager:function(ed,s){var t=this,i;s=s||{};t.editor=ed;t.controls={};t.onAdd=new tinymce.util.Dispatcher(t);t.onPostRender=new tinymce.util.Dispatcher(t);t.prefix=s.prefix||ed.id+'_';t._cls={};t.onPostRender.add(function(){each(t.controls,function(c){c.postRender();});});},get:function(id){return this.controls[this.prefix+id]||this.controls[id];},setActive:function(id,s){var c=null;if(c=this.get(id))c.setActive(s);return c;},setDisabled:function(id,s){var c=null;if(c=this.get(id))c.setDisabled(s);return c;},add:function(c){var t=this;if(c){t.controls[c.id]=c;t.onAdd.dispatch(c,t);}return c;},createControl:function(n){var c,t=this,ed=t.editor;each(ed.plugins,function(p){if(p.createControl){c=p.createControl(n,t);if(c)return false;}});switch(n){case"|":case"separator":return t.createSeparator();}if(!c&&ed.buttons&&(c=ed.buttons[n]))return t.createButton(n,c);return t.add(c);},createDropMenu:function(id,s,cc){var t=this,ed=t.editor,c,bm,v,cls;s=extend({'class':'mceDropDown',constrain:ed.settings.constrain_menus},s);s['class']=s['class']+' '+ed.getParam('skin')+'Skin';if(v=ed.getParam('skin_variant'))s['class']+=' '+ed.getParam('skin')+'Skin'+v.substring(0,1).toUpperCase()+v.substring(1);id=t.prefix+id;cls=cc||t._cls.dropmenu||tinymce.ui.DropMenu;c=t.controls[id]=new cls(id,s);c.onAddItem.add(function(c,o){var s=o.settings;s.title=ed.getLang(s.title,s.title);if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,s.value);};}});ed.onRemove.add(function(){c.destroy();});if(tinymce.isIE){c.onShowMenu.add(function(){bm=ed.selection.getBookmark(1);});c.onHideMenu.add(function(){if(bm)ed.selection.moveToBookmark(bm);});}return t.add(c);},createListBox:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,scope:s.scope,control_manager:t},s);id=t.prefix+id;if(ed.settings.use_native_selects)c=new tinymce.ui.NativeListBox(id,s);else{cls=cc||t._cls.listbox||tinymce.ui.ListBox;c=new cls(id,s);}t.controls[id]=c;if(tinymce.isWebKit){c.onPostRender.add(function(c,n){Event.add(n,'mousedown',function(){ed.bookmark=ed.selection.getBookmark('simple');});Event.add(n,'focus',function(){ed.selection.moveToBookmark(ed.bookmark);ed.bookmark=null;});});}if(c.hideMenu)ed.onMouseDown.add(c.hideMenu,c);return t.add(c);},createButton:function(id,s,cc){var t=this,ed=t.editor,o,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.label=ed.translate(s.label);s.scope=s.scope||ed;if(!s.onclick&&!s.menu_button){s.onclick=function(){ed.execCommand(s.cmd,s.ui||false,s.value);};}s=extend({title:s.title,'class':'mce_'+id,unavailable_prefix:ed.getLang('unavailable',''),scope:s.scope,control_manager:t},s);id=t.prefix+id;if(s.menu_button){cls=cc||t._cls.menubutton||tinymce.ui.MenuButton;c=new cls(id,s);ed.onMouseDown.add(c.hideMenu,c);}else{cls=t._cls.button||tinymce.ui.Button;c=new cls(id,s);}return t.add(c);},createMenuButton:function(id,s,cc){s=s||{};s.menu_button=1;return this.createButton(id,s,cc);},createSplitButton:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,scope:s.scope,control_manager:t},s);id=t.prefix+id;cls=cc||t._cls.splitbutton||tinymce.ui.SplitButton;c=t.add(new cls(id,s));ed.onMouseDown.add(c.hideMenu,c);return c;},createColorSplitButton:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls,bm;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,'menu_class':ed.getParam('skin')+'Skin',scope:s.scope,more_colors_title:ed.getLang('more_colors')},s);id=t.prefix+id;cls=cc||t._cls.colorsplitbutton||tinymce.ui.ColorSplitButton;c=new cls(id,s);ed.onMouseDown.add(c.hideMenu,c);ed.onRemove.add(function(){c.destroy();});if(tinymce.isIE){c.onShowMenu.add(function(){bm=ed.selection.getBookmark(1);});c.onHideMenu.add(function(){if(bm){ed.selection.moveToBookmark(bm);bm=0;}});}return t.add(c);},createToolbar:function(id,s,cc){var c,t=this,cls;id=t.prefix+id;cls=cc||t._cls.toolbar||tinymce.ui.Toolbar;c=new cls(id,s);if(t.get(id))return null;return t.add(c);},createSeparator:function(cc){var cls=cc||this._cls.separator||tinymce.ui.Separator;return new cls();},setControlType:function(n,c){return this._cls[n.toLowerCase()]=c;},destroy:function(){each(this.controls,function(c){c.destroy();});this.controls=null;}});})();(function(){var Dispatcher=tinymce.util.Dispatcher,each=tinymce.each,isIE=tinymce.isIE,isOpera=tinymce.isOpera;tinymce.create('tinymce.WindowManager',{WindowManager:function(ed){var t=this;t.editor=ed;t.onOpen=new Dispatcher(t);t.onClose=new Dispatcher(t);t.params={};t.features={};},open:function(s,p){var t=this,f='',x,y,mo=t.editor.settings.dialog_type=='modal',w,sw,sh,vp=tinymce.DOM.getViewPort(),u;s=s||{};p=p||{};sw=isOpera?vp.w:screen.width;sh=isOpera?vp.h:screen.height;s.name=s.name||'mc_'+new Date().getTime();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240);s.resizable=true;s.left=s.left||parseInt(sw/ 2.0) - (s.width /2.0);s.top=s.top||parseInt(sh/ 2.0) - (s.height /2.0);p.inline=false;p.mce_width=s.width;p.mce_height=s.height;p.mce_auto_focus=s.auto_focus;if(mo){if(isIE){s.center=true;s.help=false;s.dialogWidth=s.width+'px';s.dialogHeight=s.height+'px';s.scroll=s.scrollbars||false;}}each(s,function(v,k){if(tinymce.is(v,'boolean'))v=v?'yes':'no';if(!/^(name|url)$/.test(k)){if(isIE&&mo)f+=(f?';':'')+k+':'+v;else f+=(f?',':'')+k+'='+v;}});t.features=s;t.params=p;t.onOpen.dispatch(t,s,p);u=s.url||s.file;if(tinymce.relaxedDomain)u+=(u.indexOf('?')==-1?'?':'&')+'mce_rdomain='+tinymce.relaxedDomain;u=tinymce._addVer(u);try{if(isIE&&mo){w=1;window.showModalDialog(u,window,f);}else w=window.open(u,s.name,f);}catch(ex){}if(!w)alert(t.editor.getLang('popup_blocked'));},close:function(w){w.close();this.onClose.dispatch(this);},createInstance:function(cl,a,b,c,d,e){var f=tinymce.resolve(cl);return new f(a,b,c,d,e);},confirm:function(t,cb,s,w){w=w||window;cb.call(s||this,w.confirm(this._decode(this.editor.getLang(t,t))));},alert:function(tx,cb,s,w){var t=this;w=w||window;w.alert(t._decode(t.editor.getLang(tx,tx)));if(cb)cb.call(s||t);},_decode:function(s){return tinymce.DOM.decode(s).replace(/\\n/g,'\n');}});}());
\ No newline at end of file
+(function(d){var a=/^\s*|\s*$/g,e,c="B".replace(/A(.)|B/,"$1")==="$1";var b={majorVersion:"3",minorVersion:"3.9.2",releaseDate:"2010-09-29",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=d.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);if(d.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m<f.length;m++){if(r=f[m].href){if(/^https?:\/\/[^\/]+$/.test(r)){r+="/"}k=r?r.match(/.*\//)[0]:""}}function h(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){s.suffix="_src"}if((j=i.src.indexOf("?"))!=-1){s.query=i.src.substring(j+1)}s.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(k&&s.baseURL.indexOf("://")==-1&&s.baseURL.indexOf("/")!==0){s.baseURL=k+s.baseURL}return s.baseURL}return null}f=q.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}l=q.getElementsByTagName("head")[0];if(l){f=l.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}}return},is:function(g,f){if(!f){return g!==e}if(f=="array"&&(g.hasOwnProperty&&g instanceof Array)){return true}return typeof(g)==f},each:function(i,f,h){var j,g;if(!i){return 0}h=h||i;if(i.length!==e){for(j=0,g=i.length;j<g;j++){if(f.call(h,i[j],j,i)===false){return 0}}}else{for(j in i){if(i.hasOwnProperty(j)){if(f.call(h,i[j],j,i)===false){return 0}}}}return 1},map:function(g,h){var i=[];b.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];b.each(g,function(f){if(!h||h(f)){i.push(f)}});return i},inArray:function(g,h){var j,f;if(g){for(j=0,f=g.length;j<f;j++){if(g[j]===h){return j}}}return -1},extend:function(k,j){var h,g,f=arguments;for(h=1,g=f.length;h<g;h++){j=f[h];b.each(j,function(i,l){if(i!==e){k[l]=i}})}return k},trim:function(f){return(f?""+f:"").replace(a,"")},create:function(n,f){var m=this,g,i,j,k,h,l=0;n=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(n);j=n[3].match(/(^|\.)(\w+)$/i)[2];i=m.createNS(n[3].replace(/\.\w+$/,""));if(i[j]){return}if(n[2]=="static"){i[j]=f;if(this.onCreate){this.onCreate(n[2],n[3],i[j])}return}if(!f[j]){f[j]=function(){};l=1}i[j]=f[j];m.extend(i[j].prototype,f);if(n[5]){g=m.resolve(n[5]).prototype;k=n[5].match(/\.(\w+)$/i)[1];h=i[j];if(l){i[j]=function(){return g[k].apply(this,arguments)}}else{i[j]=function(){this.parent=g[k];return h.apply(this,arguments)}}i[j].prototype[j]=i[j];m.each(g,function(o,p){i[j].prototype[p]=g[p]});m.each(f,function(o,p){if(g[p]){i[j].prototype[p]=function(){this.parent=g[p];return o.apply(this,arguments)}}else{if(p!=j){i[j].prototype[p]=o}}})}m.each(f["static"],function(o,p){i[j][p]=o});if(this.onCreate){this.onCreate(n[2],n[3],i[j].prototype)}},walk:function(i,h,j,g){g=g||this;if(i){if(j){i=i[j]}b.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}b.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0;g<j.length;g++){f=j[g];if(!h[f]){h[f]={}}h=h[f]}return h},resolve:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0,f=j.length;g<f;g++){h=h[j[g]];if(!h){break}}return h},addUnload:function(j,i){var h=this;j={func:j,scope:i||this};if(!h.unloads){function g(){var f=h.unloads,l,m;if(f){for(m in f){l=f[m];if(l&&l.func){l.func.call(l.scope,1)}}if(d.detachEvent){d.detachEvent("onbeforeunload",k);d.detachEvent("onunload",g)}else{if(d.removeEventListener){d.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(d.CollectGarbage){CollectGarbage()}}}function k(){var l=document;if(l.readyState=="interactive"){function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l){l.attachEvent("onstop",f)}d.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}if(d.attachEvent){d.attachEvent("onunload",g);d.attachEvent("onbeforeunload",k)}else{if(d.addEventListener){d.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;b.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){return f?b.map(f.split(g||","),b.trim):f},_addVer:function(g){var f;if(!this.query){return g}f=(g.indexOf("?")==-1?"?":"&")+this.query;if(g.indexOf("#")==-1){return g+f}return g.replace("#",f+"#")},_replace:function(h,f,g){if(c){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===e){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};b._init();d.tinymce=d.tinyMCE=b})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(a,b){this.listeners.push({cb:a,scope:b||this.scope});return a},addToTop:function(a,b){this.listeners.unshift({cb:a,scope:b||this.scope});return a},remove:function(a){var b=this.listeners,c=null;tinymce.each(b,function(e,d){if(a==e.cb){c=a;b.splice(d,1);return false}});return c},dispatch:function(){var f,d=arguments,e,b=this.listeners,g;for(e=0;e<b.length;e++){g=b[e];f=g.cb.apply(g.scope,d);if(f===false){break}}return f}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,h,d,c;e=tinymce.trim(e);g=f.settings=g||{};if(/^(mailto|tel|news|javascript|about|data):/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^\w*:?\/\//.test(e)){e=(g.base_uri.protocol||"http")+"://mce_host"+f.toAbsPath(g.base_uri.path,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});if(c=g.base_uri){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host=="mce_host"){f.port=c.port}if(!f.host||f.host=="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var c=this,d;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:c});if((b.host!="mce_host"&&c.host!=b.host&&b.host)||c.port!=b.port||c.protocol!=b.protocol){return b.getURI()}d=c.toRelPath(c.path,b.path);if(b.query){d+="?"+b.query}if(b.anchor){d+="#"+b.anchor}return d},toAbsolute:function(b,c){var b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();tinymce.create("static tinymce.util.JSON",{serialize:function(e){var c,a,d=tinymce.util.JSON.serialize,b;if(e==null){return"null"}b=typeof e;if(b=="string"){a="\bb\tt\nn\ff\rr\"\"''\\\\";return'"'+e.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(g,f){c=a.indexOf(f);if(c+1){return"\\"+a.charAt(c+1)}g=f.charCodeAt().toString(16);return"\\u"+"0000".substring(g.length)+g})+'"'}if(b=="object"){if(e.hasOwnProperty&&e instanceof Array){for(c=0,a="[";c<e.length;c++){a+=(c>0?",":"")+d(e[c])}return a+"]"}a="{";for(c in e){a+=typeof e[c]!="function"?(a.length>1?',"':'"')+c+'":'+d(e[c]):""}return a+"}"}return""+e},parse:function(s){try{return eval("("+s+")")}catch(ex){}}});tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){e.call(f.error_scope||f.scope,h,g)};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(m){var k=m.each,j=m.is,i=m.isWebKit,d=m.isIE,a=/^(H[1-6R]|P|DIV|ADDRESS|PRE|FORM|T(ABLE|BODY|HEAD|FOOT|H|R|D)|LI|OL|UL|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|MENU|ISINDEX|SAMP)$/,e=g("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),f=g("src,href,style,coords,shape"),c={"&":"&",'"':""","<":"<",">":">"},n=/[<>&\"]/g,b=/^([a-z0-9],?)+$/i,h=/<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)(\s*\/?)>/g,l=/(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;function g(q){var p={},o;q=q.split(",");for(o=q.length;o>=0;o--){p[q[o]]=1}return p}m.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(u,q){var p=this,o;p.doc=u;p.win=window;p.files={};p.cssFlicker=false;p.counter=0;p.stdMode=u.documentMode>=8;p.boxModel=!m.isIE||u.compatMode=="CSS1Compat"||p.stdMode;p.settings=q=m.extend({keep_values:false,hex_colors:1,process_html:1},q);if(m.isIE6){try{u.execCommand("BackgroundImageCache",false,true)}catch(r){p.cssFlicker=true}}if(q.valid_styles){p._styles={};k(q.valid_styles,function(t,s){p._styles[s]=m.explode(t)})}m.addUnload(p.destroy,p)},getRoot:function(){var o=this,p=o.settings;return(p&&o.get(p.root_element))||o.doc.body},getViewPort:function(p){var q,o;p=!p?this.win:p;q=p.document;o=this.boxModel?q.documentElement:q.body;return{x:p.pageXOffset||o.scrollLeft,y:p.pageYOffset||o.scrollTop,w:p.innerWidth||o.clientWidth,h:p.innerHeight||o.clientHeight}},getRect:function(s){var r,o=this,q;s=o.get(s);r=o.getPos(s);q=o.getSize(s);return{x:r.x,y:r.y,w:q.w,h:q.h}},getSize:function(r){var p=this,o,q;r=p.get(r);o=p.getStyle(r,"width");q=p.getStyle(r,"height");if(o.indexOf("px")===-1){o=0}if(q.indexOf("px")===-1){q=0}return{w:parseInt(o)||r.offsetWidth||r.clientWidth,h:parseInt(q)||r.offsetHeight||r.clientHeight}},getParent:function(q,p,o){return this.getParents(q,p,o,false)},getParents:function(z,v,s,y){var q=this,p,u=q.settings,x=[];z=q.get(z);y=y===undefined;if(u.strict_root){s=s||q.getRoot()}if(j(v,"string")){p=v;if(v==="*"){v=function(o){return o.nodeType==1}}else{v=function(o){return q.is(o,p)}}}while(z){if(z==s||!z.nodeType||z.nodeType===9){break}if(!v||v(z)){if(y){x.push(z)}else{return z}}z=z.parentNode}return y?x:null},get:function(o){var p;if(o&&this.doc&&typeof(o)=="string"){p=o;o=this.doc.getElementById(o);if(o&&o.id!==p){return this.doc.getElementsByName(p)[1]}}return o},getNext:function(p,o){return this._findSib(p,o,"nextSibling")},getPrev:function(p,o){return this._findSib(p,o,"previousSibling")},select:function(q,p){var o=this;return m.dom.Sizzle(q,o.get(p)||o.get(o.settings.root_element)||o.doc,[])},is:function(q,o){var p;if(q.length===undefined){if(o==="*"){return q.nodeType==1}if(b.test(o)){o=o.toLowerCase().split(/,/);q=q.nodeName.toLowerCase();for(p=o.length-1;p>=0;p--){if(o[p]==q){return true}}return false}}return m.dom.Sizzle.matches(o,q.nodeType?[q]:q).length>0},add:function(s,v,o,r,u){var q=this;return this.run(s,function(y){var x,t;x=j(v,"string")?q.doc.createElement(v):v;q.setAttribs(x,o);if(r){if(r.nodeType){x.appendChild(r)}else{q.setHTML(x,r)}}return !u?y.appendChild(x):x})},create:function(q,o,p){return this.add(this.doc.createElement(q),q,o,p,1)},createHTML:function(v,p,s){var u="",r=this,q;u+="<"+v;for(q in p){if(p.hasOwnProperty(q)){u+=" "+q+'="'+r.encode(p[q])+'"'}}if(typeof(s)!="undefined"){return u+">"+s+"</"+v+">"}return u+" />"},remove:function(o,p){return this.run(o,function(r){var q,s;q=r.parentNode;if(!q){return null}if(p){while(s=r.firstChild){if(!m.isIE||s.nodeType!==3||s.nodeValue){q.insertBefore(s,r)}else{r.removeChild(s)}}}return q.removeChild(r)})},setStyle:function(r,o,p){var q=this;return q.run(r,function(v){var u,t;u=v.style;o=o.replace(/-(\D)/g,function(x,s){return s.toUpperCase()});if(q.pixelStyles.test(o)&&(m.is(p,"number")||/^[\-0-9\.]+$/.test(p))){p+="px"}switch(o){case"opacity":if(d){u.filter=p===""?"":"alpha(opacity="+(p*100)+")";if(!r.currentStyle||!r.currentStyle.hasLayout){u.display="inline-block"}}u[o]=u["-moz-opacity"]=u["-khtml-opacity"]=p||"";break;case"float":d?u.styleFloat=p:u.cssFloat=p;break;default:u[o]=p||""}if(q.settings.update_styles){q.setAttrib(v,"_mce_style")}})},getStyle:function(r,o,q){r=this.get(r);if(!r){return false}if(this.doc.defaultView&&q){o=o.replace(/[A-Z]/g,function(s){return"-"+s});try{return this.doc.defaultView.getComputedStyle(r,null).getPropertyValue(o)}catch(p){return null}}o=o.replace(/-(\D)/g,function(t,s){return s.toUpperCase()});if(o=="float"){o=d?"styleFloat":"cssFloat"}if(r.currentStyle&&q){return r.currentStyle[o]}return r.style[o]},setStyles:function(u,v){var q=this,r=q.settings,p;p=r.update_styles;r.update_styles=0;k(v,function(o,s){q.setStyle(u,s,o)});r.update_styles=p;if(r.update_styles){q.setAttrib(u,r.cssText)}},setAttrib:function(q,r,o){var p=this;if(!q||!r){return}if(p.settings.strict){r=r.toLowerCase()}return this.run(q,function(u){var t=p.settings;switch(r){case"style":if(!j(o,"string")){k(o,function(s,x){p.setStyle(u,x,s)});return}if(t.keep_values){if(o&&!p._isRes(o)){u.setAttribute("_mce_style",o,2)}else{u.removeAttribute("_mce_style",2)}}u.style.cssText=o;break;case"class":u.className=o||"";break;case"src":case"href":if(t.keep_values){if(t.url_converter){o=t.url_converter.call(t.url_converter_scope||p,o,r,u)}p.setAttrib(u,"_mce_"+r,o,2)}break;case"shape":u.setAttribute("_mce_style",o);break}if(j(o)&&o!==null&&o.length!==0){u.setAttribute(r,""+o,2)}else{u.removeAttribute(r,2)}})},setAttribs:function(q,r){var p=this;return this.run(q,function(o){k(r,function(s,t){p.setAttrib(o,t,s)})})},getAttrib:function(r,s,q){var o,p=this;r=p.get(r);if(!r||r.nodeType!==1){return false}if(!j(q)){q=""}if(/^(src|href|style|coords|shape)$/.test(s)){o=r.getAttribute("_mce_"+s);if(o){return o}}if(d&&p.props[s]){o=r[p.props[s]];o=o&&o.nodeValue?o.nodeValue:o}if(!o){o=r.getAttribute(s,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(s)){if(r[p.props[s]]===true&&o===""){return s}return o?s:""}if(r.nodeName==="FORM"&&r.getAttributeNode(s)){return r.getAttributeNode(s).nodeValue}if(s==="style"){o=o||r.style.cssText;if(o){o=p.serializeStyle(p.parseStyle(o),r.nodeName);if(p.settings.keep_values&&!p._isRes(o)){r.setAttribute("_mce_style",o)}}}if(i&&s==="class"&&o){o=o.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(d){switch(s){case"rowspan":case"colspan":if(o===1){o=""}break;case"size":if(o==="+0"||o===20||o===0){o=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(o===0){o=""}break;case"hspace":if(o===-1){o=""}break;case"maxlength":case"tabindex":if(o===32768||o===2147483647||o==="32768"){o=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(o===65535){return s}return q;case"shape":o=o.toLowerCase();break;default:if(s.indexOf("on")===0&&o){o=m._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+o)}}}return(o!==undefined&&o!==null&&o!=="")?""+o:q},getPos:function(A,s){var p=this,o=0,z=0,u,v=p.doc,q;A=p.get(A);s=s||v.body;if(A){if(d&&!p.stdMode){A=A.getBoundingClientRect();u=p.boxModel?v.documentElement:v.body;o=p.getStyle(p.select("html")[0],"borderWidth");o=(o=="medium"||p.boxModel&&!p.isIE6)&&2||o;return{x:A.left+u.scrollLeft-o,y:A.top+u.scrollTop-o}}q=A;while(q&&q!=s&&q.nodeType){o+=q.offsetLeft||0;z+=q.offsetTop||0;q=q.offsetParent}q=A.parentNode;while(q&&q!=s&&q.nodeType){o-=q.scrollLeft||0;z-=q.scrollTop||0;q=q.parentNode}}return{x:o,y:z}},parseStyle:function(r){var u=this,v=u.settings,x={};if(!r){return x}function p(D,A,C){var z,B,o,y;z=x[D+"-top"+A];if(!z){return}B=x[D+"-right"+A];if(z!=B){return}o=x[D+"-bottom"+A];if(B!=o){return}y=x[D+"-left"+A];if(o!=y){return}x[C]=y;delete x[D+"-top"+A];delete x[D+"-right"+A];delete x[D+"-bottom"+A];delete x[D+"-left"+A]}function q(y,s,o,A){var z;z=x[s];if(!z){return}z=x[o];if(!z){return}z=x[A];if(!z){return}x[y]=x[s]+" "+x[o]+" "+x[A];delete x[s];delete x[o];delete x[A]}r=r.replace(/&(#?[a-z0-9]+);/g,"&$1_MCE_SEMI_");k(r.split(";"),function(s){var o,t=[];if(s){s=s.replace(/_MCE_SEMI_/g,";");s=s.replace(/url\([^\)]+\)/g,function(y){t.push(y);return"url("+t.length+")"});s=s.split(":");o=m.trim(s[1]);o=o.replace(/url\(([^\)]+)\)/g,function(z,y){return t[parseInt(y)-1]});o=o.replace(/rgb\([^\)]+\)/g,function(y){return u.toHex(y)});if(v.url_converter){o=o.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(y,z){return"url("+v.url_converter.call(v.url_converter_scope||u,u.decode(z),"style",null)+")"})}x[m.trim(s[0]).toLowerCase()]=o}});p("border","","border");p("border","-width","border-width");p("border","-color","border-color");p("border","-style","border-style");p("padding","","padding");p("margin","","margin");q("border","border-width","border-style","border-color");if(d){if(x.border=="medium none"){x.border=""}}return x},serializeStyle:function(v,p){var q=this,r="";function u(s,o){if(o&&s){if(o.indexOf("-")===0){return}switch(o){case"font-weight":if(s==700){s="bold"}break;case"color":case"background-color":s=s.toLowerCase();break}r+=(r?" ":"")+o+": "+s+";"}}if(p&&q._styles){k(q._styles["*"],function(o){u(v[o],o)});k(q._styles[p.toLowerCase()],function(o){u(v[o],o)})}else{k(v,u)}return r},loadCSS:function(o){var q=this,r=q.doc,p;if(!o){o=""}p=q.select("head")[0];k(o.split(","),function(s){var t;if(q.files[s]){return}q.files[s]=true;t=q.create("link",{rel:"stylesheet",href:m._addVer(s)});if(d&&r.documentMode&&r.recalc){t.onload=function(){r.recalc();t.onload=null}}p.appendChild(t)})},addClass:function(o,p){return this.run(o,function(q){var r;if(!p){return 0}if(this.hasClass(q,p)){return q.className}r=this.removeClass(q,p);return q.className=(r!=""?(r+" "):"")+p})},removeClass:function(q,r){var o=this,p;return o.run(q,function(t){var s;if(o.hasClass(t,r)){if(!p){p=new RegExp("(^|\\s+)"+r+"(\\s+|$)","g")}s=t.className.replace(p," ");s=m.trim(s!=" "?s:"");t.className=s;if(!s){t.removeAttribute("class");t.removeAttribute("className")}return s}return t.className})},hasClass:function(p,o){p=this.get(p);if(!p||!o){return false}return(" "+p.className+" ").indexOf(" "+o+" ")!==-1},show:function(o){return this.setStyle(o,"display","block")},hide:function(o){return this.setStyle(o,"display","none")},isHidden:function(o){o=this.get(o);return !o||o.style.display=="none"||this.getStyle(o,"display")=="none"},uniqueId:function(o){return(!o?"mce_":o)+(this.counter++)},setHTML:function(q,p){var o=this;return this.run(q,function(v){var r,t,s,z,u,r;p=o.processHTML(p);if(d){function y(){while(v.firstChild){v.firstChild.removeNode()}try{v.innerHTML="<br />"+p;v.removeChild(v.firstChild)}catch(x){r=o.create("div");r.innerHTML="<br />"+p;k(r.childNodes,function(B,A){if(A){v.appendChild(B)}})}}if(o.settings.fix_ie_paragraphs){p=p.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi,'<p$1 _mce_keep="true"> </p>')}y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("p");for(t=s.length-1,r=0;t>=0;t--){z=s[t];if(!z.hasChildNodes()){if(!z._mce_keep){r=1;break}z.removeAttribute("_mce_keep")}}}if(r){p=p.replace(/<p ([^>]+)>|<p>/ig,'<div $1 _mce_tmp="1">');p=p.replace(/<\/p>/gi,"</div>");y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("DIV");for(t=s.length-1;t>=0;t--){z=s[t];if(z._mce_tmp){u=o.doc.createElement("p");z.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(A,x){var B;if(x!=="_mce_tmp"){B=z.getAttribute(x);if(!B&&x==="class"){B=z.className}u.setAttribute(x,B)}});for(r=0;r<z.childNodes.length;r++){u.appendChild(z.childNodes[r].cloneNode(true))}z.swapNode(u)}}}}}else{v.innerHTML=p}return p})},processHTML:function(r){var p=this,q=p.settings,v=[];if(!q.process_html){return r}if(d){r=r.replace(/'/g,"'");r=r.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi,"")}r=m._replace(/<a( )([^>]+)\/>|<a\/>/gi,"<a$1$2></a>",r);if(q.keep_values){if(/<script|noscript|style/i.test(r)){function o(t){t=t.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n");t=t.replace(/^[\r\n]*|[\r\n]*$/g,"");t=t.replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g,"");t=t.replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g,"");return t}r=r.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/gi,function(s,x,t){if(!x){x=' type="text/javascript"'}x=x.replace(/src=\"([^\"]+)\"?/i,function(y,z){if(q.url_converter){z=p.encode(q.url_converter.call(q.url_converter_scope||p,p.decode(z),"src","script"))}return'_mce_src="'+z+'"'});if(m.trim(t)){v.push(o(t));t="<!--\nMCE_SCRIPT:"+(v.length-1)+"\n// -->"}return"<mce:script"+x+">"+t+"</mce:script>"});r=r.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/gi,function(s,x,t){if(t){v.push(o(t));t="<!--\nMCE_SCRIPT:"+(v.length-1)+"\n-->"}return"<mce:style"+x+">"+t+"</mce:style><style "+x+' _mce_bogus="1">'+t+"</style>"});r=r.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g,function(s,x,t){return"<mce:noscript"+x+"><!--"+p.encode(t).replace(/--/g,"--")+"--></mce:noscript>"})}r=m._replace(/<!\[CDATA\[([\s\S]+)\]\]>/g,"<!--[CDATA[$1]]-->",r);function u(s){return s.replace(h,function(y,z,x,t){return"<"+z+x.replace(l,function(B,A,E,D,C){var F;A=A.toLowerCase();E=E||D||C||"";if(e[A]){if(E==="false"||E==="0"){return}return A+'="'+A+'"'}if(f[A]&&x.indexOf("_mce_"+A)==-1){F=p.decode(E);if(q.url_converter&&(A=="src"||A=="href")){F=q.url_converter.call(q.url_converter_scope||p,F,A,z)}if(A=="style"){F=p.serializeStyle(p.parseStyle(F),A)}return A+'="'+E+'" _mce_'+A+'="'+p.encode(F)+'"'}return B})+t+">"})}r=u(r);r=r.replace(/MCE_SCRIPT:([0-9]+)/g,function(t,s){return v[s]})}return r},getOuterHTML:function(o){var p;o=this.get(o);if(!o){return null}if(o.outerHTML!==undefined){return o.outerHTML}p=(o.ownerDocument||this.doc).createElement("body");p.appendChild(o.cloneNode(true));return p.innerHTML},setOuterHTML:function(r,p,s){var o=this;function q(u,t,x){var y,v;v=x.createElement("body");v.innerHTML=t;y=v.lastChild;while(y){o.insertAfter(y.cloneNode(true),u);y=y.previousSibling}o.remove(u)}return this.run(r,function(u){u=o.get(u);if(u.nodeType==1){s=s||u.ownerDocument||o.doc;if(d){try{if(d&&u.nodeType==1){u.outerHTML=p}else{q(u,p,s)}}catch(t){q(u,p,s)}}else{q(u,p,s)}}})},decode:function(p){var q,r,o;if(/&[\w#]+;/.test(p)){q=this.doc.createElement("div");q.innerHTML=p;r=q.firstChild;o="";if(r){do{o+=r.nodeValue}while(r=r.nextSibling)}return o||p}return p},encode:function(o){return(""+o).replace(n,function(p){return c[p]})},insertAfter:function(o,p){p=this.get(p);return this.run(o,function(r){var q,s;q=p.parentNode;s=p.nextSibling;if(s){q.insertBefore(r,s)}else{q.appendChild(r)}return r})},isBlock:function(o){if(o.nodeType&&o.nodeType!==1){return false}o=o.nodeName||o;return a.test(o)},replace:function(s,r,p){var q=this;if(j(r,"array")){s=s.cloneNode(true)}return q.run(r,function(t){if(p){k(m.grep(t.childNodes),function(o){s.appendChild(o)})}return t.parentNode.replaceChild(s,t)})},rename:function(r,o){var q=this,p;if(r.nodeName!=o.toUpperCase()){p=q.create(o);k(q.getAttribs(r),function(s){q.setAttrib(p,s.nodeName,q.getAttrib(r,s.nodeName))});q.replace(p,r,1)}return p||r},findCommonAncestor:function(q,o){var r=q,p;while(r){p=o;while(p&&r!=p){p=p.parentNode}if(r==p){break}r=r.parentNode}if(!r&&q.ownerDocument){return q.ownerDocument.documentElement}return r},toHex:function(o){var q=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(o);function p(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}if(q){o="#"+p(q[1])+p(q[2])+p(q[3]);return o}return o},getClasses:function(){var s=this,o=[],r,u={},v=s.settings.class_filter,q;if(s.classes){return s.classes}function x(t){k(t.imports,function(y){x(y)});k(t.cssRules||t.rules,function(y){switch(y.type||1){case 1:if(y.selectorText){k(y.selectorText.split(","),function(z){z=z.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(z)||!/\.[\w\-]+$/.test(z)){return}q=z;z=m._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",z);if(v&&!(z=v(z,q))){return}if(!u[z]){o.push({"class":z});u[z]=1}})}break;case 3:x(y.styleSheet);break}})}try{k(s.doc.styleSheets,x)}catch(p){}if(o.length>0){s.classes=o}return o},run:function(u,r,q){var p=this,v;if(p.doc&&typeof(u)==="string"){u=p.get(u)}if(!u){return false}q=q||this;if(!u.nodeType&&(u.length||u.length===0)){v=[];k(u,function(s,o){if(s){if(typeof(s)=="string"){s=p.doc.getElementById(s)}v.push(r.call(q,s,o))}});return v}return r.call(q,u)},getAttribs:function(q){var p;q=this.get(q);if(!q){return[]}if(d){p=[];if(q.nodeName=="OBJECT"){return q.attributes}if(q.nodeName==="OPTION"&&this.getAttrib(q,"selected")){p.push({specified:1,nodeName:"selected"})}q.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(o){p.push({specified:1,nodeName:o})});return p}return q.attributes},destroy:function(p){var o=this;if(o.events){o.events.destroy()}o.win=o.doc=o.root=o.events=null;if(!p){m.removeUnload(o.destroy)}},createRng:function(){var o=this.doc;return o.createRange?o.createRange():new m.dom.Range(this)},nodeIndex:function(s,t){var o=0,q,r,p;if(s){for(q=s.nodeType,s=s.previousSibling,r=s;s;s=s.previousSibling){p=s.nodeType;if(t&&p==3){if(p==q||!s.nodeValue.length){continue}}o++;q=p}}return o},split:function(u,s,y){var z=this,o=z.createRng(),v,q,x;function p(A){var t,r=A.childNodes;if(A.nodeType==1&&A.getAttribute("_mce_type")=="bookmark"){return}for(t=r.length-1;t>=0;t--){p(r[t])}if(A.nodeType!=9){if(A.nodeType==3&&A.nodeValue.length>0){if(!z.isBlock(A.parentNode)||m.trim(A.nodeValue).length>0){return}}if(A.nodeType==1){r=A.childNodes;if(r.length==1&&r[0]&&r[0].nodeType==1&&r[0].getAttribute("_mce_type")=="bookmark"){A.parentNode.insertBefore(r[0],A)}if(r.length||/^(br|hr|input|img)$/i.test(A.nodeName)){return}}z.remove(A)}return A}if(u&&s){o.setStart(u.parentNode,z.nodeIndex(u));o.setEnd(s.parentNode,z.nodeIndex(s));v=o.extractContents();o=z.createRng();o.setStart(s.parentNode,z.nodeIndex(s)+1);o.setEnd(u.parentNode,z.nodeIndex(u)+1);q=o.extractContents();x=u.parentNode;x.insertBefore(p(v),u);if(y){x.replaceChild(y,s)}else{x.insertBefore(s,u)}x.insertBefore(p(q),u);z.remove(u);return y||s}},bind:function(s,o,r,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.add(s,o,r,q||this)},unbind:function(r,o,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.remove(r,o,q)},_findSib:function(r,o,p){var q=this,s=o;if(r){if(j(s,"string")){s=function(t){return q.is(t,o)}}for(r=r[p];r;r=r[p]){if(s(r)){return r}}}return null},_isRes:function(o){return/^(top|left|bottom|right|width|height)/i.test(o)||/;\s*(top|left|bottom|right|width|height)/i.test(o)}});m.DOM=new m.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var N=this,e=c.doc,S=0,E=1,j=2,D=true,R=false,U="startOffset",h="startContainer",P="endContainer",z="endOffset",k=tinymce.extend,n=c.nodeIndex;k(N,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:D,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:I,setEndBefore:J,setEndAfter:u,collapse:A,selectNode:x,selectNodeContents:F,compareBoundaryPoints:v,deleteContents:p,extractContents:H,cloneContents:d,insertNode:C,surroundContents:M,cloneRange:K});function q(V,t){B(D,V,t)}function s(V,t){B(R,V,t)}function g(t){q(t.parentNode,n(t))}function I(t){q(t.parentNode,n(t)+1)}function J(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function A(t){if(t){N[P]=N[h];N[z]=N[U]}else{N[h]=N[P];N[U]=N[z]}N.collapsed=D}function x(t){g(t);u(t)}function F(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(W,X){var Z=N[h],Y=N[U],V=N[P],t=N[z];if(W===0){return G(Z,Y,Z,Y)}if(W===1){return G(Z,Y,V,t)}if(W===2){return G(V,t,V,t)}if(W===3){return G(V,t,Z,Y)}}function p(){m(j)}function H(){return m(S)}function d(){return m(E)}function C(Y){var V=this[h],t=this[U],X,W;if((V.nodeType===3||V.nodeType===4)&&V.nodeValue){if(!t){V.parentNode.insertBefore(Y,V)}else{if(t>=V.nodeValue.length){c.insertAfter(Y,V)}else{X=V.splitText(t);V.parentNode.insertBefore(Y,X)}}}else{if(V.childNodes.length>0){W=V.childNodes[t]}if(W){V.insertBefore(Y,W)}else{V.appendChild(Y)}}}function M(V){var t=N.extractContents();N.insertNode(V);V.appendChild(t);N.selectNode(V)}function K(){return k(new b(c),{startContainer:N[h],startOffset:N[U],endContainer:N[P],endOffset:N[z],collapsed:N.collapsed,commonAncestorContainer:N.commonAncestorContainer})}function O(t,V){var W;if(t.nodeType==3){return t}if(V<0){return t}W=t.firstChild;while(W&&V>0){--V;W=W.nextSibling}if(W){return W}return t}function l(){return(N[h]==N[P]&&N[U]==N[z])}function G(X,Z,V,Y){var aa,W,t,ab,ad,ac;if(X==V){if(Z==Y){return 0}if(Z<Y){return -1}return 1}aa=V;while(aa&&aa.parentNode!=X){aa=aa.parentNode}if(aa){W=0;t=X.firstChild;while(t!=aa&&W<Z){W++;t=t.nextSibling}if(Z<=W){return -1}return 1}aa=X;while(aa&&aa.parentNode!=V){aa=aa.parentNode}if(aa){W=0;t=V.firstChild;while(t!=aa&&W<Y){W++;t=t.nextSibling}if(W<Y){return -1}return 1}ab=c.findCommonAncestor(X,V);ad=X;while(ad&&ad.parentNode!=ab){ad=ad.parentNode}if(!ad){ad=ab}ac=V;while(ac&&ac.parentNode!=ab){ac=ac.parentNode}if(!ac){ac=ab}if(ad==ac){return 0}t=ab.firstChild;while(t){if(t==ad){return -1}if(t==ac){return 1}t=t.nextSibling}}function B(V,Y,X){var t,W;if(V){N[h]=Y;N[U]=X}else{N[P]=Y;N[z]=X}t=N[P];while(t.parentNode){t=t.parentNode}W=N[h];while(W.parentNode){W=W.parentNode}if(W==t){if(G(N[h],N[U],N[P],N[z])>0){N.collapse(V)}}else{N.collapse(V)}N.collapsed=l();N.commonAncestorContainer=c.findCommonAncestor(N[h],N[P])}function m(ab){var aa,X=0,ad=0,V,Z,W,Y,t,ac;if(N[h]==N[P]){return f(ab)}for(aa=N[P],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[h]){return r(aa,ab)}++X}for(aa=N[h],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[P]){return T(aa,ab)}++ad}Z=ad-X;W=N[h];while(Z>0){W=W.parentNode;Z--}Y=N[P];while(Z<0){Y=Y.parentNode;Z++}for(t=W.parentNode,ac=Y.parentNode;t!=ac;t=t.parentNode,ac=ac.parentNode){W=t;Y=ac}return o(W,Y,ab)}function f(Z){var ab,Y,X,aa,t,W,V;if(Z!=j){ab=e.createDocumentFragment()}if(N[U]==N[z]){return ab}if(N[h].nodeType==3){Y=N[h].nodeValue;X=Y.substring(N[U],N[z]);if(Z!=E){N[h].deleteData(N[U],N[z]-N[U]);N.collapse(D)}if(Z==j){return}ab.appendChild(e.createTextNode(X));return ab}aa=O(N[h],N[U]);t=N[z]-N[U];while(t>0){W=aa.nextSibling;V=y(aa,Z);if(ab){ab.appendChild(V)}--t;aa=W}if(Z!=E){N.collapse(D)}return ab}function r(ab,Y){var aa,Z,V,t,X,W;if(Y!=j){aa=e.createDocumentFragment()}Z=i(ab,Y);if(aa){aa.appendChild(Z)}V=n(ab);t=V-N[U];if(t<=0){if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}Z=ab.previousSibling;while(t>0){X=Z.previousSibling;W=y(Z,Y);if(aa){aa.insertBefore(W,aa.firstChild)}--t;Z=X}if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}function T(Z,Y){var ab,V,aa,t,X,W;if(Y!=j){ab=e.createDocumentFragment()}aa=Q(Z,Y);if(ab){ab.appendChild(aa)}V=n(Z);++V;t=N[z]-V;aa=Z.nextSibling;while(t>0){X=aa.nextSibling;W=y(aa,Y);if(ab){ab.appendChild(W)}--t;aa=X}if(Y!=E){N.setStartAfter(Z);N.collapse(D)}return ab}function o(Z,t,ac){var W,ae,Y,aa,ab,V,ad,X;if(ac!=j){ae=e.createDocumentFragment()}W=Q(Z,ac);if(ae){ae.appendChild(W)}Y=Z.parentNode;aa=n(Z);ab=n(t);++aa;V=ab-aa;ad=Z.nextSibling;while(V>0){X=ad.nextSibling;W=y(ad,ac);if(ae){ae.appendChild(W)}ad=X;--V}W=i(t,ac);if(ae){ae.appendChild(W)}if(ac!=E){N.setStartAfter(Z);N.collapse(D)}return ae}function i(aa,ab){var W=O(N[P],N[z]-1),ac,Z,Y,t,V,X=W!=N[P];if(W==aa){return L(W,X,R,ab)}ac=W.parentNode;Z=L(ac,R,R,ab);while(ac){while(W){Y=W.previousSibling;t=L(W,X,R,ab);if(ab!=j){Z.insertBefore(t,Z.firstChild)}X=D;W=Y}if(ac==aa){return Z}W=ac.previousSibling;ac=ac.parentNode;V=L(ac,R,R,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function Q(aa,ab){var X=O(N[h],N[U]),Y=X!=N[h],ac,Z,W,t,V;if(X==aa){return L(X,Y,D,ab)}ac=X.parentNode;Z=L(ac,R,D,ab);while(ac){while(X){W=X.nextSibling;t=L(X,Y,D,ab);if(ab!=j){Z.appendChild(t)}Y=D;X=W}if(ac==aa){return Z}X=ac.nextSibling;ac=ac.parentNode;V=L(ac,R,D,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function L(t,Y,ab,ac){var X,W,Z,V,aa;if(Y){return y(t,ac)}if(t.nodeType==3){X=t.nodeValue;if(ab){V=N[U];W=X.substring(V);Z=X.substring(0,V)}else{V=N[z];W=X.substring(0,V);Z=X.substring(V)}if(ac!=E){t.nodeValue=Z}if(ac==j){return}aa=t.cloneNode(R);aa.nodeValue=W;return aa}if(ac==j){return}return t.cloneNode(R)}function y(V,t){if(t!=j){return t==E?V.cloneNode(D):V}V.parentNode.removeChild(V)}}a.Range=b})(tinymce.dom);(function(){function a(g){var i=this,j="\uFEFF",e,h,d=g.dom,c=true,f=false;function b(){var n=g.getRng(),k=d.createRng(),m,o;m=n.item?n.item(0):n.parentElement();if(m.ownerDocument!=d.doc){return k}if(n.item||!m.hasChildNodes()){k.setStart(m.parentNode,d.nodeIndex(m));k.setEnd(k.startContainer,k.startOffset+1);return k}o=g.isCollapsed();function l(s){var u,q,t,p,A=0,x,y,z,r,v;r=n.duplicate();r.collapse(s);u=d.create("a");z=r.parentElement();if(!z.hasChildNodes()){k[s?"setStart":"setEnd"](z,0);return}z.appendChild(u);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){k[s?"setStartAfter":"setEndAfter"](z);d.remove(u);return}p=tinymce.grep(z.childNodes);x=p.length-1;while(A<=x){y=Math.floor((A+x)/2);z.insertBefore(u,p[y]);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){A=y+1}else{if(v<0){x=y-1}else{found=true;break}}}q=v>0||y==0?u.nextSibling:u.previousSibling;if(q.nodeType==1){d.remove(u);t=d.nodeIndex(q);q=q.parentNode;if(!s||y>0){t++}}else{if(v>0||y==0){r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=r.text.length}else{r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=q.nodeValue.length-r.text.length}d.remove(u)}k[s?"setStart":"setEnd"](q,t)}l(true);if(!o){l()}return k}this.addRange=function(k){var p,n,m,r,u,s,t=g.dom.doc,o=t.body;function l(B){var x,A,v,z,y;v=d.create("a");x=B?m:u;A=B?r:s;z=p.duplicate();if(x==t){x=o;A=0}if(x.nodeType==3){x.parentNode.insertBefore(v,x);z.moveToElementText(v);z.moveStart("character",A);d.remove(v);p.setEndPoint(B?"StartToStart":"EndToEnd",z)}else{y=x.childNodes;if(y.length){if(A>=y.length){d.insertAfter(v,y[y.length-1])}else{x.insertBefore(v,y[A])}z.moveToElementText(v)}else{v=t.createTextNode(j);x.appendChild(v);z.moveToElementText(v.parentNode);z.collapse(c)}p.setEndPoint(B?"StartToStart":"EndToEnd",z);d.remove(v)}}this.destroy();m=k.startContainer;r=k.startOffset;u=k.endContainer;s=k.endOffset;p=o.createTextRange();if(m==u&&m.nodeType==1&&r==s-1){if(r==s-1){try{n=o.createControlRange();n.addElement(m.childNodes[r]);n.select();n.scrollIntoView();return}catch(q){}}}l(true);l();p.select();p.scrollIntoView()};this.getRangeAt=function(){if(!e||!tinymce.dom.RangeUtils.compareRanges(h,g.getRng())){e=b();h=g.getRng()}try{e.startContainer.nextSibling}catch(k){e=b();h=null}return e};this.destroy=function(){h=e=null}}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e<r.length;e++){if(r[e]===r[e-1]){r.splice(e--,1)}}}}return r};b.matches=function(e,r){return b(e,null,null,r)};b.find=function(y,e,z){var x;if(!y){return[]}for(var t=0,s=f.order.length;t<s;t++){var v=f.order[t],u;if((u=f.leftMatch[v].exec(y))){var r=u[1];u.splice(1,1);if(r.substr(r.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");x=f.find[v](u,e,z);if(x!=null){y=y.replace(f.match[v],"");break}}}}if(!x){x=e.getElementsByTagName("*")}return{set:x,expr:y}};b.filter=function(C,B,F,u){var s=C,H=[],z=B,x,e,y=B&&B[0]&&b.isXML(B[0]);while(C&&B.length){for(var A in f.filter){if((x=f.leftMatch[A].exec(C))!=null&&x[2]){var r=f.filter[A],G,E,t=x[1];e=false;x.splice(1,1);if(t.substr(t.length-1)==="\\"){continue}if(z===H){H=[]}if(f.preFilter[A]){x=f.preFilter[A](x,z,F,H,u,y);if(!x){e=G=true}else{if(x===true){continue}}}if(x){for(var v=0;(E=z[v])!=null;v++){if(E){G=r(E,x,v,z);var D=u^!!G;if(F&&G!=null){if(D){e=true}else{z[v]=false}}else{if(D){H.push(E);e=true}}}}}if(G!==undefined){if(!F){z=H}C=C.replace(f.match[A],"");if(!e){return[]}break}}}if(C===s){if(e==null){b.error(C)}else{break}}s=C}return z};b.error=function(e){throw"Syntax error, unrecognized expression: "+e};var f=b.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")}},relative:{"+":function(x,r){var t=typeof r==="string",v=t&&!/\W/.test(r),y=t&&!v;if(v){r=r.toLowerCase()}for(var s=0,e=x.length,u;s<e;s++){if((u=x[s])){while((u=u.previousSibling)&&u.nodeType!==1){}x[s]=y||u&&u.nodeName.toLowerCase()===r?u||false:u===r}}if(y){b.filter(r,x,true)}},">":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s<e;s++){v=x[s];if(v){var t=v.parentNode;x[s]=t.nodeName.toLowerCase()===r?t:false}}}else{for(;s<e;s++){v=x[s];if(v){x[s]=u?v.parentNode:v.parentNode===r}}if(u){b.filter(r,x,true)}}},"":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("parentNode",r,s,t,u,v)},"~":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("previousSibling",r,s,t,u,v)}},find:{ID:function(r,s,t){if(typeof s.getElementById!=="undefined"&&!t){var e=s.getElementById(r[1]);return e?[e]:[]}},NAME:function(s,v){if(typeof v.getElementsByName!=="undefined"){var r=[],u=v.getElementsByName(s[1]);for(var t=0,e=u.length;t<e;t++){if(u[t].getAttribute("name")===s[1]){r.push(u[t])}}return r.length===0?null:r}},TAG:function(e,r){return r.getElementsByTagName(e[1])}},preFilter:{CLASS:function(t,r,s,e,x,y){t=" "+t[1].replace(/\\/g,"")+" ";if(y){return t}for(var u=0,v;(v=r[u])!=null;u++){if(v){if(x^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(t)>=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return r<e[3]-0},gt:function(s,r,e){return r>e[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v<u;v++){if(t[v]===s){return false}}return true}else{b.error("Syntax error, unrecognized expression: "+e)}}}},CHILD:function(e,t){var x=t[1],r=e;switch(x){case"only":case"first":while((r=r.previousSibling)){if(r.nodeType===1){return false}}if(x==="first"){return true}r=e;case"last":while((r=r.nextSibling)){if(r.nodeType===1){return false}}return true;case"nth":var s=t[2],A=t[3];if(s===1&&A===0){return true}var v=t[0],z=e.parentNode;if(z&&(z.sizcache!==v||!e.nodeIndex)){var u=0;for(r=z.firstChild;r;r=r.nextSibling){if(r.nodeType===1){r.nodeIndex=++u}}z.sizcache=v}var y=e.nodeIndex-A;if(s===0){return y===0}else{return(y%s===0&&y/s>=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s<e;s++){r.push(u[s])}}else{for(;u[s];s++){r.push(u[s])}}}return r}}var c;if(document.documentElement.compareDocumentPosition){c=function(r,e){if(!r.compareDocumentPosition||!e.compareDocumentPosition){if(r==e){o=true}return r.compareDocumentPosition?-1:1}var s=r.compareDocumentPosition(e)&4?-1:r===e?0:1;if(s===0){o=true}return s}}else{if("sourceIndex" in document.documentElement){c=function(r,e){if(!r.sourceIndex||!e.sourceIndex){if(r==e){o=true}return r.sourceIndex?-1:1}var s=r.sourceIndex-e.sourceIndex;if(s===0){o=true}return s}}else{if(document.createRange){c=function(t,r){if(!t.ownerDocument||!r.ownerDocument){if(t==r){o=true}return t.ownerDocument?-1:1}var s=t.ownerDocument.createRange(),e=r.ownerDocument.createRange();s.setStart(t,0);s.setEnd(t,0);e.setStart(r,0);e.setEnd(r,0);var u=s.compareBoundaryPoints(Range.START_TO_END,e);if(u===0){o=true}return u}}}}b.getText=function(e){var r="",t;for(var s=0;e[s];s++){t=e[s];if(t.nodeType===3||t.nodeType===4){r+=t.nodeValue}else{if(t.nodeType!==8){r+=b.getText(t.childNodes)}}}return r};(function(){var r=document.createElement("div"),s="script"+(new Date()).getTime();r.innerHTML="<a name='"+s+"'/>";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="<p class='TEST'></p>";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1&&!z){e.sizcache=v;e.sizset=t}if(e.nodeName.toLowerCase()===x){u=e;break}e=e[r]}A[t]=u}}}function q(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1){if(!z){e.sizcache=v;e.sizset=t}if(typeof x!=="string"){if(e===x){u=true;break}}else{if(b.filter(x,[e]).length>0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x<r;x++){b(e,s[x],t)}return b.filter(u,t)};window.tinymce.dom.Sizzle=b})();(function(d){var f=d.each,c=d.DOM,b=d.isIE,e=d.isWebKit,a;d.create("tinymce.dom.EventUtils",{EventUtils:function(){this.inits=[];this.events=[]},add:function(m,p,l,j){var g,h=this,i=h.events,k;if(p instanceof Array){k=[];f(p,function(o){k.push(h.add(m,o,l,j))});return k}if(m&&m.hasOwnProperty&&m instanceof Array){k=[];f(m,function(n){n=c.get(n);k.push(h.add(n,p,l,j))});return k}m=c.get(m);if(!m){return}g=function(n){if(h.disabled){return}n=n||window.event;if(n&&b){if(!n.target){n.target=n.srcElement}d.extend(n,h._stoppers)}if(!j){return l(n)}return l.call(j,n)};if(p=="unload"){d.unloads.unshift({func:g});return g}if(p=="init"){if(h.domLoaded){g()}else{h.inits.push(g)}return g}i.push({obj:m,name:p,func:l,cfunc:g,scope:j});h._add(m,p,g);return l},remove:function(l,m,k){var h=this,g=h.events,i=false,j;if(l&&l.hasOwnProperty&&l instanceof Array){j=[];f(l,function(n){n=c.get(n);j.push(h.remove(n,m,k))});return j}l=c.get(l);f(g,function(o,n){if(o.obj==l&&o.name==m&&(!k||(o.func==k||o.cfunc==k))){g.splice(n,1);h._remove(l,m,o.cfunc);i=true;return false}});return i},clear:function(l){var j=this,g=j.events,h,k;if(l){l=c.get(l);for(h=g.length-1;h>=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},destroy:function(){var g=this;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(h){var g=this;if(g.domLoaded){return}g.domLoaded=true;f(g.inits,function(i){i()});g.inits=[]},_wait:function(i){var g=this,h=i.document;if(i.tinyMCE_GZ&&tinyMCE_GZ.loaded){g.domLoaded=1;return}if(h.attachEvent){h.attachEvent("onreadystatechange",function(){if(h.readyState==="complete"){h.detachEvent("onreadystatechange",arguments.callee);g._pageInit(i)}});if(h.documentElement.doScroll&&i==i.top){(function(){if(g.domLoaded){return}try{h.documentElement.doScroll("left")}catch(j){setTimeout(arguments.callee,0);return}g._pageInit(i)})()}}else{if(h.addEventListener){g._add(i,"DOMContentLoaded",function(){g._pageInit(i)})}}g._add(i,"load",function(){g._pageInit(i)})},_stoppers:{preventDefault:function(){this.returnValue=false},stopPropagation:function(){this.cancelBubble=true}}});a=d.dom.Event=new d.dom.EventUtils();a._wait(window);d.addUnload(function(){a.destroy()})})(tinymce);(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(c){function e(f){return f.replace(/[\n\r]+/g,"")}var b=c.is,a=c.isIE,d=c.each;c.create("tinymce.dom.Selection",{Selection:function(i,h,g){var f=this;f.dom=i;f.win=h;f.serializer=g;d(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(j){f[j]=new c.util.Dispatcher(f)});if(!f.win.getSelection){f.tridentSel=new c.dom.TridentSelection(f)}if(c.isIE&&i.boxModel){this._fixIESelection()}c.addUnload(f.destroy,f)},getContent:function(g){var f=this,h=f.getRng(),l=f.dom.create("body"),j=f.getSel(),i,k,m;g=g||{};i=k="";g.get=true;g.format=g.format||"html";f.onBeforeGetContent.dispatch(f,g);if(g.format=="text"){return f.isCollapsed()?"":(h.text||(j.toString?j.toString():""))}if(h.cloneContents){m=h.cloneContents();if(m){l.appendChild(m)}}else{if(b(h.item)||b(h.htmlText)){l.innerHTML=h.item?h.item(0).outerHTML:h.htmlText}else{l.innerHTML=h.toString()}}if(/^\s/.test(l.innerHTML)){i=" "}if(/\s+$/.test(l.innerHTML)){k=" "}g.getInner=true;g.content=f.isCollapsed()?"":i+f.serializer.serialize(l,g)+k;f.onGetContent.dispatch(f,g);return g.content},setContent:function(j,i){var g=this,k=g.getRng(),n,l=g.win.document;i=i||{format:"html"};i.set=true;j=i.content=g.dom.processHTML(j);g.onBeforeSetContent.dispatch(g,i);j=i.content;if(k.insertNode){j+='<span id="__caret">_</span>';if(k.startContainer==l&&k.endContainer==l){l.body.innerHTML=j}else{k.deleteContents();if(l.body.childNodes.length==0){l.body.innerHTML=j}else{if(k.createContextualFragment){k.insertNode(k.createContextualFragment(j))}else{var m=l.createDocumentFragment(),f=l.createElement("div");m.appendChild(f);f.outerHTML=j;k.insertNode(m)}}}n=g.dom.get("__caret");k=l.createRange();k.setStartBefore(n);k.setEndBefore(n);g.setRng(k);g.dom.remove("__caret")}else{if(k.item){l.execCommand("Delete",false,null);k=g.getRng()}k.pasteHTML(j)}g.onSetContent.dispatch(g,i)},getStart:function(){var g=this.getRng(),h,f,j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}j=g.duplicate();j.collapse(1);h=j.parentElement();f=i=g.parentElement();while(i=i.parentNode){if(i==h){h=f;break}}if(h&&h.nodeName=="BODY"){return h.firstChild||h}return h}else{h=g.startContainer;if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[Math.min(h.childNodes.length-1,g.startOffset)]}if(h&&h.nodeType==3){return h.parentNode}return h}},getEnd:function(){var g=this,h=g.getRng(),i,f;if(h.duplicate||h.item){if(h.item){return h.item(0)}h=h.duplicate();h.collapse(0);i=h.parentElement();if(i&&i.nodeName=="BODY"){return i.lastChild||i}return i}else{i=h.endContainer;f=h.endOffset;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[f>0?f-1:f]}if(i&&i.nodeType==3){return i.parentNode}return i}},getBookmark:function(q,r){var u=this,m=u.dom,g,j,i,n,h,o,p,l="\uFEFF",s;function f(v,x){var t=0;d(m.select(v),function(z,y){if(z==x){t=y}});return t}if(q==2){function k(){var v=u.getRng(true),t=m.getRoot(),x={};function y(B,G){var A=B[G?"startContainer":"endContainer"],F=B[G?"startOffset":"endOffset"],z=[],C,E,D=0;if(A.nodeType==3){if(r){for(C=A.previousSibling;C&&C.nodeType==3;C=C.previousSibling){F+=C.nodeValue.length}}z.push(F)}else{E=A.childNodes;if(F>=E.length&&E.length){D=1;F=Math.max(0,E.length-1)}z.push(u.dom.nodeIndex(E[F],r)+D)}for(;A&&A!=t;A=A.parentNode){z.push(u.dom.nodeIndex(A,r))}return z}x.start=y(v,true);if(!u.isCollapsed()){x.end=y(v)}return x}return k()}if(q){return{rng:u.getRng()}}g=u.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();s="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();g.collapse();g.pasteHTML('<span _mce_type="bookmark" id="'+i+'_start" style="'+s+'">'+l+"</span>");if(!n){j.collapse(false);j.pasteHTML('<span _mce_type="bookmark" id="'+i+'_end" style="'+s+'">'+l+"</span>")}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=u.getNode();h=o.nodeName;if(h=="IMG"){return{name:h,index:f(h,o)}}j=g.cloneRange();if(!n){j.collapse(false);j.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_end",style:s},l))}g.collapse(true);g.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_start",style:s},l))}u.moveToBookmark({id:i,keep:1});return{id:i}},moveToBookmark:function(n){var r=this,l=r.dom,i,h,f,q,j,s,o,p;if(r.tridentSel){r.tridentSel.destroy()}if(n){if(n.start){f=l.createRng();q=l.getRoot();function g(z){var t=n[z?"start":"end"],v,x,y,u;if(t){for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(u.length){x=u[t[v]]}}if(z){f.setStart(x,t[0])}else{f.setEnd(x,t[0])}}}g(true);g();r.setRng(f)}else{if(n.id){function k(A){var u=l.get(n.id+"_"+A),z,t,x,y,v=n.keep;if(u){z=u.parentNode;if(A=="start"){if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}j=s=z;o=p=t}else{if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}s=z;p=t}if(!v){y=u.previousSibling;x=u.nextSibling;d(c.grep(u.childNodes),function(B){if(B.nodeType==3){B.nodeValue=B.nodeValue.replace(/\uFEFF/g,"")}});while(u=l.get(n.id+"_"+A)){l.remove(u,1)}if(y&&x&&y.nodeType==x.nodeType&&y.nodeType==3&&!c.isOpera){t=y.nodeValue.length;y.appendData(x.nodeValue);l.remove(x);if(A=="start"){j=s=y;o=p=t}else{s=y;p=t}}}}}function m(t){if(!a&&l.isBlock(t)&&!t.innerHTML){t.innerHTML='<br _mce_bogus="1" />'}return t}k("start");k("end");if(j){f=l.createRng();f.setStart(m(j),o);f.setEnd(m(s),p);r.setRng(f)}}else{if(n.name){r.select(l.select(n.name)[n.index])}else{if(n.rng){r.setRng(n.rng)}}}}}},select:function(k,j){var i=this,l=i.dom,g=l.createRng(),f;f=l.nodeIndex(k);g.setStart(k.parentNode,f);g.setEnd(k.parentNode,f+1);if(j){function h(m,o){var n=new c.dom.TreeWalker(m,m);do{if(m.nodeType==3&&c.trim(m.nodeValue).length!=0){if(o){g.setStart(m,0)}else{g.setEnd(m,m.nodeValue.length)}return}if(m.nodeName=="BR"){if(o){g.setStartBefore(m)}else{g.setEndBefore(m)}return}}while(m=(o?n.next():n.prev()))}h(k,1);h(k)}i.setRng(g);return k},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}if(h.compareEndPoints){return h.compareEndPoints("StartToEnd",h)===0}return !g||h.collapsed},collapse:function(f){var g=this,h=g.getRng(),i;if(h.item){i=h.item(0);h=this.win.document.body.createTextRange();h.moveToElementText(i)}h.collapse(!!f);g.setRng(h)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(l){var g=this,h,i,k,j=g.win.document;if(l&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():j.createRange())}}catch(f){}if(c.isIE&&i.setStart&&j.selection.createRange().item){k=j.selection.createRange().item(0);i=j.createRange();i.setStartBefore(k);i.setEndAfter(k)}if(!i){i=j.createRange?j.createRange():j.body.createTextRange()}if(g.selectedRange&&g.explicitRange){if(i.compareBoundaryPoints(i.START_TO_START,g.selectedRange)===0&&i.compareBoundaryPoints(i.END_TO_END,g.selectedRange)===0){i=g.explicitRange}else{g.selectedRange=null;g.explicitRange=null}}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){g.explicitRange=i;h.removeAllRanges();h.addRange(i);g.selectedRange=h.getRangeAt(0)}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var g=this,f=g.getRng(),h=g.getSel(),i;if(f.setStart){if(!f){return g.dom.getRoot()}i=f.commonAncestorContainer;if(!f.collapsed){if(f.startContainer==f.endContainer){if(f.startOffset-f.endOffset<2){if(f.startContainer.hasChildNodes()){i=f.startContainer.childNodes[f.startOffset]}}}if(c.isWebKit&&h.anchorNode&&h.anchorNode.nodeType==1){return h.anchorNode.childNodes[h.anchorOffset]}}if(i&&i.nodeType==3){return i.parentNode}return i}return f.item?f.item(0):f.parentElement()},getSelectedBlocks:function(g,f){var i=this,j=i.dom,m,h,l,k=[];m=j.getParent(g||i.getStart(),j.isBlock);h=j.getParent(f||i.getEnd(),j.isBlock);if(m){k.push(m)}if(m&&h&&m!=h){l=m;while((l=l.nextSibling)&&l!=h){if(j.isBlock(l)){k.push(l)}}}if(h&&m!=h){k.push(h)}return k},destroy:function(g){var f=this;f.win=null;if(f.tridentSel){f.tridentSel.destroy()}if(!g){c.removeUnload(f.destroy)}},_fixIESelection:function(){var m=this.dom,l=m.doc,g=l.body,i,j;l.documentElement.unselectable=true;function k(n,q){var o=g.createTextRange();try{o.moveToPoint(n,q)}catch(p){o=null}return o}function h(o){var n;if(o.button){n=k(o.x,o.y);if(n){if(n.compareEndPoints("StartToStart",j)>0){n.setEndPoint("StartToStart",j)}else{n.setEndPoint("EndToEnd",j)}n.select()}}else{f()}}function f(){m.unbind(l,"mouseup",f);m.unbind(l,"mousemove",h);i=0}m.bind(l,"mousedown",function(n){if(n.target.nodeName==="HTML"){if(i){f()}i=1;j=k(n.x,n.y);if(j){m.bind(l,"mouseup",f);m.bind(l,"mousemove",h);m.win.focus();j.select()}}})}})})(tinymce);(function(a){a.create("tinymce.dom.XMLWriter",{node:null,XMLWriter:function(c){function b(){var e=document.implementation;if(!e||!e.createDocument){try{return new ActiveXObject("MSXML2.DOMDocument")}catch(d){}try{return new ActiveXObject("Microsoft.XmlDom")}catch(d){}}else{return e.createDocument("","",null)}}this.doc=b();this.valid=a.isOpera||a.isWebKit;this.reset()},reset:function(){var b=this,c=b.doc;if(c.firstChild){c.removeChild(c.firstChild)}b.node=c.appendChild(c.createElement("html"))},writeStartElement:function(c){var b=this;b.node=b.node.appendChild(b.doc.createElement(c))},writeAttribute:function(c,b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.setAttribute(c,b)},writeEndElement:function(){this.node=this.node.parentNode},writeFullEndElement:function(){var b=this,c=b.node;c.appendChild(b.doc.createTextNode(""));b.node=c.parentNode},writeText:function(b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.appendChild(this.doc.createTextNode(b))},writeCDATA:function(b){this.node.appendChild(this.doc.createCDATASection(b))},writeComment:function(b){if(a.isIE){b=b.replace(/^\-|\-$/g," ")}this.node.appendChild(this.doc.createComment(b.replace(/\-\-/g," ")))},getContent:function(){var b;b=this.doc.xml||new XMLSerializer().serializeToString(this.doc);b=b.replace(/<\?[^?]+\?>|<html[^>]*>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g,"");b=b.replace(/ ?\/>/g," />");if(this.valid){b=b.replace(/\%MCGT%/g,">")}return b}})})(tinymce);(function(c){var d=/[&\"<>]/g,b=/[<>&]/g,a={"&":"&",'"':""","<":"<",">":">"};c.create("tinymce.dom.StringWriter",{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(e){this.settings=c.extend({indent_char:" ",indentation:0},e);this.reset()},reset:function(){this.indent="";this.str="";this.tags=[];this.count=0},writeStartElement:function(e){this._writeAttributesEnd();this.writeRaw("<"+e);this.tags.push(e);this.inAttr=true;this.count++;this.elementCount=this.count;this.attrs={}},writeAttribute:function(g,e){var f=this;if(!f.attrs[g]){f.writeRaw(" "+f.encode(g,true)+'="'+f.encode(e,true)+'"');f.attrs[g]=e}},writeEndElement:function(){var e;if(this.tags.length>0){e=this.tags.pop();if(this._writeAttributesEnd(1)){this.writeRaw("</"+e+">")}if(this.settings.indentation>0){this.writeRaw("\n")}}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw("</"+this.tags.pop()+">");if(this.settings.indentation>0){this.writeRaw("\n")}}},writeText:function(e){this._writeAttributesEnd();this.writeRaw(this.encode(e));this.count++},writeCDATA:function(e){this._writeAttributesEnd();this.writeRaw("<![CDATA["+e+"]]>");this.count++},writeComment:function(e){this._writeAttributesEnd();this.writeRaw("<!--"+e+"-->");this.count++},writeRaw:function(e){this.str+=e},encode:function(f,e){return f.replace(e?d:b,function(g){return a[g]})},getContent:function(){return this.str},_writeAttributesEnd:function(e){if(!this.inAttr){return}this.inAttr=false;if(e&&this.elementCount==this.count){this.writeRaw(" />");return false}this.writeRaw(">");return true}})})(tinymce);(function(e){var g=e.extend,f=e.each,b=e.util.Dispatcher,d=e.isIE,a=e.isGecko;function c(h){return h.replace(/([?+*])/g,".$1")}e.create("tinymce.dom.Serializer",{Serializer:function(j){var i=this;i.key=0;i.onPreProcess=new b(i);i.onPostProcess=new b(i);try{i.writer=new e.dom.XMLWriter()}catch(h){i.writer=new e.dom.StringWriter()}if(e.isIE&&document.documentMode>8){i.writer=new e.dom.StringWriter()}i.settings=j=g({dom:e.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(_mce_|_moz_|sizset|sizcache)/,closed:/^(br|hr|input|meta|img|link|param|area)$/,entity_encoding:"named",entities:"160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",valid_elements:"*[*]",extended_valid_elements:0,invalid_elements:0,fix_table_elements:1,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,apply_source_formatting:0,indent_mode:"simple",indent_char:"\t",indent_levels:1,remove_linebreaks:1,remove_redundant_brs:1,element_format:"xhtml"},j);i.dom=j.dom;i.schema=j.schema;if(j.entity_encoding=="named"&&!j.entities){j.entity_encoding="raw"}if(j.remove_redundant_brs){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/(<br \/>\s*)+<\/(p|h[1-6]|div|li)>/gi,function(n,m,o){if(/^<br \/>\s*<\//.test(n)){return"</"+o+">"}return n})})}if(j.element_format=="html"){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/<([^>]+) \/>/g,"<$1>")})}if(j.fix_list_elements){i.onPreProcess.add(function(v,s){var l,z,y=["ol","ul"],u,t,q,k=/^(OL|UL)$/,A;function m(r,x){var o=x.split(","),p;while((r=r.previousSibling)!=null){for(p=0;p<o.length;p++){if(r.nodeName==o[p]){return r}}}return null}for(z=0;z<y.length;z++){l=i.dom.select(y[z],s.node);for(u=0;u<l.length;u++){t=l[u];q=t.parentNode;if(k.test(q.nodeName)){A=m(t,"LI");if(!A){A=i.dom.create("li");A.innerHTML=" ";A.appendChild(t);q.insertBefore(A,q.firstChild)}else{A.appendChild(t)}}}}})}if(j.fix_table_elements){i.onPreProcess.add(function(k,l){if(!e.isOpera||opera.buildNumber()>=1767){f(i.dom.select("p table",l.node).reverse(),function(p){var o=i.dom.getParent(p.parentNode,"table,p");if(o.nodeName!="TABLE"){try{i.dom.split(o,p)}catch(m){}}})}})}},setEntities:function(o){var n=this,j,m,h={},k;if(n.entityLookup){return}j=o.split(",");for(m=0;m<j.length;m+=2){k=j[m];if(k==34||k==38||k==60||k==62){continue}h[String.fromCharCode(j[m])]=j[m+1];k=parseInt(j[m]).toString(16)}n.entityLookup=h},setRules:function(i){var h=this;h._setup();h.rules={};h.wildRules=[];h.validElements={};return h.addRules(i)},addRules:function(i){var h=this,j;if(!i){return}h._setup();f(i.split(","),function(m){var q=m.split(/\[|\]/),l=q[0].split("/"),r,k,o,n=[];if(j){k=e.extend([],j.attribs)}if(q.length>1){f(q[1].split("|"),function(u){var p={},t;k=k||[];u=u.replace(/::/g,"~");u=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(u);u[2]=u[2].replace(/~/g,":");if(u[1]=="!"){r=r||[];r.push(u[2])}if(u[1]=="-"){for(t=0;t<k.length;t++){if(k[t].name==u[2]){k.splice(t,1);return}}}switch(u[3]){case"=":p.defaultVal=u[4]||"";break;case":":p.forcedVal=u[4];break;case"<":p.validVals=u[4].split("?");break}if(/[*.?]/.test(u[2])){o=o||[];p.nameRE=new RegExp("^"+c(u[2])+"$");o.push(p)}else{p.name=u[2];k.push(p)}n.push(u[2])})}f(l,function(v,u){var y=v.charAt(0),t=1,p={};if(j){if(j.noEmpty){p.noEmpty=j.noEmpty}if(j.fullEnd){p.fullEnd=j.fullEnd}if(j.padd){p.padd=j.padd}}switch(y){case"-":p.noEmpty=true;break;case"+":p.fullEnd=true;break;case"#":p.padd=true;break;default:t=0}l[u]=v=v.substring(t);h.validElements[v]=1;if(/[*.?]/.test(l[0])){p.nameRE=new RegExp("^"+c(l[0])+"$");h.wildRules=h.wildRules||{};h.wildRules.push(p)}else{p.name=l[0];if(l[0]=="@"){j=p}h.rules[v]=p}p.attribs=k;if(r){p.requiredAttribs=r}if(o){v="";f(n,function(s){if(v){v+="|"}v+="("+c(s)+")"});p.validAttribsRE=new RegExp("^"+v.toLowerCase()+"$");p.wildAttribs=o}})});i="";f(h.validElements,function(m,l){if(i){i+="|"}if(l!="@"){i+=l}});h.validElementsRE=new RegExp("^("+c(i.toLowerCase())+")$")},findRule:function(m){var j=this,l=j.rules,h,k;j._setup();k=l[m];if(k){return k}l=j.wildRules;for(h=0;h<l.length;h++){if(l[h].nameRE.test(m)){return l[h]}}return null},findAttribRule:function(h,l){var j,k=h.wildAttribs;for(j=0;j<k.length;j++){if(k[j].nameRE.test(l)){return k[j]}}return null},serialize:function(r,q){var m,k=this,p,i,j,l;k._setup();q=q||{};q.format=q.format||"html";k.processObj=q;if(d){l=[];f(r.getElementsByTagName("option"),function(o){var h=k.dom.getAttrib(o,"selected");l.push(h?h:null)})}r=r.cloneNode(true);if(d){f(r.getElementsByTagName("option"),function(o,h){k.dom.setAttrib(o,"selected",l[h])})}j=r.ownerDocument.implementation;if(j.createHTMLDocument&&(e.isOpera&&opera.buildNumber()>=1767)){p=j.createHTMLDocument("");f(r.nodeName=="BODY"?r.childNodes:[r],function(h){p.body.appendChild(p.importNode(h,true))});if(r.nodeName!="BODY"){r=p.body.firstChild}else{r=p.body}i=k.dom.doc;k.dom.doc=p}k.key=""+(parseInt(k.key)+1);if(!q.no_events){q.node=r;k.onPreProcess.dispatch(k,q)}k.writer.reset();k._info=q;k._serializeNode(r,q.getInner);q.content=k.writer.getContent();if(i){k.dom.doc=i}if(!q.no_events){k.onPostProcess.dispatch(k,q)}k._postProcess(q);q.node=null;return e.trim(q.content)},_postProcess:function(n){var i=this,k=i.settings,j=n.content,m=[],l;if(n.format=="html"){l=i._protect({content:j,patterns:[{pattern:/(<script[^>]*>)(.*?)(<\/script>)/g},{pattern:/(<noscript[^>]*>)(.*?)(<\/noscript>)/g},{pattern:/(<style[^>]*>)(.*?)(<\/style>)/g},{pattern:/(<pre[^>]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/(<!--\[CDATA\[)(.*?)(\]\]-->)/g}]});j=l.content;if(k.entity_encoding!=="raw"){j=i._encode(j)}if(!n.set){j=e._replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g,k.entity_encoding=="numeric"?"<p$1> </p>":"<p$1> </p>",j);if(k.remove_linebreaks){j=j.replace(/\r?\n|\r/g," ");j=e._replace(/(<[^>]+>)\s+/g,"$1 ",j);j=e._replace(/\s+(<\/[^>]+>)/g," $1",j);j=e._replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,"<$1 $2>",j);j=e._replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,"<$1>",j);j=e._replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,"</$1>",j)}if(k.apply_source_formatting&&k.indent_mode=="simple"){j=e._replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,"\n<$1$2$3>\n",j);j=e._replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,"\n<$1$2>",j);j=e._replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,"</$1>\n",j);j=j.replace(/\n\n/g,"\n")}}j=i._unprotect(j,l);j=e._replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g,"<![CDATA[$1]]>",j);if(k.entity_encoding=="raw"){j=e._replace(/<p> <\/p>|<p([^>]+)> <\/p>/g,"<p$1>\u00a0</p>",j)}j=j.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g,function(h,p,o){return"<noscript"+p+">"+i.dom.decode(o.replace(/<!--|-->/g,""))+"</noscript>"})}n.content=j},_serializeNode:function(E,J){var A=this,B=A.settings,y=A.writer,q,j,u,G,F,I,C,h,z,k,r,D,p,m,H,o,x;if(!B.node_filter||B.node_filter(E)){switch(E.nodeType){case 1:if(E.hasAttribute?E.hasAttribute("_mce_bogus"):E.getAttribute("_mce_bogus")){return}p=H=false;q=E.hasChildNodes();k=E.getAttribute("_mce_name")||E.nodeName.toLowerCase();o=E.getAttribute("_mce_type");if(o){if(!A._info.cleanup){p=true;return}else{H=1}}if(d){x=E.scopeName;if(x&&x!=="HTML"&&x!=="html"){k=x+":"+k}}if(k.indexOf("mce:")===0){k=k.substring(4)}if(!H){if(!A.validElementsRE||!A.validElementsRE.test(k)||(A.invalidElementsRE&&A.invalidElementsRE.test(k))||J){p=true;break}}if(d){if(B.fix_content_duplication){if(E._mce_serialized==A.key){return}E._mce_serialized=A.key}if(k.charAt(0)=="/"){k=k.substring(1)}}else{if(a){if(E.nodeName==="BR"&&E.getAttribute("type")=="_moz"){return}}}if(B.validate_children){if(A.elementName&&!A.schema.isValid(A.elementName,k)){p=true;break}A.elementName=k}r=A.findRule(k);if(!r){p=true;break}k=r.name||k;m=B.closed.test(k);if((!q&&r.noEmpty)||(d&&!k)){p=true;break}if(r.requiredAttribs){I=r.requiredAttribs;for(G=I.length-1;G>=0;G--){if(this.dom.getAttrib(E,I[G])!==""){break}}if(G==-1){p=true;break}}y.writeStartElement(k);if(r.attribs){for(G=0,C=r.attribs,F=C.length;G<F;G++){I=C[G];z=A._getAttrib(E,I);if(z!==null){y.writeAttribute(I.name,z)}}}if(r.validAttribsRE){C=A.dom.getAttribs(E);for(G=C.length-1;G>-1;G--){h=C[G];if(h.specified){I=h.nodeName.toLowerCase();if(B.invalid_attrs.test(I)||!r.validAttribsRE.test(I)){continue}D=A.findAttribRule(r,I);z=A._getAttrib(E,D,I);if(z!==null){y.writeAttribute(I,z)}}}}if(o&&H){y.writeAttribute("_mce_type",o)}if(k==="script"&&e.trim(E.innerHTML)){y.writeText("// ");y.writeCDATA(E.innerHTML.replace(/<!--|-->|<\[CDATA\[|\]\]>/g,""));q=false;break}if(r.padd){if(q&&(u=E.firstChild)&&u.nodeType===1&&E.childNodes.length===1){if(u.hasAttribute?u.hasAttribute("_mce_bogus"):u.getAttribute("_mce_bogus")){y.writeText("\u00a0")}}else{if(!q){y.writeText("\u00a0")}}}break;case 3:if(B.validate_children&&A.elementName&&!A.schema.isValid(A.elementName,"#text")){return}return y.writeText(E.nodeValue);case 4:return y.writeCDATA(E.nodeValue);case 8:return y.writeComment(E.nodeValue)}}else{if(E.nodeType==1){q=E.hasChildNodes()}}if(q&&!m){u=E.firstChild;while(u){A._serializeNode(u);A.elementName=k;u=u.nextSibling}}if(!p){if(!m){y.writeFullEndElement()}else{y.writeEndElement()}}},_protect:function(j){var i=this;j.items=j.items||[];function h(l){return l.replace(/[\r\n\\]/g,function(m){if(m==="\n"){return"\\n"}else{if(m==="\\"){return"\\\\"}}return"\\r"})}function k(l){return l.replace(/\\[\\rn]/g,function(m){if(m==="\\n"){return"\n"}else{if(m==="\\\\"){return"\\"}}return"\r"})}f(j.patterns,function(l){j.content=k(h(j.content).replace(l.pattern,function(n,o,m,p){m=k(m);if(l.encode){m=i._encode(m)}j.items.push(m);return o+"<!--mce:"+(j.items.length-1)+"-->"+p}))});return j},_unprotect:function(i,j){i=i.replace(/\<!--mce:([0-9]+)--\>/g,function(k,h){return j.items[parseInt(h)]});j.items=[];return i},_encode:function(m){var j=this,k=j.settings,i;if(k.entity_encoding!=="raw"){if(k.entity_encoding.indexOf("named")!=-1){j.setEntities(k.entities);i=j.entityLookup;m=m.replace(/[\u007E-\uFFFF]/g,function(h){var l;if(l=i[h]){h="&"+l+";"}return h})}if(k.entity_encoding.indexOf("numeric")!=-1){m=m.replace(/[\u007E-\uFFFF]/g,function(h){return"&#"+h.charCodeAt(0)+";"})}}return m},_setup:function(){var h=this,i=this.settings;if(h.done){return}h.done=1;h.setRules(i.valid_elements);h.addRules(i.extended_valid_elements);if(i.invalid_elements){h.invalidElementsRE=new RegExp("^("+c(i.invalid_elements.replace(/,/g,"|").toLowerCase())+")$")}if(i.attrib_value_filter){h.attribValueFilter=i.attribValueFilter}},_getAttrib:function(m,j,h){var l,k;h=h||j.name;if(j.forcedVal&&(k=j.forcedVal)){if(k==="{$uid}"){return this.dom.uniqueId()}return k}k=this.dom.getAttrib(m,h);switch(h){case"rowspan":case"colspan":if(k=="1"){k=""}break}if(this.attribValueFilter){k=this.attribValueFilter(h,k,m)}if(j.validVals){for(l=j.validVals.length-1;l>=0;l--){if(k==j.validVals[l]){break}}if(l==-1){return null}}if(k===""&&typeof(j.defaultVal)!="undefined"){k=j.defaultVal;if(k==="{$uid}"){return this.dom.uniqueId()}return k}else{if(h=="class"&&this.processObj.get){k=k.replace(/\s?mceItem\w+\s?/g,"")}}if(k===""){return null}return k}})})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],f={},d=[],g=0,e;function b(m,u){var v=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}u()}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(x){var t=q.create("script",{type:"text/javascript"});t.text=x;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()}});return}}s=q.create("script",{id:n,type:"text/javascript",src:a._addVer(m)});if(!a.isIE){s.onload=p}s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}};(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==e){j.push(m);l[m]=c}if(q){if(!f[m]){f[m]=[]}f[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(f[r],function(s){s.func.call(s.scope)});f[r]=e}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","lastSibling",e))}};(function(){var a={};function b(f,e){var d;function c(g){return g.replace(/[A-Z]+/g,function(h){return c(f[h])})}for(d in f){if(f.hasOwnProperty(d)){f[d]=c(f[d])}}c(e).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]/g,function(l,g,j){var h,k={};j=j.split(/\|/);for(h=j.length-1;h>=0;h--){k[j[h]]=1}a[g]=k})}b({Z:"#|H|K|N|O|P",Y:"#|X|form|R|Q",X:"p|T|div|U|W|isindex|fieldset|table",W:"pre|hr|blockquote|address|center|noframes",U:"ul|ol|dl|menu|dir",ZC:"#|p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"#|X|S|Q",S:"R|P",ZA:"#|a|G|J|M|O|P",R:"#|a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe"},"script[]style[]object[#|param|X|form|a|H|K|N|O|Q]param[]p[S]a[Z]br[]span[S]bdo[S]applet[#|param|X|form|a|H|K|N|O|Q]h1[S]img[]map[X|form|Q|area]h2[S]iframe[#|X|form|a|H|K|N|O|Q]h3[S]tt[S]i[S]b[S]u[S]s[S]strike[S]big[S]small[S]font[S]basefont[]em[S]strong[S]dfn[S]code[S]q[S]samp[S]kbd[S]var[S]cite[S]abbr[S]acronym[S]sub[S]sup[S]input[]select[optgroup|option]optgroup[option]option[]textarea[]label[S]button[#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[S]ins[#|X|form|a|H|K|N|O|Q]h5[S]del[#|X|form|a|H|K|N|O|Q]h6[S]div[#|X|form|a|H|K|N|O|Q]ul[li]li[#|X|form|a|H|K|N|O|Q]ol[li]dl[dt|dd]dt[S]dd[#|X|form|a|H|K|N|O|Q]menu[li]dir[li]pre[ZA]hr[]blockquote[#|X|form|a|H|K|N|O|Q]address[S|p]center[#|X|form|a|H|K|N|O|Q]noframes[#|X|form|a|H|K|N|O|Q]isindex[]fieldset[#|legend|X|form|a|H|K|N|O|Q]legend[S]table[caption|col|colgroup|thead|tfoot|tbody|tr]caption[S]col[]colgroup[col]thead[tr]tr[th|td]th[#|X|form|a|H|K|N|O|Q]form[#|X|a|H|K|N|O|Q]noscript[#|X|form|a|H|K|N|O|Q]td[#|X|form|a|H|K|N|O|Q]tfoot[tr]tbody[tr]area[]base[]body[#|X|form|a|H|K|N|O|Q]");tinymce.dom.Schema=function(){var c=this,d=a;c.isValid=function(f,e){var g=d[f];return !!(g&&(!e||g[e]))}}})();(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,r){var h=d.startContainer,k=d.startOffset,s=d.endContainer,l=d.endOffset,i,f,n,g,q,p,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(t){r([t])});return}function o(v,u,t){var x=[];for(;v&&v!=t;v=v[u]){x.push(v)}return x}function m(u,t){do{if(u.parentNode==t){return u}u=u.parentNode}while(u)}function j(v,u,x){var t=x?"nextSibling":"previousSibling";for(g=v,q=g.parentNode;g&&g!=u;g=q){q=g.parentNode;p=o(g==v?g:g[t],t);if(p.length){if(!x){p.reverse()}r(p)}}}if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[k]}if(s.nodeType==1&&s.hasChildNodes()){s=s.childNodes[Math.min(k==l?l:l-1,s.childNodes.length-1)]}i=c.findCommonAncestor(h,s);if(h==s){return r([h])}for(g=h;g;g=g.parentNode){if(g==s){return j(h,i,true)}if(g==i){break}}for(g=s;g;g=g.parentNode){if(g==h){return j(s,i)}if(g==i){break}}f=m(h,i)||h;n=m(s,i)||s;j(h,f,true);p=o(f==h?f:f.nextSibling,"nextSibling",n==s?n.nextSibling:n);if(p.length){r(p)}j(s,n)}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(e,d){this.id=e;this.settings=d=d||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=d.scope||this;this.disabled=0;this.active=0},setDisabled:function(d){var f;if(d!=this.disabled){f=b.get(this.id);if(f&&this.settings.unavailable_prefix){if(d){this.prevTitle=f.title;f.title=this.settings.unavailable_prefix+": "+f.title}else{f.title=this.prevTitle}}this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(b,a){this.parent(b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator"},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.clientWidth,j.max_width):g.clientWidth;k=j.max_height?Math.min(g.clientHeight,j.max_height):g.clientHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return a.cancel(s)}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}z.onShowMenu.dispatch(z);if(A.keyboard_focus){a.add(o,"keydown",z._keyHandler,z);c.select("a","menu_"+z.id)[0].focus();z._focusIdx=0}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);a.remove(h,"mouseover",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000"});k=c.add(g,"div",{id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_keyHandler:function(j){var i=this,h=j.keyCode;function g(m){var k=i._focusIdx+m,l=c.select("a","menu_"+i.id)[k];if(l){i._focusIdx=k;l.focus()}}switch(h){case 38:g(-1);return;case 40:g(1);return;case 13:return;case 27:return this.hideMenu()}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,"td");i=p=c.add(i,"a",{href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(d,c){this.parent(d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" title="'+a.encode(e.title)+'">';if(e.image){d+='<img class="mceIcon" src="'+e.image+'" />'+c+"</a>"}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")+"</a>"}return d},postRender:function(){var c=this,d=c.settings;b.dom.Event.add(c.id,"click",function(f){if(!c.isDisabled()){return d.onclick.call(d.scope,f)}})}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(h,g){var f=this;f.parent(h,g);f.items=[];f.onChange=new a(f);f.onPostRender=new a(f);f.onAdd=new a(f);f.onRenderMenu=new d.util.Dispatcher(this);f.classPrefix="mceListBox"},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){var g=this,h,i;if(f!=g.selectedIndex){h=c.get(g.id+"_text");i=g.items[f];if(i){g.selectedValue=i.value;g.selectedIndex=f;c.setHTML(h,c.encode(i.title));c.removeClass(h,"mceTitle")}else{c.setHTML(h,c.encode(g.settings.title));c.addClass(h,"mceTitle");g.selectedValue=g.selectedIndex=null}h=0}},add:function(i,f,h){var g=this;h=h||{};h=d.extend(h,{title:i,value:f});g.items.push(h);g.onAdd.dispatch(g,h)},getLength:function(){return this.items.length},renderHTML:function(){var i="",f=this,g=f.settings,j=f.classPrefix;i='<table id="'+f.id+'" cellpadding="0" cellspacing="0" class="'+j+" "+j+"Enabled"+(g["class"]?(" "+g["class"]):"")+'"><tbody><tr>';i+="<td>"+c.createHTML("a",{id:f.id+"_text",href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},c.encode(f.settings.title))+"</td>";i+="<td>"+c.createHTML("a",{id:f.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},"<span></span>")+"</td>";i+="</tr></tbody></table>";return i},showMenu:function(){var g=this,j,i,h=c.get(this.id),f;if(g.isDisabled()||g.items.length==0){return}if(g.menu&&g.menu.isMenuVisible){return g.hideMenu()}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}j=c.getPos(this.settings.menu_container);i=c.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.keyboard_focus=!d.isOpera;if(g.oldID){f.items[g.oldID].setSelected(0)}e(g.items,function(k){if(k.value===g.selectedValue){f.items[k.id].setSelected(1);g.oldID=k.id}});f.showMenu(0,h.clientHeight);b.add(c.doc,"mousedown",g.hideMenu,g);c.addClass(g.id,g.classPrefix+"Selected")},hideMenu:function(g){var f=this;if(f.menu&&f.menu.isMenuVisible){if(g&&g.type=="mousedown"&&(g.target.id==f.id+"_text"||g.target.id==f.id+"_open")){return}if(!g||!c.getParent(g.target,".mceMenu")){c.removeClass(f.id,f.classPrefix+"Selected");b.remove(c.doc,"mousedown",f.hideMenu,f);f.menu.hideMenu()}}},renderMenu:function(){var g=this,f;f=g.settings.control_manager.createDropMenu(g.id+"_menu",{menu_line:1,"class":g.classPrefix+"Menu mceNoIcons",max_width:150,max_height:150});f.onHideMenu.add(g.hideMenu,g);f.add({title:g.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}});e(g.items,function(h){if(h.value===undefined){f.add({title:h.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}})}else{h.id=c.uniqueId();h.onclick=function(){if(g.settings.onselect(h.value)!==false){g.select(h.value)}};f.add(h)}});g.onRenderMenu.dispatch(g,f);g.menu=f},postRender:function(){var f=this,g=f.classPrefix;b.add(f.id,"click",f.showMenu,f);b.add(f.id+"_text","focus",function(){if(!f._focused){f.keyDownHandler=b.add(f.id+"_text","keydown",function(k){var h=-1,i,j=k.keyCode;e(f.items,function(l,m){if(f.selectedValue==l.value){h=m}});if(j==38){i=f.items[h-1]}else{if(j==40){i=f.items[h+1]}else{if(j==13){i=f.selectedValue;f.selectedValue=null;f.settings.onselect(i);return b.cancel(k)}}}if(i){f.hideMenu();f.select(i.value)}})}f._focused=1});b.add(f.id+"_text","blur",function(){b.remove(f.id+"_text","keydown",f.keyDownHandler);f._focused=0});if(d.isIE6||!c.boxModel){b.add(f.id,"mouseover",function(){if(!c.hasClass(f.id,g+"Disabled")){c.addClass(f.id,g+"Hover")}});b.add(f.id,"mouseout",function(){if(!c.hasClass(f.id,g+"Disabled")){c.removeClass(f.id,g+"Hover")}})}f.onPostRender.dispatch(f,c.get(f.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(g,f){this.parent(g,f);this.classPrefix="mceNativeListBox"},setDisabled:function(f){c.get(this.id).disabled=f},isDisabled:function(){return c.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){c.get(this.id).selectedIndex=f+1;this.selectedValue=this.items[f]?this.items[f].value:null},add:function(j,g,f){var i,h=this;f=f||{};f.value=g;if(h.isRendered()){c.add(c.get(this.id),"option",f,j)}i={title:j,value:g,attribs:f};h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var g,f=this;g=c.createHTML("option",{value:""},"-- "+f.settings.title+" --");e(f.items,function(h){g+=c.createHTML("option",{value:h.value},h.title)});g=c.createHTML("select",{id:f.id,"class":"mceNativeListBox"},g);return g},postRender:function(){var g=this,h;g.rendered=true;function f(j){var i=g.items[j.target.selectedIndex-1];if(i&&(i=i.value)){g.onChange.dispatch(g,i);if(g.settings.onselect){g.settings.onselect(i)}}}b.add(g.id,"change",f);b.add(g.id,"keydown",function(j){var i;b.remove(g.id,"change",h);i=b.add(g.id,"blur",function(){b.add(g.id,"change",f);b.remove(g.id,"blur",i)});if(j.keyCode==13||j.keyCode==32){f(j);return b.cancel(j)}});g.onPostRender.dispatch(g,c.get(g.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(f,e){this.parent(f,e);this.onRenderMenu=new c.util.Dispatcher(this);e.menu_container=e.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(f.hideMenu,f);f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(f,e){this.parent(f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,"class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}i+="<td>"+b.createHTML("a",{id:f.id+"_action",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]});i+="<td>"+b.createHTML("a",{id:f.id+"_open",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";return b.createHTML("table",{id:f.id,"class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",onmousedown:"return false;",title:g.title},i)},postRender:function(){var e=this,f=e.settings;if(f.onclick){a.add(e.id+"_action","click",function(){if(!e.isDisabled()){f.onclick(e.value)}})}a.add(e.id+"_open","click",e.showMenu,e);a.add(e.id+"_open","focus",function(){e._focused=1});a.add(e.id+"_open","blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(h,g){var f=this;f.parent(h,g);f.settings=g=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},f.settings);f.onShowMenu=new d.util.Dispatcher(f);f.onHideMenu=new d.util.Dispatcher(f);f.value=g.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.isMenuVisible=1},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.onHideMenu.dispatch(f);f.isMenuVisible=0},renderMenu:function(){var k=this,f,j=0,l=k.settings,p,h,o,g;g=c.add(l.menu_container,"div",{id:k.id+"_menu","class":l.menu_class+" "+l["class"],style:"position:absolute;left:0;top:-1000px;"});f=c.add(g,"div",{"class":l["class"]+" mceSplitButtonMenu"});c.add(f,"span",{"class":"mceMenuLine"});p=c.add(f,"table",{"class":"mceColorSplitMenu"});h=c.add(p,"tbody");j=0;e(b(l.colors,"array")?l.colors:l.colors.split(","),function(i){i=i.replace(/^#/,"");if(!j--){o=c.add(h,"tr");j=l.grid_width-1}p=c.add(o,"td");p=c.add(p,"a",{href:"javascript:;",style:{backgroundColor:"#"+i},_mce_color:"#"+i})});if(l.more_colors_func){p=c.add(h,"tr");p=c.add(p,"td",{colspan:l.grid_width,"class":"mceMoreColors"});p=c.add(p,"a",{id:k.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},l.more_colors_title);a.add(p,"click",function(i){l.more_colors_func.call(l.more_colors_scope||this);return a.cancel(i)})}c.addClass(f,"mceColorSplitMenu");a.add(k.id+"_menu","click",function(i){var m;i=i.target;if(i.nodeName=="A"&&(m=i.getAttribute("_mce_color"))){k.setColor(m)}return a.cancel(i)});return g},setColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g;f.hideMenu();f.settings.onselect(g)},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);tinymce.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var l=this,e="",g,j,b=tinymce.DOM,m=l.settings,d,a,f,k;k=l.controls;for(d=0;d<k.length;d++){j=k[d];a=k[d-1];f=k[d+1];if(d===0){g="mceToolbarStart";if(j.Button){g+=" mceToolbarStartButton"}else{if(j.SplitButton){g+=" mceToolbarStartSplitButton"}else{if(j.ListBox){g+=" mceToolbarStartListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,"<!-- IE -->"))}if(a&&j.ListBox){if(a.Button||a.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarEnd"},b.createHTML("span",null,"<!-- IE -->"))}}if(b.stdMode){e+='<td style="position: relative">'+j.renderHTML()+"</td>"}else{e+="<td>"+j.renderHTML()+"</td>"}if(f&&j.ListBox){if(f.Button||f.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarStart"},b.createHTML("span",null,"<!-- IE -->"))}}}g="mceToolbarEnd";if(j.Button){g+=" mceToolbarEndButton"}else{if(j.SplitButton){g+=" mceToolbarEndSplitButton"}else{if(j.ListBox){g+=" mceToolbarEndListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,"<!-- IE -->"));return b.createHTML("table",{id:l.id,"class":"mceToolbar"+(m["class"]?" "+m["class"]:""),cellpadding:"0",cellspacing:"0",align:l.settings.align||""},"<tbody><tr>"+e+"</tr></tbody>")}});(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){return this.lookup[d]},requireLangPack:function(e){var d=b.settings;if(d&&d.language){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(e,d){this.items.push(d);this.lookup[e]=d;this.onAdd.dispatch(this,e,d);return d},load:function(h,e,d,g){var f=this;if(f.urls[h]){return}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}f.urls[h]=e.substring(0,e.lastIndexOf("/"));if(!f.lookup[h]){b.ScriptLoader.add(e,d,g)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE){function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(m){var n=m.DOM,j=m.dom.Event,f=m.extend,k=m.util.Dispatcher,i=m.each,a=m.isGecko,b=m.isIE,e=m.isWebKit,d=m.is,h=m.ThemeManager,c=m.PluginManager,o=m.inArray,l=m.grep,g=m.explode;m.create("tinymce.Editor",{Editor:function(r,q){var p=this;p.id=p.editorId=r;p.execCommands={};p.queryStateCommands={};p.queryValueCommands={};p.isNotDirty=false;p.plugins={};i(["onPreInit","onBeforeRenderUI","onPostRender","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState"],function(s){p[s]=new k(p)});p.settings=q=f({id:r,language:"en",docs_language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:m.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:m.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",valid_elements:"@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p,-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote[cite],-table[border|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value|tabindex|accesskey],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big",hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:"30px",keep_styles:1,fix_table_elements:1,inline_styles:1,convert_fonts_to_spans:true},q);p.documentBaseURI=new m.util.URI(q.document_base_url||m.documentBaseURL,{base_uri:tinyMCE.baseURI});p.baseURI=m.baseURI;p.execCallback("setup",p)},render:function(r){var u=this,v=u.settings,x=u.id,p=m.ScriptLoader;if(!j.domLoaded){j.add(document,"init",function(){u.render()});return}tinyMCE.settings=v;if(!u.getElement()){return}if(m.isIDevice){return}if(!/TEXTAREA|INPUT/i.test(u.getElement().nodeName)&&v.hidden_input&&n.getParent(x,"form")){n.insertAfter(n.create("input",{type:"hidden",name:x}),x)}if(m.WindowManager){u.windowManager=new m.WindowManager(u)}if(v.encoding=="xml"){u.onGetContent.add(function(s,t){if(t.save){t.content=n.encode(t.content)}})}if(v.add_form_submit_trigger){u.onSubmit.addToTop(function(){if(u.initialized){u.save();u.isNotDirty=1}})}if(v.add_unload_trigger){u._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(u.initialized&&!u.destroyed&&!u.isHidden()){u.save({format:"raw",no_events:true})}})}m.addUnload(u.destroy,u);if(v.submit_patch){u.onBeforeRenderUI.add(function(){var s=u.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){u.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){m.triggerSave();u.isNotDirty=1;return u.formElement._mceOldSubmit(u.formElement)}}s=null})}function q(){if(v.language){p.add(m.baseURL+"/langs/"+v.language+".js")}if(v.theme&&v.theme.charAt(0)!="-"&&!h.urls[v.theme]){h.load(v.theme,"themes/"+v.theme+"/editor_template"+m.suffix+".js")}i(g(v.plugins),function(s){if(s&&s.charAt(0)!="-"&&!c.urls[s]){if(s=="safari"){return}c.load(s,"plugins/"+s+"/editor_plugin"+m.suffix+".js")}});p.loadQueue(function(){if(!u.removed){u.init()}})}q()},init:function(){var r,E=this,F=E.settings,B,y,A=E.getElement(),q,p,C,x,z,D;m.add(E);if(F.theme){F.theme=F.theme.replace(/-/,"");q=h.get(F.theme);E.theme=new q();if(E.theme.init&&F.init_theme){E.theme.init(E,h.urls[F.theme]||m.documentBaseURL.replace(/\/$/,""))}}i(g(F.plugins.replace(/\-/g,"")),function(G){var H=c.get(G),t=c.urls[G]||m.documentBaseURL.replace(/\/$/,""),s;if(H){s=new H(E,t);E.plugins[G]=s;if(s.init){s.init(E,t)}}});if(F.popup_css!==false){if(F.popup_css){F.popup_css=E.documentBaseURI.toAbsolute(F.popup_css)}else{F.popup_css=E.baseURI.toAbsolute("themes/"+F.theme+"/skins/"+F.skin+"/dialog.css")}}if(F.popup_css_add){F.popup_css+=","+E.documentBaseURI.toAbsolute(F.popup_css_add)}E.controlManager=new m.ControlManager(E);if(F.custom_undo_redo){E.onBeforeExecCommand.add(function(t,G,u,H,s){if(G!="Undo"&&G!="Redo"&&G!="mceRepaint"&&(!s||!s.skip_undo)){if(!E.undoManager.hasUndo()){E.undoManager.add()}}});E.onExecCommand.add(function(t,G,u,H,s){if(G!="Undo"&&G!="Redo"&&G!="mceRepaint"&&(!s||!s.skip_undo)){E.undoManager.add()}})}E.onExecCommand.add(function(s,t){if(!/^(FontName|FontSize)$/.test(t)){E.nodeChanged()}});if(a){function v(s,t){if(!t||!t.initial){E.execCommand("mceRepaint")}}E.onUndo.add(v);E.onRedo.add(v);E.onSetContent.add(v)}E.onBeforeRenderUI.dispatch(E,E.controlManager);if(F.render_ui){B=F.width||A.style.width||A.offsetWidth;y=F.height||A.style.height||A.offsetHeight;E.orgDisplay=A.style.display;D=/^[0-9\.]+(|px)$/i;if(D.test(""+B)){B=Math.max(parseInt(B)+(q.deltaWidth||0),100)}if(D.test(""+y)){y=Math.max(parseInt(y)+(q.deltaHeight||0),100)}q=E.theme.renderUI({targetNode:A,width:B,height:y,deltaWidth:F.delta_width,deltaHeight:F.delta_height});E.editorContainer=q.editorContainer}if(document.domain&&location.hostname!=document.domain){m.relaxedDomain=document.domain}n.setStyles(q.sizeContainer||q.editorContainer,{width:B,height:y});y=(q.iframeHeight||y)+(typeof(y)=="number"?(q.deltaHeight||0):"");if(y<100){y=100}E.iframeHTML=F.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(F.document_base_url!=m.documentBaseURL){E.iframeHTML+='<base href="'+E.documentBaseURI.getURI()+'" />'}E.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(m.relaxedDomain){E.iframeHTML+='<script type="text/javascript">document.domain = "'+m.relaxedDomain+'";<\/script>'}x=F.body_id||"tinymce";if(x.indexOf("=")!=-1){x=E.getParam("body_id","","hash");x=x[E.id]||x}z=F.body_class||"";if(z.indexOf("=")!=-1){z=E.getParam("body_class","","hash");z=z[E.id]||""}E.iframeHTML+='</head><body id="'+x+'" class="mceContentBody '+z+'"></body></html>';if(m.relaxedDomain){if(b||(m.isOpera&&parseFloat(opera.version())>=9.5)){C='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+E.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'}else{if(m.isOpera){C='javascript:(function(){document.open();document.domain="'+document.domain+'";document.close();ed.setupIframe();})()'}}}r=n.add(q.iframeContainer,"iframe",{id:E.id+"_ifr",src:C||'javascript:""',frameBorder:"0",style:{width:"100%",height:y}});E.contentAreaContainer=q.iframeContainer;n.get(q.editorContainer).style.display=E.orgDisplay;n.get(E.id).style.display="none";if(!b||!m.relaxedDomain){E.setupIframe()}A=r=q=null},setupIframe:function(){var z=this,A=z.settings,r=n.get(z.id),u=z.getDoc(),q,x;if(!b||!m.relaxedDomain){u.open();u.write(z.iframeHTML);u.close()}if(!b){try{if(!A.readonly){u.designMode="On"}}catch(v){}}if(b){x=z.getBody();n.hide(x);if(!A.readonly){x.contentEditable=true}n.show(x)}z.dom=new m.dom.DOMUtils(z.getDoc(),{keep_values:true,url_converter:z.convertURL,url_converter_scope:z,hex_colors:A.force_hex_style_colors,class_filter:A.class_filter,update_styles:1,fix_ie_paragraphs:1,valid_styles:A.valid_styles});z.schema=new m.dom.Schema();z.serializer=new m.dom.Serializer(f(A,{valid_elements:A.verify_html===false?"*[*]":A.valid_elements,dom:z.dom,schema:z.schema}));z.selection=new m.dom.Selection(z.dom,z.getWin(),z.serializer);z.formatter=new m.Formatter(this);z.formatter.register({alignleft:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"}},{selector:"img,table",styles:{"float":"left"}}],aligncenter:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"}},{selector:"img",styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"right"}},{selector:"img,table",styles:{"float":"right"}}],alignfull:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"}}],bold:[{inline:"strong"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b"}],italic:[{inline:"em"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"u"}],forecolor:{inline:"span",styles:{color:"%value"}},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"}},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},removeformat:[{selector:"b,strong,em,i,font,u,strike",remove:"all",split:true,expand:false,block_expand:true,deep:true},{selector:"span",attributes:["style","class"],remove:"empty",split:true,expand:false,deep:true},{selector:"*",attributes:["style","class"],split:false,expand:false,deep:true}]});i("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(s){z.formatter.register(s,{block:s,remove:"all"})});z.formatter.register(z.settings.formats);z.undoManager=new m.UndoManager(z);z.undoManager.onAdd.add(function(t,s){if(!s.initial){return z.onChange.dispatch(z,s,t)}});z.undoManager.onUndo.add(function(t,s){return z.onUndo.dispatch(z,s,t)});z.undoManager.onRedo.add(function(t,s){return z.onRedo.dispatch(z,s,t)});z.forceBlocks=new m.ForceBlocks(z,{forced_root_block:A.forced_root_block});z.editorCommands=new m.EditorCommands(z);z.serializer.onPreProcess.add(function(s,t){return z.onPreProcess.dispatch(z,t,s)});z.serializer.onPostProcess.add(function(s,t){return z.onPostProcess.dispatch(z,t,s)});z.onPreInit.dispatch(z);if(!A.gecko_spellcheck){z.getBody().spellcheck=0}if(!A.readonly){z._addEvents()}z.controlManager.onPostRender.dispatch(z,z.controlManager);z.onPostRender.dispatch(z);if(A.directionality){z.getBody().dir=A.directionality}if(A.nowrap){z.getBody().style.whiteSpace="nowrap"}if(A.custom_elements){function y(s,t){i(g(A.custom_elements),function(B){var C;if(B.indexOf("~")===0){B=B.substring(1);C="span"}else{C="div"}t.content=t.content.replace(new RegExp("<("+B+")([^>]*)>","g"),"<"+C+' _mce_name="$1"$2>');t.content=t.content.replace(new RegExp("</("+B+")>","g"),"</"+C+">")})}z.onBeforeSetContent.add(y);z.onPostProcess.add(function(s,t){if(t.set){y(s,t)}})}if(A.handle_node_change_callback){z.onNodeChange.add(function(t,s,B){z.execCallback("handle_node_change_callback",z.id,B,-1,-1,true,z.selection.isCollapsed())})}if(A.save_callback){z.onSaveContent.add(function(s,B){var t=z.execCallback("save_callback",z.id,B.content,z.getBody());if(t){B.content=t}})}if(A.onchange_callback){z.onChange.add(function(t,s){z.execCallback("onchange_callback",z,s)})}if(A.convert_newlines_to_brs){z.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"<br />")}})}if(A.fix_nesting&&b){z.onBeforeSetContent.add(function(s,t){t.content=z._fixNesting(t.content)})}if(A.preformatted){z.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*<pre.*?>/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='<pre class="mceItemHidden">'+t.content+"</pre>"}})}if(A.verify_css_classes){z.serializer.attribValueFilter=function(D,B){var C,t;if(D=="class"){if(!z.classesRE){t=z.dom.getClasses();if(t.length>0){C="";i(t,function(s){C+=(C?"|":"")+s["class"]});z.classesRE=new RegExp("("+C+")","gi")}}return !z.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(B)||z.classesRE.test(B)?B:""}return B}}if(A.cleanup_callback){z.onBeforeSetContent.add(function(s,t){t.content=z.execCallback("cleanup_callback","insert_to_editor",t.content,t)});z.onPreProcess.add(function(s,t){if(t.set){z.execCallback("cleanup_callback","insert_to_editor_dom",t.node,t)}if(t.get){z.execCallback("cleanup_callback","get_from_editor_dom",t.node,t)}});z.onPostProcess.add(function(s,t){if(t.set){t.content=z.execCallback("cleanup_callback","insert_to_editor",t.content,t)}if(t.get){t.content=z.execCallback("cleanup_callback","get_from_editor",t.content,t)}})}if(A.save_callback){z.onGetContent.add(function(s,t){if(t.save){t.content=z.execCallback("save_callback",z.id,t.content,z.getBody())}})}if(A.handle_event_callback){z.onEvent.add(function(s,t,B){if(z.execCallback("handle_event_callback",t,s,B)===false){j.cancel(t)}})}z.onSetContent.add(function(){z.addVisual(z.getBody())});if(A.padd_empty_editor){z.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>( | |\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}if(a){function p(s,t){i(s.dom.select("a"),function(C){var B=C.parentNode;if(s.dom.isBlock(B)&&B.lastChild===C){s.dom.add(B,"br",{_mce_bogus:1})}})}z.onExecCommand.add(function(s,t){if(t==="CreateLink"){p(s)}});z.onSetContent.add(z.selection.onSetContent.add(p));if(!A.readonly){try{u.designMode="Off";u.designMode="On"}catch(v){}}}setTimeout(function(){if(z.removed){return}z.load({initial:true,format:(A.cleanup_on_startup?"html":"raw")});z.startContent=z.getContent({format:"raw"});z.initialized=true;z.onInit.dispatch(z);z.execCallback("setupcontent_callback",z.id,z.getBody(),z.getDoc());z.execCallback("init_instance_callback",z);z.focus(true);z.nodeChanged({initial:1});if(A.content_css){m.each(g(A.content_css),function(s){z.dom.loadCSS(z.documentBaseURI.toAbsolute(s))})}if(A.auto_focus){setTimeout(function(){var s=m.get(A.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getWin().focus()},100)}},1);r=null},focus:function(s){var x,q=this,v=q.settings.content_editable,r,p,u=q.getDoc();if(!s){r=q.selection.getRng();if(r.item){p=r.item(0)}if(!v){q.getWin().focus()}if(p&&p.ownerDocument==u){r=u.body.createControlRange();r.addElement(p);r.select()}}if(m.activeEditor!=q){if((x=m.activeEditor)!=null){x.onDeactivate.dispatch(x,q)}q.onActivate.dispatch(q,x)}m._setActive(q)},execCallback:function(u){var p=this,r=p.settings[u],q;if(!r){return}if(p.callbackLookup&&(q=p.callbackLookup[u])){r=q.func;q=q.scope}if(d(r,"string")){q=r.replace(/\.\w+$/,"");q=q?m.resolve(q):0;r=m.resolve(r);p.callbackLookup=p.callbackLookup||{};p.callbackLookup[u]={func:r,scope:q}}return r.apply(q||p,Array.prototype.slice.call(arguments,1))},translate:function(p){var r=this.settings.language||"en",q=m.i18n;if(!p){return""}return q[r+"."+p]||p.replace(/{\#([^}]+)\}/g,function(t,s){return q[r+"."+s]||"{#"+s+"}"})},getLang:function(q,p){return m.i18n[(this.settings.language||"en")+"."+q]||(d(p)?p:"{#"+q+"}")},getParam:function(u,r,p){var s=m.trim,q=d(this.settings[u])?this.settings[u]:r,t;if(p==="hash"){t={};if(d(q,"string")){i(q.indexOf("=")>0?q.split(/[;,](?![^=;,]*(?:[;,]|$))/):q.split(","),function(x){x=x.split("=");if(x.length>1){t[s(x[0])]=s(x[1])}else{t[s(x[0])]=s(x)}})}else{t=q}return t}return q},nodeChanged:function(r){var p=this,q=p.selection,u=(b?q.getNode():q.getStart())||p.getBody();if(p.initialized){r=r||{};u=b&&u.ownerDocument!=p.getDoc()?p.getBody():u;r.parents=[];p.dom.getParent(u,function(s){if(s.nodeName=="BODY"){return true}r.parents.push(s)});p.onNodeChange.dispatch(p,r?r.controlManager||p.controlManager:p.controlManager,u,q.isCollapsed(),r)}},addButton:function(r,q){var p=this;p.buttons=p.buttons||{};p.buttons[r]=q},addCommand:function(r,q,p){this.execCommands[r]={func:q,scope:p||this}},addQueryStateHandler:function(r,q,p){this.queryStateCommands[r]={func:q,scope:p||this}},addQueryValueHandler:function(r,q,p){this.queryValueCommands[r]={func:q,scope:p||this}},addShortcut:function(r,u,p,s){var q=this,v;if(!q.settings.custom_shortcuts){return false}q.shortcuts=q.shortcuts||{};if(d(p,"string")){v=p;p=function(){q.execCommand(v,false,null)}}if(d(p,"object")){v=p;p=function(){q.execCommand(v[0],v[1],v[2])}}i(g(r),function(t){var x={func:p,scope:s||this,desc:u,alt:false,ctrl:false,shift:false};i(g(t,"+"),function(y){switch(y){case"alt":case"ctrl":case"shift":x[y]=true;break;default:x.charCode=y.charCodeAt(0);x.keyCode=y.toUpperCase().charCodeAt(0)}});q.shortcuts[(x.ctrl?"ctrl":"")+","+(x.alt?"alt":"")+","+(x.shift?"shift":"")+","+x.keyCode]=x});return true},execCommand:function(x,v,z,p){var r=this,u=0,y,q;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(x)&&(!p||!p.skip_focus)){r.focus()}y={};r.onBeforeExecCommand.dispatch(r,x,v,z,y);if(y.terminate){return false}if(r.execCallback("execcommand_callback",r.id,r.selection.getNode(),x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}if(y=r.execCommands[x]){q=y.func.call(y.scope,v,z);if(q!==true){r.onExecCommand.dispatch(r,x,v,z,p);return q}}i(r.plugins,function(s){if(s.execCommand&&s.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);u=1;return false}});if(u){return true}if(r.theme&&r.theme.execCommand&&r.theme.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}if(m.GlobalCommands.execCommand(r,x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}if(r.editorCommands.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}r.getDoc().execCommand(x,v,z);r.onExecCommand.dispatch(r,x,v,z,p)},queryCommandState:function(u){var q=this,v,r;if(q._isHidden()){return}if(v=q.queryStateCommands[u]){r=v.func.call(v.scope);if(r!==true){return r}}v=q.editorCommands.queryCommandState(u);if(v!==-1){return v}try{return this.getDoc().queryCommandState(u)}catch(p){}},queryCommandValue:function(v){var q=this,u,r;if(q._isHidden()){return}if(u=q.queryValueCommands[v]){r=u.func.call(u.scope);if(r!==true){return r}}u=q.editorCommands.queryCommandValue(v);if(d(u)){return u}try{return this.getDoc().queryCommandValue(v)}catch(p){}},show:function(){var p=this;n.show(p.getContainer());n.hide(p.id);p.load()},hide:function(){var p=this,q=p.getDoc();if(b&&q){q.execCommand("SelectAll")}p.save();n.hide(p.getContainer());n.setStyle(p.id,"display",p.orgDisplay)},isHidden:function(){return !n.isHidden(this.id)},setProgressState:function(p,q,r){this.onSetProgressState.dispatch(this,p,q,r);return p},load:function(s){var p=this,r=p.getElement(),q;if(r){s=s||{};s.load=true;q=p.setContent(d(r.value)?r.value:r.innerHTML,s);s.element=r;if(!s.no_events){p.onLoadContent.dispatch(p,s)}s.element=r=null;return q}},save:function(u){var p=this,s=p.getElement(),q,r;if(!s||!p.initialized){return}u=u||{};u.save=true;if(!u.no_events){p.undoManager.typing=0;p.undoManager.add()}u.element=s;q=u.content=p.getContent(u);if(!u.no_events){p.onSaveContent.dispatch(p,u)}q=u.content;if(!/TEXTAREA|INPUT/i.test(s.nodeName)){s.innerHTML=q;if(r=n.getParent(p.id,"form")){i(r.elements,function(t){if(t.name==p.id){t.value=q;return false}})}}else{s.value=q}u.element=s=null;return q},setContent:function(q,r){var p=this;r=r||{};r.format=r.format||"html";r.set=true;r.content=q;if(!r.no_events){p.onBeforeSetContent.dispatch(p,r)}if(!m.isIE&&(q.length===0||/^\s+$/.test(q))){r.content=p.dom.setHTML(p.getBody(),'<br _mce_bogus="1" />');r.format="raw"}r.content=p.dom.setHTML(p.getBody(),m.trim(r.content));if(r.format!="raw"&&p.settings.cleanup){r.getInner=true;r.content=p.dom.setHTML(p.getBody(),p.serializer.serialize(p.getBody(),r))}if(!r.no_events){p.onSetContent.dispatch(p,r)}return r.content},getContent:function(r){var p=this,q;r=r||{};r.format=r.format||"html";r.get=true;if(!r.no_events){p.onBeforeGetContent.dispatch(p,r)}if(r.format!="raw"&&p.settings.cleanup){r.getInner=true;q=p.serializer.serialize(p.getBody(),r)}else{q=p.getBody().innerHTML}q=q.replace(/^\s*|\s*$/g,"");r.content=q;if(!r.no_events){p.onGetContent.dispatch(p,r)}return r.content},isDirty:function(){var p=this;return m.trim(p.startContent)!=m.trim(p.getContent({format:"raw",no_events:1}))&&!p.isNotDirty},getContainer:function(){var p=this;if(!p.container){p.container=n.get(p.editorContainer||p.id+"_parent")}return p.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return n.get(this.settings.content_element||this.id)},getWin:function(){var p=this,q;if(!p.contentWindow){q=n.get(p.id+"_ifr");if(q){p.contentWindow=q.contentWindow}}return p.contentWindow},getDoc:function(){var q=this,p;if(!q.contentDocument){p=q.getWin();if(p){q.contentDocument=p.document}}return q.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(p,x,v){var q=this,r=q.settings;if(r.urlconverter_callback){return q.execCallback("urlconverter_callback",p,v,true,x)}if(!r.convert_urls||(v&&v.nodeName=="LINK")||p.indexOf("file:")===0){return p}if(r.relative_urls){return q.documentBaseURI.toRelative(p)}p=q.documentBaseURI.toAbsolute(p,r.remove_script_host);return p},addVisual:function(r){var p=this,q=p.settings;r=r||p.getBody();if(!d(p.hasVisual)){p.hasVisual=q.visual}i(p.dom.select("table,a",r),function(t){var s;switch(t.nodeName){case"TABLE":s=p.dom.getAttrib(t,"border");if(!s||s=="0"){if(p.hasVisual){p.dom.addClass(t,q.visual_table_class)}else{p.dom.removeClass(t,q.visual_table_class)}}return;case"A":s=p.dom.getAttrib(t,"name");if(s){if(p.hasVisual){p.dom.addClass(t,"mceItemAnchor")}else{p.dom.removeClass(t,"mceItemAnchor")}}return}});p.onVisualAid.dispatch(p,r,p.hasVisual)},remove:function(){var p=this,q=p.getContainer();p.removed=1;p.hide();p.execCallback("remove_instance_callback",p);p.onRemove.dispatch(p);p.onExecCommand.listeners=[];m.remove(p);n.remove(q)},destroy:function(q){var p=this;if(p.destroyed){return}if(!q){m.removeUnload(p.destroy);tinyMCE.onBeforeUnload.remove(p._beforeUnload);if(p.theme&&p.theme.destroy){p.theme.destroy()}p.controlManager.destroy();p.selection.destroy();p.dom.destroy();if(!p.settings.content_editable){j.clear(p.getWin());j.clear(p.getDoc())}j.clear(p.getBody());j.clear(p.formElement)}if(p.formElement){p.formElement.submit=p.formElement._mceOldSubmit;p.formElement._mceOldSubmit=null}p.contentAreaContainer=p.formElement=p.container=p.settings.content_element=p.bodyElement=p.contentDocument=p.contentWindow=null;if(p.selection){p.selection=p.selection.win=p.selection.dom=p.selection.dom.doc=null}p.destroyed=1},_addEvents:function(){var z=this,r,A=z.settings,q=z.dom,x={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function p(t,B){var s=t.type;if(z.removed){return}if(z.onEvent.dispatch(z,t,B)!==false){z[x[t.fakeType||t.type]].dispatch(z,t,B)}}i(x,function(t,s){switch(s){case"contextmenu":if(m.isOpera){q.bind(z.getBody(),"mousedown",function(B){if(B.ctrlKey){B.fakeType="contextmenu";p(B)}})}else{q.bind(z.getBody(),s,p)}break;case"paste":q.bind(z.getBody(),s,function(B){p(B)});break;case"submit":case"reset":q.bind(z.getElement().form||n.getParent(z.id,"form"),s,p);break;default:q.bind(A.content_editable?z.getBody():z.getDoc(),s,p)}});q.bind(A.content_editable?z.getBody():(a?z.getDoc():z.getWin()),"focus",function(s){z.focus(true)});if(m.isGecko){q.bind(z.getDoc(),"DOMNodeInserted",function(t){var s;t=t.target;if(t.nodeType===1&&t.nodeName==="IMG"&&(s=t.getAttribute("_mce_src"))){t.src=z.documentBaseURI.toAbsolute(s)}})}if(a){function u(){var C=this,E=C.getDoc(),D=C.settings;if(a&&!D.readonly){if(C._isHidden()){try{if(!D.content_editable){E.designMode="On"}}catch(B){}}try{E.execCommand("styleWithCSS",0,false)}catch(B){if(!C._isHidden()){try{E.execCommand("useCSS",0,true)}catch(B){}}}if(!D.table_inline_editing){try{E.execCommand("enableInlineTableEditing",false,false)}catch(B){}}if(!D.object_resizing){try{E.execCommand("enableObjectResizing",false,false)}catch(B){}}}}z.onBeforeExecCommand.add(u);z.onMouseDown.add(u)}if(m.isWebKit){z.onClick.add(function(s,t){t=t.target;if(t.nodeName=="IMG"||(t.nodeName=="A"&&q.hasClass(t,"mceItemAnchor"))){z.selection.getSel().setBaseAndExtent(t,0,t,1);z.nodeChanged()}})}z.onMouseUp.add(z.nodeChanged);z.onKeyUp.add(function(s,t){var B=t.keyCode;if((B>=33&&B<=36)||(B>=37&&B<=40)||B==13||B==45||B==46||B==8||(m.isMac&&(B==91||B==93))||t.ctrlKey){z.nodeChanged()}});z.onReset.add(function(){z.setContent(z.startContent,{format:"raw"})});if(A.custom_shortcuts){if(A.custom_undo_redo_keyboard_shortcuts){z.addShortcut("ctrl+z",z.getLang("undo_desc"),"Undo");z.addShortcut("ctrl+y",z.getLang("redo_desc"),"Redo")}z.addShortcut("ctrl+b",z.getLang("bold_desc"),"Bold");z.addShortcut("ctrl+i",z.getLang("italic_desc"),"Italic");z.addShortcut("ctrl+u",z.getLang("underline_desc"),"Underline");for(r=1;r<=6;r++){z.addShortcut("ctrl+"+r,"",["FormatBlock",false,"h"+r])}z.addShortcut("ctrl+7","",["FormatBlock",false,"<p>"]);z.addShortcut("ctrl+8","",["FormatBlock",false,"<div>"]);z.addShortcut("ctrl+9","",["FormatBlock",false,"<address>"]);function v(t){var s=null;if(!t.altKey&&!t.ctrlKey&&!t.metaKey){return s}i(z.shortcuts,function(B){if(m.isMac&&B.ctrl!=t.metaKey){return}else{if(!m.isMac&&B.ctrl!=t.ctrlKey){return}}if(B.alt!=t.altKey){return}if(B.shift!=t.shiftKey){return}if(t.keyCode==B.keyCode||(t.charCode&&t.charCode==B.charCode)){s=B;return false}});return s}z.onKeyUp.add(function(s,t){var B=v(t);if(B){return j.cancel(t)}});z.onKeyPress.add(function(s,t){var B=v(t);if(B){return j.cancel(t)}});z.onKeyDown.add(function(s,t){var B=v(t);if(B){B.func.call(B.scope);return j.cancel(t)}})}if(m.isIE){q.bind(z.getDoc(),"controlselect",function(B){var t=z.resizeInfo,s;B=B.target;if(B.nodeName!=="IMG"){return}if(t){q.unbind(t.node,t.ev,t.cb)}if(!q.hasClass(B,"mceItemNoResize")){ev="resizeend";s=q.bind(B,ev,function(D){var C;D=D.target;if(C=q.getStyle(D,"width")){q.setAttrib(D,"width",C.replace(/[^0-9%]+/g,""));q.setStyle(D,"width","")}if(C=q.getStyle(D,"height")){q.setAttrib(D,"height",C.replace(/[^0-9%]+/g,""));q.setStyle(D,"height","")}})}else{ev="resizestart";s=q.bind(B,"resizestart",j.cancel,j)}t=z.resizeInfo={node:B,ev:ev,cb:s}});z.onKeyDown.add(function(s,t){switch(t.keyCode){case 8:if(z.selection.getRng().item){s.dom.remove(z.selection.getRng().item(0));return j.cancel(t)}}})}if(m.isOpera){z.onClick.add(function(s,t){j.prevent(t)})}if(A.custom_undo_redo){function y(){z.undoManager.typing=0;z.undoManager.add()}q.bind(z.getDoc(),"focusout",function(s){if(!z.removed&&z.undoManager.typing){y()}});z.onKeyUp.add(function(s,t){if((t.keyCode>=33&&t.keyCode<=36)||(t.keyCode>=37&&t.keyCode<=40)||t.keyCode==13||t.keyCode==45||t.ctrlKey){y()}});z.onKeyDown.add(function(t,E){var s,D,C;if(b&&E.keyCode==46){s=z.selection.getRng();if(s.parentElement){D=s.parentElement();if(E.ctrlKey){s.moveEnd("word",1);s.select()}z.selection.getSel().clear();if(s.parentElement()==D){C=z.selection.getBookmark();try{D.innerHTML=D.innerHTML}catch(B){}z.selection.moveToBookmark(C)}E.preventDefault();return}}if((E.keyCode>=33&&E.keyCode<=36)||(E.keyCode>=37&&E.keyCode<=40)||E.keyCode==13||E.keyCode==45){if(z.undoManager.typing){y()}return}if(!z.undoManager.typing){z.undoManager.add();z.undoManager.typing=1}});z.onMouseDown.add(function(){if(z.undoManager.typing){y()}})}},_isHidden:function(){var p;if(!a){return 0}p=this.selection.getSel();return(!p||!p.rangeCount||p.rangeCount==0)},_fixNesting:function(q){var r=[],p;q=q.replace(/<(\/)?([^\s>]+)[^>]*?>/g,function(t,s,v){var u;if(s==="/"){if(!r.length){return""}if(v!==r[r.length-1].tag){for(p=r.length-1;p>=0;p--){if(r[p].tag===v){r[p].close=1;break}}return""}else{r.pop();if(r.length&&r[r.length-1].close){t=t+"</"+r[r.length-1].tag+">";r.pop()}}}else{if(/^(br|hr|input|meta|img|link|param)$/i.test(v)){return t}if(/\/>$/.test(t)){return t}r.push({tag:v})}return t});for(p=r.length-1;p>=0;p--){q+="</"+r[p].tag+">"}return q}})})(tinymce);(function(c){var d=c.each,e,a=true,b=false;c.EditorCommands=function(n){var l=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,o;function q(y,x,v){var u;y=y.toLowerCase();if(u=j.exec[y]){u(y,x,v);return a}return b}function m(v){var u;v=v.toLowerCase();if(u=j.state[v]){return u(v)}return -1}function h(v){var u;v=v.toLowerCase();if(u=j.value[v]){return u(v)}return b}function t(u,v){v=v||"exec";d(u,function(y,x){d(x.toLowerCase().split(","),function(z){j[v][z]=y})})}c.extend(this,{execCommand:q,queryCommandState:m,queryCommandValue:h,addCommands:t});function f(x,v,u){if(v===e){v=b}if(u===e){u=null}return n.getDoc().execCommand(x,v,u)}function s(u){return n.formatter.match(u)}function r(u,v){n.formatter.toggle(u,v?{value:v}:e)}function i(u){o=p.getBookmark(u)}function g(){p.moveToBookmark(o)}t({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(y){var x=n.getDoc(),u;try{f(y)}catch(v){u=a}if(u||!x.queryCommandSupported(y)){if(c.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(z){if(z){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(u){if(p.isCollapsed()){p.select(p.getNode())}f(u);p.collapse(b)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(u){var v=u.substring(7);d("left,center,right,full".split(","),function(x){if(v!=x){n.formatter.remove("align"+x)}});r("align"+v)},"InsertUnorderedList,InsertOrderedList":function(x){var u,v;f(x);u=l.getParent(p.getNode(),"ol,ul");if(u){v=u.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(v.nodeName)){i();l.split(v,u);g()}}},"Bold,Italic,Underline,Strikethrough":function(u){r(u)},"ForeColor,HiliteColor,FontName":function(x,v,u){r(x,u)},FontSize:function(y,x,v){var u,z;if(v>=1&&v<=7){z=c.explode(k.font_size_style_values);u=c.explode(k.font_size_classes);if(u){v=u[v-1]||v}else{v=z[v-1]||v}}r(y,v)},RemoveFormat:function(u){n.formatter.remove(u)},mceBlockQuote:function(u){r("blockquote")},FormatBlock:function(x,v,u){return r(u||"p")},mceCleanup:function(){var u=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(u)},mceRemoveNode:function(y,x,v){var u=v||p.getNode();if(u!=n.getBody()){i();n.dom.remove(u,a);g()}},mceSelectNodeDepth:function(y,x,v){var u=0;l.getParent(p.getNode(),function(z){if(z.nodeType==1&&u++==v){p.select(z);return b}},n.getBody())},mceSelectNode:function(x,v,u){p.select(u)},mceInsertContent:function(x,v,u){p.setContent(u)},mceInsertRawHTML:function(x,v,u){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return u}))},mceSetContent:function(x,v,u){n.setContent(u)},"Indent,Outdent":function(y){var v,u,x;v=k.indentation;u=/[a-z%]+$/i.exec(v);v=parseInt(v);if(!m("InsertUnorderedList")&&!m("InsertOrderedList")){d(p.getSelectedBlocks(),function(z){if(y=="outdent"){x=Math.max(0,parseInt(z.style.paddingLeft||0)-v);l.setStyle(z,"paddingLeft",x?x+u:"")}else{l.setStyle(z,"paddingLeft",(parseInt(z.style.paddingLeft||0)+v)+u)}})}else{f(y)}},mceRepaint:function(){var v;if(c.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(u){}}},mceToggleFormat:function(x,v,u){n.formatter.toggle(u)},InsertHorizontalRule:function(){p.setContent("<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(x,v,u){p.setContent(u.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(y,x,v){var u=l.getParent(p.getNode(),"a");if(c.is(v,"string")){v={href:v}}if(!u){f("CreateLink",b,"javascript:mctmp(0);");d(l.select("a[href=javascript:mctmp(0);]"),function(z){l.setAttribs(z,v)})}else{if(v.href){l.setAttribs(u,v)}else{n.dom.remove(u,a)}}},selectAll:function(){var v=l.getRoot(),u=l.createRng();u.setStart(v,0);u.setEnd(v,v.childNodes.length);n.selection.setRng(u)}});t({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(u){return s("align"+u.substring(7))},"Bold,Italic,Underline,Strikethrough":function(u){return s(u)},mceBlockQuote:function(){return s("blockquote")},Outdent:function(){var u;if(k.inline_styles){if((u=l.getParent(p.getStart(),l.isBlock))&&parseInt(u.style.paddingLeft)>0){return a}if((u=l.getParent(p.getEnd(),l.isBlock))&&parseInt(u.style.paddingLeft)>0){return a}}return m("InsertUnorderedList")||m("InsertOrderedList")||(!k.inline_styles&&!!l.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(u){return l.getParent(p.getNode(),u=="insertunorderedlist"?"UL":"OL")}},"state");t({"FontSize,FontName":function(x){var v=0,u;if(u=l.getParent(p.getNode(),"span")){if(x=="fontsize"){v=u.style.fontSize}else{v=u.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return v}},"value");if(k.custom_undo_redo){t({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(e){var c,d=0,g=[];function f(){return b.trim(e.getContent({format:"raw",no_events:1}))}return c={typing:0,onAdd:new a(c),onUndo:new a(c),onRedo:new a(c),add:function(l){var h,j=e.settings,k;l=l||{};l.content=f();k=g[d];if(k&&k.content==l.content){if(d>0||g.length==1){return null}}if(j.custom_undo_redo_levels){if(g.length>j.custom_undo_redo_levels){for(h=0;h<g.length-1;h++){g[h]=g[h+1]}g.length--;d=g.length}}l.bookmark=e.selection.getBookmark(2,true);if(d<g.length-1){if(d==0){g=[]}else{g.length=d+1}}g.push(l);d=g.length-1;c.onAdd.dispatch(c,l);e.isNotDirty=0;return l},undo:function(){var j,h;if(c.typing){c.add();c.typing=0}if(d>0){j=g[--d];e.setContent(j.content,{format:"raw"});e.selection.moveToBookmark(j.bookmark);c.onUndo.dispatch(c,j)}return j},redo:function(){var h;if(d<g.length-1){h=g[++d];e.setContent(h.content,{format:"raw"});e.selection.moveToBookmark(h.bookmark);c.onRedo.dispatch(c,h)}return h},clear:function(){g=[];d=c.typing=0},hasUndo:function(){return d>0||c.typing},hasRedo:function(){return d<g.length-1}}}})(tinymce);(function(m){var k=m.dom.Event,c=m.isIE,a=m.isGecko,b=m.isOpera,j=m.each,i=m.extend,d=true,h=false;function l(p){var q,o,n;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(p.nodeName)){if(q){o=p.cloneNode(false);o.appendChild(q);q=o}else{q=n=p.cloneNode(false)}q.removeAttribute("id")}}while(p=p.parentNode);if(q){return{wrapper:q,inner:n}}}function g(o,p){var n=p.ownerDocument.createRange();n.setStart(o.endContainer,o.endOffset);n.setEndAfter(p);return n.cloneContents().textContent.length==0}function f(o){o=o.innerHTML;o=o.replace(/<(img|hr|table|input|select|textarea)[ \>]/gi,"-");o=o.replace(/<[^>]+>/g,"");return o.replace(/[ \u00a0\t\r\n]+/g,"")==""}function e(p,r,n){var o,q;if(f(n)){o=r.getParent(n,"ul,ol");if(!r.getParent(o.parentNode,"ul,ol")){r.split(o,n);q=r.create("p",0,'<br _mce_bogus="1" />');r.replace(q,n);p.select(q,1)}return h}return d}m.create("tinymce.ForceBlocks",{ForceBlocks:function(o){var p=this,q=o.settings,r;p.editor=o;p.dom=o.dom;r=(q.forced_root_block||"p").toLowerCase();q.element=r.toUpperCase();o.onPreInit.add(p.setup,p);p.reOpera=new RegExp("(\\u00a0| | )</"+r+">","gi");p.rePadd=new RegExp("<p( )([^>]+)><\\/p>|<p( )([^>]+)\\/>|<p( )([^>]+)>\\s+<\\/p>|<p><\\/p>|<p\\/>|<p>\\s+<\\/p>".replace(/p/g,r),"gi");p.reNbsp2BR1=new RegExp("<p( )([^>]+)>[\\s\\u00a0]+<\\/p>|<p>[\\s\\u00a0]+<\\/p>".replace(/p/g,r),"gi");p.reNbsp2BR2=new RegExp("<%p()([^>]+)>( | )<\\/%p>|<%p>( | )<\\/%p>".replace(/%p/g,r),"gi");p.reBR2Nbsp=new RegExp("<p( )([^>]+)>\\s*<br \\/>\\s*<\\/p>|<p>\\s*<br \\/>\\s*<\\/p>".replace(/p/g,r),"gi");function n(s,t){if(b){t.content=t.content.replace(p.reOpera,"</"+r+">")}t.content=m._replace(p.rePadd,"<"+r+"$1$2$3$4$5$6>\u00a0</"+r+">",t.content);if(!c&&!b&&t.set){t.content=t.content.replace(p.reNbsp2BR1,"<"+r+"$1$2><br /></"+r+">");t.content=t.content.replace(p.reNbsp2BR2,"<"+r+"$1$2><br /></"+r+">")}else{t.content=m._replace(p.reBR2Nbsp,"<"+r+"$1$2>\u00a0</"+r+">",t.content)}}o.onBeforeSetContent.add(n);o.onPostProcess.add(n);if(q.forced_root_block){o.onInit.add(p.forceRoots,p);o.onSetContent.add(p.forceRoots,p);o.onBeforeGetContent.add(p.forceRoots,p)}},setup:function(){var o=this,n=o.editor,q=n.settings,u=n.dom,p=n.selection;if(q.forced_root_block){n.onBeforeExecCommand.add(o.forceRoots,o);n.onKeyUp.add(o.forceRoots,o);n.onPreProcess.add(o.forceRoots,o)}if(q.force_br_newlines){if(c){n.onKeyPress.add(function(s,t){var v;if(t.keyCode==13&&p.getNode().nodeName!="LI"){p.setContent('<br id="__" /> ',{format:"raw"});v=u.get("__");v.removeAttribute("id");p.select(v);p.collapse();return k.cancel(t)}})}}if(q.force_p_newlines){if(!c){n.onKeyPress.add(function(s,t){if(t.keyCode==13&&!t.shiftKey&&!o.insertPara(t)){k.cancel(t)}})}else{m.addUnload(function(){o._previousFormats=0});n.onKeyPress.add(function(s,t){o._previousFormats=0;if(t.keyCode==13&&!t.shiftKey&&s.selection.isCollapsed()&&q.keep_styles){o._previousFormats=l(s.selection.getStart())}});n.onKeyUp.add(function(t,x){if(x.keyCode==13&&!x.shiftKey){var v=t.selection.getStart(),s=o._previousFormats;if(!v.hasChildNodes()&&s){v=u.getParent(v,u.isBlock);if(v&&v.nodeName!="LI"){v.innerHTML="";if(o._previousFormats){v.appendChild(s.wrapper);s.inner.innerHTML="\uFEFF"}else{v.innerHTML="\uFEFF"}p.select(v,1);t.getDoc().execCommand("Delete",false,null);o._previousFormats=0}}}})}if(a){n.onKeyDown.add(function(s,t){if((t.keyCode==8||t.keyCode==46)&&!t.shiftKey){o.backspaceDelete(t,t.keyCode==8)}})}}if(m.isWebKit){function r(t){var s=p.getRng(),v,z=u.create("div",null," "),y,x=u.getViewPort(t.getWin()).h;s.insertNode(v=u.create("br"));s.setStartAfter(v);s.setEndAfter(v);p.setRng(s);if(p.getSel().focusNode==v.previousSibling){p.select(u.insertAfter(u.doc.createTextNode("\u00a0"),v));p.collapse(d)}u.insertAfter(z,v);y=u.getPos(z).y;u.remove(z);if(y>x){t.getWin().scrollTo(0,y)}}n.onKeyPress.add(function(s,t){if(t.keyCode==13&&(t.shiftKey||(q.force_br_newlines&&!u.getParent(p.getNode(),"h1,h2,h3,h4,h5,h6,ol,ul")))){r(s);k.cancel(t)}})}n.onPreProcess.add(function(s,t){j(u.select("p,h1,h2,h3,h4,h5,h6,div",t.node),function(v){if(f(v)){j(u.select("span,em,strong,b,i",t.node),function(x){if(!x.hasChildNodes()){x.appendChild(s.getDoc().createTextNode("\u00a0"));return h}})}})});if(c){if(q.element!="P"){n.onKeyPress.add(function(s,t){o.lastElm=p.getNode().nodeName});n.onKeyUp.add(function(t,v){var y,x=p.getNode(),s=t.getBody();if(s.childNodes.length===1&&x.nodeName=="P"){x=u.rename(x,q.element);p.select(x);p.collapse();t.nodeChanged()}else{if(v.keyCode==13&&!v.shiftKey&&o.lastElm!="P"){y=u.getParent(x,"p");if(y){u.rename(y,q.element);t.nodeChanged()}}}})}}},find:function(v,q,r){var p=this.editor,o=p.getDoc().createTreeWalker(v,4,null,h),u=-1;while(v=o.nextNode()){u++;if(q==0&&v==r){return u}if(q==1&&u==r){return v}}return -1},forceRoots:function(x,I){var z=this,x=z.editor,M=x.getBody(),J=x.getDoc(),P=x.selection,A=P.getSel(),B=P.getRng(),N=-2,v,G,o,p,K=-16777215;var L,q,O,F,C,u=M.childNodes,E,D,y;for(E=u.length-1;E>=0;E--){L=u[E];if(L.nodeType===1&&L.getAttribute("_mce_type")){q=null;continue}if(L.nodeType===3||(!z.dom.isBlock(L)&&L.nodeType!==8&&!/^(script|mce:script|style|mce:style)$/i.test(L.nodeName))){if(!q){if(L.nodeType!=3||/[^\s]/g.test(L.nodeValue)){if(N==-2&&B){if(!c||B.setStart){if(B.startContainer.nodeType==1&&(D=B.startContainer.childNodes[B.startOffset])&&D.nodeType==1){y=D.getAttribute("id");D.setAttribute("id","__mce")}else{if(x.dom.getParent(B.startContainer,function(n){return n===M})){G=B.startOffset;o=B.endOffset;N=z.find(M,0,B.startContainer);v=z.find(M,0,B.endContainer)}}}else{if(B.item){p=J.body.createTextRange();p.moveToElementText(B.item(0));B=p}p=J.body.createTextRange();p.moveToElementText(M);p.collapse(1);O=p.move("character",K)*-1;p=B.duplicate();p.collapse(1);F=p.move("character",K)*-1;p=B.duplicate();p.collapse(0);C=(p.move("character",K)*-1)-F;N=F-O;v=C}}q=x.dom.create(x.settings.forced_root_block);L.parentNode.replaceChild(q,L);q.appendChild(L)}}else{if(q.hasChildNodes()){q.insertBefore(L,q.firstChild)}else{q.appendChild(L)}}}else{q=null}}if(N!=-2){if(!c||B.setStart){q=M.getElementsByTagName(x.settings.element)[0];B=J.createRange();if(N!=-1){B.setStart(z.find(M,1,N),G)}else{B.setStart(q,0)}if(v!=-1){B.setEnd(z.find(M,1,v),o)}else{B.setEnd(q,0)}if(A){A.removeAllRanges();A.addRange(B)}}else{try{B=A.createRange();B.moveToElementText(M);B.collapse(1);B.moveStart("character",N);B.moveEnd("character",v);B.select()}catch(H){}}}else{if((!c||B.setStart)&&(D=x.dom.get("__mce"))){if(y){D.setAttribute("id",y)}else{D.removeAttribute("id")}B=J.createRange();B.setStartBefore(D);B.setEndBefore(D);P.setRng(B)}}},getParentBlock:function(p){var o=this.dom;return o.getParent(p,o.isBlock)},insertPara:function(S){var G=this,x=G.editor,O=x.dom,T=x.getDoc(),X=x.settings,H=x.selection.getSel(),I=H.getRangeAt(0),W=T.body;var L,M,J,Q,P,u,p,v,A,o,E,V,q,z,K,N=O.getViewPort(x.getWin()),D,F,C;L=T.createRange();L.setStart(H.anchorNode,H.anchorOffset);L.collapse(d);M=T.createRange();M.setStart(H.focusNode,H.focusOffset);M.collapse(d);J=L.compareBoundaryPoints(L.START_TO_END,M)<0;Q=J?H.anchorNode:H.focusNode;P=J?H.anchorOffset:H.focusOffset;u=J?H.focusNode:H.anchorNode;p=J?H.focusOffset:H.anchorOffset;if(Q===u&&/^(TD|TH)$/.test(Q.nodeName)){if(Q.firstChild.nodeName=="BR"){O.remove(Q.firstChild)}if(Q.childNodes.length==0){x.dom.add(Q,X.element,null,"<br />");V=x.dom.add(Q,X.element,null,"<br />")}else{K=Q.innerHTML;Q.innerHTML="";x.dom.add(Q,X.element,null,K);V=x.dom.add(Q,X.element,null,"<br />")}I=T.createRange();I.selectNodeContents(V);I.collapse(1);x.selection.setRng(I);return h}if(Q==W&&u==W&&W.firstChild&&x.dom.isBlock(W.firstChild)){Q=u=Q.firstChild;P=p=0;L=T.createRange();L.setStart(Q,0);M=T.createRange();M.setStart(u,0)}Q=Q.nodeName=="HTML"?T.body:Q;Q=Q.nodeName=="BODY"?Q.firstChild:Q;u=u.nodeName=="HTML"?T.body:u;u=u.nodeName=="BODY"?u.firstChild:u;v=G.getParentBlock(Q);A=G.getParentBlock(u);o=v?v.nodeName:X.element;if(K=G.dom.getParent(v,"li,pre")){if(K.nodeName=="LI"){return e(x.selection,G.dom,K)}return d}if(v&&(v.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(O.getStyle(v,"position",1)))){o=X.element;v=null}if(A&&(A.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(O.getStyle(v,"position",1)))){o=X.element;A=null}if(/(TD|TABLE|TH|CAPTION)/.test(o)||(v&&o=="DIV"&&/left|right/gi.test(O.getStyle(v,"float",1)))){o=X.element;v=A=null}E=(v&&v.nodeName==o)?v.cloneNode(0):x.dom.create(o);V=(A&&A.nodeName==o)?A.cloneNode(0):x.dom.create(o);V.removeAttribute("id");if(/^(H[1-6])$/.test(o)&&g(I,v)){V=x.dom.create(X.element)}K=q=Q;do{if(K==W||K.nodeType==9||G.dom.isBlock(K)||/(TD|TABLE|TH|CAPTION)/.test(K.nodeName)){break}q=K}while((K=K.previousSibling?K.previousSibling:K.parentNode));K=z=u;do{if(K==W||K.nodeType==9||G.dom.isBlock(K)||/(TD|TABLE|TH|CAPTION)/.test(K.nodeName)){break}z=K}while((K=K.nextSibling?K.nextSibling:K.parentNode));if(q.nodeName==o){L.setStart(q,0)}else{L.setStartBefore(q)}L.setEnd(Q,P);E.appendChild(L.cloneContents()||T.createTextNode(""));try{M.setEndAfter(z)}catch(R){}M.setStart(u,p);V.appendChild(M.cloneContents()||T.createTextNode(""));I=T.createRange();if(!q.previousSibling&&q.parentNode.nodeName==o){I.setStartBefore(q.parentNode)}else{if(L.startContainer.nodeName==o&&L.startOffset==0){I.setStartBefore(L.startContainer)}else{I.setStart(L.startContainer,L.startOffset)}}if(!z.nextSibling&&z.parentNode.nodeName==o){I.setEndAfter(z.parentNode)}else{I.setEnd(M.endContainer,M.endOffset)}I.deleteContents();if(b){x.getWin().scrollTo(0,N.y)}if(E.firstChild&&E.firstChild.nodeName==o){E.innerHTML=E.firstChild.innerHTML}if(V.firstChild&&V.firstChild.nodeName==o){V.innerHTML=V.firstChild.innerHTML}if(f(E)){E.innerHTML="<br />"}function U(y,s){var r=[],Z,Y,t;y.innerHTML="";if(X.keep_styles){Y=s;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(Y.nodeName)){Z=Y.cloneNode(h);O.setAttrib(Z,"id","");r.push(Z)}}while(Y=Y.parentNode)}if(r.length>0){for(t=r.length-1,Z=y;t>=0;t--){Z=Z.appendChild(r[t])}r[0].innerHTML=b?" ":"<br />";return r[0]}else{y.innerHTML=b?" ":"<br />"}}if(f(V)){C=U(V,u)}if(b&&parseFloat(opera.version())<9.5){I.insertNode(E);I.insertNode(V)}else{I.insertNode(V);I.insertNode(E)}V.normalize();E.normalize();function B(r){return T.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,h).nextNode()||r}I=T.createRange();I.selectNodeContents(a?B(C||V):C||V);I.collapse(1);H.removeAllRanges();H.addRange(I);D=x.dom.getPos(V).y;F=V.clientHeight;if(D<N.y||D+F>N.y+N.h){x.getWin().scrollTo(0,D<N.y?D:D-N.h+25)}return h},backspaceDelete:function(v,C){var D=this,u=D.editor,z=u.getBody(),s=u.dom,q,x=u.selection,p=x.getRng(),y=p.startContainer,q,A,B,o;if(!C&&p.collapsed&&y.nodeType==1&&p.startOffset==y.childNodes.length){o=new m.dom.TreeWalker(y.lastChild,y);for(q=y.lastChild;q;q=o.prev()){if(q.nodeType==3){p.setStart(q,q.nodeValue.length);p.collapse(true);x.setRng(p);return}}}if(y&&u.dom.isBlock(y)&&!/^(TD|TH)$/.test(y.nodeName)&&C){if(y.childNodes.length==0||(y.childNodes.length==1&&y.firstChild.nodeName=="BR")){q=y;while((q=q.previousSibling)&&!u.dom.isBlock(q)){}if(q){if(y!=z.firstChild){A=u.dom.doc.createTreeWalker(q,NodeFilter.SHOW_TEXT,null,h);while(B=A.nextNode()){q=B}p=u.getDoc().createRange();p.setStart(q,q.nodeValue?q.nodeValue.length:0);p.setEnd(q,q.nodeValue?q.nodeValue.length:0);x.setRng(p);u.dom.remove(y)}return k.cancel(v)}}}}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;if(g.settings.use_native_selects){k=new c.ui.NativeListBox(m,i)}else{f=l||h._cls.listbox||c.ui.ListBox;k=new f(m,i)}h.controls[m]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){g.bookmark=g.selection.getBookmark(1)});a.add(o,"focus",function(){g.selection.moveToBookmark(g.bookmark);g.bookmark=null})})}if(k.hideMenu){g.onMouseDown.add(k.hideMenu,k)}return h.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){function b(){var d={},c={},e={};function f(j,i,h,g){if(typeof(i)=="string"){i=[i]}a.each(i,function(k){j[k.toLowerCase()]={func:h,scope:g}})}a.extend(this,{add:function(i,h,g){f(d,i,h,g)},addQueryStateHandler:function(i,h,g){f(c,i,h,g)},addQueryValueHandler:function(i,h,g){f(e,i,h,g)},execCommand:function(h,k,j,i,g){if(k=d[k.toLowerCase()]){if(k.func.call(h||k.scope,j,i,g)!==false){return true}}},queryCommandValue:function(){if(cmd=e[cmd.toLowerCase()]){return cmd.func.call(scope||cmd.scope,ui,value,args)}},queryCommandState:function(){if(cmd=c[cmd.toLowerCase()]){return cmd.func.call(scope||cmd.scope,ui,value,args)}}})}a.GlobalCommands=new b()})(tinymce);(function(a){a.Formatter=function(T){var K={},M=a.each,c=T.dom,p=T.selection,s=a.dom.TreeWalker,I=new a.dom.RangeUtils(c),d=T.schema.isValid,E=c.isBlock,k=T.settings.forced_root_block,r=c.nodeIndex,D="\uFEFF",e=/^(src|href|style)$/,Q=false,A=true,o,N={apply:[],remove:[]};function y(U){return U instanceof Array}function l(V,U){return c.getParents(V,U,c.getRoot())}function b(U){return U.nodeType===1&&(U.face==="mceinline"||U.style.fontFamily==="mceinline")}function P(U){return U?K[U]:K}function j(U,V){if(U){if(typeof(U)!=="string"){M(U,function(X,W){j(W,X)})}else{V=V.length?V:[V];M(V,function(W){if(W.deep===o){W.deep=!W.selector}if(W.split===o){W.split=!W.selector||W.inline}if(W.remove===o&&W.selector&&!W.inline){W.remove="none"}if(W.selector&&W.inline){W.mixed=true;W.block_expand=true}if(typeof(W.classes)==="string"){W.classes=W.classes.split(/\s+/)}});K[U]=V}}}function R(W,ac,Y){var Z=P(W),ad=Z[0],ab,V,aa;function X(ag){var af=ag.startContainer,aj=ag.startOffset,ai,ah;if(af.nodeType==1||af.nodeValue===""){af=af.nodeType==1?af.childNodes[aj]:af;if(af){ai=new s(af,af.parentNode);for(ah=ai.current();ah;ah=ai.next()){if(ah.nodeType==3&&!f(ah)){ag.setStart(ah,0);break}}}}return ag}function U(ag,af){af=af||ad;if(ag){M(af.styles,function(ai,ah){c.setStyle(ag,ah,q(ai,ac))});M(af.attributes,function(ai,ah){c.setAttrib(ag,ah,q(ai,ac))});M(af.classes,function(ah){ah=q(ah,ac);if(!c.hasClass(ag,ah)){c.addClass(ag,ah)}})}}function ae(ag){var af=[],ai,ah;ai=ad.inline||ad.block;ah=c.create(ai);U(ah);I.walk(ag,function(aj){var ak;function al(am){var ap=am.nodeName.toLowerCase(),ao=am.parentNode.nodeName.toLowerCase(),an;if(g(ap,"br")){ak=0;if(ad.block){c.remove(am)}return}if(ad.wrapper&&v(am,W,ac)){ak=0;return}if(ad.block&&!ad.wrapper&&F(ap)){am=c.rename(am,ai);U(am);af.push(am);ak=0;return}if(ad.selector){M(Z,function(aq){if(c.is(am,aq.selector)&&!b(am)){U(am,aq);an=true}});if(!ad.inline||an){ak=0;return}}if(d(ai,ap)&&d(ao,ai)){if(!ak){ak=ah.cloneNode(Q);am.parentNode.insertBefore(ak,am);af.push(ak)}ak.appendChild(am)}else{ak=0;M(a.grep(am.childNodes),al);ak=0}}M(aj,al)});M(af,function(al){var aj;function am(ao){var an=0;M(ao.childNodes,function(ap){if(!f(ap)&&!G(ap)){an++}});return an}function ak(an){var ap,ao;M(an.childNodes,function(aq){if(aq.nodeType==1&&!G(aq)&&!b(aq)){ap=aq;return Q}});if(ap&&h(ap,ad)){ao=ap.cloneNode(Q);U(ao);c.replace(ao,an,A);c.remove(ap,1)}return ao||an}aj=am(al);if(aj===0){c.remove(al,1);return}if(ad.inline||ad.wrapper){if(!ad.exact&&aj===1){al=ak(al)}M(Z,function(an){M(c.select(an.inline,al),function(ao){S(an,ac,ao,an.exact?ao:null)})});if(v(al.parentNode,W,ac)){c.remove(al,1);al=0;return A}if(ad.merge_with_parents){c.getParent(al.parentNode,function(an){if(v(an,W,ac)){c.remove(al,1);al=0;return A}})}if(al){al=t(B(al),al);al=t(al,B(al,A))}}})}if(ad){if(Y){V=c.createRng();V.setStartBefore(Y);V.setEndAfter(Y);ae(n(V,Z))}else{if(!p.isCollapsed()||!ad.inline){ab=p.getBookmark();ae(n(p.getRng(A),Z));p.moveToBookmark(ab);p.setRng(X(p.getRng(A)));T.nodeChanged()}else{O("apply",W,ac)}}}}function z(W,af,Z){var aa=P(W),ah=aa[0],ae,ad,V;function Y(ak){var aj=ak.startContainer,ap=ak.startOffset,ao,an,al,am;if(aj.nodeType==3&&ap>=aj.nodeValue.length-1){aj=aj.parentNode;ap=r(aj)+1}if(aj.nodeType==1){al=aj.childNodes;aj=al[Math.min(ap,al.length-1)];ao=new s(aj);if(ap>al.length-1){ao.next()}for(an=ao.current();an;an=ao.next()){if(an.nodeType==3&&!f(an)){am=c.create("a",null,D);an.parentNode.insertBefore(am,an);ak.setStart(an,0);p.setRng(ak);c.remove(am);return}}}}function X(am){var al,ak,aj;al=a.grep(am.childNodes);for(ak=0,aj=aa.length;ak<aj;ak++){if(S(aa[ak],af,am,am)){break}}if(ah.deep){for(ak=0,aj=al.length;ak<aj;ak++){X(al[ak])}}}function ab(aj){var ak;M(l(aj.parentNode).reverse(),function(al){var am;if(!ak&&al.id!="_start"&&al.id!="_end"){am=v(al,W,af);if(am&&am.split!==false){ak=al}}});return ak}function U(am,aj,ao,ar){var at,aq,ap,al,an,ak;if(am){ak=am.parentNode;for(at=aj.parentNode;at&&at!=ak;at=at.parentNode){aq=at.cloneNode(Q);for(an=0;an<aa.length;an++){if(S(aa[an],af,aq,aq)){aq=0;break}}if(aq){if(ap){aq.appendChild(ap)}if(!al){al=aq}ap=aq}}if(ar&&(!ah.mixed||!E(am))){aj=c.split(am,aj)}if(ap){ao.parentNode.insertBefore(ap,ao);al.appendChild(ao)}}return aj}function ag(aj){return U(ab(aj),aj,aj,true)}function ac(al){var ak=c.get(al?"_start":"_end"),aj=ak[al?"firstChild":"lastChild"];if(G(aj)){aj=aj[al?"firstChild":"lastChild"]}c.remove(ak,true);return aj}function ai(aj){var ak,al;aj=n(aj,aa,A);if(ah.split){ak=H(aj,A);al=H(aj);if(ak!=al){ak=L(ak,"span",{id:"_start",_mce_type:"bookmark"});al=L(al,"span",{id:"_end",_mce_type:"bookmark"});ag(ak);ag(al);ak=ac(A);al=ac()}else{ak=al=ag(ak)}aj.startContainer=ak.parentNode;aj.startOffset=r(ak);aj.endContainer=al.parentNode;aj.endOffset=r(al)+1}I.walk(aj,function(am){M(am,function(an){X(an)})})}if(Z){V=c.createRng();V.setStartBefore(Z);V.setEndAfter(Z);ai(V);return}if(!p.isCollapsed()||!ah.inline){ae=p.getBookmark();ai(p.getRng(A));p.moveToBookmark(ae);if(i(W,af,p.getStart())){Y(p.getRng(true))}T.nodeChanged()}else{O("remove",W,af)}}function C(U,W,V){if(i(U,W,V)){z(U,W,V)}else{R(U,W,V)}}function v(V,U,aa,Y){var W=P(U),ab,Z,X;function ac(ag,ai,aj){var af,ah,ad=ai[aj],ae;if(ad){if(ad.length===o){for(af in ad){if(ad.hasOwnProperty(af)){if(aj==="attributes"){ah=c.getAttrib(ag,af)}else{ah=J(ag,af)}if(Y&&!ah&&!ai.exact){return}if((!Y||ai.exact)&&!g(ah,q(ad[af],aa))){return}}}}else{for(ae=0;ae<ad.length;ae++){if(aj==="attributes"?c.getAttrib(ag,ad[ae]):J(ag,ad[ae])){return ai}}}}return ai}if(W&&V){for(Z=0;Z<W.length;Z++){ab=W[Z];if(h(V,ab)&&ac(V,ab,"attributes")&&ac(V,ab,"styles")){if(X=ab.classes){for(Z=0;Z<X.length;Z++){if(!c.hasClass(V,X[Z])){return}}}return ab}}}}function i(W,Z,Y){var V,X;function U(aa){aa=c.getParent(aa,function(ab){return !!v(ab,W,Z,true)});return v(aa,W,Z)}if(Y){return U(Y)}if(p.isCollapsed()){for(X=N.apply.length-1;X>=0;X--){if(N.apply[X].name==W){return true}}for(X=N.remove.length-1;X>=0;X--){if(N.remove[X].name==W){return false}}return U(p.getNode())}Y=p.getNode();if(U(Y)){return A}V=p.getStart();if(V!=Y){if(U(V)){return A}}return Q}function u(ab,aa){var Y,Z=[],X={},W,V,U;if(p.isCollapsed()){for(V=0;V<ab.length;V++){for(W=N.remove.length-1;W>=0;W--){U=ab[V];if(N.remove[W].name==U){X[U]=true;break}}}for(W=N.apply.length-1;W>=0;W--){for(V=0;V<ab.length;V++){U=ab[V];if(!X[U]&&N.apply[W].name==U){X[U]=true;Z.push(U)}}}}Y=p.getStart();c.getParent(Y,function(ae){var ad,ac;for(ad=0;ad<ab.length;ad++){ac=ab[ad];if(!X[ac]&&v(ae,ac,aa)){X[ac]=true;Z.push(ac)}}});return Z}function x(Y){var aa=P(Y),X,W,Z,V,U;if(aa){X=p.getStart();W=l(X);for(V=aa.length-1;V>=0;V--){U=aa[V].selector;if(!U){return A}for(Z=W.length-1;Z>=0;Z--){if(c.is(W[Z],U)){return A}}}}return Q}a.extend(this,{get:P,register:j,apply:R,remove:z,toggle:C,match:i,matchAll:u,matchNode:v,canApply:x});function h(U,V){if(g(U,V.inline)){return A}if(g(U,V.block)){return A}if(V.selector){return c.is(U,V.selector)}}function g(V,U){V=V||"";U=U||"";V=""+(V.nodeName||V);U=""+(U.nodeName||U);return V.toLowerCase()==U.toLowerCase()}function J(V,U){var W=c.getStyle(V,U);if(U=="color"||U=="backgroundColor"){W=c.toHex(W)}if(U=="fontWeight"&&W==700){W="bold"}return""+W}function q(U,V){if(typeof(U)!="string"){U=U(V)}else{if(V){U=U.replace(/%(\w+)/g,function(X,W){return V[W]||X})}}return U}function f(U){return U&&U.nodeType===3&&/^([\s\r\n]+|)$/.test(U.nodeValue)}function L(W,V,U){var X=c.create(V,U);W.parentNode.insertBefore(X,W);X.appendChild(W);return X}function n(U,ac,X){var W=U.startContainer,Z=U.startOffset,af=U.endContainer,aa=U.endOffset,ae,ab;function ad(ai,aj,ag,ah){var ak,al;ah=ah||c.getRoot();for(;;){ak=ai.parentNode;if(ak==ah||(!ac[0].block_expand&&E(ak))){return ai}for(ae=ak[aj];ae&&ae!=ai;ae=ae[ag]){if(ae.nodeType==1&&!G(ae)){return ai}if(ae.nodeType==3&&!f(ae)){return ai}}ai=ai.parentNode}return ai}if(W.nodeType==1&&W.hasChildNodes()){ab=W.childNodes.length-1;W=W.childNodes[Z>ab?ab:Z];if(W.nodeType==3){Z=0}}if(af.nodeType==1&&af.hasChildNodes()){ab=af.childNodes.length-1;af=af.childNodes[aa>ab?ab:aa-1];if(af.nodeType==3){aa=af.nodeValue.length}}if(G(W.parentNode)){W=W.parentNode}if(G(W)){W=W.nextSibling||W}if(G(af.parentNode)){af=af.parentNode}if(G(af)){af=af.previousSibling||af}if(ac[0].inline||ac[0].block_expand){W=ad(W,"firstChild","nextSibling");af=ad(af,"lastChild","previousSibling")}if(ac[0].selector&&ac[0].expand!==Q&&!ac[0].inline){function Y(ah,ag){var ai,aj,ak;if(ah.nodeType==3&&ah.nodeValue.length==0&&ah[ag]){ah=ah[ag]}ai=l(ah);for(aj=0;aj<ai.length;aj++){for(ak=0;ak<ac.length;ak++){if(c.is(ai[aj],ac[ak].selector)){return ai[aj]}}}return ah}W=Y(W,"previousSibling");af=Y(af,"nextSibling")}if(ac[0].block||ac[0].selector){function V(ah,ag,aj){var ai;if(!ac[0].wrapper){ai=c.getParent(ah,ac[0].block)}if(!ai){ai=c.getParent(ah.nodeType==3?ah.parentNode:ah,E)}if(ai&&ac[0].wrapper){ai=l(ai,"ul,ol").reverse()[0]||ai}if(!ai){ai=ah;while(ai[ag]&&!E(ai[ag])){ai=ai[ag];if(g(ai,"br")){break}}}return ai||ah}W=V(W,"previousSibling");af=V(af,"nextSibling");if(ac[0].block){if(!E(W)){W=ad(W,"firstChild","nextSibling")}if(!E(af)){af=ad(af,"lastChild","previousSibling")}}}if(W.nodeType==1){Z=r(W);W=W.parentNode}if(af.nodeType==1){aa=r(af)+1;af=af.parentNode}return{startContainer:W,startOffset:Z,endContainer:af,endOffset:aa}}function S(aa,Z,X,U){var W,V,Y;if(!h(X,aa)){return Q}if(aa.remove!="all"){M(aa.styles,function(ac,ab){ac=q(ac,Z);if(typeof(ab)==="number"){ab=ac;U=0}if(!U||g(J(U,ab),ac)){c.setStyle(X,ab,"")}Y=1});if(Y&&c.getAttrib(X,"style")==""){X.removeAttribute("style");X.removeAttribute("_mce_style")}M(aa.attributes,function(ad,ab){var ac;ad=q(ad,Z);if(typeof(ab)==="number"){ab=ad;U=0}if(!U||g(c.getAttrib(U,ab),ad)){if(ab=="class"){ad=c.getAttrib(X,ab);if(ad){ac="";M(ad.split(/\s+/),function(ae){if(/mce\w+/.test(ae)){ac+=(ac?" ":"")+ae}});if(ac){c.setAttrib(X,ab,ac);return}}}if(ab=="class"){X.removeAttribute("className")}if(e.test(ab)){X.removeAttribute("_mce_"+ab)}X.removeAttribute(ab)}});M(aa.classes,function(ab){ab=q(ab,Z);if(!U||c.hasClass(U,ab)){c.removeClass(X,ab)}});V=c.getAttribs(X);for(W=0;W<V.length;W++){if(V[W].nodeName.indexOf("_")!==0){return Q}}}if(aa.remove!="none"){m(X,aa);return A}}function m(W,X){var U=W.parentNode,V;if(X.block){if(!k){function Y(aa,Z,ab){aa=B(aa,Z,ab);return !aa||(aa.nodeName=="BR"||E(aa))}if(E(W)&&!E(U)){if(!Y(W,Q)&&!Y(W.firstChild,A,1)){W.insertBefore(c.create("br"),W.firstChild)}if(!Y(W,A)&&!Y(W.lastChild,Q,1)){W.appendChild(c.create("br"))}}}else{if(U==c.getRoot()){if(!X.list_block||!g(W,X.list_block)){M(a.grep(W.childNodes),function(Z){if(d(k,Z.nodeName.toLowerCase())){if(!V){V=L(Z,k)}else{V.appendChild(Z)}}else{V=0}})}}}}if(X.selector&&X.inline&&!g(X.inline,W)){return}c.remove(W,1)}function B(V,U,W){if(V){U=U?"nextSibling":"previousSibling";for(V=W?V:V[U];V;V=V[U]){if(V.nodeType==1||!f(V)){return V}}}}function G(U){return U&&U.nodeType==1&&U.getAttribute("_mce_type")=="bookmark"}function t(Y,X){var U,W,V;function aa(ad,ac){if(ad.nodeName!=ac.nodeName){return Q}function ab(af){var ag={};M(c.getAttribs(af),function(ah){var ai=ah.nodeName.toLowerCase();if(ai.indexOf("_")!==0&&ai!=="style"){ag[ai]=c.getAttrib(af,ai)}});return ag}function ae(ai,ah){var ag,af;for(af in ai){if(ai.hasOwnProperty(af)){ag=ah[af];if(ag===o){return Q}if(ai[af]!=ag){return Q}delete ah[af]}}for(af in ah){if(ah.hasOwnProperty(af)){return Q}}return A}if(!ae(ab(ad),ab(ac))){return Q}if(!ae(c.parseStyle(c.getAttrib(ad,"style")),c.parseStyle(c.getAttrib(ac,"style")))){return Q}return A}if(Y&&X){function Z(ac,ab){for(W=ac;W;W=W[ab]){if(W.nodeType==3&&!f(W)){return ac}if(W.nodeType==1&&!G(W)){return W}}return ac}Y=Z(Y,"previousSibling");X=Z(X,"nextSibling");if(aa(Y,X)){for(W=Y.nextSibling;W&&W!=X;){V=W;W=W.nextSibling;Y.appendChild(V)}c.remove(X);M(a.grep(X.childNodes),function(ab){Y.appendChild(ab)});return Y}}return X}function F(U){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(U)}function H(V,Y){var U,X,W;U=V[Y?"startContainer":"endContainer"];X=V[Y?"startOffset":"endOffset"];if(U.nodeType==1){W=U.childNodes.length-1;if(!Y&&X){X--}U=U.childNodes[X>W?W:X]}return U}function O(Z,V,Y){var W,U=N[Z],aa=N[Z=="apply"?"remove":"apply"];function ab(){return N.apply.length||N.remove.length}function X(){N.apply=[];N.remove=[]}function ac(ad){M(N.apply.reverse(),function(ae){R(ae.name,ae.vars,ad)});M(N.remove.reverse(),function(ae){z(ae.name,ae.vars,ad)});c.remove(ad,1);X()}for(W=U.length-1;W>=0;W--){if(U[W].name==V){return}}U.push({name:V,vars:Y});for(W=aa.length-1;W>=0;W--){if(aa[W].name==V){aa.splice(W,1)}}if(ab()){T.getDoc().execCommand("FontName",false,"mceinline");N.lastRng=p.getRng();M(c.select("font,span"),function(ae){var ad;if(b(ae)){ad=p.getBookmark();ac(ae);p.moveToBookmark(ad);T.nodeChanged()}});if(!N.isListening&&ab()){N.isListening=true;M("onKeyDown,onKeyUp,onKeyPress,onMouseUp".split(","),function(ad){T[ad].addToTop(function(ae,af){if(ab()&&!a.dom.RangeUtils.compareRanges(N.lastRng,p.getRng())){M(c.select("font,span"),function(ah){var ai,ag;if(b(ah)){ai=ah.firstChild;if(ai){ac(ah);ag=c.createRng();ag.setStart(ai,ai.nodeValue.length);ag.setEnd(ai,ai.nodeValue.length);p.setRng(ag);ae.nodeChanged()}else{c.remove(ah)}}});if(af.type=="keyup"||af.type=="mouseup"){X()}}})})}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;if(c.inline_styles){h=e.explode(c.font_size_style_values);function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}a.onPreProcess.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});
\ No newline at end of file
-// Some global instances\r
-var tinymce = null, tinyMCEPopup, tinyMCE;\r
-\r
-tinyMCEPopup = {\r
- init : function() {\r
- var t = this, w, ti, li, q, i, it;\r
-\r
- li = ('' + document.location.search).replace(/^\?/, '').split('&');\r
- q = {};\r
- for (i=0; i<li.length; i++) {\r
- it = li[i].split('=');\r
- q[unescape(it[0])] = unescape(it[1]);\r
- }\r
-\r
- if (q.mce_rdomain)\r
- document.domain = q.mce_rdomain;\r
-\r
- // Find window & API\r
- w = t.getWin();\r
- tinymce = w.tinymce;\r
- tinyMCE = w.tinyMCE;\r
- t.editor = tinymce.EditorManager.activeEditor;\r
- t.params = t.editor.windowManager.params;\r
- t.features = t.editor.windowManager.features;\r
-\r
- // Setup local DOM\r
- t.dom = t.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document);\r
-\r
- // Enables you to skip loading the default css\r
- if (t.features.popup_css !== false)\r
- t.dom.loadCSS(t.features.popup_css || t.editor.settings.popup_css);\r
-\r
- // Setup on init listeners\r
- t.listeners = [];\r
- t.onInit = {\r
- add : function(f, s) {\r
- t.listeners.push({func : f, scope : s});\r
- }\r
- };\r
-\r
- t.isWindow = !t.getWindowArg('mce_inline');\r
- t.id = t.getWindowArg('mce_window_id');\r
- t.editor.windowManager.onOpen.dispatch(t.editor.windowManager, window);\r
- },\r
-\r
- getWin : function() {\r
- return window.dialogArguments || opener || parent || top;\r
- },\r
-\r
- getWindowArg : function(n, dv) {\r
- var v = this.params[n];\r
-\r
- return tinymce.is(v) ? v : dv;\r
- },\r
-\r
- getParam : function(n, dv) {\r
- return this.editor.getParam(n, dv);\r
- },\r
-\r
- getLang : function(n, dv) {\r
- return this.editor.getLang(n, dv);\r
- },\r
-\r
- execCommand : function(cmd, ui, val, a) {\r
- a = a || {};\r
- a.skip_focus = 1;\r
-\r
- this.restoreSelection();\r
- return this.editor.execCommand(cmd, ui, val, a);\r
- },\r
-\r
- resizeToInnerSize : function() {\r
- var t = this, n, b = document.body, vp = t.dom.getViewPort(window), dw, dh;\r
-\r
- dw = t.getWindowArg('mce_width') - vp.w;\r
- dh = t.getWindowArg('mce_height') - vp.h;\r
-\r
- if (t.isWindow)\r
- window.resizeBy(dw, dh);\r
- else\r
- t.editor.windowManager.resizeBy(dw, dh, t.id);\r
- },\r
-\r
- executeOnLoad : function(s) {\r
- this.onInit.add(function() {\r
- eval(s);\r
- });\r
- },\r
-\r
- storeSelection : function() {\r
- this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple');\r
- },\r
-\r
- restoreSelection : function() {\r
- var t = tinyMCEPopup;\r
-\r
- if (!t.isWindow && tinymce.isIE)\r
- t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark);\r
- },\r
-\r
- requireLangPack : function() {\r
- var u = this.getWindowArg('plugin_url') || this.getWindowArg('theme_url');\r
-\r
- if (u && this.editor.settings.language) {\r
- u += '/langs/' + this.editor.settings.language + '_dlg.js';\r
-\r
- if (!tinymce.ScriptLoader.isDone(u)) {\r
- document.write('<script type="text/javascript" src="' + tinymce._addVer(u) + '"></script>');\r
- tinymce.ScriptLoader.markDone(u);\r
- }\r
- }\r
- },\r
-\r
- pickColor : function(e, element_id) {\r
- this.execCommand('mceColorPicker', true, {\r
- color : document.getElementById(element_id).value,\r
- func : function(c) {\r
- document.getElementById(element_id).value = c;\r
-\r
- try {\r
- document.getElementById(element_id).onchange();\r
- } catch (ex) {\r
- // Try fire event, ignore errors\r
- }\r
- }\r
- });\r
- },\r
-\r
- openBrowser : function(element_id, type, option) {\r
- tinyMCEPopup.restoreSelection();\r
- this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window);\r
- },\r
-\r
- confirm : function(t, cb, s) {\r
- this.editor.windowManager.confirm(t, cb, s, window);\r
- },\r
-\r
- alert : function(tx, cb, s) {\r
- this.editor.windowManager.alert(tx, cb, s, window);\r
- },\r
-\r
- close : function() {\r
- var t = this;\r
-\r
- // To avoid domain relaxing issue in Opera\r
- function close() {\r
- t.editor.windowManager.close(window);\r
- tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup\r
- };\r
-\r
- if (tinymce.isOpera)\r
- t.getWin().setTimeout(close, 0);\r
- else\r
- close();\r
- },\r
-\r
- // Internal functions \r
-\r
- _restoreSelection : function() {\r
- var e = window.event.srcElement;\r
-\r
- if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button'))\r
- tinyMCEPopup.restoreSelection();\r
- },\r
-\r
-/* _restoreSelection : function() {\r
- var e = window.event.srcElement;\r
-\r
- // If user focus a non text input or textarea\r
- if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text')\r
- tinyMCEPopup.restoreSelection();\r
- },*/\r
-\r
- _onDOMLoaded : function() {\r
- var t = this, ti = document.title, bm, h, nv;\r
-\r
- // Translate page\r
- if (t.features.translate_i18n !== false) {\r
- h = document.body.innerHTML;\r
-\r
- // Replace a=x with a="x" in IE\r
- if (tinymce.isIE)\r
- h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"')\r
-\r
- document.dir = t.editor.getParam('directionality','');\r
-\r
- if ((nv = t.editor.translate(h)) && nv != h)\r
- document.body.innerHTML = nv;\r
-\r
- if ((nv = t.editor.translate(ti)) && nv != ti)\r
- document.title = ti = nv;\r
- }\r
-\r
- document.body.style.display = '';\r
-\r
- // Restore selection in IE when focus is placed on a non textarea or input element of the type text\r
- if (tinymce.isIE)\r
- document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection);\r
-\r
- t.restoreSelection();\r
- t.resizeToInnerSize();\r
-\r
- // Set inline title\r
- if (!t.isWindow)\r
- t.editor.windowManager.setTitle(window, ti);\r
- else\r
- window.focus();\r
-\r
- if (!tinymce.isIE && !t.isWindow) {\r
- tinymce.dom.Event._add(document, 'focus', function() {\r
- t.editor.windowManager.focus(t.id)\r
- });\r
- }\r
-\r
- // Patch for accessibility\r
- tinymce.each(t.dom.select('select'), function(e) {\r
- e.onkeydown = tinyMCEPopup._accessHandler;\r
- });\r
-\r
- // Call onInit\r
- // Init must be called before focus so the selection won't get lost by the focus call\r
- tinymce.each(t.listeners, function(o) {\r
- o.func.call(o.scope, t.editor);\r
- });\r
-\r
- // Move focus to window\r
- if (t.getWindowArg('mce_auto_focus', true)) {\r
- window.focus();\r
-\r
- // Focus element with mceFocus class\r
- tinymce.each(document.forms, function(f) {\r
- tinymce.each(f.elements, function(e) {\r
- if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) {\r
- e.focus();\r
- return false; // Break loop\r
- }\r
- });\r
- });\r
- }\r
-\r
- document.onkeyup = tinyMCEPopup._closeWinKeyHandler;\r
- },\r
-\r
- _accessHandler : function(e) {\r
- e = e || window.event;\r
-\r
- if (e.keyCode == 13 || e.keyCode == 32) {\r
- e = e.target || e.srcElement;\r
-\r
- if (e.onchange)\r
- e.onchange();\r
-\r
- return tinymce.dom.Event.cancel(e);\r
- }\r
- },\r
-\r
- _closeWinKeyHandler : function(e) {\r
- e = e || window.event;\r
-\r
- if (e.keyCode == 27)\r
- tinyMCEPopup.close();\r
- },\r
-\r
- _wait : function() {\r
- var t = this, ti;\r
-\r
- if (tinymce.isIE && document.location.protocol != 'https:') {\r
- // Fake DOMContentLoaded on IE\r
- document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');\r
- document.getElementById("__ie_onload").onreadystatechange = function() {\r
- if (this.readyState == "complete") {\r
- t._onDOMLoaded();\r
- document.getElementById("__ie_onload").onreadystatechange = null; // Prevent leak\r
- }\r
- };\r
- } else {\r
- if (tinymce.isIE || tinymce.isWebKit) {\r
- ti = setInterval(function() {\r
- if (/loaded|complete/.test(document.readyState)) {\r
- clearInterval(ti);\r
- t._onDOMLoaded();\r
- }\r
- }, 10);\r
- } else {\r
- window.addEventListener('DOMContentLoaded', function() {\r
- t._onDOMLoaded();\r
- }, false);\r
- }\r
- }\r
- }\r
-};\r
-\r
-tinyMCEPopup.init();\r
-tinyMCEPopup._wait(); // Wait for DOM Content Loaded\r
+
+// Uncomment and change this document.domain value if you are loading the script cross subdomains
+// document.domain = 'moxiecode.com';
+
+var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},0)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.domLoaded){return}b.domLoaded=1;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){tinymce.dom.Event._add(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){a=a.target||a.srcElement;if(a.onchange){a.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_wait:function(){if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);tinyMCEPopup._onDOMLoaded()}});if(document.documentElement.doScroll&&window==window.top){(function(){if(tinyMCEPopup.domLoaded){return}try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}tinyMCEPopup._onDOMLoaded()})()}document.attachEvent("onload",tinyMCEPopup._onDOMLoaded)}else{if(document.addEventListener){window.addEventListener("DOMContentLoaded",tinyMCEPopup._onDOMLoaded,false);window.addEventListener("load",tinyMCEPopup._onDOMLoaded,false)}}}};tinyMCEPopup.init();tinyMCEPopup._wait();
\ No newline at end of file
+(function(win) {\r
+ var whiteSpaceRe = /^\s*|\s*$/g,\r
+ undefined, isRegExpBroken = 'B'.replace(/A(.)|B/, '$1') === '$1';\r
\r
-/* file:jscripts/tiny_mce/classes/tinymce.js */\r
-\r
-var tinymce = {\r
- majorVersion : '3',\r
- minorVersion : '2.1.1',\r
- releaseDate : '2008-11-27',\r
-\r
- _init : function() {\r
- var t = this, d = document, w = window, na = navigator, ua = na.userAgent, i, nl, n, base, p, v;\r
-\r
- // Browser checks\r
- t.isOpera = w.opera && opera.buildNumber;\r
- t.isWebKit = /WebKit/.test(ua);\r
- t.isOldWebKit = t.isWebKit && !w.getSelection().getRangeAt;\r
- t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);\r
- t.isIE6 = t.isIE && /MSIE [56]/.test(ua);\r
- t.isGecko = !t.isWebKit && /Gecko/.test(ua);\r
- t.isMac = ua.indexOf('Mac') != -1;\r
- t.isAir = /adobeair/i.test(ua);\r
-\r
- // TinyMCE .NET webcontrol might be setting the values for TinyMCE\r
- if (w.tinyMCEPreInit) {\r
- t.suffix = tinyMCEPreInit.suffix;\r
- t.baseURL = tinyMCEPreInit.base;\r
- t.query = tinyMCEPreInit.query;\r
- return;\r
- }\r
+ var tinymce = {\r
+ majorVersion : '3',\r
\r
- // Get suffix and base\r
- t.suffix = '';\r
+ minorVersion : '3.9.2',\r
\r
- // If base element found, add that infront of baseURL\r
- nl = d.getElementsByTagName('base');\r
- for (i=0; i<nl.length; i++) {\r
- if (v = nl[i].href) {\r
- // Host only value like http://site.com or http://site.com:8008\r
- if (/^https?:\/\/[^\/]+$/.test(v))\r
- v += '/';\r
+ releaseDate : '2010-09-29',\r
\r
- base = v ? v.match(/.*\//)[0] : ''; // Get only directory\r
- }\r
- }\r
+ _init : function() {\r
+ var t = this, d = document, na = navigator, ua = na.userAgent, i, nl, n, base, p, v;\r
\r
- function getBase(n) {\r
- if (n.src && /tiny_mce(|_dev|_src|_gzip|_jquery|_prototype).js/.test(n.src)) {\r
- if (/_(src|dev)\.js/g.test(n.src))\r
- t.suffix = '_src';\r
+ t.isOpera = win.opera && opera.buildNumber;\r
\r
- if ((p = n.src.indexOf('?')) != -1)\r
- t.query = n.src.substring(p + 1);\r
+ t.isWebKit = /WebKit/.test(ua);\r
\r
- t.baseURL = n.src.substring(0, n.src.lastIndexOf('/'));\r
+ t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);\r
\r
- // If path to script is relative and a base href was found add that one infront\r
- if (base && t.baseURL.indexOf('://') == -1)\r
- t.baseURL = base + t.baseURL;\r
+ t.isIE6 = t.isIE && /MSIE [56]/.test(ua);\r
\r
- return t.baseURL;\r
- }\r
+ t.isGecko = !t.isWebKit && /Gecko/.test(ua);\r
\r
- return null;\r
- };\r
+ t.isMac = ua.indexOf('Mac') != -1;\r
+\r
+ t.isAir = /adobeair/i.test(ua);\r
\r
- // Check document\r
- nl = d.getElementsByTagName('script');\r
- for (i=0; i<nl.length; i++) {\r
- if (getBase(nl[i]))\r
+ t.isIDevice = /(iPad|iPhone)/.test(ua);\r
+\r
+ // TinyMCE .NET webcontrol might be setting the values for TinyMCE\r
+ if (win.tinyMCEPreInit) {\r
+ t.suffix = tinyMCEPreInit.suffix;\r
+ t.baseURL = tinyMCEPreInit.base;\r
+ t.query = tinyMCEPreInit.query;\r
return;\r
- }\r
+ }\r
+\r
+ // Get suffix and base\r
+ t.suffix = '';\r
+\r
+ // If base element found, add that infront of baseURL\r
+ nl = d.getElementsByTagName('base');\r
+ for (i=0; i<nl.length; i++) {\r
+ if (v = nl[i].href) {\r
+ // Host only value like http://site.com or http://site.com:8008\r
+ if (/^https?:\/\/[^\/]+$/.test(v))\r
+ v += '/';\r
+\r
+ base = v ? v.match(/.*\//)[0] : ''; // Get only directory\r
+ }\r
+ }\r
+\r
+ function getBase(n) {\r
+ if (n.src && /tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(n.src)) {\r
+ if (/_(src|dev)\.js/g.test(n.src))\r
+ t.suffix = '_src';\r
+\r
+ if ((p = n.src.indexOf('?')) != -1)\r
+ t.query = n.src.substring(p + 1);\r
+\r
+ t.baseURL = n.src.substring(0, n.src.lastIndexOf('/'));\r
+\r
+ // If path to script is relative and a base href was found add that one infront\r
+ // the src property will always be an absolute one on non IE browsers and IE 8\r
+ // so this logic will basically only be executed on older IE versions\r
+ if (base && t.baseURL.indexOf('://') == -1 && t.baseURL.indexOf('/') !== 0)\r
+ t.baseURL = base + t.baseURL;\r
+\r
+ return t.baseURL;\r
+ }\r
+\r
+ return null;\r
+ };\r
\r
- // Check head\r
- n = d.getElementsByTagName('head')[0];\r
- if (n) {\r
- nl = n.getElementsByTagName('script');\r
+ // Check document\r
+ nl = d.getElementsByTagName('script');\r
for (i=0; i<nl.length; i++) {\r
if (getBase(nl[i]))\r
return;\r
}\r
- }\r
-\r
- return;\r
- },\r
\r
- is : function(o, t) {\r
- var n = typeof(o);\r
+ // Check head\r
+ n = d.getElementsByTagName('head')[0];\r
+ if (n) {\r
+ nl = n.getElementsByTagName('script');\r
+ for (i=0; i<nl.length; i++) {\r
+ if (getBase(nl[i]))\r
+ return;\r
+ }\r
+ }\r
\r
- if (!t)\r
- return n != 'undefined';\r
+ return;\r
+ },\r
\r
- if (t == 'array' && (o instanceof Array))\r
- return true;\r
+ is : function(o, t) {\r
+ if (!t)\r
+ return o !== undefined;\r
\r
- return n == t;\r
- },\r
+ if (t == 'array' && (o.hasOwnProperty && o instanceof Array))\r
+ return true;\r
\r
- // #if !jquery\r
+ return typeof(o) == t;\r
+ },\r
\r
- each : function(o, cb, s) {\r
- var n, l;\r
+ each : function(o, cb, s) {\r
+ var n, l;\r
\r
- if (!o)\r
- return 0;\r
+ if (!o)\r
+ return 0;\r
\r
- s = s || o;\r
+ s = s || o;\r
\r
- if (typeof(o.length) != 'undefined') {\r
- // Indexed arrays, needed for Safari\r
- for (n=0, l = o.length; n<l; n++) {\r
- if (cb.call(s, o[n], n, o) === false)\r
- return 0;\r
- }\r
- } else {\r
- // Hashtables\r
- for (n in o) {\r
- if (o.hasOwnProperty(n)) {\r
+ if (o.length !== undefined) {\r
+ // Indexed arrays, needed for Safari\r
+ for (n=0, l = o.length; n < l; n++) {\r
if (cb.call(s, o[n], n, o) === false)\r
return 0;\r
}\r
+ } else {\r
+ // Hashtables\r
+ for (n in o) {\r
+ if (o.hasOwnProperty(n)) {\r
+ if (cb.call(s, o[n], n, o) === false)\r
+ return 0;\r
+ }\r
+ }\r
}\r
- }\r
\r
- return 1;\r
- },\r
+ return 1;\r
+ },\r
\r
- map : function(a, f) {\r
- var o = [];\r
\r
- tinymce.each(a, function(v) {\r
- o.push(f(v));\r
- });\r
+ map : function(a, f) {\r
+ var o = [];\r
\r
- return o;\r
- },\r
+ tinymce.each(a, function(v) {\r
+ o.push(f(v));\r
+ });\r
\r
- grep : function(a, f) {\r
- var o = [];\r
+ return o;\r
+ },\r
\r
- tinymce.each(a, function(v) {\r
- if (!f || f(v))\r
- o.push(v);\r
- });\r
+ grep : function(a, f) {\r
+ var o = [];\r
\r
- return o;\r
- },\r
+ tinymce.each(a, function(v) {\r
+ if (!f || f(v))\r
+ o.push(v);\r
+ });\r
\r
- inArray : function(a, v) {\r
- var i, l;\r
+ return o;\r
+ },\r
\r
- if (a) {\r
- for (i = 0, l = a.length; i < l; i++) {\r
- if (a[i] === v)\r
- return i;\r
- }\r
- }\r
+ inArray : function(a, v) {\r
+ var i, l;\r
\r
- return -1;\r
- },\r
+ if (a) {\r
+ for (i = 0, l = a.length; i < l; i++) {\r
+ if (a[i] === v)\r
+ return i;\r
+ }\r
+ }\r
\r
- extend : function(o, e) {\r
- var i, a = arguments;\r
+ return -1;\r
+ },\r
\r
- for (i=1; i<a.length; i++) {\r
- e = a[i];\r
+ extend : function(o, e) {\r
+ var i, l, a = arguments;\r
\r
- tinymce.each(e, function(v, n) {\r
- if (typeof(v) !== 'undefined')\r
- o[n] = v;\r
- });\r
- }\r
+ for (i = 1, l = a.length; i < l; i++) {\r
+ e = a[i];\r
\r
- return o;\r
- },\r
+ tinymce.each(e, function(v, n) {\r
+ if (v !== undefined)\r
+ o[n] = v;\r
+ });\r
+ }\r
\r
- trim : function(s) {\r
- return (s ? '' + s : '').replace(/^\s*|\s*$/g, '');\r
- },\r
+ return o;\r
+ },\r
\r
- // #endif\r
\r
- create : function(s, p) {\r
- var t = this, sp, ns, cn, scn, c, de = 0;\r
+ trim : function(s) {\r
+ return (s ? '' + s : '').replace(whiteSpaceRe, '');\r
+ },\r
\r
- // Parse : <prefix> <class>:<super class>\r
- s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);\r
- cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name\r
+ create : function(s, p) {\r
+ var t = this, sp, ns, cn, scn, c, de = 0;\r
\r
- // Create namespace for new class\r
- ns = t.createNS(s[3].replace(/\.\w+$/, ''));\r
+ // Parse : <prefix> <class>:<super class>\r
+ s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);\r
+ cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name\r
\r
- // Class already exists\r
- if (ns[cn])\r
- return;\r
+ // Create namespace for new class\r
+ ns = t.createNS(s[3].replace(/\.\w+$/, ''));\r
\r
- // Make pure static class\r
- if (s[2] == 'static') {\r
- ns[cn] = p;\r
+ // Class already exists\r
+ if (ns[cn])\r
+ return;\r
\r
- if (this.onCreate)\r
- this.onCreate(s[2], s[3], ns[cn]);\r
+ // Make pure static class\r
+ if (s[2] == 'static') {\r
+ ns[cn] = p;\r
\r
- return;\r
- }\r
+ if (this.onCreate)\r
+ this.onCreate(s[2], s[3], ns[cn]);\r
\r
- // Create default constructor\r
- if (!p[cn]) {\r
- p[cn] = function() {};\r
- de = 1;\r
- }\r
+ return;\r
+ }\r
\r
- // Add constructor and methods\r
- ns[cn] = p[cn];\r
- t.extend(ns[cn].prototype, p);\r
-\r
- // Extend\r
- if (s[5]) {\r
- sp = t.resolve(s[5]).prototype;\r
- scn = s[5].match(/\.(\w+)$/i)[1]; // Class name\r
-\r
- // Extend constructor\r
- c = ns[cn];\r
- if (de) {\r
- // Add passthrough constructor\r
- ns[cn] = function() {\r
- return sp[scn].apply(this, arguments);\r
- };\r
- } else {\r
- // Add inherit constructor\r
- ns[cn] = function() {\r
- this.parent = sp[scn];\r
- return c.apply(this, arguments);\r
- };\r
+ // Create default constructor\r
+ if (!p[cn]) {\r
+ p[cn] = function() {};\r
+ de = 1;\r
}\r
- ns[cn].prototype[cn] = ns[cn];\r
\r
- // Add super methods\r
- t.each(sp, function(f, n) {\r
- ns[cn].prototype[n] = sp[n];\r
- });\r
+ // Add constructor and methods\r
+ ns[cn] = p[cn];\r
+ t.extend(ns[cn].prototype, p);\r
+\r
+ // Extend\r
+ if (s[5]) {\r
+ sp = t.resolve(s[5]).prototype;\r
+ scn = s[5].match(/\.(\w+)$/i)[1]; // Class name\r
\r
- // Add overridden methods\r
- t.each(p, function(f, n) {\r
- // Extend methods if needed\r
- if (sp[n]) {\r
- ns[cn].prototype[n] = function() {\r
- this.parent = sp[n];\r
- return f.apply(this, arguments);\r
+ // Extend constructor\r
+ c = ns[cn];\r
+ if (de) {\r
+ // Add passthrough constructor\r
+ ns[cn] = function() {\r
+ return sp[scn].apply(this, arguments);\r
};\r
} else {\r
- if (n != cn)\r
- ns[cn].prototype[n] = f;\r
+ // Add inherit constructor\r
+ ns[cn] = function() {\r
+ this.parent = sp[scn];\r
+ return c.apply(this, arguments);\r
+ };\r
}\r
- });\r
- }\r
+ ns[cn].prototype[cn] = ns[cn];\r
\r
- // Add static methods\r
- t.each(p['static'], function(f, n) {\r
- ns[cn][n] = f;\r
- });\r
+ // Add super methods\r
+ t.each(sp, function(f, n) {\r
+ ns[cn].prototype[n] = sp[n];\r
+ });\r
\r
- if (this.onCreate)\r
- this.onCreate(s[2], s[3], ns[cn].prototype);\r
- },\r
+ // Add overridden methods\r
+ t.each(p, function(f, n) {\r
+ // Extend methods if needed\r
+ if (sp[n]) {\r
+ ns[cn].prototype[n] = function() {\r
+ this.parent = sp[n];\r
+ return f.apply(this, arguments);\r
+ };\r
+ } else {\r
+ if (n != cn)\r
+ ns[cn].prototype[n] = f;\r
+ }\r
+ });\r
+ }\r
\r
- walk : function(o, f, n, s) {\r
- s = s || this;\r
+ // Add static methods\r
+ t.each(p['static'], function(f, n) {\r
+ ns[cn][n] = f;\r
+ });\r
\r
- if (o) {\r
- if (n)\r
- o = o[n];\r
+ if (this.onCreate)\r
+ this.onCreate(s[2], s[3], ns[cn].prototype);\r
+ },\r
\r
- tinymce.each(o, function(o, i) {\r
- if (f.call(s, o, i, n) === false)\r
- return false;\r
+ walk : function(o, f, n, s) {\r
+ s = s || this;\r
\r
- tinymce.walk(o, f, n, s);\r
- });\r
- }\r
- },\r
+ if (o) {\r
+ if (n)\r
+ o = o[n];\r
\r
- createNS : function(n, o) {\r
- var i, v;\r
+ tinymce.each(o, function(o, i) {\r
+ if (f.call(s, o, i, n) === false)\r
+ return false;\r
\r
- o = o || window;\r
+ tinymce.walk(o, f, n, s);\r
+ });\r
+ }\r
+ },\r
\r
- n = n.split('.');\r
- for (i=0; i<n.length; i++) {\r
- v = n[i];\r
+ createNS : function(n, o) {\r
+ var i, v;\r
\r
- if (!o[v])\r
- o[v] = {};\r
+ o = o || win;\r
\r
- o = o[v];\r
- }\r
+ n = n.split('.');\r
+ for (i=0; i<n.length; i++) {\r
+ v = n[i];\r
\r
- return o;\r
- },\r
+ if (!o[v])\r
+ o[v] = {};\r
\r
- resolve : function(n, o) {\r
- var i, l;\r
+ o = o[v];\r
+ }\r
\r
- o = o || window;\r
+ return o;\r
+ },\r
\r
- n = n.split('.');\r
- for (i=0, l = n.length; i<l; i++) {\r
- o = o[n[i]];\r
+ resolve : function(n, o) {\r
+ var i, l;\r
\r
- if (!o)\r
- break;\r
- }\r
+ o = o || win;\r
\r
- return o;\r
- },\r
+ n = n.split('.');\r
+ for (i = 0, l = n.length; i < l; i++) {\r
+ o = o[n[i]];\r
\r
- addUnload : function(f, s) {\r
- var t = this, w = window;\r
+ if (!o)\r
+ break;\r
+ }\r
\r
- f = {func : f, scope : s || this};\r
+ return o;\r
+ },\r
\r
- if (!t.unloads) {\r
- function unload() {\r
- var li = t.unloads, o, n;\r
+ addUnload : function(f, s) {\r
+ var t = this;\r
\r
- if (li) {\r
- // Call unload handlers\r
- for (n in li) {\r
- o = li[n];\r
+ f = {func : f, scope : s || this};\r
\r
- if (o && o.func)\r
- o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy\r
- }\r
+ if (!t.unloads) {\r
+ function unload() {\r
+ var li = t.unloads, o, n;\r
\r
- // Detach unload function\r
- if (w.detachEvent) {\r
- w.detachEvent('onbeforeunload', fakeUnload);\r
- w.detachEvent('onunload', unload);\r
- } else if (w.removeEventListener)\r
- w.removeEventListener('unload', unload, false);\r
+ if (li) {\r
+ // Call unload handlers\r
+ for (n in li) {\r
+ o = li[n];\r
\r
- // Destroy references\r
- t.unloads = o = li = w = unload = null;\r
+ if (o && o.func)\r
+ o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy\r
+ }\r
\r
- // Run garbarge collector on IE\r
- if (window.CollectGarbage)\r
- window.CollectGarbage();\r
- }\r
- };\r
+ // Detach unload function\r
+ if (win.detachEvent) {\r
+ win.detachEvent('onbeforeunload', fakeUnload);\r
+ win.detachEvent('onunload', unload);\r
+ } else if (win.removeEventListener)\r
+ win.removeEventListener('unload', unload, false);\r
\r
- function fakeUnload() {\r
- var d = document;\r
+ // Destroy references\r
+ t.unloads = o = li = w = unload = 0;\r
\r
- // Is there things still loading, then do some magic\r
- if (d.readyState == 'interactive') {\r
- function stop() {\r
- // Prevent memory leak\r
- d.detachEvent('onstop', stop);\r
+ // Run garbarge collector on IE\r
+ if (win.CollectGarbage)\r
+ CollectGarbage();\r
+ }\r
+ };\r
\r
- // Call unload handler\r
- unload();\r
+ function fakeUnload() {\r
+ var d = document;\r
\r
- d = null;\r
- };\r
+ // Is there things still loading, then do some magic\r
+ if (d.readyState == 'interactive') {\r
+ function stop() {\r
+ // Prevent memory leak\r
+ d.detachEvent('onstop', stop);\r
\r
- // Fire unload when the currently loading page is stopped\r
- d.attachEvent('onstop', stop);\r
+ // Call unload handler\r
+ if (unload)\r
+ unload();\r
\r
- // Remove onstop listener after a while to prevent the unload function\r
- // to execute if the user presses cancel in an onbeforeunload\r
- // confirm dialog and then presses the browser stop button\r
- window.setTimeout(function() {\r
- d.detachEvent('onstop', stop);\r
- }, 0);\r
- }\r
- };\r
+ d = 0;\r
+ };\r
\r
- // Attach unload handler\r
- if (w.attachEvent) {\r
- w.attachEvent('onunload', unload);\r
- w.attachEvent('onbeforeunload', fakeUnload);\r
- } else if (w.addEventListener)\r
- w.addEventListener('unload', unload, false);\r
+ // Fire unload when the currently loading page is stopped\r
+ if (d)\r
+ d.attachEvent('onstop', stop);\r
+\r
+ // Remove onstop listener after a while to prevent the unload function\r
+ // to execute if the user presses cancel in an onbeforeunload\r
+ // confirm dialog and then presses the browser stop button\r
+ win.setTimeout(function() {\r
+ if (d)\r
+ d.detachEvent('onstop', stop);\r
+ }, 0);\r
+ }\r
+ };\r
\r
- // Setup initial unload handler array\r
- t.unloads = [f];\r
- } else\r
- t.unloads.push(f);\r
+ // Attach unload handler\r
+ if (win.attachEvent) {\r
+ win.attachEvent('onunload', unload);\r
+ win.attachEvent('onbeforeunload', fakeUnload);\r
+ } else if (win.addEventListener)\r
+ win.addEventListener('unload', unload, false);\r
\r
- return f;\r
- },\r
+ // Setup initial unload handler array\r
+ t.unloads = [f];\r
+ } else\r
+ t.unloads.push(f);\r
\r
- removeUnload : function(f) {\r
- var u = this.unloads, r = null;\r
+ return f;\r
+ },\r
\r
- tinymce.each(u, function(o, i) {\r
- if (o && o.func == f) {\r
- u.splice(i, 1);\r
- r = f;\r
- return false;\r
- }\r
- });\r
+ removeUnload : function(f) {\r
+ var u = this.unloads, r = null;\r
\r
- return r;\r
- },\r
+ tinymce.each(u, function(o, i) {\r
+ if (o && o.func == f) {\r
+ u.splice(i, 1);\r
+ r = f;\r
+ return false;\r
+ }\r
+ });\r
\r
- explode : function(s, d) {\r
- return s ? tinymce.map(s.split(d || ','), tinymce.trim) : s;\r
- },\r
+ return r;\r
+ },\r
\r
- _addVer : function(u) {\r
- var v;\r
+ explode : function(s, d) {\r
+ return s ? tinymce.map(s.split(d || ','), tinymce.trim) : s;\r
+ },\r
\r
- if (!this.query)\r
- return u;\r
+ _addVer : function(u) {\r
+ var v;\r
\r
- v = (u.indexOf('?') == -1 ? '?' : '&') + this.query;\r
+ if (!this.query)\r
+ return u;\r
\r
- if (u.indexOf('#') == -1)\r
- return u + v;\r
+ v = (u.indexOf('?') == -1 ? '?' : '&') + this.query;\r
\r
- return u.replace('#', v + '#');\r
- }\r
+ if (u.indexOf('#') == -1)\r
+ return u + v;\r
\r
- };\r
+ return u.replace('#', v + '#');\r
+ },\r
\r
-// Required for GZip AJAX loading\r
-window.tinymce = tinymce;\r
+ // Fix function for IE 9 where regexps isn't working correctly\r
+ // Todo: remove me once MS fixes the bug\r
+ _replace : function(find, replace, str) {\r
+ // On IE9 we have to fake $x replacement\r
+ if (isRegExpBroken) {\r
+ return str.replace(find, function() {\r
+ var val = replace, args = arguments, i;\r
+\r
+ for (i = 0; i < args.length - 2; i++) {\r
+ if (args[i] === undefined) {\r
+ val = val.replace(new RegExp('\\$' + i, 'g'), '');\r
+ } else {\r
+ val = val.replace(new RegExp('\\$' + i, 'g'), args[i]);\r
+ }\r
+ }\r
\r
-// Initialize the API\r
-tinymce._init();\r
+ return val;\r
+ });\r
+ }\r
\r
-/* file:jscripts/tiny_mce/classes/adapter/jquery/adapter.js */\r
+ return str.replace(find, replace);\r
+ }\r
\r
+ };\r
\r
-/* file:jscripts/tiny_mce/classes/adapter/prototype/adapter.js */\r
+ // Initialize the API\r
+ tinymce._init();\r
\r
+ // Expose tinymce namespace to the global namespace (window)\r
+ win.tinymce = win.tinyMCE = tinymce;\r
+})(window);\r
\r
-/* file:jscripts/tiny_mce/classes/util/Dispatcher.js */\r
\r
tinymce.create('tinymce.util.Dispatcher', {\r
scope : null,\r
\r
});\r
\r
-/* file:jscripts/tiny_mce/classes/util/URI.js */\r
-\r
(function() {\r
var each = tinymce.each;\r
\r
URI : function(u, s) {\r
var t = this, o, a, b;\r
\r
+ // Trim whitespace\r
+ u = tinymce.trim(u);\r
+\r
// Default settings\r
s = t.settings = s || {};\r
\r
// Strange app protocol or local anchor\r
- if (/^(mailto|news|javascript|about):/i.test(u) || /^\s*#/.test(u)) {\r
+ if (/^(mailto|tel|news|javascript|about|data):/i.test(u) || /^\s*#/.test(u)) {\r
t.source = u;\r
return;\r
}\r
if (u.indexOf('/') === 0 && u.indexOf('//') !== 0)\r
u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u;\r
\r
- // Relative path\r
- if (u.indexOf(':/') === -1 && u.indexOf('//') !== 0)\r
+ // Relative path http:// or protocol relative //path\r
+ if (!/^\w*:?\/\//.test(u))\r
u = (s.base_uri.protocol || 'http') + '://mce_host' + t.toAbsPath(s.base_uri.path, u);\r
\r
// Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri)\r
toAbsolute : function(u, nh) {\r
var u = new tinymce.util.URI(u, {base_uri : this});\r
\r
- return u.getURI(this.host == u.host ? nh : 0);\r
+ return u.getURI(this.host == u.host && this.protocol == u.protocol ? nh : 0);\r
},\r
\r
toRelPath : function(base, path) {\r
},\r
\r
toAbsPath : function(base, path) {\r
- var i, nb = 0, o = [];\r
+ var i, nb = 0, o = [], tr, outPath;\r
\r
// Split paths\r
+ tr = /\/$/.test(path) ? '/' : '';\r
base = base.split('/');\r
path = path.split('/');\r
\r
\r
// If /a/b/c or /\r
if (i <= 0)\r
- return '/' + o.reverse().join('/');\r
+ outPath = o.reverse().join('/');\r
+ else\r
+ outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');\r
+\r
+ // Add front / if it's needed\r
+ if (outPath.indexOf('/') !== 0)\r
+ outPath = '/' + outPath;\r
\r
- return '/' + base.slice(0, i).join('/') + '/' + o.reverse().join('/');\r
+ // Add traling / if it's needed\r
+ if (tr && outPath.lastIndexOf('/') !== outPath.length - 1)\r
+ outPath += tr;\r
+\r
+ return outPath;\r
},\r
\r
getURI : function(nh) {\r
\r
return t.source;\r
}\r
-\r
- });\r
+ });\r
})();\r
\r
-/* file:jscripts/tiny_mce/classes/util/Cookie.js */\r
-\r
(function() {\r
var each = tinymce.each;\r
\r
\r
this.set(n, '', d, p, d);\r
}\r
-\r
- });\r
+ });\r
})();\r
\r
-/* file:jscripts/tiny_mce/classes/util/JSON.js */\r
-\r
tinymce.create('static tinymce.util.JSON', {\r
serialize : function(o) {\r
var i, v, s = tinymce.util.JSON.serialize, t;\r
}\r
\r
if (t == 'object') {\r
- if (o instanceof Array) {\r
+ if (o.hasOwnProperty && o instanceof Array) {\r
for (i=0, v = '['; i<o.length; i++)\r
v += (i > 0 ? ',' : '') + s(o[i]);\r
\r
\r
});\r
\r
-/* file:jscripts/tiny_mce/classes/util/XHR.js */\r
-\r
tinymce.create('static tinymce.util.XHR', {\r
send : function(o) {\r
var x, t, w = window, c = 0;\r
if (o.content_type)\r
x.setRequestHeader('Content-Type', o.content_type);\r
\r
+ x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r
+\r
x.send(o.data);\r
\r
function ready() {\r
// Wait for response, onReadyStateChange can not be used since it leaks memory in IE\r
t = w.setTimeout(ready, 10);\r
}\r
-\r
- }\r
+ }\r
});\r
\r
-/* file:jscripts/tiny_mce/classes/util/JSONRequest.js */\r
-\r
(function() {\r
var extend = tinymce.extend, JSON = tinymce.util.JSON, XHR = tinymce.util.XHR;\r
\r
return new tinymce.util.JSONRequest().send(o);\r
}\r
}\r
-\r
- });\r
+ });\r
}());\r
-/* file:jscripts/tiny_mce/classes/dom/DOMUtils.js */\r
-\r
-(function() {\r
+(function(tinymce) {\r
// Shorten names\r
- var each = tinymce.each, is = tinymce.is;\r
- var isWebKit = tinymce.isWebKit, isIE = tinymce.isIE;\r
+ var each = tinymce.each,\r
+ is = tinymce.is,\r
+ isWebKit = tinymce.isWebKit,\r
+ isIE = tinymce.isIE,\r
+ blockRe = /^(H[1-6R]|P|DIV|ADDRESS|PRE|FORM|T(ABLE|BODY|HEAD|FOOT|H|R|D)|LI|OL|UL|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|MENU|ISINDEX|SAMP)$/,\r
+ boolAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'),\r
+ mceAttribs = makeMap('src,href,style,coords,shape'),\r
+ encodedChars = {'&' : '&', '"' : '"', '<' : '<', '>' : '>'},\r
+ encodeCharsRe = /[<>&\"]/g,\r
+ simpleSelectorRe = /^([a-z0-9],?)+$/i,\r
+ tagRegExp = /<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)(\s*\/?)>/g,\r
+ attrRegExp = /(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;\r
+\r
+ function makeMap(str) {\r
+ var map = {}, i;\r
+\r
+ str = str.split(',');\r
+ for (i = str.length; i >= 0; i--)\r
+ map[str[i]] = 1;\r
+\r
+ return map;\r
+ };\r
\r
tinymce.create('tinymce.dom.DOMUtils', {\r
doc : null,\r
root : null,\r
files : null,\r
- listeners : {},\r
pixelStyles : /^(top|left|bottom|right|width|height|borderWidth)$/,\r
- cache : {},\r
- idPattern : /^#[\w]+$/,\r
- elmPattern : /^[\w_*]+$/,\r
- elmClassPattern : /^([\w_]*)\.([\w_]+)$/,\r
props : {\r
"for" : "htmlFor",\r
"class" : "className",\r
},\r
\r
DOMUtils : function(d, s) {\r
- var t = this;\r
+ var t = this, globalStyle;\r
\r
t.doc = d;\r
t.win = window;\r
t.files = {};\r
t.cssFlicker = false;\r
t.counter = 0;\r
- t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat"; \r
- t.stdMode = d.documentMode === 8;\r
+ t.stdMode = d.documentMode >= 8;\r
+ t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat" || t.stdMode;\r
\r
- this.settings = s = tinymce.extend({\r
+ t.settings = s = tinymce.extend({\r
keep_values : false,\r
hex_colors : 1,\r
process_html : 1\r
}\r
}\r
\r
+ // Build styles list\r
+ if (s.valid_styles) {\r
+ t._styles = {};\r
+\r
+ // Convert styles into a rule list\r
+ each(s.valid_styles, function(value, key) {\r
+ t._styles[key] = tinymce.explode(value);\r
+ });\r
+ }\r
+\r
tinymce.addUnload(t.destroy, t);\r
},\r
\r
},\r
\r
getParent : function(n, f, r) {\r
- var na, se = this.settings;\r
+ return this.getParents(n, f, r, false);\r
+ },\r
\r
- n = this.get(n);\r
+ getParents : function(n, f, r, c) {\r
+ var t = this, na, se = t.settings, o = [];\r
+\r
+ n = t.get(n);\r
+ c = c === undefined;\r
\r
if (se.strict_root)\r
- r = r || this.getRoot();\r
+ r = r || t.getRoot();\r
\r
// Wrap node name as func\r
if (is(f, 'string')) {\r
- na = f.toUpperCase();\r
-\r
- f = function(n) {\r
- var s = false;\r
-\r
- // Any element\r
- if (n.nodeType == 1 && na === '*') {\r
- s = true;\r
- return false;\r
- }\r
-\r
- each(na.split(','), function(v) {\r
- if (n.nodeType == 1 && ((se.strict && n.nodeName.toUpperCase() == v) || n.nodeName.toUpperCase() == v)) {\r
- s = true;\r
- return false; // Break loop\r
- }\r
- });\r
+ na = f;\r
\r
- return s;\r
- };\r
+ if (f === '*') {\r
+ f = function(n) {return n.nodeType == 1;};\r
+ } else {\r
+ f = function(n) {\r
+ return t.is(n, na);\r
+ };\r
+ }\r
}\r
\r
while (n) {\r
- if (n == r)\r
- return null;\r
+ if (n == r || !n.nodeType || n.nodeType === 9)\r
+ break;\r
\r
- if (f(n))\r
- return n;\r
+ if (!f || f(n)) {\r
+ if (c)\r
+ o.push(n);\r
+ else\r
+ return n;\r
+ }\r
\r
n = n.parentNode;\r
}\r
\r
- return null;\r
+ return c ? o : null;\r
},\r
\r
get : function(e) {\r
return e;\r
},\r
\r
- \r
- // #if !jquery\r
+ getNext : function(node, selector) {\r
+ return this._findSib(node, selector, 'nextSibling');\r
+ },\r
\r
- select : function(pa, s) {\r
- var t = this, cs, c, pl, o = [], x, i, l, n, xp;\r
+ getPrev : function(node, selector) {\r
+ return this._findSib(node, selector, 'previousSibling');\r
+ },\r
\r
- s = t.get(s) || t.doc;\r
\r
- // Look for native support and use that if it's found\r
- if (s.querySelectorAll) {\r
- // Element scope then use temp id\r
- // We need to do this to be compatible with other implementations\r
- // See bug report: http://bugs.webkit.org/show_bug.cgi?id=17461\r
- if (s != t.doc) {\r
- i = s.id;\r
- s.id = '_mc_tmp';\r
- pa = '#_mc_tmp ' + pa;\r
- }\r
+ select : function(pa, s) {\r
+ var t = this;\r
\r
- // Select elements\r
- l = tinymce.grep(s.querySelectorAll(pa));\r
+ return tinymce.dom.Sizzle(pa, t.get(s) || t.get(t.settings.root_element) || t.doc, []);\r
+ },\r
\r
- // Restore old id\r
- s.id = i;\r
+ is : function(n, selector) {\r
+ var i;\r
\r
- return l;\r
- }\r
+ // If it isn't an array then try to do some simple selectors instead of Sizzle for to boost performance\r
+ if (n.length === undefined) {\r
+ // Simple all selector\r
+ if (selector === '*')\r
+ return n.nodeType == 1;\r
\r
- if (!t.selectorRe)\r
- t.selectorRe = /^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@([\w\\]+)([\^\$\*!]?=)([\w\\]+)\])?(?:\:([\w\\]+))?/i;;\r
+ // Simple selector just elements\r
+ if (simpleSelectorRe.test(selector)) {\r
+ selector = selector.toLowerCase().split(/,/);\r
+ n = n.nodeName.toLowerCase();\r
\r
- // Air doesn't support eval due to security sandboxing and querySelectorAll isn't supported yet\r
- if (tinymce.isAir) {\r
- each(tinymce.explode(pa), function(v) {\r
- if (!(xp = t.cache[v])) {\r
- xp = '';\r
+ for (i = selector.length - 1; i >= 0; i--) {\r
+ if (selector[i] == n)\r
+ return true;\r
+ }\r
\r
- each(v.split(' '), function(v) {\r
- v = t.selectorRe.exec(v);\r
+ return false;\r
+ }\r
+ }\r
\r
- xp += v[1] ? '//' + v[1] : '//*';\r
+ return tinymce.dom.Sizzle.matches(selector, n.nodeType ? [n] : n).length > 0;\r
+ },\r
\r
- // Id\r
- if (v[2])\r
- xp += "[@id='" + v[2] + "']";\r
\r
- // Class\r
- if (v[3]) {\r
- each(v[3].split('.'), function(n) {\r
- xp += "[@class = '" + n + "' or contains(concat(' ', @class, ' '), ' " + n + " ')]";\r
- });\r
- }\r
- });\r
+ add : function(p, n, a, h, c) {\r
+ var t = this;\r
\r
- t.cache[v] = xp;\r
- }\r
+ return this.run(p, function(p) {\r
+ var e, k;\r
\r
- xp = t.doc.evaluate(xp, s, null, 4, null);\r
-\r
- while (n = xp.iterateNext())\r
- o.push(n);\r
- });\r
-\r
- return o;\r
- }\r
-\r
- if (t.settings.strict) {\r
- function get(s, n) {\r
- return s.getElementsByTagName(n.toLowerCase());\r
- };\r
- } else {\r
- function get(s, n) {\r
- return s.getElementsByTagName(n);\r
- };\r
- }\r
-\r
- // Simple element pattern. For example: "p" or "*"\r
- if (t.elmPattern.test(pa)) {\r
- x = get(s, pa);\r
-\r
- for (i = 0, l = x.length; i<l; i++)\r
- o.push(x[i]);\r
-\r
- return o;\r
- }\r
-\r
- // Simple class pattern. For example: "p.class" or ".class"\r
- if (t.elmClassPattern.test(pa)) {\r
- pl = t.elmClassPattern.exec(pa);\r
- x = get(s, pl[1] || '*');\r
- c = ' ' + pl[2] + ' ';\r
-\r
- for (i = 0, l = x.length; i<l; i++) {\r
- n = x[i];\r
-\r
- if (n.className && (' ' + n.className + ' ').indexOf(c) !== -1)\r
- o.push(n);\r
- }\r
-\r
- return o;\r
- }\r
-\r
- function collect(n) {\r
- if (!n.mce_save) {\r
- n.mce_save = 1;\r
- o.push(n);\r
- }\r
- };\r
-\r
- function collectIE(n) {\r
- if (!n.getAttribute('mce_save')) {\r
- n.setAttribute('mce_save', '1');\r
- o.push(n);\r
- }\r
- };\r
-\r
- function find(n, f, r) {\r
- var i, l, nl = get(r, n);\r
-\r
- for (i = 0, l = nl.length; i < l; i++)\r
- f(nl[i]);\r
- };\r
-\r
- each(pa.split(','), function(v, i) {\r
- v = tinymce.trim(v);\r
-\r
- // Simple element pattern, most common in TinyMCE\r
- if (t.elmPattern.test(v)) {\r
- each(get(s, v), function(n) {\r
- collect(n);\r
- });\r
-\r
- return;\r
- }\r
-\r
- // Simple element pattern with class, fairly common in TinyMCE\r
- if (t.elmClassPattern.test(v)) {\r
- x = t.elmClassPattern.exec(v);\r
-\r
- each(get(s, x[1]), function(n) {\r
- if (t.hasClass(n, x[2]))\r
- collect(n);\r
- });\r
-\r
- return;\r
- }\r
-\r
- if (!(cs = t.cache[pa])) {\r
- cs = 'x=(function(cf, s) {';\r
- pl = v.split(' ');\r
-\r
- each(pl, function(v) {\r
- var p = t.selectorRe.exec(v);\r
-\r
- // Find elements\r
- p[1] = p[1] || '*';\r
- cs += 'find("' + p[1] + '", function(n) {';\r
-\r
- // Check id\r
- if (p[2])\r
- cs += 'if (n.id !== "' + p[2] + '") return;';\r
-\r
- // Check classes\r
- if (p[3]) {\r
- cs += 'var c = " " + n.className + " ";';\r
- cs += 'if (';\r
- c = '';\r
- each(p[3].split('.'), function(v) {\r
- if (v)\r
- c += (c ? '||' : '') + 'c.indexOf(" ' + v + ' ") === -1';\r
- });\r
- cs += c + ') return;';\r
- }\r
- });\r
-\r
- cs += 'cf(n);';\r
-\r
- for (i = pl.length - 1; i >= 0; i--)\r
- cs += '}, ' + (i ? 'n' : 's') + ');';\r
-\r
- cs += '})';\r
-\r
- // Compile CSS pattern function\r
- t.cache[pa] = cs = eval(cs);\r
- }\r
-\r
- // Run selector function\r
- cs(isIE ? collectIE : collect, s);\r
- });\r
-\r
- // Cleanup\r
- each(o, function(n) {\r
- if (isIE)\r
- n.removeAttribute('mce_save');\r
- else\r
- delete n.mce_save;\r
- });\r
-\r
- return o;\r
- },\r
-\r
- // #endif\r
-\r
- add : function(p, n, a, h, c) {\r
- var t = this;\r
-\r
- return this.run(p, function(p) {\r
- var e, k;\r
-\r
- e = is(n, 'string') ? t.doc.createElement(n) : n;\r
- t.setAttribs(e, a);\r
+ e = is(n, 'string') ? t.doc.createElement(n) : n;\r
+ t.setAttribs(e, a);\r
\r
if (h) {\r
if (h.nodeType)\r
o += ' ' + k + '="' + t.encode(a[k]) + '"';\r
}\r
\r
- if (tinymce.is(h))\r
+ // A call to tinymce.is doesn't work for some odd reason on IE9 possible bug inside their JS runtime\r
+ if (typeof(h) != "undefined")\r
return o + '>' + h + '</' + n + '>';\r
\r
return o + ' />';\r
},\r
\r
- remove : function(n, k) {\r
- return this.run(n, function(n) {\r
- var p, g;\r
+ remove : function(node, keep_children) {\r
+ return this.run(node, function(node) {\r
+ var parent, child;\r
\r
- p = n.parentNode;\r
+ parent = node.parentNode;\r
\r
- if (!p)\r
+ if (!parent)\r
return null;\r
\r
- if (k) {\r
- each (n.childNodes, function(c) {\r
- p.insertBefore(c.cloneNode(true), n);\r
- });\r
+ if (keep_children) {\r
+ while (child = node.firstChild) {\r
+ // IE 8 will crash if you don't remove completely empty text nodes\r
+ if (!tinymce.isIE || child.nodeType !== 3 || child.nodeValue)\r
+ parent.insertBefore(child, node);\r
+ else\r
+ node.removeChild(child);\r
+ }\r
}\r
\r
- // Fix IE psuedo leak\r
- /* if (isIE) {\r
- p = n.cloneNode(true);\r
- n.outerHTML = '';\r
-\r
- return p;\r
- }*/\r
-\r
- return p.removeChild(n);\r
+ return parent.removeChild(node);\r
});\r
},\r
\r
- // #if !jquery\r
-\r
setStyle : function(n, na, v) {\r
var t = this;\r
\r
\r
// Force update of the style data\r
if (t.settings.update_styles)\r
- t.setAttrib(e, 'mce_style');\r
+ t.setAttrib(e, '_mce_style');\r
});\r
},\r
\r
// No mce_style for elements with these since they might get resized by the user\r
if (s.keep_values) {\r
if (v && !t._isRes(v))\r
- e.setAttribute('mce_style', v, 2);\r
+ e.setAttribute('_mce_style', v, 2);\r
else\r
- e.removeAttribute('mce_style', 2);\r
+ e.removeAttribute('_mce_style', 2);\r
}\r
\r
e.style.cssText = v;\r
if (s.url_converter)\r
v = s.url_converter.call(s.url_converter_scope || t, v, n, e);\r
\r
- t.setAttrib(e, 'mce_' + n, v, 2);\r
+ t.setAttrib(e, '_mce_' + n, v, 2);\r
}\r
\r
break;\r
\r
case "shape":\r
- e.setAttribute('mce_style', v);\r
+ e.setAttribute('_mce_style', v);\r
break;\r
}\r
\r
});\r
},\r
\r
- // #endif\r
-\r
getAttrib : function(e, n, dv) {\r
var v, t = this;\r
\r
\r
// Try the mce variant for these\r
if (/^(src|href|style|coords|shape)$/.test(n)) {\r
- v = e.getAttribute("mce_" + n);\r
+ v = e.getAttribute("_mce_" + n);\r
\r
if (v)\r
return v;\r
if (!v)\r
v = e.getAttribute(n, 2);\r
\r
+ // Check boolean attribs\r
+ if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(n)) {\r
+ if (e[t.props[n]] === true && v === '')\r
+ return n;\r
+\r
+ return v ? n : '';\r
+ }\r
+\r
+ // Inner input elements will override attributes on form elements\r
+ if (e.nodeName === "FORM" && e.getAttributeNode(n))\r
+ return e.getAttributeNode(n).nodeValue;\r
+\r
if (n === 'style') {\r
v = v || e.style.cssText;\r
\r
if (v) {\r
- v = t.serializeStyle(t.parseStyle(v));\r
+ v = t.serializeStyle(t.parseStyle(v), e.nodeName);\r
\r
if (t.settings.keep_values && !t._isRes(v))\r
- e.setAttribute('mce_style', v);\r
+ e.setAttribute('_mce_style', v);\r
}\r
}\r
\r
\r
case 'size':\r
// IE returns +0 as default value for size\r
- if (v === '+0' || v === 20)\r
+ if (v === '+0' || v === 20 || v === 0)\r
v = '';\r
\r
break;\r
\r
break;\r
\r
+ case 'multiple':\r
case 'compact':\r
case 'noshade':\r
case 'nowrap':\r
default:\r
// IE has odd anonymous function for event attributes\r
if (n.indexOf('on') === 0 && v)\r
- v = ('' + v).replace(/^function\s+anonymous\(\)\s+\{\s+(.*)\s+\}$/, '$1');\r
+ v = tinymce._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1', '' + v);\r
}\r
}\r
\r
return (v !== undefined && v !== null && v !== '') ? '' + v : dv;\r
},\r
\r
- getPos : function(n) {\r
+ getPos : function(n, ro) {\r
var t = this, x = 0, y = 0, e, d = t.doc, r;\r
\r
n = t.get(n);\r
+ ro = ro || d.body;\r
\r
- // Use getBoundingClientRect on IE, Opera has it but it's not perfect\r
- if (n && isIE) {\r
- n = n.getBoundingClientRect();\r
- e = t.boxModel ? d.documentElement : d.body;\r
- x = t.getStyle(t.select('html')[0], 'borderWidth'); // Remove border\r
- x = (x == 'medium' || t.boxModel && !t.isIE6) && 2 || x;\r
- n.top += t.win.self != t.win.top ? 2 : 0; // IE adds some strange extra cord if used in a frameset\r
+ if (n) {\r
+ // Use getBoundingClientRect on IE, Opera has it but it's not perfect\r
+ if (isIE && !t.stdMode) {\r
+ n = n.getBoundingClientRect();\r
+ e = t.boxModel ? d.documentElement : d.body;\r
+ x = t.getStyle(t.select('html')[0], 'borderWidth'); // Remove border\r
+ x = (x == 'medium' || t.boxModel && !t.isIE6) && 2 || x;\r
\r
- return {x : n.left + e.scrollLeft - x, y : n.top + e.scrollTop - x};\r
- }\r
+ return {x : n.left + e.scrollLeft - x, y : n.top + e.scrollTop - x};\r
+ }\r
\r
- r = n;\r
- while (r) {\r
- x += r.offsetLeft || 0;\r
- y += r.offsetTop || 0;\r
- r = r.offsetParent;\r
- }\r
+ r = n;\r
+ while (r && r != ro && r.nodeType) {\r
+ x += r.offsetLeft || 0;\r
+ y += r.offsetTop || 0;\r
+ r = r.offsetParent;\r
+ }\r
\r
- r = n;\r
- while (r) {\r
- // Opera 9.25 bug fix, fixed in 9.50\r
- if (!/^table-row|inline.*/i.test(t.getStyle(r, "display", 1))) {\r
+ r = n.parentNode;\r
+ while (r && r != ro && r.nodeType) {\r
x -= r.scrollLeft || 0;\r
y -= r.scrollTop || 0;\r
+ r = r.parentNode;\r
}\r
-\r
- r = r.parentNode;\r
-\r
- if (r == d.body)\r
- break;\r
}\r
\r
return {x : x, y : y};\r
return o;\r
},\r
\r
- serializeStyle : function(o) {\r
- var s = '';\r
+ serializeStyle : function(o, name) {\r
+ var t = this, s = '';\r
\r
- each(o, function(v, k) {\r
+ function add(v, k) {\r
if (k && v) {\r
- if (tinymce.isGecko && k.indexOf('-moz-') === 0)\r
+ // Remove browser specific styles like -moz- or -webkit-\r
+ if (k.indexOf('-') === 0)\r
return;\r
\r
switch (k) {\r
+ case 'font-weight':\r
+ // Opera will output bold as 700\r
+ if (v == 700)\r
+ v = 'bold';\r
+\r
+ break;\r
+\r
case 'color':\r
case 'background-color':\r
v = v.toLowerCase();\r
\r
s += (s ? ' ' : '') + k + ': ' + v + ';';\r
}\r
- });\r
+ };\r
+\r
+ // Validate style output\r
+ if (name && t._styles) {\r
+ each(t._styles['*'], function(name) {\r
+ add(o[name], name);\r
+ });\r
+\r
+ each(t._styles[name.toLowerCase()], function(name) {\r
+ add(o[name], name);\r
+ });\r
+ } else\r
+ each(o, add);\r
\r
return s;\r
},\r
\r
loadCSS : function(u) {\r
- var t = this, d = t.doc;\r
+ var t = this, d = t.doc, head;\r
\r
if (!u)\r
u = '';\r
\r
+ head = t.select('head')[0];\r
+\r
each(u.split(','), function(u) {\r
+ var link;\r
+\r
if (t.files[u])\r
return;\r
\r
t.files[u] = true;\r
- t.add(t.select('head')[0], 'link', {rel : 'stylesheet', href : tinymce._addVer(u)});\r
+ link = t.create('link', {rel : 'stylesheet', href : tinymce._addVer(u)});\r
+\r
+ // IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug\r
+ // This fix seems to resolve that issue by realcing the document ones a stylesheet finishes loading\r
+ // It's ugly but it seems to work fine.\r
+ if (isIE && d.documentMode && d.recalc) {\r
+ link.onload = function() {\r
+ d.recalc();\r
+ link.onload = null;\r
+ };\r
+ }\r
+\r
+ head.appendChild(link);\r
});\r
},\r
\r
- // #if !jquery\r
-\r
addClass : function(e, c) {\r
return this.run(e, function(e) {\r
var o;\r
re = new RegExp("(^|\\s+)" + c + "(\\s+|$)", "g");\r
\r
v = e.className.replace(re, ' ');\r
+ v = tinymce.trim(v != ' ' ? v : '');\r
+\r
+ e.className = v;\r
+\r
+ // Empty class attr\r
+ if (!v) {\r
+ e.removeAttribute('class');\r
+ e.removeAttribute('className');\r
+ }\r
\r
- return e.className = tinymce.trim(v != ' ' ? v : '');\r
+ return v;\r
}\r
\r
return e.className;\r
return !e || e.style.display == 'none' || this.getStyle(e, 'display') == 'none';\r
},\r
\r
- // #endif\r
-\r
uniqueId : function(p) {\r
return (!p ? 'mce_' : p) + (this.counter++);\r
},\r
\r
if (isIE) {\r
function set() {\r
+ // Remove all child nodes\r
+ while (e.firstChild)\r
+ e.firstChild.removeNode();\r
+\r
try {\r
// IE will remove comments from the beginning\r
// unless you padd the contents with something\r
// IE sometimes produces an unknown runtime error on innerHTML if it's an block element within a block element for example a div inside a p\r
// This seems to fix this problem\r
\r
- // Remove all child nodes\r
- while (e.firstChild)\r
- e.firstChild.removeNode();\r
-\r
// Create new div with HTML contents and a BR infront to keep comments\r
x = t.create('div');\r
x.innerHTML = '<br />' + h;\r
// DOM tree if contents like this <p><ul><li>Item 1</li></ul></p> is inserted\r
// It seems to be that IE doesn't like a root block element placed inside another root block element\r
if (t.settings.fix_ie_paragraphs)\r
- h = h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi, '<p$1 mce_keep="true"> </p>');\r
+ h = h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi, '<p$1 _mce_keep="true"> </p>');\r
\r
set();\r
\r
n = nl[i];\r
\r
if (!n.hasChildNodes()) {\r
- if (!n.mce_keep) {\r
+ if (!n._mce_keep) {\r
x = 1; // Is broken\r
break;\r
}\r
\r
- n.removeAttribute('mce_keep');\r
+ n.removeAttribute('_mce_keep');\r
}\r
}\r
}\r
if (x) {\r
// So if we replace the p elements with divs and mark them and then replace them back to paragraphs\r
// after we use innerHTML we can fix the DOM tree\r
- h = h.replace(/<p ([^>]+)>|<p>/g, '<div $1 mce_tmp="1">');\r
- h = h.replace(/<\/p>/g, '</div>');\r
+ h = h.replace(/<p ([^>]+)>|<p>/ig, '<div $1 _mce_tmp="1">');\r
+ h = h.replace(/<\/p>/gi, '</div>');\r
\r
// Set the new HTML with DIVs\r
set();\r
\r
- // Replace all DIV elements with he mce_tmp attibute back to paragraphs\r
+ // Replace all DIV elements with the _mce_tmp attibute back to paragraphs\r
// This is needed since IE has a annoying bug see above for details\r
// This is a slow process but it has to be done. :(\r
if (t.settings.fix_ie_paragraphs) {\r
n = nl[i];\r
\r
// Is it a temp div\r
- if (n.mce_tmp) {\r
+ if (n._mce_tmp) {\r
// Create new paragraph\r
p = t.doc.createElement('p');\r
\r
n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi, function(a, b) {\r
var v;\r
\r
- if (b !== 'mce_tmp') {\r
+ if (b !== '_mce_tmp') {\r
v = n.getAttribute(b);\r
\r
if (!v && b === 'class')\r
},\r
\r
processHTML : function(h) {\r
- var t = this, s = t.settings;\r
+ var t = this, s = t.settings, codeBlocks = [];\r
\r
if (!s.process_html)\r
return h;\r
\r
- // Convert strong and em to b and i in FF since it can't handle them\r
- if (tinymce.isGecko) {\r
- h = h.replace(/<(\/?)strong>|<strong( [^>]+)>/gi, '<$1b$2>');\r
- h = h.replace(/<(\/?)em>|<em( [^>]+)>/gi, '<$1i$2>');\r
- } else if (isIE) {\r
+ if (isIE) {\r
h = h.replace(/'/g, '''); // IE can't handle apos\r
h = h.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi, ''); // IE doesn't handle default values correct\r
}\r
\r
- // Fix some issues\r
- h = h.replace(/<a( )([^>]+)\/>|<a\/>/gi, '<a$1$2></a>'); // Force open\r
+ // Force tags open, and on IE9 replace $1$2 that got left behind due to bugs in their RegExp engine\r
+ h = tinymce._replace(/<a( )([^>]+)\/>|<a\/>/gi, '<a$1$2></a>', h); // Force open\r
\r
- // Store away src and href in mce_src and mce_href since browsers mess them up\r
+ // Store away src and href in _mce_src and mce_href since browsers mess them up\r
if (s.keep_values) {\r
// Wrap scripts and styles in comments for serialization purposes\r
- if (/<script|style/.test(h)) {\r
+ if (/<script|noscript|style/i.test(h)) {\r
function trim(s) {\r
// Remove prefix and suffix code for element\r
s = s.replace(/(<!--\[CDATA\[|\]\]-->)/g, '\n');\r
return s;\r
};\r
\r
- // Preserve script elements\r
- h = h.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/g, function(v, a, b) {\r
- // Remove prefix and suffix code for script element\r
- b = trim(b);\r
-\r
+ // Wrap the script contents in CDATA and keep them from executing\r
+ h = h.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/gi, function(v, attribs, text) {\r
// Force type attribute\r
- if (!a)\r
- a = ' type="text/javascript"';\r
+ if (!attribs)\r
+ attribs = ' type="text/javascript"';\r
+\r
+ // Convert the src attribute of the scripts\r
+ attribs = attribs.replace(/src=\"([^\"]+)\"?/i, function(a, url) {\r
+ if (s.url_converter)\r
+ url = t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(url), 'src', 'script'));\r
+\r
+ return '_mce_src="' + url + '"';\r
+ });\r
\r
- // Wrap contents in a comment\r
- if (b)\r
- b = '<!--\n' + b + '\n// -->';\r
+ // Wrap text contents\r
+ if (tinymce.trim(text)) {\r
+ codeBlocks.push(trim(text));\r
+ text = '<!--\nMCE_SCRIPT:' + (codeBlocks.length - 1) + '\n// -->';\r
+ }\r
\r
- // Output fake element\r
- return '<mce:script' + a + '>' + b + '</mce:script>';\r
+ return '<mce:script' + attribs + '>' + text + '</mce:script>';\r
});\r
\r
- // Preserve style elements\r
- h = h.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/g, function(v, a, b) {\r
- b = trim(b);\r
- return '<mce:style' + a + '><!--\n' + b + '\n--></mce:style><style' + a + ' mce_bogus="1">' + b + '</style>';\r
+ // Wrap style elements\r
+ h = h.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/gi, function(v, attribs, text) {\r
+ // Wrap text contents\r
+ if (text) {\r
+ codeBlocks.push(trim(text));\r
+ text = '<!--\nMCE_SCRIPT:' + (codeBlocks.length - 1) + '\n-->';\r
+ }\r
+\r
+ return '<mce:style' + attribs + '>' + text + '</mce:style><style ' + attribs + ' _mce_bogus="1">' + text + '</style>';\r
});\r
- }\r
\r
- h = h.replace(/<!\[CDATA\[([\s\S]+)\]\]>/g, '<!--[CDATA[$1]]-->');\r
+ // Wrap noscript elements\r
+ h = h.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g, function(v, attribs, text) {\r
+ return '<mce:noscript' + attribs + '><!--' + t.encode(text).replace(/--/g, '--') + '--></mce:noscript>';\r
+ });\r
+ }\r
\r
- // Process all tags with src, href or style\r
- h = h.replace(/<([\w:]+) [^>]*(src|href|style|shape|coords)[^>]*>/gi, function(a, n) {\r
- function handle(m, b, c) {\r
- var u = c;\r
+ h = tinymce._replace(/<!\[CDATA\[([\s\S]+)\]\]>/g, '<!--[CDATA[$1]]-->', h);\r
\r
- // Tag already got a mce_ version\r
- if (a.indexOf('mce_' + b) != -1)\r
- return m;\r
+ // This function processes the attributes in the HTML string to force boolean\r
+ // attributes to the attr="attr" format and convert style, src and href to _mce_ versions\r
+ function processTags(html) {\r
+ return html.replace(tagRegExp, function(match, elm_name, attrs, end) {\r
+ return '<' + elm_name + attrs.replace(attrRegExp, function(match, name, value, val2, val3) {\r
+ var mceValue;\r
\r
- if (b == 'style') {\r
- // Why did I need this one?\r
- //if (isIE)\r
- // u = t.serializeStyle(t.parseStyle(u));\r
+ name = name.toLowerCase();\r
+ value = value || val2 || val3 || "";\r
\r
- // No mce_style for elements with these since they might get resized by the user\r
- if (t._isRes(c))\r
- return m;\r
+ // Treat boolean attributes\r
+ if (boolAttrs[name]) {\r
+ // false or 0 is treated as a missing attribute\r
+ if (value === 'false' || value === '0')\r
+ return;\r
\r
- if (s.hex_colors) {\r
- u = u.replace(/rgb\([^\)]+\)/g, function(v) {\r
- return t.toHex(v);\r
- });\r
+ return name + '="' + name + '"';\r
}\r
\r
- if (s.url_converter) {\r
- u = u.replace(/url\([\'\"]?([^\)\'\"]+)\)/g, function(x, c) {\r
- return 'url(' + t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(c), b, n)) + ')';\r
- });\r
+ // Is attribute one that needs special treatment\r
+ if (mceAttribs[name] && attrs.indexOf('_mce_' + name) == -1) {\r
+ mceValue = t.decode(value);\r
+\r
+ // Convert URLs to relative/absolute ones\r
+ if (s.url_converter && (name == "src" || name == "href"))\r
+ mceValue = s.url_converter.call(s.url_converter_scope || t, mceValue, name, elm_name);\r
+\r
+ // Process styles lowercases them and compresses them\r
+ if (name == 'style')\r
+ mceValue = t.serializeStyle(t.parseStyle(mceValue), name);\r
+\r
+ return name + '="' + value + '"' + ' _mce_' + name + '="' + t.encode(mceValue) + '"';\r
}\r
- } else if (b != 'coords' && b != 'shape') {\r
- if (s.url_converter)\r
- u = t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(c), b, n));\r
- }\r
\r
- return ' ' + b + '="' + c + '" mce_' + b + '="' + u + '"';\r
- };\r
+ return match;\r
+ }) + end + '>';\r
+ });\r
+ };\r
\r
- a = a.replace(/ (src|href|style|coords|shape)=[\"]([^\"]+)[\"]/gi, handle); // W3C\r
- a = a.replace(/ (src|href|style|coords|shape)=[\']([^\']+)[\']/gi, handle); // W3C\r
+ h = processTags(h);\r
\r
- return a.replace(/ (src|href|style|coords|shape)=([^\s\"\'>]+)/gi, handle); // IE\r
+ // Restore script blocks\r
+ h = h.replace(/MCE_SCRIPT:([0-9]+)/g, function(val, idx) {\r
+ return codeBlocks[idx];\r
});\r
}\r
\r
if (!e)\r
return null;\r
\r
- if (isIE)\r
+ if (e.outerHTML !== undefined)\r
return e.outerHTML;\r
\r
d = (e.ownerDocument || this.doc).createElement("body");\r
setOuterHTML : function(e, h, d) {\r
var t = this;\r
\r
- return this.run(e, function(e) {\r
+ function setHTML(e, h, d) {\r
var n, tp;\r
\r
+ tp = d.createElement("body");\r
+ tp.innerHTML = h;\r
+\r
+ n = tp.lastChild;\r
+ while (n) {\r
+ t.insertAfter(n.cloneNode(true), e);\r
+ n = n.previousSibling;\r
+ }\r
+\r
+ t.remove(e);\r
+ };\r
+\r
+ return this.run(e, function(e) {\r
e = t.get(e);\r
- d = d || e.ownerDocument || t.doc;\r
-\r
- if (isIE && e.nodeType == 1)\r
- e.outerHTML = h;\r
- else {\r
- tp = d.createElement("body");\r
- tp.innerHTML = h;\r
-\r
- n = tp.lastChild;\r
- while (n) {\r
- t.insertAfter(n.cloneNode(true), e);\r
- n = n.previousSibling;\r
- }\r
\r
- t.remove(e);\r
+ // Only set HTML on elements\r
+ if (e.nodeType == 1) {\r
+ d = d || e.ownerDocument || t.doc;\r
+\r
+ if (isIE) {\r
+ try {\r
+ // Try outerHTML for IE it sometimes produces an unknown runtime error\r
+ if (isIE && e.nodeType == 1)\r
+ e.outerHTML = h;\r
+ else\r
+ setHTML(e, h, d);\r
+ } catch (ex) {\r
+ // Fix for unknown runtime error\r
+ setHTML(e, h, d);\r
+ }\r
+ } else\r
+ setHTML(e, h, d);\r
}\r
});\r
},\r
var e, n, v;\r
\r
// Look for entities to decode\r
- if (/&[^;]+;/.test(s)) {\r
+ if (/&[\w#]+;/.test(s)) {\r
// Decode the entities using a div element not super efficient but less code\r
e = this.doc.createElement("div");\r
e.innerHTML = s;\r
if (n) {\r
do {\r
v += n.nodeValue;\r
- } while (n.nextSibling);\r
+ } while (n = n.nextSibling);\r
}\r
\r
return v || s;\r
return s;\r
},\r
\r
- encode : function(s) {\r
- return s ? ('' + s).replace(/[<>&\"]/g, function (c, b) {\r
- switch (c) {\r
- case '&':\r
- return '&';\r
-\r
- case '"':\r
- return '"';\r
-\r
- case '<':\r
- return '<';\r
-\r
- case '>':\r
- return '>';\r
- }\r
-\r
- return c;\r
- }) : s;\r
+ encode : function(str) {\r
+ return ('' + str).replace(encodeCharsRe, function(chr) {\r
+ return encodedChars[chr];\r
+ });\r
},\r
\r
- // #if !jquery\r
-\r
- insertAfter : function(n, r) {\r
- var t = this;\r
-\r
- r = t.get(r);\r
+ insertAfter : function(node, reference_node) {\r
+ reference_node = this.get(reference_node);\r
\r
- return this.run(n, function(n) {\r
- var p, ns;\r
+ return this.run(node, function(node) {\r
+ var parent, nextSibling;\r
\r
- p = r.parentNode;\r
- ns = r.nextSibling;\r
+ parent = reference_node.parentNode;\r
+ nextSibling = reference_node.nextSibling;\r
\r
- if (ns)\r
- p.insertBefore(n, ns);\r
+ if (nextSibling)\r
+ parent.insertBefore(node, nextSibling);\r
else\r
- p.appendChild(n);\r
+ parent.appendChild(node);\r
\r
- return n;\r
+ return node;\r
});\r
},\r
\r
- // #endif\r
-\r
isBlock : function(n) {\r
if (n.nodeType && n.nodeType !== 1)\r
return false;\r
\r
n = n.nodeName || n;\r
\r
- return /^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n);\r
+ return blockRe.test(n);\r
},\r
\r
- // #if !jquery\r
-\r
replace : function(n, o, k) {\r
+ var t = this;\r
+\r
if (is(o, 'array'))\r
n = n.cloneNode(true);\r
\r
- return this.run(o, function(o) {\r
+ return t.run(o, function(o) {\r
if (k) {\r
- each(o.childNodes, function(c) {\r
- n.appendChild(c.cloneNode(true));\r
+ each(tinymce.grep(o.childNodes), function(c) {\r
+ n.appendChild(c);\r
});\r
}\r
\r
- // Fix IE psuedo leak for elements since replacing elements if fairly common\r
- // Will break parentNode for some unknown reason\r
- /* if (isIE && o.nodeType === 1) {\r
- o.parentNode.insertBefore(n, o);\r
- o.outerHTML = '';\r
- return n;\r
- }*/\r
-\r
return o.parentNode.replaceChild(n, o);\r
});\r
},\r
\r
- // #endif\r
+ rename : function(elm, name) {\r
+ var t = this, newElm;\r
+\r
+ if (elm.nodeName != name.toUpperCase()) {\r
+ // Rename block element\r
+ newElm = t.create(name);\r
+\r
+ // Copy attribs to new block\r
+ each(t.getAttribs(elm), function(attr_node) {\r
+ t.setAttrib(newElm, attr_node.nodeName, t.getAttrib(elm, attr_node.nodeName));\r
+ });\r
+\r
+ // Replace block\r
+ t.replace(newElm, elm, 1);\r
+ }\r
+\r
+ return newElm || elm;\r
+ },\r
+\r
+ findCommonAncestor : function(a, b) {\r
+ var ps = a, pe;\r
+\r
+ while (ps) {\r
+ pe = b;\r
+\r
+ while (pe && ps != pe)\r
+ pe = pe.parentNode;\r
+\r
+ if (ps == pe)\r
+ break;\r
+\r
+ ps = ps.parentNode;\r
+ }\r
+\r
+ if (!ps && a.ownerDocument)\r
+ return a.ownerDocument.documentElement;\r
+\r
+ return ps;\r
+ },\r
\r
toHex : function(s) {\r
var c = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);\r
\r
// Remove everything but class name\r
ov = v;\r
- v = v.replace(/.*\.([a-z0-9_\-]+).*/i, '$1');\r
+ v = tinymce._replace(/.*\.([a-z0-9_\-]+).*/i, '$1', v);\r
\r
// Filter classes\r
if (f && !(v = f(v, ov)))\r
if (n.nodeName == 'OBJECT')\r
return n.attributes;\r
\r
+ // IE doesn't keep the selected attribute if you clone option elements\r
+ if (n.nodeName === 'OPTION' && this.getAttrib(n, 'selected'))\r
+ o.push({specified : 1, nodeName : 'selected'});\r
+\r
// It's crazy that this is faster in IE but it's because it returns all attributes all the time\r
- n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi, function(a, b) {\r
- o.push({specified : 1, nodeName : b});\r
+ n.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi, '').replace(/[\w:\-]+/gi, function(a) {\r
+ o.push({specified : 1, nodeName : a});\r
});\r
\r
return o;\r
destroy : function(s) {\r
var t = this;\r
\r
- t.win = t.doc = t.root = null;\r
+ if (t.events)\r
+ t.events.destroy();\r
+\r
+ t.win = t.doc = t.root = t.events = null;\r
\r
// Manual destroy then remove unload handler\r
if (!s)\r
tinymce.removeUnload(t.destroy);\r
},\r
\r
+ createRng : function() {\r
+ var d = this.doc;\r
+\r
+ return d.createRange ? d.createRange() : new tinymce.dom.Range(this);\r
+ },\r
+\r
+ nodeIndex : function(node, normalized) {\r
+ var idx = 0, lastNodeType, lastNode, nodeType;\r
+\r
+ if (node) {\r
+ for (lastNodeType = node.nodeType, node = node.previousSibling, lastNode = node; node; node = node.previousSibling) {\r
+ nodeType = node.nodeType;\r
+\r
+ // Normalize text nodes\r
+ if (normalized && nodeType == 3) {\r
+ if (nodeType == lastNodeType || !node.nodeValue.length)\r
+ continue;\r
+ }\r
+\r
+ idx++;\r
+ lastNodeType = nodeType;\r
+ }\r
+ }\r
+\r
+ return idx;\r
+ },\r
+\r
+ split : function(pe, e, re) {\r
+ var t = this, r = t.createRng(), bef, aft, pa;\r
+\r
+ // W3C valid browsers tend to leave empty nodes to the left/right side of the contents, this makes sense\r
+ // but we don't want that in our code since it serves no purpose for the end user\r
+ // For example if this is chopped:\r
+ // <p>text 1<span><b>CHOP</b></span>text 2</p>\r
+ // would produce:\r
+ // <p>text 1<span></span></p><b>CHOP</b><p><span></span>text 2</p>\r
+ // this function will then trim of empty edges and produce:\r
+ // <p>text 1</p><b>CHOP</b><p>text 2</p>\r
+ function trim(node) {\r
+ var i, children = node.childNodes;\r
+\r
+ if (node.nodeType == 1 && node.getAttribute('_mce_type') == 'bookmark')\r
+ return;\r
+\r
+ for (i = children.length - 1; i >= 0; i--)\r
+ trim(children[i]);\r
+\r
+ if (node.nodeType != 9) {\r
+ // Keep non whitespace text nodes\r
+ if (node.nodeType == 3 && node.nodeValue.length > 0) {\r
+ // If parent element isn't a block or there isn't any useful contents for example "<p> </p>"\r
+ if (!t.isBlock(node.parentNode) || tinymce.trim(node.nodeValue).length > 0)\r
+ return;\r
+ }\r
+\r
+ if (node.nodeType == 1) {\r
+ // If the only child is a bookmark then move it up\r
+ children = node.childNodes;\r
+ if (children.length == 1 && children[0] && children[0].nodeType == 1 && children[0].getAttribute('_mce_type') == 'bookmark')\r
+ node.parentNode.insertBefore(children[0], node);\r
+\r
+ // Keep non empty elements or img, hr etc\r
+ if (children.length || /^(br|hr|input|img)$/i.test(node.nodeName))\r
+ return;\r
+ }\r
+\r
+ t.remove(node);\r
+ }\r
+\r
+ return node;\r
+ };\r
+\r
+ if (pe && e) {\r
+ // Get before chunk\r
+ r.setStart(pe.parentNode, t.nodeIndex(pe));\r
+ r.setEnd(e.parentNode, t.nodeIndex(e));\r
+ bef = r.extractContents();\r
+\r
+ // Get after chunk\r
+ r = t.createRng();\r
+ r.setStart(e.parentNode, t.nodeIndex(e) + 1);\r
+ r.setEnd(pe.parentNode, t.nodeIndex(pe) + 1);\r
+ aft = r.extractContents();\r
+\r
+ // Insert before chunk\r
+ pa = pe.parentNode;\r
+ pa.insertBefore(trim(bef), pe);\r
+\r
+ // Insert middle chunk\r
+ if (re)\r
+ pa.replaceChild(re, e);\r
+ else\r
+ pa.insertBefore(e, pe);\r
+\r
+ // Insert after chunk\r
+ pa.insertBefore(trim(aft), pe);\r
+ t.remove(pe);\r
+\r
+ return re || e;\r
+ }\r
+ },\r
+\r
+ bind : function(target, name, func, scope) {\r
+ var t = this;\r
+\r
+ if (!t.events)\r
+ t.events = new tinymce.dom.EventUtils();\r
+\r
+ return t.events.add(target, name, func, scope || this);\r
+ },\r
+\r
+ unbind : function(target, name, func) {\r
+ var t = this;\r
+\r
+ if (!t.events)\r
+ t.events = new tinymce.dom.EventUtils();\r
+\r
+ return t.events.remove(target, name, func);\r
+ },\r
+\r
+\r
+ _findSib : function(node, selector, name) {\r
+ var t = this, f = selector;\r
+\r
+ if (node) {\r
+ // If expression make a function of it using is\r
+ if (is(f, 'string')) {\r
+ f = function(node) {\r
+ return t.is(node, selector);\r
+ };\r
+ }\r
+\r
+ // Loop all siblings\r
+ for (node = node[name]; node; node = node[name]) {\r
+ if (f(node))\r
+ return node;\r
+ }\r
+ }\r
+\r
+ return null;\r
+ },\r
+\r
_isRes : function(c) {\r
// Is live resizble element\r
return /^(top|left|bottom|right|width|height)/i.test(c) || /;\s*(top|left|bottom|right|width|height)/i.test(c);\r
return s;\r
}\r
*/\r
+ });\r
\r
+ tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0});\r
+})(tinymce);\r
+\r
+(function(ns) {\r
+ // Range constructor\r
+ function Range(dom) {\r
+ var t = this,\r
+ doc = dom.doc,\r
+ EXTRACT = 0,\r
+ CLONE = 1,\r
+ DELETE = 2,\r
+ TRUE = true,\r
+ FALSE = false,\r
+ START_OFFSET = 'startOffset',\r
+ START_CONTAINER = 'startContainer',\r
+ END_CONTAINER = 'endContainer',\r
+ END_OFFSET = 'endOffset',\r
+ extend = tinymce.extend,\r
+ nodeIndex = dom.nodeIndex;\r
+\r
+ extend(t, {\r
+ // Inital states\r
+ startContainer : doc,\r
+ startOffset : 0,\r
+ endContainer : doc,\r
+ endOffset : 0,\r
+ collapsed : TRUE,\r
+ commonAncestorContainer : doc,\r
+\r
+ // Range constants\r
+ START_TO_START : 0,\r
+ START_TO_END : 1,\r
+ END_TO_END : 2,\r
+ END_TO_START : 3,\r
+\r
+ // Public methods\r
+ setStart : setStart,\r
+ setEnd : setEnd,\r
+ setStartBefore : setStartBefore,\r
+ setStartAfter : setStartAfter,\r
+ setEndBefore : setEndBefore,\r
+ setEndAfter : setEndAfter,\r
+ collapse : collapse,\r
+ selectNode : selectNode,\r
+ selectNodeContents : selectNodeContents,\r
+ compareBoundaryPoints : compareBoundaryPoints,\r
+ deleteContents : deleteContents,\r
+ extractContents : extractContents,\r
+ cloneContents : cloneContents,\r
+ insertNode : insertNode,\r
+ surroundContents : surroundContents,\r
+ cloneRange : cloneRange\r
});\r
\r
- // Setup page DOM\r
- tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0});\r
-})();\r
+ function setStart(n, o) {\r
+ _setEndPoint(TRUE, n, o);\r
+ };\r
\r
-/* file:jscripts/tiny_mce/classes/dom/Event.js */\r
+ function setEnd(n, o) {\r
+ _setEndPoint(FALSE, n, o);\r
+ };\r
\r
-(function() {\r
- // Shorten names\r
- var each = tinymce.each, DOM = tinymce.DOM, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, Event;\r
+ function setStartBefore(n) {\r
+ setStart(n.parentNode, nodeIndex(n));\r
+ };\r
\r
- tinymce.create('static tinymce.dom.Event', {\r
- inits : [],\r
- events : [],\r
+ function setStartAfter(n) {\r
+ setStart(n.parentNode, nodeIndex(n) + 1);\r
+ };\r
\r
- // #if !jquery\r
+ function setEndBefore(n) {\r
+ setEnd(n.parentNode, nodeIndex(n));\r
+ };\r
\r
- add : function(o, n, f, s) {\r
- var cb, t = this, el = t.events, r;\r
+ function setEndAfter(n) {\r
+ setEnd(n.parentNode, nodeIndex(n) + 1);\r
+ };\r
\r
- // Handle array\r
- if (o && o instanceof Array) {\r
- r = [];\r
+ function collapse(ts) {\r
+ if (ts) {\r
+ t[END_CONTAINER] = t[START_CONTAINER];\r
+ t[END_OFFSET] = t[START_OFFSET];\r
+ } else {\r
+ t[START_CONTAINER] = t[END_CONTAINER];\r
+ t[START_OFFSET] = t[END_OFFSET];\r
+ }\r
\r
- each(o, function(o) {\r
- o = DOM.get(o);\r
- r.push(t.add(o, n, f, s));\r
- });\r
+ t.collapsed = TRUE;\r
+ };\r
\r
- return r;\r
- }\r
+ function selectNode(n) {\r
+ setStartBefore(n);\r
+ setEndAfter(n);\r
+ };\r
\r
- o = DOM.get(o);\r
+ function selectNodeContents(n) {\r
+ setStart(n, 0);\r
+ setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length);\r
+ };\r
\r
- if (!o)\r
- return;\r
+ function compareBoundaryPoints(h, r) {\r
+ var sc = t[START_CONTAINER], so = t[START_OFFSET], ec = t[END_CONTAINER], eo = t[END_OFFSET];\r
\r
- // Setup event callback\r
- cb = function(e) {\r
- e = e || window.event;\r
+ // Check START_TO_START\r
+ if (h === 0)\r
+ return _compareBoundaryPoints(sc, so, sc, so);\r
\r
- // Patch in target in IE it's W3C valid\r
- if (e && !e.target && isIE)\r
- e.target = e.srcElement;\r
+ // Check START_TO_END\r
+ if (h === 1)\r
+ return _compareBoundaryPoints(sc, so, ec, eo);\r
\r
- if (!s)\r
- return f(e);\r
+ // Check END_TO_END\r
+ if (h === 2)\r
+ return _compareBoundaryPoints(ec, eo, ec, eo);\r
\r
- return f.call(s, e);\r
- };\r
+ // Check END_TO_START\r
+ if (h === 3)\r
+ return _compareBoundaryPoints(ec, eo, sc, so);\r
+ };\r
\r
- if (n == 'unload') {\r
- tinymce.unloads.unshift({func : cb});\r
- return cb;\r
- }\r
+ function deleteContents() {\r
+ _traverse(DELETE);\r
+ };\r
\r
- if (n == 'init') {\r
- if (t.domLoaded)\r
- cb();\r
- else\r
- t.inits.push(cb);\r
+ function extractContents() {\r
+ return _traverse(EXTRACT);\r
+ };\r
\r
- return cb;\r
+ function cloneContents() {\r
+ return _traverse(CLONE);\r
+ };\r
+\r
+ function insertNode(n) {\r
+ var startContainer = this[START_CONTAINER],\r
+ startOffset = this[START_OFFSET], nn, o;\r
+\r
+ // Node is TEXT_NODE or CDATA\r
+ if ((startContainer.nodeType === 3 || startContainer.nodeType === 4) && startContainer.nodeValue) {\r
+ if (!startOffset) {\r
+ // At the start of text\r
+ startContainer.parentNode.insertBefore(n, startContainer);\r
+ } else if (startOffset >= startContainer.nodeValue.length) {\r
+ // At the end of text\r
+ dom.insertAfter(n, startContainer);\r
+ } else {\r
+ // Middle, need to split\r
+ nn = startContainer.splitText(startOffset);\r
+ startContainer.parentNode.insertBefore(n, nn);\r
+ }\r
+ } else {\r
+ // Insert element node\r
+ if (startContainer.childNodes.length > 0)\r
+ o = startContainer.childNodes[startOffset];\r
+\r
+ if (o)\r
+ startContainer.insertBefore(n, o);\r
+ else\r
+ startContainer.appendChild(n);\r
}\r
+ };\r
\r
- // Store away listener reference\r
- el.push({\r
- obj : o,\r
- name : n,\r
- func : f,\r
- cfunc : cb,\r
- scope : s\r
- });\r
+ function surroundContents(n) {\r
+ var f = t.extractContents();\r
\r
- t._add(o, n, cb);\r
+ t.insertNode(n);\r
+ n.appendChild(f);\r
+ t.selectNode(n);\r
+ };\r
\r
- return f;\r
- },\r
+ function cloneRange() {\r
+ return extend(new Range(dom), {\r
+ startContainer : t[START_CONTAINER],\r
+ startOffset : t[START_OFFSET],\r
+ endContainer : t[END_CONTAINER],\r
+ endOffset : t[END_OFFSET],\r
+ collapsed : t.collapsed,\r
+ commonAncestorContainer : t.commonAncestorContainer\r
+ });\r
+ };\r
\r
- remove : function(o, n, f) {\r
- var t = this, a = t.events, s = false, r;\r
+ // Private methods\r
\r
- // Handle array\r
- if (o && o instanceof Array) {\r
- r = [];\r
+ function _getSelectedNode(container, offset) {\r
+ var child;\r
\r
- each(o, function(o) {\r
- o = DOM.get(o);\r
- r.push(t.remove(o, n, f));\r
- });\r
+ if (container.nodeType == 3 /* TEXT_NODE */)\r
+ return container;\r
\r
- return r;\r
+ if (offset < 0)\r
+ return container;\r
+\r
+ child = container.firstChild;\r
+ while (child && offset > 0) {\r
+ --offset;\r
+ child = child.nextSibling;\r
}\r
\r
- o = DOM.get(o);\r
+ if (child)\r
+ return child;\r
\r
- each(a, function(e, i) {\r
- if (e.obj == o && e.name == n && (!f || (e.func == f || e.cfunc == f))) {\r
- a.splice(i, 1);\r
- t._remove(o, n, e.cfunc);\r
- s = true;\r
- return false;\r
- }\r
- });\r
+ return container;\r
+ };\r
\r
- return s;\r
- },\r
+ function _isCollapsed() {\r
+ return (t[START_CONTAINER] == t[END_CONTAINER] && t[START_OFFSET] == t[END_OFFSET]);\r
+ };\r
\r
- clear : function(o) {\r
- var t = this, a = t.events, i, e;\r
+ function _compareBoundaryPoints(containerA, offsetA, containerB, offsetB) {\r
+ var c, offsetC, n, cmnRoot, childA, childB;\r
\r
- if (o) {\r
- o = DOM.get(o);\r
+ // In the first case the boundary-points have the same container. A is before B\r
+ // if its offset is less than the offset of B, A is equal to B if its offset is\r
+ // equal to the offset of B, and A is after B if its offset is greater than the\r
+ // offset of B.\r
+ if (containerA == containerB) {\r
+ if (offsetA == offsetB)\r
+ return 0; // equal\r
\r
- for (i = a.length - 1; i >= 0; i--) {\r
- e = a[i];\r
+ if (offsetA < offsetB)\r
+ return -1; // before\r
\r
- if (e.obj === o) {\r
- t._remove(e.obj, e.name, e.cfunc);\r
- e.obj = e.cfunc = null;\r
- a.splice(i, 1);\r
- }\r
- }\r
+ return 1; // after\r
}\r
- },\r
\r
- // #endif\r
+ // In the second case a child node C of the container of A is an ancestor\r
+ // container of B. In this case, A is before B if the offset of A is less than or\r
+ // equal to the index of the child node C and A is after B otherwise.\r
+ c = containerB;\r
+ while (c && c.parentNode != containerA)\r
+ c = c.parentNode;\r
\r
- cancel : function(e) {\r
- if (!e)\r
- return false;\r
+ if (c) {\r
+ offsetC = 0;\r
+ n = containerA.firstChild;\r
\r
- this.stop(e);\r
- return this.prevent(e);\r
- },\r
+ while (n != c && offsetC < offsetA) {\r
+ offsetC++;\r
+ n = n.nextSibling;\r
+ }\r
\r
- stop : function(e) {\r
- if (e.stopPropagation)\r
- e.stopPropagation();\r
- else\r
- e.cancelBubble = true;\r
+ if (offsetA <= offsetC)\r
+ return -1; // before\r
\r
- return false;\r
- },\r
+ return 1; // after\r
+ }\r
\r
- prevent : function(e) {\r
- if (e.preventDefault)\r
- e.preventDefault();\r
- else\r
- e.returnValue = false;\r
+ // In the third case a child node C of the container of B is an ancestor container\r
+ // of A. In this case, A is before B if the index of the child node C is less than\r
+ // the offset of B and A is after B otherwise.\r
+ c = containerA;\r
+ while (c && c.parentNode != containerB) {\r
+ c = c.parentNode;\r
+ }\r
\r
- return false;\r
- },\r
+ if (c) {\r
+ offsetC = 0;\r
+ n = containerB.firstChild;\r
\r
- _unload : function() {\r
- var t = Event;\r
+ while (n != c && offsetC < offsetB) {\r
+ offsetC++;\r
+ n = n.nextSibling;\r
+ }\r
\r
- each(t.events, function(e, i) {\r
- t._remove(e.obj, e.name, e.cfunc);\r
- e.obj = e.cfunc = null;\r
- });\r
+ if (offsetC < offsetB)\r
+ return -1; // before\r
\r
- t.events = [];\r
- t = null;\r
- },\r
+ return 1; // after\r
+ }\r
\r
- _add : function(o, n, f) {\r
- if (o.attachEvent)\r
- o.attachEvent('on' + n, f);\r
- else if (o.addEventListener)\r
- o.addEventListener(n, f, false);\r
- else\r
- o['on' + n] = f;\r
- },\r
+ // In the fourth case, none of three other cases hold: the containers of A and B\r
+ // are siblings or descendants of sibling nodes. In this case, A is before B if\r
+ // the container of A is before the container of B in a pre-order traversal of the\r
+ // Ranges' context tree and A is after B otherwise.\r
+ cmnRoot = dom.findCommonAncestor(containerA, containerB);\r
+ childA = containerA;\r
\r
- _remove : function(o, n, f) {\r
- if (o) {\r
- try {\r
- if (o.detachEvent)\r
- o.detachEvent('on' + n, f);\r
- else if (o.removeEventListener)\r
- o.removeEventListener(n, f, false);\r
- else\r
- o['on' + n] = null;\r
- } catch (ex) {\r
- // Might fail with permission denined on IE so we just ignore that\r
- }\r
- }\r
- },\r
+ while (childA && childA.parentNode != cmnRoot)\r
+ childA = childA.parentNode;\r
\r
- _pageInit : function() {\r
- var e = Event;\r
+ if (!childA)\r
+ childA = cmnRoot;\r
\r
- // Safari on Mac fires this twice\r
- if (e.domLoaded)\r
- return;\r
+ childB = containerB;\r
+ while (childB && childB.parentNode != cmnRoot)\r
+ childB = childB.parentNode;\r
\r
- e._remove(window, 'DOMContentLoaded', e._pageInit);\r
- e.domLoaded = true;\r
+ if (!childB)\r
+ childB = cmnRoot;\r
\r
- each(e.inits, function(c) {\r
- c();\r
- });\r
+ if (childA == childB)\r
+ return 0; // equal\r
\r
- e.inits = [];\r
- },\r
+ n = cmnRoot.firstChild;\r
+ while (n) {\r
+ if (n == childA)\r
+ return -1; // before\r
\r
- _wait : function() {\r
- var t;\r
+ if (n == childB)\r
+ return 1; // after\r
\r
- // No need since the document is already loaded\r
- if (window.tinyMCE_GZ && tinyMCE_GZ.loaded) {\r
- Event.domLoaded = 1;\r
- return;\r
+ n = n.nextSibling;\r
}\r
+ };\r
\r
- if (isIE && document.location.protocol != 'https:') {\r
- // Fake DOMContentLoaded on IE\r
- document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');\r
- DOM.get("__ie_onload").onreadystatechange = function() {\r
- if (this.readyState == "complete") {\r
- Event._pageInit();\r
- DOM.get("__ie_onload").onreadystatechange = null; // Prevent leak\r
- }\r
- };\r
+ function _setEndPoint(st, n, o) {\r
+ var ec, sc;\r
+\r
+ if (st) {\r
+ t[START_CONTAINER] = n;\r
+ t[START_OFFSET] = o;\r
} else {\r
- Event._add(window, 'DOMContentLoaded', Event._pageInit, Event);\r
+ t[END_CONTAINER] = n;\r
+ t[END_OFFSET] = o;\r
+ }\r
+\r
+ // If one boundary-point of a Range is set to have a root container\r
+ // other than the current one for the Range, the Range is collapsed to\r
+ // the new position. This enforces the restriction that both boundary-\r
+ // points of a Range must have the same root container.\r
+ ec = t[END_CONTAINER];\r
+ while (ec.parentNode)\r
+ ec = ec.parentNode;\r
+\r
+ sc = t[START_CONTAINER];\r
+ while (sc.parentNode)\r
+ sc = sc.parentNode;\r
+\r
+ if (sc == ec) {\r
+ // The start position of a Range is guaranteed to never be after the\r
+ // end position. To enforce this restriction, if the start is set to\r
+ // be at a position after the end, the Range is collapsed to that\r
+ // position.\r
+ if (_compareBoundaryPoints(t[START_CONTAINER], t[START_OFFSET], t[END_CONTAINER], t[END_OFFSET]) > 0)\r
+ t.collapse(st);\r
+ } else\r
+ t.collapse(st);\r
\r
- if (isIE || isWebKit) {\r
- t = setInterval(function() {\r
- if (/loaded|complete/.test(document.readyState)) {\r
- clearInterval(t);\r
- Event._pageInit();\r
- }\r
- }, 10);\r
- }\r
+ t.collapsed = _isCollapsed();\r
+ t.commonAncestorContainer = dom.findCommonAncestor(t[START_CONTAINER], t[END_CONTAINER]);\r
+ };\r
+\r
+ function _traverse(how) {\r
+ var c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep;\r
+\r
+ if (t[START_CONTAINER] == t[END_CONTAINER])\r
+ return _traverseSameContainer(how);\r
+\r
+ for (c = t[END_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {\r
+ if (p == t[START_CONTAINER])\r
+ return _traverseCommonStartContainer(c, how);\r
+\r
+ ++endContainerDepth;\r
}\r
- }\r
\r
- });\r
+ for (c = t[START_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {\r
+ if (p == t[END_CONTAINER])\r
+ return _traverseCommonEndContainer(c, how);\r
\r
- // Shorten name\r
- Event = tinymce.dom.Event;\r
+ ++startContainerDepth;\r
+ }\r
\r
- // Dispatch DOM content loaded event for IE and Safari\r
- Event._wait();\r
- tinymce.addUnload(Event._unload);\r
-})();\r
+ depthDiff = startContainerDepth - endContainerDepth;\r
\r
-/* file:jscripts/tiny_mce/classes/dom/Element.js */\r
+ startNode = t[START_CONTAINER];\r
+ while (depthDiff > 0) {\r
+ startNode = startNode.parentNode;\r
+ depthDiff--;\r
+ }\r
\r
-(function() {\r
- var each = tinymce.each;\r
+ endNode = t[END_CONTAINER];\r
+ while (depthDiff < 0) {\r
+ endNode = endNode.parentNode;\r
+ depthDiff++;\r
+ }\r
\r
- tinymce.create('tinymce.dom.Element', {\r
- Element : function(id, s) {\r
- var t = this, dom, el;\r
+ // ascend the ancestor hierarchy until we have a common parent.\r
+ for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) {\r
+ startNode = sp;\r
+ endNode = ep;\r
+ }\r
\r
- s = s || {};\r
- t.id = id;\r
- t.dom = dom = s.dom || tinymce.DOM;\r
- t.settings = s;\r
+ return _traverseCommonAncestors(startNode, endNode, how);\r
+ };\r
\r
- // Only IE leaks DOM references, this is a lot faster\r
- if (!tinymce.isIE)\r
- el = t.dom.get(t.id);\r
+ function _traverseSameContainer(how) {\r
+ var frag, s, sub, n, cnt, sibling, xferNode;\r
\r
- each([\r
- 'getPos',\r
- 'getRect',\r
- 'getParent',\r
- 'add',\r
- 'setStyle',\r
- 'getStyle',\r
- 'setStyles',\r
- 'setAttrib',\r
- 'setAttribs',\r
- 'getAttrib',\r
- 'addClass',\r
- 'removeClass',\r
- 'hasClass',\r
- 'getOuterHTML',\r
- 'setOuterHTML',\r
- 'remove',\r
- 'show',\r
- 'hide',\r
- 'isHidden',\r
- 'setHTML',\r
- 'get'\r
- ], function(k) {\r
- t[k] = function() {\r
- var a = arguments, o;\r
+ if (how != DELETE)\r
+ frag = doc.createDocumentFragment();\r
\r
- // Opera fails\r
- if (tinymce.isOpera) {\r
- a = [id];\r
+ // If selection is empty, just return the fragment\r
+ if (t[START_OFFSET] == t[END_OFFSET])\r
+ return frag;\r
\r
- each(arguments, function(v) {\r
- a.push(v);\r
- });\r
- } else\r
- Array.prototype.unshift.call(a, el || id);\r
+ // Text node needs special case handling\r
+ if (t[START_CONTAINER].nodeType == 3 /* TEXT_NODE */) {\r
+ // get the substring\r
+ s = t[START_CONTAINER].nodeValue;\r
+ sub = s.substring(t[START_OFFSET], t[END_OFFSET]);\r
\r
- o = dom[k].apply(dom, a);\r
- t.update(k);\r
+ // set the original text node to its new value\r
+ if (how != CLONE) {\r
+ t[START_CONTAINER].deleteData(t[START_OFFSET], t[END_OFFSET] - t[START_OFFSET]);\r
\r
- return o;\r
- };\r
- });\r
- },\r
+ // Nothing is partially selected, so collapse to start point\r
+ t.collapse(TRUE);\r
+ }\r
\r
- on : function(n, f, s) {\r
- return tinymce.dom.Event.add(this.id, n, f, s);\r
- },\r
+ if (how == DELETE)\r
+ return;\r
\r
- getXY : function() {\r
- return {\r
- x : parseInt(this.getStyle('left')),\r
- y : parseInt(this.getStyle('top'))\r
- };\r
- },\r
+ frag.appendChild(doc.createTextNode(sub));\r
+ return frag;\r
+ }\r
\r
- getSize : function() {\r
- var n = this.dom.get(this.id);\r
+ // Copy nodes between the start/end offsets.\r
+ n = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]);\r
+ cnt = t[END_OFFSET] - t[START_OFFSET];\r
\r
- return {\r
- w : parseInt(this.getStyle('width') || n.clientWidth),\r
- h : parseInt(this.getStyle('height') || n.clientHeight)\r
- };\r
- },\r
+ while (cnt > 0) {\r
+ sibling = n.nextSibling;\r
+ xferNode = _traverseFullySelected(n, how);\r
\r
- moveTo : function(x, y) {\r
- this.setStyles({left : x, top : y});\r
- },\r
+ if (frag)\r
+ frag.appendChild( xferNode );\r
\r
- moveBy : function(x, y) {\r
- var p = this.getXY();\r
+ --cnt;\r
+ n = sibling;\r
+ }\r
\r
- this.moveTo(p.x + x, p.y + y);\r
- },\r
+ // Nothing is partially selected, so collapse to start point\r
+ if (how != CLONE)\r
+ t.collapse(TRUE);\r
\r
- resizeTo : function(w, h) {\r
- this.setStyles({width : w, height : h});\r
- },\r
+ return frag;\r
+ };\r
\r
- resizeBy : function(w, h) {\r
- var s = this.getSize();\r
+ function _traverseCommonStartContainer(endAncestor, how) {\r
+ var frag, n, endIdx, cnt, sibling, xferNode;\r
\r
- this.resizeTo(s.w + w, s.h + h);\r
- },\r
+ if (how != DELETE)\r
+ frag = doc.createDocumentFragment();\r
\r
- update : function(k) {\r
- var t = this, b, dom = t.dom;\r
+ n = _traverseRightBoundary(endAncestor, how);\r
\r
- if (tinymce.isIE6 && t.settings.blocker) {\r
- k = k || '';\r
+ if (frag)\r
+ frag.appendChild(n);\r
\r
- // Ignore getters\r
- if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0)\r
- return;\r
+ endIdx = nodeIndex(endAncestor);\r
+ cnt = endIdx - t[START_OFFSET];\r
\r
- // Remove blocker on remove\r
- if (k == 'remove') {\r
- dom.remove(t.blocker);\r
- return;\r
+ if (cnt <= 0) {\r
+ // Collapse to just before the endAncestor, which\r
+ // is partially selected.\r
+ if (how != CLONE) {\r
+ t.setEndBefore(endAncestor);\r
+ t.collapse(FALSE);\r
}\r
\r
- if (!t.blocker) {\r
- t.blocker = dom.uniqueId();\r
- b = dom.add(t.settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'});\r
- dom.setStyle(b, 'opacity', 0);\r
- } else\r
- b = dom.get(t.blocker);\r
+ return frag;\r
+ }\r
+\r
+ n = endAncestor.previousSibling;\r
+ while (cnt > 0) {\r
+ sibling = n.previousSibling;\r
+ xferNode = _traverseFullySelected(n, how);\r
\r
- dom.setStyle(b, 'left', t.getStyle('left', 1));\r
- dom.setStyle(b, 'top', t.getStyle('top', 1));\r
- dom.setStyle(b, 'width', t.getStyle('width', 1));\r
- dom.setStyle(b, 'height', t.getStyle('height', 1));\r
- dom.setStyle(b, 'display', t.getStyle('display', 1));\r
- dom.setStyle(b, 'zIndex', parseInt(t.getStyle('zIndex', 1) || 0) - 1);\r
+ if (frag)\r
+ frag.insertBefore(xferNode, frag.firstChild);\r
+\r
+ --cnt;\r
+ n = sibling;\r
}\r
- }\r
\r
- });\r
-})();\r
+ // Collapse to just before the endAncestor, which\r
+ // is partially selected.\r
+ if (how != CLONE) {\r
+ t.setEndBefore(endAncestor);\r
+ t.collapse(FALSE);\r
+ }\r
\r
-/* file:jscripts/tiny_mce/classes/dom/Selection.js */\r
+ return frag;\r
+ };\r
\r
-(function() {\r
- function trimNl(s) {\r
- return s.replace(/[\n\r]+/g, '');\r
- };\r
+ function _traverseCommonEndContainer(startAncestor, how) {\r
+ var frag, startIdx, n, cnt, sibling, xferNode;\r
\r
- // Shorten names\r
- var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each;\r
+ if (how != DELETE)\r
+ frag = doc.createDocumentFragment();\r
\r
- tinymce.create('tinymce.dom.Selection', {\r
- Selection : function(dom, win, serializer) {\r
- var t = this;\r
+ n = _traverseLeftBoundary(startAncestor, how);\r
+ if (frag)\r
+ frag.appendChild(n);\r
\r
- t.dom = dom;\r
- t.win = win;\r
- t.serializer = serializer;\r
+ startIdx = nodeIndex(startAncestor);\r
+ ++startIdx; // Because we already traversed it....\r
\r
- // Add events\r
- each([\r
- 'onBeforeSetContent',\r
- 'onBeforeGetContent',\r
- 'onSetContent',\r
- 'onGetContent'\r
- ], function(e) {\r
- t[e] = new tinymce.util.Dispatcher(t);\r
- });\r
+ cnt = t[END_OFFSET] - startIdx;\r
+ n = startAncestor.nextSibling;\r
+ while (cnt > 0) {\r
+ sibling = n.nextSibling;\r
+ xferNode = _traverseFullySelected(n, how);\r
\r
- // Prevent leaks\r
- tinymce.addUnload(t.destroy, t);\r
- },\r
+ if (frag)\r
+ frag.appendChild(xferNode);\r
\r
- getContent : function(s) {\r
- var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n;\r
+ --cnt;\r
+ n = sibling;\r
+ }\r
\r
- s = s || {};\r
- wb = wa = '';\r
- s.get = true;\r
- s.format = s.format || 'html';\r
- t.onBeforeGetContent.dispatch(t, s);\r
-\r
- if (s.format == 'text')\r
- return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : ''));\r
-\r
- if (r.cloneContents) {\r
- n = r.cloneContents();\r
+ if (how != CLONE) {\r
+ t.setStartAfter(startAncestor);\r
+ t.collapse(TRUE);\r
+ }\r
\r
- if (n)\r
- e.appendChild(n);\r
- } else if (is(r.item) || is(r.htmlText))\r
- e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText;\r
- else\r
- e.innerHTML = r.toString();\r
+ return frag;\r
+ };\r
\r
- // Keep whitespace before and after\r
- if (/^\s/.test(e.innerHTML))\r
- wb = ' ';\r
+ function _traverseCommonAncestors(startAncestor, endAncestor, how) {\r
+ var n, frag, commonParent, startOffset, endOffset, cnt, sibling, nextSibling;\r
\r
- if (/\s+$/.test(e.innerHTML))\r
- wa = ' ';\r
+ if (how != DELETE)\r
+ frag = doc.createDocumentFragment();\r
\r
- s.getInner = true;\r
+ n = _traverseLeftBoundary(startAncestor, how);\r
+ if (frag)\r
+ frag.appendChild(n);\r
\r
- s.content = t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa;\r
- t.onGetContent.dispatch(t, s);\r
+ commonParent = startAncestor.parentNode;\r
+ startOffset = nodeIndex(startAncestor);\r
+ endOffset = nodeIndex(endAncestor);\r
+ ++startOffset;\r
\r
- return s.content;\r
- },\r
+ cnt = endOffset - startOffset;\r
+ sibling = startAncestor.nextSibling;\r
\r
- setContent : function(h, s) {\r
- var t = this, r = t.getRng(), c, d = t.win.document;\r
+ while (cnt > 0) {\r
+ nextSibling = sibling.nextSibling;\r
+ n = _traverseFullySelected(sibling, how);\r
\r
- s = s || {format : 'html'};\r
- s.set = true;\r
- h = s.content = t.dom.processHTML(h);\r
+ if (frag)\r
+ frag.appendChild(n);\r
\r
- // Dispatch before set content event\r
- t.onBeforeSetContent.dispatch(t, s);\r
- h = s.content;\r
+ sibling = nextSibling;\r
+ --cnt;\r
+ }\r
\r
- if (r.insertNode) {\r
- // Make caret marker since insertNode places the caret in the beginning of text after insert\r
- h += '<span id="__caret">_</span>';\r
+ n = _traverseRightBoundary(endAncestor, how);\r
\r
- // Delete and insert new node\r
- r.deleteContents();\r
- r.insertNode(t.getRng().createContextualFragment(h));\r
+ if (frag)\r
+ frag.appendChild(n);\r
\r
- // Move to caret marker\r
- c = t.dom.get('__caret');\r
+ if (how != CLONE) {\r
+ t.setStartAfter(startAncestor);\r
+ t.collapse(TRUE);\r
+ }\r
\r
- // Make sure we wrap it compleatly, Opera fails with a simple select call\r
- r = d.createRange();\r
- r.setStartBefore(c);\r
- r.setEndAfter(c);\r
- t.setRng(r);\r
+ return frag;\r
+ };\r
\r
- // Delete the marker, and hopefully the caret gets placed in the right location\r
- d.execCommand('Delete', false, null);\r
+ function _traverseRightBoundary(root, how) {\r
+ var next = _getSelectedNode(t[END_CONTAINER], t[END_OFFSET] - 1), parent, clonedParent, prevSibling, clonedChild, clonedGrandParent, isFullySelected = next != t[END_CONTAINER];\r
\r
- // In case it's still there\r
- t.dom.remove('__caret');\r
- } else {\r
- if (r.item) {\r
- // Delete content and get caret text selection\r
- d.execCommand('Delete', false, null);\r
- r = t.getRng();\r
- }\r
+ if (next == root)\r
+ return _traverseNode(next, isFullySelected, FALSE, how);\r
\r
- r.pasteHTML(h);\r
- }\r
+ parent = next.parentNode;\r
+ clonedParent = _traverseNode(parent, FALSE, FALSE, how);\r
\r
- // Dispatch set content event\r
- t.onSetContent.dispatch(t, s);\r
- },\r
+ while (parent) {\r
+ while (next) {\r
+ prevSibling = next.previousSibling;\r
+ clonedChild = _traverseNode(next, isFullySelected, FALSE, how);\r
\r
- getStart : function() {\r
- var t = this, r = t.getRng(), e;\r
+ if (how != DELETE)\r
+ clonedParent.insertBefore(clonedChild, clonedParent.firstChild);\r
\r
- if (isIE) {\r
- if (r.item)\r
- return r.item(0);\r
+ isFullySelected = TRUE;\r
+ next = prevSibling;\r
+ }\r
\r
- r = r.duplicate();\r
- r.collapse(1);\r
- e = r.parentElement();\r
+ if (parent == root)\r
+ return clonedParent;\r
\r
- if (e && e.nodeName == 'BODY')\r
- return e.firstChild;\r
+ next = parent.previousSibling;\r
+ parent = parent.parentNode;\r
\r
- return e;\r
- } else {\r
- e = r.startContainer;\r
+ clonedGrandParent = _traverseNode(parent, FALSE, FALSE, how);\r
\r
- if (e.nodeName == 'BODY')\r
- return e.firstChild;\r
+ if (how != DELETE)\r
+ clonedGrandParent.appendChild(clonedParent);\r
\r
- return t.dom.getParent(e, function(n) {return n.nodeType == 1;});\r
+ clonedParent = clonedGrandParent;\r
}\r
- },\r
+ };\r
\r
- getEnd : function() {\r
- var t = this, r = t.getRng(), e;\r
+ function _traverseLeftBoundary(root, how) {\r
+ var next = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]), isFullySelected = next != t[START_CONTAINER], parent, clonedParent, nextSibling, clonedChild, clonedGrandParent;\r
\r
- if (isIE) {\r
- if (r.item)\r
- return r.item(0);\r
+ if (next == root)\r
+ return _traverseNode(next, isFullySelected, TRUE, how);\r
\r
- r = r.duplicate();\r
- r.collapse(0);\r
- e = r.parentElement();\r
+ parent = next.parentNode;\r
+ clonedParent = _traverseNode(parent, FALSE, TRUE, how);\r
\r
- if (e && e.nodeName == 'BODY')\r
- return e.lastChild;\r
+ while (parent) {\r
+ while (next) {\r
+ nextSibling = next.nextSibling;\r
+ clonedChild = _traverseNode(next, isFullySelected, TRUE, how);\r
\r
- return e;\r
- } else {\r
- e = r.endContainer;\r
+ if (how != DELETE)\r
+ clonedParent.appendChild(clonedChild);\r
\r
- if (e.nodeName == 'BODY')\r
- return e.lastChild;\r
+ isFullySelected = TRUE;\r
+ next = nextSibling;\r
+ }\r
\r
- return t.dom.getParent(e, function(n) {return n.nodeType == 1;});\r
- }\r
- },\r
+ if (parent == root)\r
+ return clonedParent;\r
\r
- getBookmark : function(si) {\r
- var t = this, r = t.getRng(), tr, sx, sy, vp = t.dom.getViewPort(t.win), e, sp, bp, le, c = -0xFFFFFF, s, ro = t.dom.getRoot(), wb = 0, wa = 0, nv;\r
- sx = vp.x;\r
- sy = vp.y;\r
+ next = parent.nextSibling;\r
+ parent = parent.parentNode;\r
\r
- // Simple bookmark fast but not as persistent\r
- if (si == 'simple')\r
- return {rng : r, scrollX : sx, scrollY : sy};\r
+ clonedGrandParent = _traverseNode(parent, FALSE, TRUE, how);\r
\r
- // Handle IE\r
- if (isIE) {\r
- // Control selection\r
- if (r.item) {\r
- e = r.item(0);\r
+ if (how != DELETE)\r
+ clonedGrandParent.appendChild(clonedParent);\r
\r
- each(t.dom.select(e.nodeName), function(n, i) {\r
- if (e == n) {\r
- sp = i;\r
- return false;\r
- }\r
- });\r
+ clonedParent = clonedGrandParent;\r
+ }\r
+ };\r
\r
- return {\r
- tag : e.nodeName,\r
- index : sp,\r
- scrollX : sx,\r
- scrollY : sy\r
- };\r
- }\r
+ function _traverseNode(n, isFullySelected, isLeft, how) {\r
+ var txtValue, newNodeValue, oldNodeValue, offset, newNode;\r
\r
- // Text selection\r
- tr = t.dom.doc.body.createTextRange();\r
- tr.moveToElementText(ro);\r
- tr.collapse(true);\r
- bp = Math.abs(tr.move('character', c));\r
+ if (isFullySelected)\r
+ return _traverseFullySelected(n, how);\r
\r
- tr = r.duplicate();\r
- tr.collapse(true);\r
- sp = Math.abs(tr.move('character', c));\r
+ if (n.nodeType == 3 /* TEXT_NODE */) {\r
+ txtValue = n.nodeValue;\r
\r
- tr = r.duplicate();\r
- tr.collapse(false);\r
- le = Math.abs(tr.move('character', c)) - sp;\r
+ if (isLeft) {\r
+ offset = t[START_OFFSET];\r
+ newNodeValue = txtValue.substring(offset);\r
+ oldNodeValue = txtValue.substring(0, offset);\r
+ } else {\r
+ offset = t[END_OFFSET];\r
+ newNodeValue = txtValue.substring(0, offset);\r
+ oldNodeValue = txtValue.substring(offset);\r
+ }\r
\r
- return {\r
- start : sp - bp,\r
- length : le,\r
- scrollX : sx,\r
- scrollY : sy\r
- };\r
- }\r
+ if (how != CLONE)\r
+ n.nodeValue = oldNodeValue;\r
\r
- // Handle W3C\r
- e = t.getNode();\r
- s = t.getSel();\r
+ if (how == DELETE)\r
+ return;\r
\r
- if (!s)\r
- return null;\r
+ newNode = n.cloneNode(FALSE);\r
+ newNode.nodeValue = newNodeValue;\r
\r
- // Image selection\r
- if (e && e.nodeName == 'IMG') {\r
- return {\r
- scrollX : sx,\r
- scrollY : sy\r
- };\r
+ return newNode;\r
}\r
\r
- // Text selection\r
+ if (how == DELETE)\r
+ return;\r
\r
- function getPos(r, sn, en) {\r
- var w = t.dom.doc.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {};\r
+ return n.cloneNode(FALSE);\r
+ };\r
\r
- while ((n = w.nextNode()) != null) {\r
- if (n == sn)\r
- d.start = p;\r
+ function _traverseFullySelected(n, how) {\r
+ if (how != DELETE)\r
+ return how == CLONE ? n.cloneNode(TRUE) : n;\r
\r
- if (n == en) {\r
- d.end = p;\r
- return d;\r
- }\r
+ n.parentNode.removeChild(n);\r
+ };\r
+ };\r
\r
- p += trimNl(n.nodeValue || '').length;\r
- }\r
+ ns.Range = Range;\r
+})(tinymce.dom);\r
\r
- return null;\r
- };\r
+(function() {\r
+ function Selection(selection) {\r
+ var t = this, invisibleChar = '\uFEFF', range, lastIERng, dom = selection.dom, TRUE = true, FALSE = false;\r
\r
- // Caret or selection\r
- if (s.anchorNode == s.focusNode && s.anchorOffset == s.focusOffset) {\r
- e = getPos(ro, s.anchorNode, s.focusNode);\r
+ // Returns a W3C DOM compatible range object by using the IE Range API\r
+ function getRange() {\r
+ var ieRange = selection.getRng(), domRange = dom.createRng(), element, collapsed;\r
\r
- if (!e)\r
- return {scrollX : sx, scrollY : sy};\r
+ // If selection is outside the current document just return an empty range\r
+ element = ieRange.item ? ieRange.item(0) : ieRange.parentElement();\r
+ if (element.ownerDocument != dom.doc)\r
+ return domRange;\r
\r
- // Count whitespace before\r
- trimNl(s.anchorNode.nodeValue || '').replace(/^\s+/, function(a) {wb = a.length;});\r
+ // Handle control selection or text selection of a image\r
+ if (ieRange.item || !element.hasChildNodes()) {\r
+ domRange.setStart(element.parentNode, dom.nodeIndex(element));\r
+ domRange.setEnd(domRange.startContainer, domRange.startOffset + 1);\r
\r
- return {\r
- start : Math.max(e.start + s.anchorOffset - wb, 0),\r
- end : Math.max(e.end + s.focusOffset - wb, 0),\r
- scrollX : sx,\r
- scrollY : sy,\r
- beg : s.anchorOffset - wb == 0\r
- };\r
- } else {\r
- e = getPos(ro, r.startContainer, r.endContainer);\r
+ return domRange;\r
+ }\r
\r
- // Count whitespace before start and end container\r
- //(r.startContainer.nodeValue || '').replace(/^\s+/, function(a) {wb = a.length;});\r
- //(r.endContainer.nodeValue || '').replace(/^\s+/, function(a) {wa = a.length;});\r
+ collapsed = selection.isCollapsed();\r
\r
- if (!e)\r
- return {scrollX : sx, scrollY : sy};\r
+ function findEndPoint(start) {\r
+ var marker, container, offset, nodes, startIndex = 0, endIndex, index, parent, checkRng, position;\r
\r
- return {\r
- start : Math.max(e.start + r.startOffset - wb, 0),\r
- end : Math.max(e.end + r.endOffset - wa, 0),\r
- scrollX : sx,\r
- scrollY : sy,\r
- beg : r.startOffset - wb == 0\r
- };\r
- }\r
- },\r
+ // Setup temp range and collapse it\r
+ checkRng = ieRange.duplicate();\r
+ checkRng.collapse(start);\r
\r
- moveToBookmark : function(b) {\r
- var t = this, r = t.getRng(), s = t.getSel(), ro = t.dom.getRoot(), sd, nvl, nv;\r
+ // Create marker and insert it at the end of the endpoints parent\r
+ marker = dom.create('a');\r
+ parent = checkRng.parentElement();\r
\r
- function getPos(r, sp, ep) {\r
- var w = t.dom.doc.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}, o, v, wa, wb;\r
+ // If parent doesn't have any children then set the container to that parent and the index to 0\r
+ if (!parent.hasChildNodes()) {\r
+ domRange[start ? 'setStart' : 'setEnd'](parent, 0);\r
+ return;\r
+ }\r
\r
- while ((n = w.nextNode()) != null) {\r
- wa = wb = 0;\r
+ parent.appendChild(marker);\r
+ checkRng.moveToElementText(marker);\r
+ position = ieRange.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', checkRng);\r
+ if (position > 0) {\r
+ // The position is after the end of the parent element.\r
+ // This is the case where IE puts the caret to the left edge of a table.\r
+ domRange[start ? 'setStartAfter' : 'setEndAfter'](parent);\r
+ dom.remove(marker);\r
+ return;\r
+ }\r
\r
- nv = n.nodeValue || '';\r
- //nv.replace(/^\s+[^\s]/, function(a) {wb = a.length - 1;});\r
- //nv.replace(/[^\s]\s+$/, function(a) {wa = a.length - 1;});\r
+ // Setup node list and endIndex\r
+ nodes = tinymce.grep(parent.childNodes);\r
+ endIndex = nodes.length - 1;\r
+ // Perform a binary search for the position\r
+ while (startIndex <= endIndex) {\r
+ index = Math.floor((startIndex + endIndex) / 2);\r
+\r
+ // Insert marker and check it's position relative to the selection\r
+ parent.insertBefore(marker, nodes[index]);\r
+ checkRng.moveToElementText(marker);\r
+ position = ieRange.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', checkRng);\r
+ if (position > 0) {\r
+ // Marker is to the right\r
+ startIndex = index + 1;\r
+ } else if (position < 0) {\r
+ // Marker is to the left\r
+ endIndex = index - 1;\r
+ } else {\r
+ // Maker is where we are\r
+ found = true;\r
+ break;\r
+ }\r
+ }\r
\r
- nvl = trimNl(nv).length;\r
- p += nvl;\r
+ // Setup container\r
+ container = position > 0 || index == 0 ? marker.nextSibling : marker.previousSibling;\r
\r
- if (p >= sp && !d.startNode) {\r
- o = sp - (p - nvl);\r
+ // Handle element selection\r
+ if (container.nodeType == 1) {\r
+ dom.remove(marker);\r
\r
- // Fix for odd quirk in FF\r
- if (b.beg && o >= nvl)\r
- continue;\r
+ // Find offset and container\r
+ offset = dom.nodeIndex(container);\r
+ container = container.parentNode;\r
\r
- d.startNode = n;\r
- d.startOffset = o + wb;\r
+ // Move the offset if we are setting the end or the position is after an element\r
+ if (!start || index > 0)\r
+ offset++;\r
+ } else {\r
+ // Calculate offset within text node\r
+ if (position > 0 || index == 0) {\r
+ checkRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', ieRange);\r
+ offset = checkRng.text.length;\r
+ } else {\r
+ checkRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', ieRange);\r
+ offset = container.nodeValue.length - checkRng.text.length;\r
}\r
\r
- if (p >= ep) {\r
- d.endNode = n;\r
- d.endOffset = ep - (p - nvl) + wb;\r
- return d;\r
- }\r
+ dom.remove(marker);\r
}\r
\r
- return null;\r
+ domRange[start ? 'setStart' : 'setEnd'](container, offset);\r
};\r
\r
- if (!b)\r
- return false;\r
+ // Find start point\r
+ findEndPoint(true);\r
\r
- t.win.scrollTo(b.scrollX, b.scrollY);\r
+ // Find end point if needed\r
+ if (!collapsed)\r
+ findEndPoint();\r
\r
- // Handle explorer\r
- if (isIE) {\r
- // Handle simple\r
- if (r = b.rng) {\r
- try {\r
- r.select();\r
- } catch (ex) {\r
- // Ignore\r
- }\r
+ return domRange;\r
+ };\r
\r
- return true;\r
- }\r
+ this.addRange = function(rng) {\r
+ var ieRng, ctrlRng, startContainer, startOffset, endContainer, endOffset, doc = selection.dom.doc, body = doc.body;\r
\r
- t.win.focus();\r
+ function setEndPoint(start) {\r
+ var container, offset, marker, tmpRng, nodes;\r
\r
- // Handle control bookmark\r
- if (b.tag) {\r
- r = ro.createControlRange();\r
+ marker = dom.create('a');\r
+ container = start ? startContainer : endContainer;\r
+ offset = start ? startOffset : endOffset;\r
+ tmpRng = ieRng.duplicate();\r
\r
- each(t.dom.select(b.tag), function(n, i) {\r
- if (i == b.index)\r
- r.addElement(n);\r
- });\r
+ if (container == doc) {\r
+ container = body;\r
+ offset = 0;\r
+ }\r
+\r
+ if (container.nodeType == 3) {\r
+ container.parentNode.insertBefore(marker, container);\r
+ tmpRng.moveToElementText(marker);\r
+ tmpRng.moveStart('character', offset);\r
+ dom.remove(marker);\r
+ ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);\r
} else {\r
- // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs\r
- try {\r
- // Incorrect bookmark\r
- if (b.start < 0)\r
- return true;\r
+ nodes = container.childNodes;\r
\r
- r = s.createRange();\r
- r.moveToElementText(ro);\r
- r.collapse(true);\r
- r.moveStart('character', b.start);\r
- r.moveEnd('character', b.length);\r
- } catch (ex2) {\r
- return true;\r
+ if (nodes.length) {\r
+ if (offset >= nodes.length) {\r
+ dom.insertAfter(marker, nodes[nodes.length - 1]);\r
+ } else {\r
+ container.insertBefore(marker, nodes[offset]);\r
+ }\r
+\r
+ tmpRng.moveToElementText(marker);\r
+ } else {\r
+ // Empty node selection for example <div>|</div>\r
+ marker = doc.createTextNode(invisibleChar);\r
+ container.appendChild(marker);\r
+ tmpRng.moveToElementText(marker.parentNode);\r
+ tmpRng.collapse(TRUE);\r
}\r
- }\r
\r
- try {\r
- r.select();\r
- } catch (ex) {\r
- // Needed for some odd IE bug #1843306\r
+ ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);\r
+ dom.remove(marker);\r
}\r
-\r
- return true;\r
}\r
\r
- // Handle W3C\r
- if (!s)\r
- return false;\r
+ // Destroy cached range\r
+ this.destroy();\r
\r
- // Handle simple\r
- if (b.rng) {\r
- s.removeAllRanges();\r
- s.addRange(b.rng);\r
- } else {\r
- if (is(b.start) && is(b.end)) {\r
- try {\r
- sd = getPos(ro, b.start, b.end);\r
-\r
- if (sd) {\r
- r = t.dom.doc.createRange();\r
- r.setStart(sd.startNode, sd.startOffset);\r
- r.setEnd(sd.endNode, sd.endOffset);\r
- s.removeAllRanges();\r
- s.addRange(r);\r
- }\r
+ // Setup some shorter versions\r
+ startContainer = rng.startContainer;\r
+ startOffset = rng.startOffset;\r
+ endContainer = rng.endContainer;\r
+ endOffset = rng.endOffset;\r
+ ieRng = body.createTextRange();\r
\r
- if (!tinymce.isOpera)\r
- t.win.focus();\r
+ // If single element selection then try making a control selection out of it\r
+ if (startContainer == endContainer && startContainer.nodeType == 1 && startOffset == endOffset - 1) {\r
+ if (startOffset == endOffset - 1) {\r
+ try {\r
+ ctrlRng = body.createControlRange();\r
+ ctrlRng.addElement(startContainer.childNodes[startOffset]);\r
+ ctrlRng.select();\r
+ ctrlRng.scrollIntoView();\r
+ return;\r
} catch (ex) {\r
// Ignore\r
}\r
}\r
}\r
- },\r
\r
- select : function(n, c) {\r
- var t = this, r = t.getRng(), s = t.getSel(), b, fn, ln, d = t.win.document;\r
+ // Set start/end point of selection\r
+ setEndPoint(true);\r
+ setEndPoint();\r
\r
- function first(n) {\r
- return n ? d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false).nextNode() : null;\r
- };\r
-\r
- function last(n) {\r
- var c, o, w;\r
+ // Select the new range and scroll it into view\r
+ ieRng.select();\r
+ ieRng.scrollIntoView();\r
+ };\r
\r
- if (!n)\r
- return null;\r
+ this.getRangeAt = function() {\r
+ // Setup new range if the cache is empty\r
+ if (!range || !tinymce.dom.RangeUtils.compareRanges(lastIERng, selection.getRng())) {\r
+ range = getRange();\r
\r
- w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);\r
- while (c = w.nextNode())\r
- o = c;\r
+ // Store away text range for next call\r
+ lastIERng = selection.getRng();\r
+ }\r
\r
- return o;\r
- };\r
+ // IE will say that the range is equal then produce an invalid argument exception\r
+ // if you perform specific operations in a keyup event. For example Ctrl+Del.\r
+ // This hack will invalidate the range cache if the exception occurs\r
+ try {\r
+ range.startContainer.nextSibling;\r
+ } catch (ex) {\r
+ range = getRange();\r
+ lastIERng = null;\r
+ }\r
\r
- if (isIE) {\r
- try {\r
- b = d.body;\r
+ // Return cached range\r
+ return range;\r
+ };\r
\r
- if (/^(IMG|TABLE)$/.test(n.nodeName)) {\r
- r = b.createControlRange();\r
- r.addElement(n);\r
- } else {\r
- r = b.createTextRange();\r
- r.moveToElementText(n);\r
- }\r
+ this.destroy = function() {\r
+ // Destroy cached range and last IE range to avoid memory leaks\r
+ lastIERng = range = null;\r
+ };\r
+ };\r
\r
- r.select();\r
- } catch (ex) {\r
- // Throws illigal agrument in IE some times\r
- }\r
- } else {\r
- if (c) {\r
- fn = first(n);\r
- ln = last(n);\r
-\r
- if (fn && ln) {\r
- //console.debug(fn, ln);\r
- r = d.createRange();\r
- r.setStart(fn, 0);\r
- r.setEnd(ln, ln.nodeValue.length);\r
- } else\r
- r.selectNode(n);\r
- } else\r
- r.selectNode(n);\r
+ // Expose the selection object\r
+ tinymce.dom.TridentSelection = Selection;\r
+})();\r
\r
- t.setRng(r);\r
- }\r
\r
- return n;\r
- },\r
+/*\r
+ * Sizzle CSS Selector Engine - v1.0\r
+ * Copyright 2009, The Dojo Foundation\r
+ * Released under the MIT, BSD, and GPL Licenses.\r
+ * More information: http://sizzlejs.com/\r
+ */\r
+(function(){\r
+\r
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,\r
+ done = 0,\r
+ toString = Object.prototype.toString,\r
+ hasDuplicate = false,\r
+ baseHasDuplicate = true;\r
+\r
+// Here we check if the JavaScript engine is using some sort of\r
+// optimization where it does not always call our comparision\r
+// function. If that is the case, discard the hasDuplicate value.\r
+// Thus far that includes Google Chrome.\r
+[0, 0].sort(function(){\r
+ baseHasDuplicate = false;\r
+ return 0;\r
+});\r
\r
- isCollapsed : function() {\r
- var t = this, r = t.getRng(), s = t.getSel();\r
+var Sizzle = function(selector, context, results, seed) {\r
+ results = results || [];\r
+ context = context || document;\r
\r
- if (!r || r.item)\r
- return false;\r
+ var origContext = context;\r
\r
- return !s || r.boundingWidth == 0 || r.collapsed;\r
- },\r
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {\r
+ return [];\r
+ }\r
+ \r
+ if ( !selector || typeof selector !== "string" ) {\r
+ return results;\r
+ }\r
\r
- collapse : function(b) {\r
- var t = this, r = t.getRng(), n;\r
+ var parts = [], m, set, checkSet, extra, prune = true, contextXML = Sizzle.isXML(context),\r
+ soFar = selector, ret, cur, pop, i;\r
+ \r
+ // Reset the position of the chunker regexp (start from head)\r
+ do {\r
+ chunker.exec("");\r
+ m = chunker.exec(soFar);\r
\r
- // Control range on IE\r
- if (r.item) {\r
- n = r.item(0);\r
- r = this.win.document.body.createTextRange();\r
- r.moveToElementText(n);\r
+ if ( m ) {\r
+ soFar = m[3];\r
+ \r
+ parts.push( m[1] );\r
+ \r
+ if ( m[2] ) {\r
+ extra = m[3];\r
+ break;\r
}\r
+ }\r
+ } while ( m );\r
\r
- r.collapse(!!b);\r
- t.setRng(r);\r
- },\r
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {\r
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {\r
+ set = posProcess( parts[0] + parts[1], context );\r
+ } else {\r
+ set = Expr.relative[ parts[0] ] ?\r
+ [ context ] :\r
+ Sizzle( parts.shift(), context );\r
\r
- getSel : function() {\r
- var t = this, w = this.win;\r
+ while ( parts.length ) {\r
+ selector = parts.shift();\r
\r
- return w.getSelection ? w.getSelection() : w.document.selection;\r
- },\r
+ if ( Expr.relative[ selector ] ) {\r
+ selector += parts.shift();\r
+ }\r
+ \r
+ set = posProcess( selector, set );\r
+ }\r
+ }\r
+ } else {\r
+ // Take a shortcut and set the context if the root selector is an ID\r
+ // (but not if it'll be faster if the inner selector is an ID)\r
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&\r
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {\r
+ ret = Sizzle.find( parts.shift(), context, contextXML );\r
+ context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];\r
+ }\r
\r
- getRng : function() {\r
- var t = this, s = t.getSel(), r;\r
+ if ( context ) {\r
+ ret = seed ?\r
+ { expr: parts.pop(), set: makeArray(seed) } :\r
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );\r
+ set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;\r
\r
- try {\r
- if (s)\r
- r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : t.win.document.createRange());\r
- } catch (ex) {\r
- // IE throws unspecified error here if TinyMCE is placed in a frame/iframe\r
+ if ( parts.length > 0 ) {\r
+ checkSet = makeArray(set);\r
+ } else {\r
+ prune = false;\r
}\r
\r
- // No range found then create an empty one\r
- // This can occur when the editor is placed in a hidden container element on Gecko\r
- // Or on IE when there was an exception\r
- if (!r)\r
- r = isIE ? t.win.document.body.createTextRange() : t.win.document.createRange();\r
+ while ( parts.length ) {\r
+ cur = parts.pop();\r
+ pop = cur;\r
\r
- return r;\r
- },\r
+ if ( !Expr.relative[ cur ] ) {\r
+ cur = "";\r
+ } else {\r
+ pop = parts.pop();\r
+ }\r
\r
- setRng : function(r) {\r
- var s;\r
-\r
- if (!isIE) {\r
- s = this.getSel();\r
-\r
- if (s) {\r
- s.removeAllRanges();\r
- s.addRange(r);\r
- }\r
- } else {\r
- try {\r
- r.select();\r
- } catch (ex) {\r
- // Needed for some odd IE bug #1843306\r
+ if ( pop == null ) {\r
+ pop = context;\r
}\r
- }\r
- },\r
-\r
- setNode : function(n) {\r
- var t = this;\r
-\r
- t.setContent(t.dom.getOuterHTML(n));\r
-\r
- return n;\r
- },\r
-\r
- getNode : function() {\r
- var t = this, r = t.getRng(), s = t.getSel(), e;\r
\r
- if (!isIE) {\r
- // Range maybe lost after the editor is made visible again\r
- if (!r)\r
- return t.dom.getRoot();\r
+ Expr.relative[ cur ]( checkSet, pop, contextXML );\r
+ }\r
+ } else {\r
+ checkSet = parts = [];\r
+ }\r
+ }\r
\r
- e = r.commonAncestorContainer;\r
+ if ( !checkSet ) {\r
+ checkSet = set;\r
+ }\r
\r
- // Handle selection a image or other control like element such as anchors\r
- if (!r.collapsed) {\r
- // If the anchor node is a element instead of a text node then return this element\r
- if (tinymce.isWebKit && s.anchorNode && s.anchorNode.nodeType == 1) \r
- return s.anchorNode.childNodes[s.anchorOffset]; \r
+ if ( !checkSet ) {\r
+ Sizzle.error( cur || selector );\r
+ }\r
\r
- if (r.startContainer == r.endContainer) {\r
- if (r.startOffset - r.endOffset < 2) {\r
- if (r.startContainer.hasChildNodes())\r
- e = r.startContainer.childNodes[r.startOffset];\r
- }\r
- }\r
+ if ( toString.call(checkSet) === "[object Array]" ) {\r
+ if ( !prune ) {\r
+ results.push.apply( results, checkSet );\r
+ } else if ( context && context.nodeType === 1 ) {\r
+ for ( i = 0; checkSet[i] != null; i++ ) {\r
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {\r
+ results.push( set[i] );\r
+ }\r
+ }\r
+ } else {\r
+ for ( i = 0; checkSet[i] != null; i++ ) {\r
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {\r
+ results.push( set[i] );\r
}\r
-\r
- return t.dom.getParent(e, function(n) {\r
- return n.nodeType == 1;\r
- });\r
}\r
-\r
- return r.item ? r.item(0) : r.parentElement();\r
- },\r
-\r
- destroy : function(s) {\r
- var t = this;\r
-\r
- t.win = null;\r
-\r
- // Manual destroy then remove unload handler\r
- if (!s)\r
- tinymce.removeUnload(t.destroy);\r
}\r
+ } else {\r
+ makeArray( checkSet, results );\r
+ }\r
\r
- });\r
-})();\r
-\r
-/* file:jscripts/tiny_mce/classes/dom/XMLWriter.js */\r
+ if ( extra ) {\r
+ Sizzle( extra, origContext, results, seed );\r
+ Sizzle.uniqueSort( results );\r
+ }\r
\r
-(function() {\r
- tinymce.create('tinymce.dom.XMLWriter', {\r
- node : null,\r
+ return results;\r
+};\r
\r
- XMLWriter : function(s) {\r
- // Get XML document\r
- function getXML() {\r
- var i = document.implementation;\r
+Sizzle.uniqueSort = function(results){\r
+ if ( sortOrder ) {\r
+ hasDuplicate = baseHasDuplicate;\r
+ results.sort(sortOrder);\r
\r
- if (!i || !i.createDocument) {\r
- // Try IE objects\r
- try {return new ActiveXObject('MSXML2.DOMDocument');} catch (ex) {}\r
- try {return new ActiveXObject('Microsoft.XmlDom');} catch (ex) {}\r
- } else\r
- return i.createDocument('', '', null);\r
- };\r
+ if ( hasDuplicate ) {\r
+ for ( var i = 1; i < results.length; i++ ) {\r
+ if ( results[i] === results[i-1] ) {\r
+ results.splice(i--, 1);\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
- this.doc = getXML();\r
- \r
- // Since Opera and WebKit doesn't escape > into > we need to do it our self to normalize the output for all browsers\r
- this.valid = tinymce.isOpera || tinymce.isWebKit;\r
+ return results;\r
+};\r
\r
- this.reset();\r
- },\r
+Sizzle.matches = function(expr, set){\r
+ return Sizzle(expr, null, null, set);\r
+};\r
\r
- reset : function() {\r
- var t = this, d = t.doc;\r
+Sizzle.find = function(expr, context, isXML){\r
+ var set;\r
\r
- if (d.firstChild)\r
- d.removeChild(d.firstChild);\r
+ if ( !expr ) {\r
+ return [];\r
+ }\r
\r
- t.node = d.appendChild(d.createElement("html"));\r
- },\r
+ for ( var i = 0, l = Expr.order.length; i < l; i++ ) {\r
+ var type = Expr.order[i], match;\r
+ \r
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {\r
+ var left = match[1];\r
+ match.splice(1,1);\r
+\r
+ if ( left.substr( left.length - 1 ) !== "\\" ) {\r
+ match[1] = (match[1] || "").replace(/\\/g, "");\r
+ set = Expr.find[ type ]( match, context, isXML );\r
+ if ( set != null ) {\r
+ expr = expr.replace( Expr.match[ type ], "" );\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
- writeStartElement : function(n) {\r
- var t = this;\r
+ if ( !set ) {\r
+ set = context.getElementsByTagName("*");\r
+ }\r
\r
- t.node = t.node.appendChild(t.doc.createElement(n));\r
- },\r
+ return {set: set, expr: expr};\r
+};\r
\r
- writeAttribute : function(n, v) {\r
- if (this.valid)\r
- v = v.replace(/>/g, '%MCGT%');\r
+Sizzle.filter = function(expr, set, inplace, not){\r
+ var old = expr, result = [], curLoop = set, match, anyFound,\r
+ isXMLFilter = set && set[0] && Sizzle.isXML(set[0]);\r
\r
- this.node.setAttribute(n, v);\r
- },\r
+ while ( expr && set.length ) {\r
+ for ( var type in Expr.filter ) {\r
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {\r
+ var filter = Expr.filter[ type ], found, item, left = match[1];\r
+ anyFound = false;\r
\r
- writeEndElement : function() {\r
- this.node = this.node.parentNode;\r
- },\r
+ match.splice(1,1);\r
\r
- writeFullEndElement : function() {\r
- var t = this, n = t.node;\r
+ if ( left.substr( left.length - 1 ) === "\\" ) {\r
+ continue;\r
+ }\r
\r
- n.appendChild(t.doc.createTextNode(""));\r
- t.node = n.parentNode;\r
- },\r
+ if ( curLoop === result ) {\r
+ result = [];\r
+ }\r
\r
- writeText : function(v) {\r
- if (this.valid)\r
- v = v.replace(/>/g, '%MCGT%');\r
+ if ( Expr.preFilter[ type ] ) {\r
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );\r
\r
- this.node.appendChild(this.doc.createTextNode(v));\r
- },\r
+ if ( !match ) {\r
+ anyFound = found = true;\r
+ } else if ( match === true ) {\r
+ continue;\r
+ }\r
+ }\r
\r
- writeCDATA : function(v) {\r
- this.node.appendChild(this.doc.createCDATA(v));\r
- },\r
+ if ( match ) {\r
+ for ( var i = 0; (item = curLoop[i]) != null; i++ ) {\r
+ if ( item ) {\r
+ found = filter( item, match, i, curLoop );\r
+ var pass = not ^ !!found;\r
\r
- writeComment : function(v) {\r
- // Fix for bug #2035694\r
- if (tinymce.isIE)\r
- v = v.replace(/^\-|\-$/g, ' ');\r
+ if ( inplace && found != null ) {\r
+ if ( pass ) {\r
+ anyFound = true;\r
+ } else {\r
+ curLoop[i] = false;\r
+ }\r
+ } else if ( pass ) {\r
+ result.push( item );\r
+ anyFound = true;\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
- this.node.appendChild(this.doc.createComment(v.replace(/\-\-/g, ' ')));\r
- },\r
+ if ( found !== undefined ) {\r
+ if ( !inplace ) {\r
+ curLoop = result;\r
+ }\r
\r
- getContent : function() {\r
- var h;\r
+ expr = expr.replace( Expr.match[ type ], "" );\r
\r
- h = this.doc.xml || new XMLSerializer().serializeToString(this.doc);\r
- h = h.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g, '');\r
- h = h.replace(/ ?\/>/g, ' />');\r
+ if ( !anyFound ) {\r
+ return [];\r
+ }\r
\r
- if (this.valid)\r
- h = h.replace(/\%MCGT%/g, '>');\r
+ break;\r
+ }\r
+ }\r
+ }\r
\r
- return h;\r
+ // Improper expression\r
+ if ( expr === old ) {\r
+ if ( anyFound == null ) {\r
+ Sizzle.error( expr );\r
+ } else {\r
+ break;\r
+ }\r
}\r
\r
- });\r
-})();\r
+ old = expr;\r
+ }\r
\r
-/* file:jscripts/tiny_mce/classes/dom/StringWriter.js */\r
+ return curLoop;\r
+};\r
+\r
+Sizzle.error = function( msg ) {\r
+ throw "Syntax error, unrecognized expression: " + msg;\r
+};\r
+\r
+var Expr = Sizzle.selectors = {\r
+ order: [ "ID", "NAME", "TAG" ],\r
+ match: {\r
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,\r
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,\r
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,\r
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,\r
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,\r
+ CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,\r
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,\r
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/\r
+ },\r
+ leftMatch: {},\r
+ attrMap: {\r
+ "class": "className",\r
+ "for": "htmlFor"\r
+ },\r
+ attrHandle: {\r
+ href: function(elem){\r
+ return elem.getAttribute("href");\r
+ }\r
+ },\r
+ relative: {\r
+ "+": function(checkSet, part){\r
+ var isPartStr = typeof part === "string",\r
+ isTag = isPartStr && !/\W/.test(part),\r
+ isPartStrNotTag = isPartStr && !isTag;\r
\r
-(function() {\r
- tinymce.create('tinymce.dom.StringWriter', {\r
- str : null,\r
- tags : null,\r
- count : 0,\r
- settings : null,\r
- indent : null,\r
+ if ( isTag ) {\r
+ part = part.toLowerCase();\r
+ }\r
\r
- StringWriter : function(s) {\r
- this.settings = tinymce.extend({\r
- indent_char : ' ',\r
- indentation : 1\r
- }, s);\r
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {\r
+ if ( (elem = checkSet[i]) ) {\r
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}\r
\r
- this.reset();\r
- },\r
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?\r
+ elem || false :\r
+ elem === part;\r
+ }\r
+ }\r
\r
- reset : function() {\r
- this.indent = '';\r
- this.str = "";\r
- this.tags = [];\r
- this.count = 0;\r
+ if ( isPartStrNotTag ) {\r
+ Sizzle.filter( part, checkSet, true );\r
+ }\r
},\r
+ ">": function(checkSet, part){\r
+ var isPartStr = typeof part === "string",\r
+ elem, i = 0, l = checkSet.length;\r
\r
- writeStartElement : function(n) {\r
- this._writeAttributesEnd();\r
- this.writeRaw('<' + n);\r
- this.tags.push(n);\r
- this.inAttr = true;\r
- this.count++;\r
- this.elementCount = this.count;\r
- },\r
+ if ( isPartStr && !/\W/.test(part) ) {\r
+ part = part.toLowerCase();\r
\r
- writeAttribute : function(n, v) {\r
- var t = this;\r
+ for ( ; i < l; i++ ) {\r
+ elem = checkSet[i];\r
+ if ( elem ) {\r
+ var parent = elem.parentNode;\r
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;\r
+ }\r
+ }\r
+ } else {\r
+ for ( ; i < l; i++ ) {\r
+ elem = checkSet[i];\r
+ if ( elem ) {\r
+ checkSet[i] = isPartStr ?\r
+ elem.parentNode :\r
+ elem.parentNode === part;\r
+ }\r
+ }\r
\r
- t.writeRaw(" " + t.encode(n) + '="' + t.encode(v) + '"');\r
+ if ( isPartStr ) {\r
+ Sizzle.filter( part, checkSet, true );\r
+ }\r
+ }\r
},\r
+ "": function(checkSet, part, isXML){\r
+ var doneName = done++, checkFn = dirCheck, nodeCheck;\r
\r
- writeEndElement : function() {\r
- var n;\r
+ if ( typeof part === "string" && !/\W/.test(part) ) {\r
+ part = part.toLowerCase();\r
+ nodeCheck = part;\r
+ checkFn = dirNodeCheck;\r
+ }\r
\r
- if (this.tags.length > 0) {\r
- n = this.tags.pop();\r
+ checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);\r
+ },\r
+ "~": function(checkSet, part, isXML){\r
+ var doneName = done++, checkFn = dirCheck, nodeCheck;\r
\r
- if (this._writeAttributesEnd(1))\r
- this.writeRaw('</' + n + '>');\r
+ if ( typeof part === "string" && !/\W/.test(part) ) {\r
+ part = part.toLowerCase();\r
+ nodeCheck = part;\r
+ checkFn = dirNodeCheck;\r
+ }\r
\r
- if (this.settings.indentation > 0)\r
- this.writeRaw('\n');\r
+ checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);\r
+ }\r
+ },\r
+ find: {\r
+ ID: function(match, context, isXML){\r
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {\r
+ var m = context.getElementById(match[1]);\r
+ return m ? [m] : [];\r
}\r
},\r
+ NAME: function(match, context){\r
+ if ( typeof context.getElementsByName !== "undefined" ) {\r
+ var ret = [], results = context.getElementsByName(match[1]);\r
\r
- writeFullEndElement : function() {\r
- if (this.tags.length > 0) {\r
- this._writeAttributesEnd();\r
- this.writeRaw('</' + this.tags.pop() + '>');\r
+ for ( var i = 0, l = results.length; i < l; i++ ) {\r
+ if ( results[i].getAttribute("name") === match[1] ) {\r
+ ret.push( results[i] );\r
+ }\r
+ }\r
\r
- if (this.settings.indentation > 0)\r
- this.writeRaw('\n');\r
+ return ret.length === 0 ? null : ret;\r
}\r
},\r
+ TAG: function(match, context){\r
+ return context.getElementsByTagName(match[1]);\r
+ }\r
+ },\r
+ preFilter: {\r
+ CLASS: function(match, curLoop, inplace, result, not, isXML){\r
+ match = " " + match[1].replace(/\\/g, "") + " ";\r
\r
- writeText : function(v) {\r
- this._writeAttributesEnd();\r
- this.writeRaw(this.encode(v));\r
- this.count++;\r
- },\r
+ if ( isXML ) {\r
+ return match;\r
+ }\r
\r
- writeCDATA : function(v) {\r
- this._writeAttributesEnd();\r
- this.writeRaw('<![CDATA[' + v + ']]>');\r
- this.count++;\r
- },\r
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {\r
+ if ( elem ) {\r
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {\r
+ if ( !inplace ) {\r
+ result.push( elem );\r
+ }\r
+ } else if ( inplace ) {\r
+ curLoop[i] = false;\r
+ }\r
+ }\r
+ }\r
\r
- writeComment : function(v) {\r
- this._writeAttributesEnd();\r
- this.writeRaw('<!-- ' + v + '-->');\r
- this.count++;\r
+ return false;\r
},\r
-\r
- writeRaw : function(v) {\r
- this.str += v;\r
+ ID: function(match){\r
+ return match[1].replace(/\\/g, "");\r
+ },\r
+ TAG: function(match, curLoop){\r
+ return match[1].toLowerCase();\r
},\r
+ CHILD: function(match){\r
+ if ( match[1] === "nth" ) {\r
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'\r
+ var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(\r
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||\r
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);\r
\r
- encode : function(s) {\r
- return s.replace(/[<>&"]/g, function(v) {\r
- switch (v) {\r
- case '<':\r
- return '<';\r
+ // calculate the numbers (first)n+(last) including if they are negative\r
+ match[2] = (test[1] + (test[2] || 1)) - 0;\r
+ match[3] = test[3] - 0;\r
+ }\r
\r
- case '>':\r
- return '>';\r
+ // TODO: Move to normal caching system\r
+ match[0] = done++;\r
\r
- case '&':\r
- return '&';\r
+ return match;\r
+ },\r
+ ATTR: function(match, curLoop, inplace, result, not, isXML){\r
+ var name = match[1].replace(/\\/g, "");\r
+ \r
+ if ( !isXML && Expr.attrMap[name] ) {\r
+ match[1] = Expr.attrMap[name];\r
+ }\r
\r
- case '"':\r
- return '"';\r
- }\r
+ if ( match[2] === "~=" ) {\r
+ match[4] = " " + match[4] + " ";\r
+ }\r
\r
- return v;\r
- });\r
+ return match;\r
},\r
-\r
- getContent : function() {\r
- return this.str;\r
+ PSEUDO: function(match, curLoop, inplace, result, not){\r
+ if ( match[1] === "not" ) {\r
+ // If we're dealing with a complex expression, or a simple one\r
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {\r
+ match[3] = Sizzle(match[3], null, null, curLoop);\r
+ } else {\r
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);\r
+ if ( !inplace ) {\r
+ result.push.apply( result, ret );\r
+ }\r
+ return false;\r
+ }\r
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {\r
+ return true;\r
+ }\r
+ \r
+ return match;\r
},\r
+ POS: function(match){\r
+ match.unshift( true );\r
+ return match;\r
+ }\r
+ },\r
+ filters: {\r
+ enabled: function(elem){\r
+ return elem.disabled === false && elem.type !== "hidden";\r
+ },\r
+ disabled: function(elem){\r
+ return elem.disabled === true;\r
+ },\r
+ checked: function(elem){\r
+ return elem.checked === true;\r
+ },\r
+ selected: function(elem){\r
+ // Accessing this property makes selected-by-default\r
+ // options in Safari work properly\r
+ elem.parentNode.selectedIndex;\r
+ return elem.selected === true;\r
+ },\r
+ parent: function(elem){\r
+ return !!elem.firstChild;\r
+ },\r
+ empty: function(elem){\r
+ return !elem.firstChild;\r
+ },\r
+ has: function(elem, i, match){\r
+ return !!Sizzle( match[3], elem ).length;\r
+ },\r
+ header: function(elem){\r
+ return (/h\d/i).test( elem.nodeName );\r
+ },\r
+ text: function(elem){\r
+ return "text" === elem.type;\r
+ },\r
+ radio: function(elem){\r
+ return "radio" === elem.type;\r
+ },\r
+ checkbox: function(elem){\r
+ return "checkbox" === elem.type;\r
+ },\r
+ file: function(elem){\r
+ return "file" === elem.type;\r
+ },\r
+ password: function(elem){\r
+ return "password" === elem.type;\r
+ },\r
+ submit: function(elem){\r
+ return "submit" === elem.type;\r
+ },\r
+ image: function(elem){\r
+ return "image" === elem.type;\r
+ },\r
+ reset: function(elem){\r
+ return "reset" === elem.type;\r
+ },\r
+ button: function(elem){\r
+ return "button" === elem.type || elem.nodeName.toLowerCase() === "button";\r
+ },\r
+ input: function(elem){\r
+ return (/input|select|textarea|button/i).test(elem.nodeName);\r
+ }\r
+ },\r
+ setFilters: {\r
+ first: function(elem, i){\r
+ return i === 0;\r
+ },\r
+ last: function(elem, i, match, array){\r
+ return i === array.length - 1;\r
+ },\r
+ even: function(elem, i){\r
+ return i % 2 === 0;\r
+ },\r
+ odd: function(elem, i){\r
+ return i % 2 === 1;\r
+ },\r
+ lt: function(elem, i, match){\r
+ return i < match[3] - 0;\r
+ },\r
+ gt: function(elem, i, match){\r
+ return i > match[3] - 0;\r
+ },\r
+ nth: function(elem, i, match){\r
+ return match[3] - 0 === i;\r
+ },\r
+ eq: function(elem, i, match){\r
+ return match[3] - 0 === i;\r
+ }\r
+ },\r
+ filter: {\r
+ PSEUDO: function(elem, match, i, array){\r
+ var name = match[1], filter = Expr.filters[ name ];\r
+\r
+ if ( filter ) {\r
+ return filter( elem, i, match, array );\r
+ } else if ( name === "contains" ) {\r
+ return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;\r
+ } else if ( name === "not" ) {\r
+ var not = match[3];\r
+\r
+ for ( var j = 0, l = not.length; j < l; j++ ) {\r
+ if ( not[j] === elem ) {\r
+ return false;\r
+ }\r
+ }\r
\r
- _writeAttributesEnd : function(s) {\r
- if (!this.inAttr)\r
- return;\r
-\r
- this.inAttr = false;\r
-\r
- if (s && this.elementCount == this.count) {\r
- this.writeRaw(' />');\r
- return false;\r
+ return true;\r
+ } else {\r
+ Sizzle.error( "Syntax error, unrecognized expression: " + name );\r
}\r
+ },\r
+ CHILD: function(elem, match){\r
+ var type = match[1], node = elem;\r
+ switch (type) {\r
+ case 'only':\r
+ case 'first':\r
+ while ( (node = node.previousSibling) ) {\r
+ if ( node.nodeType === 1 ) { \r
+ return false; \r
+ }\r
+ }\r
+ if ( type === "first" ) { \r
+ return true; \r
+ }\r
+ node = elem;\r
+ case 'last':\r
+ while ( (node = node.nextSibling) ) {\r
+ if ( node.nodeType === 1 ) { \r
+ return false; \r
+ }\r
+ }\r
+ return true;\r
+ case 'nth':\r
+ var first = match[2], last = match[3];\r
\r
- this.writeRaw('>');\r
-\r
- return true;\r
+ if ( first === 1 && last === 0 ) {\r
+ return true;\r
+ }\r
+ \r
+ var doneName = match[0],\r
+ parent = elem.parentNode;\r
+ \r
+ if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {\r
+ var count = 0;\r
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {\r
+ if ( node.nodeType === 1 ) {\r
+ node.nodeIndex = ++count;\r
+ }\r
+ } \r
+ parent.sizcache = doneName;\r
+ }\r
+ \r
+ var diff = elem.nodeIndex - last;\r
+ if ( first === 0 ) {\r
+ return diff === 0;\r
+ } else {\r
+ return ( diff % first === 0 && diff / first >= 0 );\r
+ }\r
+ }\r
+ },\r
+ ID: function(elem, match){\r
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;\r
+ },\r
+ TAG: function(elem, match){\r
+ return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;\r
+ },\r
+ CLASS: function(elem, match){\r
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")\r
+ .indexOf( match ) > -1;\r
+ },\r
+ ATTR: function(elem, match){\r
+ var name = match[1],\r
+ result = Expr.attrHandle[ name ] ?\r
+ Expr.attrHandle[ name ]( elem ) :\r
+ elem[ name ] != null ?\r
+ elem[ name ] :\r
+ elem.getAttribute( name ),\r
+ value = result + "",\r
+ type = match[2],\r
+ check = match[4];\r
+\r
+ return result == null ?\r
+ type === "!=" :\r
+ type === "=" ?\r
+ value === check :\r
+ type === "*=" ?\r
+ value.indexOf(check) >= 0 :\r
+ type === "~=" ?\r
+ (" " + value + " ").indexOf(check) >= 0 :\r
+ !check ?\r
+ value && result !== false :\r
+ type === "!=" ?\r
+ value !== check :\r
+ type === "^=" ?\r
+ value.indexOf(check) === 0 :\r
+ type === "$=" ?\r
+ value.substr(value.length - check.length) === check :\r
+ type === "|=" ?\r
+ value === check || value.substr(0, check.length + 1) === check + "-" :\r
+ false;\r
+ },\r
+ POS: function(elem, match, i, array){\r
+ var name = match[2], filter = Expr.setFilters[ name ];\r
+\r
+ if ( filter ) {\r
+ return filter( elem, i, match, array );\r
+ }\r
}\r
+ }\r
+};\r
\r
- });\r
-})();\r
-\r
-/* file:jscripts/tiny_mce/classes/dom/Serializer.js */\r
-\r
-(function() {\r
- // Shorten names\r
- var extend = tinymce.extend, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, isIE = tinymce.isIE, isGecko = tinymce.isGecko;\r
-\r
- // Returns only attribites that have values not all attributes in IE\r
- function getIEAtts(n) {\r
- var o = [];\r
-\r
- // Object will throw exception in IE\r
- if (n.nodeName == 'OBJECT')\r
- return n.attributes;\r
-\r
- n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi, function(a, b) {\r
- o.push({specified : 1, nodeName : b});\r
- });\r
-\r
- return o;\r
- };\r
-\r
- function wildcardToRE(s) {\r
- return s.replace(/([?+*])/g, '.$1');\r
+var origPOS = Expr.match.POS,\r
+ fescape = function(all, num){\r
+ return "\\" + (num - 0 + 1);\r
};\r
\r
- tinymce.create('tinymce.dom.Serializer', {\r
- Serializer : function(s) {\r
- var t = this;\r
+for ( var type in Expr.match ) {\r
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );\r
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );\r
+}\r
\r
- t.key = 0;\r
- t.onPreProcess = new Dispatcher(t);\r
- t.onPostProcess = new Dispatcher(t);\r
+var makeArray = function(array, results) {\r
+ array = Array.prototype.slice.call( array, 0 );\r
\r
- if (tinymce.relaxedDomain && tinymce.isGecko) {\r
- // Gecko has a bug where we can't create a new XML document if domain relaxing is used\r
- t.writer = new tinymce.dom.StringWriter();\r
+ if ( results ) {\r
+ results.push.apply( results, array );\r
+ return results;\r
+ }\r
+ \r
+ return array;\r
+};\r
+\r
+// Perform a simple check to determine if the browser is capable of\r
+// converting a NodeList to an array using builtin methods.\r
+// Also verifies that the returned array holds DOM nodes\r
+// (which is not the case in the Blackberry browser)\r
+try {\r
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;\r
+\r
+// Provide a fallback method if it does not work\r
+} catch(e){\r
+ makeArray = function(array, results) {\r
+ var ret = results || [], i = 0;\r
+\r
+ if ( toString.call(array) === "[object Array]" ) {\r
+ Array.prototype.push.apply( ret, array );\r
+ } else {\r
+ if ( typeof array.length === "number" ) {\r
+ for ( var l = array.length; i < l; i++ ) {\r
+ ret.push( array[i] );\r
+ }\r
} else {\r
- try {\r
- t.writer = new tinymce.dom.XMLWriter();\r
- } catch (ex) {\r
- // IE might throw exception if ActiveX is disabled so we then switch to the slightly slower StringWriter\r
- t.writer = new tinymce.dom.StringWriter();\r
+ for ( ; array[i]; i++ ) {\r
+ ret.push( array[i] );\r
}\r
}\r
+ }\r
\r
- // Default settings\r
- t.settings = s = extend({\r
- dom : tinymce.DOM,\r
- valid_nodes : 0,\r
- node_filter : 0,\r
- attr_filter : 0,\r
- invalid_attrs : /^(mce_|_moz_)/,\r
- closed : /(br|hr|input|meta|img|link|param)/,\r
- entity_encoding : 'named',\r
- entities : '160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro',\r
- bool_attrs : /(checked|disabled|readonly|selected|nowrap)/,\r
- valid_elements : '*[*]',\r
- extended_valid_elements : 0,\r
- valid_child_elements : 0,\r
- invalid_elements : 0,\r
- fix_table_elements : 0,\r
- fix_list_elements : true,\r
- fix_content_duplication : true,\r
- convert_fonts_to_spans : false,\r
- font_size_classes : 0,\r
- font_size_style_values : 0,\r
- apply_source_formatting : 0,\r
- indent_mode : 'simple',\r
- indent_char : '\t',\r
- indent_levels : 1,\r
- remove_linebreaks : 1,\r
- remove_redundant_brs : 1,\r
- element_format : 'xhtml'\r
- }, s);\r
+ return ret;\r
+ };\r
+}\r
\r
- t.dom = s.dom;\r
+var sortOrder;\r
\r
- if (s.remove_redundant_brs) {\r
- t.onPostProcess.add(function(se, o) {\r
- // Remove BR elements at end of list elements since they get rendered in IE\r
- o.content = o.content.replace(/<br \/>(\s*<\/li>)/g, '$1');\r
- });\r
+if ( document.documentElement.compareDocumentPosition ) {\r
+ sortOrder = function( a, b ) {\r
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {\r
+ if ( a == b ) {\r
+ hasDuplicate = true;\r
}\r
+ return a.compareDocumentPosition ? -1 : 1;\r
+ }\r
\r
- // Remove XHTML element endings i.e. produce crap :) XHTML is better\r
- if (s.element_format == 'html') {\r
- t.onPostProcess.add(function(se, o) {\r
- o.content = o.content.replace(/<([^>]+) \/>/g, '<$1>');\r
- });\r
+ var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;\r
+ if ( ret === 0 ) {\r
+ hasDuplicate = true;\r
+ }\r
+ return ret;\r
+ };\r
+} else if ( "sourceIndex" in document.documentElement ) {\r
+ sortOrder = function( a, b ) {\r
+ if ( !a.sourceIndex || !b.sourceIndex ) {\r
+ if ( a == b ) {\r
+ hasDuplicate = true;\r
}\r
+ return a.sourceIndex ? -1 : 1;\r
+ }\r
\r
- if (s.fix_list_elements) {\r
- t.onPreProcess.add(function(se, o) {\r
- var nl, x, a = ['ol', 'ul'], i, n, p, r = /^(OL|UL)$/, np;\r
-\r
- function prevNode(e, n) {\r
- var a = n.split(','), i;\r
+ var ret = a.sourceIndex - b.sourceIndex;\r
+ if ( ret === 0 ) {\r
+ hasDuplicate = true;\r
+ }\r
+ return ret;\r
+ };\r
+} else if ( document.createRange ) {\r
+ sortOrder = function( a, b ) {\r
+ if ( !a.ownerDocument || !b.ownerDocument ) {\r
+ if ( a == b ) {\r
+ hasDuplicate = true;\r
+ }\r
+ return a.ownerDocument ? -1 : 1;\r
+ }\r
\r
- while ((e = e.previousSibling) != null) {\r
- for (i=0; i<a.length; i++) {\r
- if (e.nodeName == a[i])\r
- return e;\r
- }\r
- }\r
+ var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();\r
+ aRange.setStart(a, 0);\r
+ aRange.setEnd(a, 0);\r
+ bRange.setStart(b, 0);\r
+ bRange.setEnd(b, 0);\r
+ var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);\r
+ if ( ret === 0 ) {\r
+ hasDuplicate = true;\r
+ }\r
+ return ret;\r
+ };\r
+}\r
\r
- return null;\r
- };\r
+// Utility function for retreiving the text value of an array of DOM nodes\r
+Sizzle.getText = function( elems ) {\r
+ var ret = "", elem;\r
\r
- for (x=0; x<a.length; x++) {\r
- nl = t.dom.select(a[x], o.node);\r
+ for ( var i = 0; elems[i]; i++ ) {\r
+ elem = elems[i];\r
\r
- for (i=0; i<nl.length; i++) {\r
- n = nl[i];\r
- p = n.parentNode;\r
+ // Get the text from text nodes and CDATA nodes\r
+ if ( elem.nodeType === 3 || elem.nodeType === 4 ) {\r
+ ret += elem.nodeValue;\r
\r
- if (r.test(p.nodeName)) {\r
- np = prevNode(n, 'LI');\r
+ // Traverse everything else, except comment nodes\r
+ } else if ( elem.nodeType !== 8 ) {\r
+ ret += Sizzle.getText( elem.childNodes );\r
+ }\r
+ }\r
\r
- if (!np) {\r
- np = t.dom.create('li');\r
- np.innerHTML = ' ';\r
- np.appendChild(n);\r
- p.insertBefore(np, p.firstChild);\r
- } else\r
- np.appendChild(n);\r
- }\r
- }\r
- }\r
- });\r
+ return ret;\r
+};\r
+\r
+// Check to see if the browser returns elements by name when\r
+// querying by getElementById (and provide a workaround)\r
+(function(){\r
+ // We're going to inject a fake input element with a specified name\r
+ var form = document.createElement("div"),\r
+ id = "script" + (new Date()).getTime();\r
+ form.innerHTML = "<a name='" + id + "'/>";\r
+\r
+ // Inject it into the root element, check its status, and remove it quickly\r
+ var root = document.documentElement;\r
+ root.insertBefore( form, root.firstChild );\r
+\r
+ // The workaround has to do additional checks after a getElementById\r
+ // Which slows things down for other browsers (hence the branching)\r
+ if ( document.getElementById( id ) ) {\r
+ Expr.find.ID = function(match, context, isXML){\r
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {\r
+ var m = context.getElementById(match[1]);\r
+ return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];\r
}\r
+ };\r
\r
- if (s.fix_table_elements) {\r
- t.onPreProcess.add(function(se, o) {\r
- each(t.dom.select('table', o.node), function(e) {\r
- var pa = t.dom.getParent(e, 'H1,H2,H3,H4,H5,H6,P'), pa2, n, tm, pl = [], i, ns;\r
+ Expr.filter.ID = function(elem, match){\r
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");\r
+ return elem.nodeType === 1 && node && node.nodeValue === match;\r
+ };\r
+ }\r
\r
- if (pa) {\r
- pa2 = pa.cloneNode(false);\r
+ root.removeChild( form );\r
+ root = form = null; // release memory in IE\r
+})();\r
\r
- pl.push(e);\r
- for (n = e; n = n.parentNode;) {\r
- pl.push(n);\r
+(function(){\r
+ // Check to see if the browser returns only elements\r
+ // when doing getElementsByTagName("*")\r
\r
- if (n == pa)\r
- break;\r
- }\r
+ // Create a fake element\r
+ var div = document.createElement("div");\r
+ div.appendChild( document.createComment("") );\r
\r
- tm = pa2;\r
- for (i = pl.length - 1; i >= 0; i--) {\r
- if (i == pl.length - 1) {\r
- while (ns = pl[i - 1].nextSibling)\r
- tm.appendChild(ns.parentNode.removeChild(ns));\r
- } else {\r
- n = pl[i].cloneNode(false);\r
+ // Make sure no comments are found\r
+ if ( div.getElementsByTagName("*").length > 0 ) {\r
+ Expr.find.TAG = function(match, context){\r
+ var results = context.getElementsByTagName(match[1]);\r
\r
- if (i != 0) {\r
- while (ns = pl[i - 1].nextSibling)\r
- n.appendChild(ns.parentNode.removeChild(ns));\r
- }\r
+ // Filter out possible comments\r
+ if ( match[1] === "*" ) {\r
+ var tmp = [];\r
\r
- tm = tm.appendChild(n);\r
- }\r
- }\r
+ for ( var i = 0; results[i]; i++ ) {\r
+ if ( results[i].nodeType === 1 ) {\r
+ tmp.push( results[i] );\r
+ }\r
+ }\r
\r
- e = t.dom.insertAfter(e.parentNode.removeChild(e), pa);\r
- t.dom.insertAfter(e, pa);\r
- t.dom.insertAfter(pa2, e);\r
- }\r
- });\r
- });\r
+ results = tmp;\r
}\r
- },\r
\r
- setEntities : function(s) {\r
- var t = this, a, i, l = {}, re = '', v;\r
+ return results;\r
+ };\r
+ }\r
\r
- // No need to setup more than once\r
- if (t.entityLookup)\r
- return;\r
+ // Check to see if an attribute returns normalized href attributes\r
+ div.innerHTML = "<a href='#'></a>";\r
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&\r
+ div.firstChild.getAttribute("href") !== "#" ) {\r
+ Expr.attrHandle.href = function(elem){\r
+ return elem.getAttribute("href", 2);\r
+ };\r
+ }\r
\r
- // Build regex and lookup array\r
- a = s.split(',');\r
- for (i = 0; i < a.length; i += 2) {\r
- v = a[i];\r
+ div = null; // release memory in IE\r
+})();\r
\r
- // Don't add default & " etc.\r
- if (v == 34 || v == 38 || v == 60 || v == 62)\r
- continue;\r
+if ( document.querySelectorAll ) {\r
+ (function(){\r
+ var oldSizzle = Sizzle, div = document.createElement("div");\r
+ div.innerHTML = "<p class='TEST'></p>";\r
\r
- l[String.fromCharCode(a[i])] = a[i + 1];\r
+ // Safari can't handle uppercase or unicode characters when\r
+ // in quirks mode.\r
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {\r
+ return;\r
+ }\r
+ \r
+ Sizzle = function(query, context, extra, seed){\r
+ context = context || document;\r
\r
- v = parseInt(a[i]).toString(16);\r
- re += '\\u' + '0000'.substring(v.length) + v;\r
+ // Only use querySelectorAll on non-XML documents\r
+ // (ID selectors don't work in non-HTML documents)\r
+ if ( !seed && context.nodeType === 9 && !Sizzle.isXML(context) ) {\r
+ try {\r
+ return makeArray( context.querySelectorAll(query), extra );\r
+ } catch(e){}\r
}\r
+ \r
+ return oldSizzle(query, context, extra, seed);\r
+ };\r
\r
- if (!re) {\r
- t.settings.entity_encoding = 'raw';\r
- return;\r
- }\r
+ for ( var prop in oldSizzle ) {\r
+ Sizzle[ prop ] = oldSizzle[ prop ];\r
+ }\r
\r
- t.entitiesRE = new RegExp('[' + re + ']', 'g');\r
- t.entityLookup = l;\r
- },\r
+ div = null; // release memory in IE\r
+ })();\r
+}\r
\r
- setValidChildRules : function(s) {\r
- this.childRules = null;\r
- this.addValidChildRules(s);\r
- },\r
+(function(){\r
+ var div = document.createElement("div");\r
\r
- addValidChildRules : function(s) {\r
- var t = this, inst, intr, bloc;\r
+ div.innerHTML = "<div class='test e'></div><div class='test'></div>";\r
\r
- if (!s)\r
- return;\r
+ // Opera can't find a second classname (in 9.6)\r
+ // Also, make sure that getElementsByClassName actually exists\r
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {\r
+ return;\r
+ }\r
\r
- inst = 'A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';\r
- intr = 'A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';\r
- bloc = 'H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';\r
+ // Safari caches class attributes, doesn't catch changes (in 3.2)\r
+ div.lastChild.className = "e";\r
\r
- each(s.split(','), function(s) {\r
- var p = s.split(/\[|\]/), re;\r
+ if ( div.getElementsByClassName("e").length === 1 ) {\r
+ return;\r
+ }\r
+ \r
+ Expr.order.splice(1, 0, "CLASS");\r
+ Expr.find.CLASS = function(match, context, isXML) {\r
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {\r
+ return context.getElementsByClassName(match[1]);\r
+ }\r
+ };\r
\r
- s = '';\r
- each(p[1].split('|'), function(v) {\r
- if (s)\r
- s += '|';\r
+ div = null; // release memory in IE\r
+})();\r
\r
- switch (v) {\r
- case '%itrans':\r
- v = intr;\r
- break;\r
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\r
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {\r
+ var elem = checkSet[i];\r
+ if ( elem ) {\r
+ elem = elem[dir];\r
+ var match = false;\r
\r
- case '%itrans_na':\r
- v = intr.substring(2);\r
- break;\r
+ while ( elem ) {\r
+ if ( elem.sizcache === doneName ) {\r
+ match = checkSet[elem.sizset];\r
+ break;\r
+ }\r
\r
- case '%istrict':\r
- v = inst;\r
- break;\r
+ if ( elem.nodeType === 1 && !isXML ){\r
+ elem.sizcache = doneName;\r
+ elem.sizset = i;\r
+ }\r
\r
- case '%istrict_na':\r
- v = inst.substring(2);\r
- break;\r
+ if ( elem.nodeName.toLowerCase() === cur ) {\r
+ match = elem;\r
+ break;\r
+ }\r
\r
- case '%btrans':\r
- v = bloc;\r
- break;\r
+ elem = elem[dir];\r
+ }\r
\r
- case '%bstrict':\r
- v = bloc;\r
+ checkSet[i] = match;\r
+ }\r
+ }\r
+}\r
+\r
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\r
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {\r
+ var elem = checkSet[i];\r
+ if ( elem ) {\r
+ elem = elem[dir];\r
+ var match = false;\r
+\r
+ while ( elem ) {\r
+ if ( elem.sizcache === doneName ) {\r
+ match = checkSet[elem.sizset];\r
+ break;\r
+ }\r
+\r
+ if ( elem.nodeType === 1 ) {\r
+ if ( !isXML ) {\r
+ elem.sizcache = doneName;\r
+ elem.sizset = i;\r
+ }\r
+ if ( typeof cur !== "string" ) {\r
+ if ( elem === cur ) {\r
+ match = true;\r
break;\r
+ }\r
+\r
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {\r
+ match = elem;\r
+ break;\r
+ }\r
+ }\r
+\r
+ elem = elem[dir];\r
+ }\r
+\r
+ checkSet[i] = match;\r
+ }\r
+ }\r
+}\r
+\r
+Sizzle.contains = document.compareDocumentPosition ? function(a, b){\r
+ return !!(a.compareDocumentPosition(b) & 16);\r
+} : function(a, b){\r
+ return a !== b && (a.contains ? a.contains(b) : true);\r
+};\r
+\r
+Sizzle.isXML = function(elem){\r
+ // documentElement is verified for cases where it doesn't yet exist\r
+ // (such as loading iframes in IE - #4833) \r
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;\r
+ return documentElement ? documentElement.nodeName !== "HTML" : false;\r
+};\r
+\r
+var posProcess = function(selector, context){\r
+ var tmpSet = [], later = "", match,\r
+ root = context.nodeType ? [context] : context;\r
+\r
+ // Position selectors must be done after the filter\r
+ // And so must :not(positional) so we move all PSEUDOs to the end\r
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {\r
+ later += match[0];\r
+ selector = selector.replace( Expr.match.PSEUDO, "" );\r
+ }\r
+\r
+ selector = Expr.relative[selector] ? selector + "*" : selector;\r
+\r
+ for ( var i = 0, l = root.length; i < l; i++ ) {\r
+ Sizzle( selector, root[i], tmpSet );\r
+ }\r
+\r
+ return Sizzle.filter( later, tmpSet );\r
+};\r
+\r
+// EXPOSE\r
+\r
+window.tinymce.dom.Sizzle = Sizzle;\r
+\r
+})();\r
+\r
+\r
+(function(tinymce) {\r
+ // Shorten names\r
+ var each = tinymce.each, DOM = tinymce.DOM, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, Event;\r
+\r
+ tinymce.create('tinymce.dom.EventUtils', {\r
+ EventUtils : function() {\r
+ this.inits = [];\r
+ this.events = [];\r
+ },\r
+\r
+ add : function(o, n, f, s) {\r
+ var cb, t = this, el = t.events, r;\r
+\r
+ if (n instanceof Array) {\r
+ r = [];\r
+\r
+ each(n, function(n) {\r
+ r.push(t.add(o, n, f, s));\r
+ });\r
+\r
+ return r;\r
+ }\r
+\r
+ // Handle array\r
+ if (o && o.hasOwnProperty && o instanceof Array) {\r
+ r = [];\r
+\r
+ each(o, function(o) {\r
+ o = DOM.get(o);\r
+ r.push(t.add(o, n, f, s));\r
+ });\r
+\r
+ return r;\r
+ }\r
+\r
+ o = DOM.get(o);\r
+\r
+ if (!o)\r
+ return;\r
+\r
+ // Setup event callback\r
+ cb = function(e) {\r
+ // Is all events disabled\r
+ if (t.disabled)\r
+ return;\r
+\r
+ e = e || window.event;\r
+\r
+ // Patch in target, preventDefault and stopPropagation in IE it's W3C valid\r
+ if (e && isIE) {\r
+ if (!e.target)\r
+ e.target = e.srcElement;\r
+\r
+ // Patch in preventDefault, stopPropagation methods for W3C compatibility\r
+ tinymce.extend(e, t._stoppers);\r
+ }\r
+\r
+ if (!s)\r
+ return f(e);\r
+\r
+ return f.call(s, e);\r
+ };\r
+\r
+ if (n == 'unload') {\r
+ tinymce.unloads.unshift({func : cb});\r
+ return cb;\r
+ }\r
+\r
+ if (n == 'init') {\r
+ if (t.domLoaded)\r
+ cb();\r
+ else\r
+ t.inits.push(cb);\r
+\r
+ return cb;\r
+ }\r
+\r
+ // Store away listener reference\r
+ el.push({\r
+ obj : o,\r
+ name : n,\r
+ func : f,\r
+ cfunc : cb,\r
+ scope : s\r
+ });\r
+\r
+ t._add(o, n, cb);\r
+\r
+ return f;\r
+ },\r
+\r
+ remove : function(o, n, f) {\r
+ var t = this, a = t.events, s = false, r;\r
+\r
+ // Handle array\r
+ if (o && o.hasOwnProperty && o instanceof Array) {\r
+ r = [];\r
+\r
+ each(o, function(o) {\r
+ o = DOM.get(o);\r
+ r.push(t.remove(o, n, f));\r
+ });\r
+\r
+ return r;\r
+ }\r
+\r
+ o = DOM.get(o);\r
+\r
+ each(a, function(e, i) {\r
+ if (e.obj == o && e.name == n && (!f || (e.func == f || e.cfunc == f))) {\r
+ a.splice(i, 1);\r
+ t._remove(o, n, e.cfunc);\r
+ s = true;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ return s;\r
+ },\r
+\r
+ clear : function(o) {\r
+ var t = this, a = t.events, i, e;\r
+\r
+ if (o) {\r
+ o = DOM.get(o);\r
+\r
+ for (i = a.length - 1; i >= 0; i--) {\r
+ e = a[i];\r
+\r
+ if (e.obj === o) {\r
+ t._remove(e.obj, e.name, e.cfunc);\r
+ e.obj = e.cfunc = null;\r
+ a.splice(i, 1);\r
+ }\r
+ }\r
+ }\r
+ },\r
+\r
+ cancel : function(e) {\r
+ if (!e)\r
+ return false;\r
+\r
+ this.stop(e);\r
+\r
+ return this.prevent(e);\r
+ },\r
+\r
+ stop : function(e) {\r
+ if (e.stopPropagation)\r
+ e.stopPropagation();\r
+ else\r
+ e.cancelBubble = true;\r
+\r
+ return false;\r
+ },\r
+\r
+ prevent : function(e) {\r
+ if (e.preventDefault)\r
+ e.preventDefault();\r
+ else\r
+ e.returnValue = false;\r
+\r
+ return false;\r
+ },\r
+\r
+ destroy : function() {\r
+ var t = this;\r
+\r
+ each(t.events, function(e, i) {\r
+ t._remove(e.obj, e.name, e.cfunc);\r
+ e.obj = e.cfunc = null;\r
+ });\r
+\r
+ t.events = [];\r
+ t = null;\r
+ },\r
+\r
+ _add : function(o, n, f) {\r
+ if (o.attachEvent)\r
+ o.attachEvent('on' + n, f);\r
+ else if (o.addEventListener)\r
+ o.addEventListener(n, f, false);\r
+ else\r
+ o['on' + n] = f;\r
+ },\r
+\r
+ _remove : function(o, n, f) {\r
+ if (o) {\r
+ try {\r
+ if (o.detachEvent)\r
+ o.detachEvent('on' + n, f);\r
+ else if (o.removeEventListener)\r
+ o.removeEventListener(n, f, false);\r
+ else\r
+ o['on' + n] = null;\r
+ } catch (ex) {\r
+ // Might fail with permission denined on IE so we just ignore that\r
+ }\r
+ }\r
+ },\r
+\r
+ _pageInit : function(win) {\r
+ var t = this;\r
+\r
+ // Keep it from running more than once\r
+ if (t.domLoaded)\r
+ return;\r
+\r
+ t.domLoaded = true;\r
+\r
+ each(t.inits, function(c) {\r
+ c();\r
+ });\r
+\r
+ t.inits = [];\r
+ },\r
+\r
+ _wait : function(win) {\r
+ var t = this, doc = win.document;\r
+\r
+ // No need since the document is already loaded\r
+ if (win.tinyMCE_GZ && tinyMCE_GZ.loaded) {\r
+ t.domLoaded = 1;\r
+ return;\r
+ }\r
+\r
+ // Use IE method\r
+ if (doc.attachEvent) {\r
+ doc.attachEvent("onreadystatechange", function() {\r
+ if (doc.readyState === "complete") {\r
+ doc.detachEvent("onreadystatechange", arguments.callee);\r
+ t._pageInit(win);\r
}\r
+ });\r
+\r
+ if (doc.documentElement.doScroll && win == win.top) {\r
+ (function() {\r
+ if (t.domLoaded)\r
+ return;\r
+\r
+ try {\r
+ // If IE is used, use the trick by Diego Perini\r
+ // http://javascript.nwbox.com/IEContentLoaded/\r
+ doc.documentElement.doScroll("left");\r
+ } catch (ex) {\r
+ setTimeout(arguments.callee, 0);\r
+ return;\r
+ }\r
+\r
+ t._pageInit(win);\r
+ })();\r
+ }\r
+ } else if (doc.addEventListener) {\r
+ t._add(win, 'DOMContentLoaded', function() {\r
+ t._pageInit(win);\r
+ });\r
+ }\r
+\r
+ t._add(win, 'load', function() {\r
+ t._pageInit(win);\r
+ });\r
+ },\r
+\r
+ _stoppers : {\r
+ preventDefault : function() {\r
+ this.returnValue = false;\r
+ },\r
+\r
+ stopPropagation : function() {\r
+ this.cancelBubble = true;\r
+ }\r
+ }\r
+ });\r
+\r
+ Event = tinymce.dom.Event = new tinymce.dom.EventUtils();\r
+\r
+ // Dispatch DOM content loaded event for IE and Safari\r
+ Event._wait(window);\r
+\r
+ tinymce.addUnload(function() {\r
+ Event.destroy();\r
+ });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+ tinymce.dom.Element = function(id, settings) {\r
+ var t = this, dom, el;\r
+\r
+ t.settings = settings = settings || {};\r
+ t.id = id;\r
+ t.dom = dom = settings.dom || tinymce.DOM;\r
+\r
+ // Only IE leaks DOM references, this is a lot faster\r
+ if (!tinymce.isIE)\r
+ el = dom.get(t.id);\r
+\r
+ tinymce.each(\r
+ ('getPos,getRect,getParent,add,setStyle,getStyle,setStyles,' + \r
+ 'setAttrib,setAttribs,getAttrib,addClass,removeClass,' + \r
+ 'hasClass,getOuterHTML,setOuterHTML,remove,show,hide,' + \r
+ 'isHidden,setHTML,get').split(/,/)\r
+ , function(k) {\r
+ t[k] = function() {\r
+ var a = [id], i;\r
+\r
+ for (i = 0; i < arguments.length; i++)\r
+ a.push(arguments[i]);\r
+\r
+ a = dom[k].apply(dom, a);\r
+ t.update(k);\r
+\r
+ return a;\r
+ };\r
+ });\r
+\r
+ tinymce.extend(t, {\r
+ on : function(n, f, s) {\r
+ return tinymce.dom.Event.add(t.id, n, f, s);\r
+ },\r
+\r
+ getXY : function() {\r
+ return {\r
+ x : parseInt(t.getStyle('left')),\r
+ y : parseInt(t.getStyle('top'))\r
+ };\r
+ },\r
+\r
+ getSize : function() {\r
+ var n = dom.get(t.id);\r
+\r
+ return {\r
+ w : parseInt(t.getStyle('width') || n.clientWidth),\r
+ h : parseInt(t.getStyle('height') || n.clientHeight)\r
+ };\r
+ },\r
+\r
+ moveTo : function(x, y) {\r
+ t.setStyles({left : x, top : y});\r
+ },\r
+\r
+ moveBy : function(x, y) {\r
+ var p = t.getXY();\r
+\r
+ t.moveTo(p.x + x, p.y + y);\r
+ },\r
+\r
+ resizeTo : function(w, h) {\r
+ t.setStyles({width : w, height : h});\r
+ },\r
+\r
+ resizeBy : function(w, h) {\r
+ var s = t.getSize();\r
+\r
+ t.resizeTo(s.w + w, s.h + h);\r
+ },\r
+\r
+ update : function(k) {\r
+ var b;\r
+\r
+ if (tinymce.isIE6 && settings.blocker) {\r
+ k = k || '';\r
+\r
+ // Ignore getters\r
+ if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0)\r
+ return;\r
+\r
+ // Remove blocker on remove\r
+ if (k == 'remove') {\r
+ dom.remove(t.blocker);\r
+ return;\r
+ }\r
+\r
+ if (!t.blocker) {\r
+ t.blocker = dom.uniqueId();\r
+ b = dom.add(settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'});\r
+ dom.setStyle(b, 'opacity', 0);\r
+ } else\r
+ b = dom.get(t.blocker);\r
+\r
+ dom.setStyles(b, {\r
+ left : t.getStyle('left', 1),\r
+ top : t.getStyle('top', 1),\r
+ width : t.getStyle('width', 1),\r
+ height : t.getStyle('height', 1),\r
+ display : t.getStyle('display', 1),\r
+ zIndex : parseInt(t.getStyle('zIndex', 1) || 0) - 1\r
+ });\r
+ }\r
+ }\r
+ });\r
+ };\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+ function trimNl(s) {\r
+ return s.replace(/[\n\r]+/g, '');\r
+ };\r
+\r
+ // Shorten names\r
+ var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.dom.Selection', {\r
+ Selection : function(dom, win, serializer) {\r
+ var t = this;\r
+\r
+ t.dom = dom;\r
+ t.win = win;\r
+ t.serializer = serializer;\r
+\r
+ // Add events\r
+ each([\r
+ 'onBeforeSetContent',\r
+ 'onBeforeGetContent',\r
+ 'onSetContent',\r
+ 'onGetContent'\r
+ ], function(e) {\r
+ t[e] = new tinymce.util.Dispatcher(t);\r
+ });\r
+\r
+ // No W3C Range support\r
+ if (!t.win.getSelection)\r
+ t.tridentSel = new tinymce.dom.TridentSelection(t);\r
+\r
+ if (tinymce.isIE && dom.boxModel)\r
+ this._fixIESelection();\r
+\r
+ // Prevent leaks\r
+ tinymce.addUnload(t.destroy, t);\r
+ },\r
+\r
+ getContent : function(s) {\r
+ var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n;\r
+\r
+ s = s || {};\r
+ wb = wa = '';\r
+ s.get = true;\r
+ s.format = s.format || 'html';\r
+ t.onBeforeGetContent.dispatch(t, s);\r
+\r
+ if (s.format == 'text')\r
+ return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : ''));\r
+\r
+ if (r.cloneContents) {\r
+ n = r.cloneContents();\r
+\r
+ if (n)\r
+ e.appendChild(n);\r
+ } else if (is(r.item) || is(r.htmlText))\r
+ e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText;\r
+ else\r
+ e.innerHTML = r.toString();\r
+\r
+ // Keep whitespace before and after\r
+ if (/^\s/.test(e.innerHTML))\r
+ wb = ' ';\r
+\r
+ if (/\s+$/.test(e.innerHTML))\r
+ wa = ' ';\r
+\r
+ s.getInner = true;\r
+\r
+ s.content = t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa;\r
+ t.onGetContent.dispatch(t, s);\r
+\r
+ return s.content;\r
+ },\r
+\r
+ setContent : function(h, s) {\r
+ var t = this, r = t.getRng(), c, d = t.win.document;\r
+\r
+ s = s || {format : 'html'};\r
+ s.set = true;\r
+ h = s.content = t.dom.processHTML(h);\r
+\r
+ // Dispatch before set content event\r
+ t.onBeforeSetContent.dispatch(t, s);\r
+ h = s.content;\r
+\r
+ if (r.insertNode) {\r
+ // Make caret marker since insertNode places the caret in the beginning of text after insert\r
+ h += '<span id="__caret">_</span>';\r
+\r
+ // Delete and insert new node\r
+ \r
+ if (r.startContainer == d && r.endContainer == d) {\r
+ // WebKit will fail if the body is empty since the range is then invalid and it can't insert contents\r
+ d.body.innerHTML = h;\r
+ } else {\r
+ r.deleteContents();\r
+ if (d.body.childNodes.length == 0) {\r
+ d.body.innerHTML = h;\r
+ } else {\r
+ // createContextualFragment doesn't exists in IE 9 DOMRanges\r
+ if (r.createContextualFragment) {\r
+ r.insertNode(r.createContextualFragment(h));\r
+ } else {\r
+ // Fake createContextualFragment call in IE 9\r
+ var frag = d.createDocumentFragment(), temp = d.createElement('div');\r
+\r
+ frag.appendChild(temp);\r
+ temp.outerHTML = h;\r
+\r
+ r.insertNode(frag);\r
+ }\r
+ }\r
+ }\r
+\r
+ // Move to caret marker\r
+ c = t.dom.get('__caret');\r
+ // Make sure we wrap it compleatly, Opera fails with a simple select call\r
+ r = d.createRange();\r
+ r.setStartBefore(c);\r
+ r.setEndBefore(c);\r
+ t.setRng(r);\r
+\r
+ // Remove the caret position\r
+ t.dom.remove('__caret');\r
+ } else {\r
+ if (r.item) {\r
+ // Delete content and get caret text selection\r
+ d.execCommand('Delete', false, null);\r
+ r = t.getRng();\r
+ }\r
+\r
+ r.pasteHTML(h);\r
+ }\r
+\r
+ // Dispatch set content event\r
+ t.onSetContent.dispatch(t, s);\r
+ },\r
+\r
+ getStart : function() {\r
+ var rng = this.getRng(), startElement, parentElement, checkRng, node;\r
+\r
+ if (rng.duplicate || rng.item) {\r
+ // Control selection, return first item\r
+ if (rng.item)\r
+ return rng.item(0);\r
+\r
+ // Get start element\r
+ checkRng = rng.duplicate();\r
+ checkRng.collapse(1);\r
+ startElement = checkRng.parentElement();\r
+\r
+ // Check if range parent is inside the start element, then return the inner parent element\r
+ // This will fix issues when a single element is selected, IE would otherwise return the wrong start element\r
+ parentElement = node = rng.parentElement();\r
+ while (node = node.parentNode) {\r
+ if (node == startElement) {\r
+ startElement = parentElement;\r
+ break;\r
+ }\r
+ }\r
+\r
+ // If start element is body element try to move to the first child if it exists\r
+ if (startElement && startElement.nodeName == 'BODY')\r
+ return startElement.firstChild || startElement;\r
+\r
+ return startElement;\r
+ } else {\r
+ startElement = rng.startContainer;\r
+\r
+ if (startElement.nodeType == 1 && startElement.hasChildNodes())\r
+ startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];\r
+\r
+ if (startElement && startElement.nodeType == 3)\r
+ return startElement.parentNode;\r
+\r
+ return startElement;\r
+ }\r
+ },\r
+\r
+ getEnd : function() {\r
+ var t = this, r = t.getRng(), e, eo;\r
+\r
+ if (r.duplicate || r.item) {\r
+ if (r.item)\r
+ return r.item(0);\r
+\r
+ r = r.duplicate();\r
+ r.collapse(0);\r
+ e = r.parentElement();\r
+\r
+ if (e && e.nodeName == 'BODY')\r
+ return e.lastChild || e;\r
+\r
+ return e;\r
+ } else {\r
+ e = r.endContainer;\r
+ eo = r.endOffset;\r
+\r
+ if (e.nodeType == 1 && e.hasChildNodes())\r
+ e = e.childNodes[eo > 0 ? eo - 1 : eo];\r
+\r
+ if (e && e.nodeType == 3)\r
+ return e.parentNode;\r
+\r
+ return e;\r
+ }\r
+ },\r
+\r
+ getBookmark : function(type, normalized) {\r
+ var t = this, dom = t.dom, rng, rng2, id, collapsed, name, element, index, chr = '\uFEFF', styles;\r
+\r
+ function findIndex(name, element) {\r
+ var index = 0;\r
+\r
+ each(dom.select(name), function(node, i) {\r
+ if (node == element)\r
+ index = i;\r
+ });\r
+\r
+ return index;\r
+ };\r
+\r
+ if (type == 2) {\r
+ function getLocation() {\r
+ var rng = t.getRng(true), root = dom.getRoot(), bookmark = {};\r
+\r
+ function getPoint(rng, start) {\r
+ var container = rng[start ? 'startContainer' : 'endContainer'],\r
+ offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0;\r
+\r
+ if (container.nodeType == 3) {\r
+ if (normalized) {\r
+ for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling)\r
+ offset += node.nodeValue.length;\r
+ }\r
+\r
+ point.push(offset);\r
+ } else {\r
+ childNodes = container.childNodes;\r
+\r
+ if (offset >= childNodes.length && childNodes.length) {\r
+ after = 1;\r
+ offset = Math.max(0, childNodes.length - 1);\r
+ }\r
+\r
+ point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after);\r
+ }\r
+\r
+ for (; container && container != root; container = container.parentNode)\r
+ point.push(t.dom.nodeIndex(container, normalized));\r
+\r
+ return point;\r
+ };\r
+\r
+ bookmark.start = getPoint(rng, true);\r
+\r
+ if (!t.isCollapsed())\r
+ bookmark.end = getPoint(rng);\r
+\r
+ return bookmark;\r
+ };\r
+\r
+ return getLocation();\r
+ }\r
+\r
+ // Handle simple range\r
+ if (type)\r
+ return {rng : t.getRng()};\r
+\r
+ rng = t.getRng();\r
+ id = dom.uniqueId();\r
+ collapsed = tinyMCE.activeEditor.selection.isCollapsed();\r
+ styles = 'overflow:hidden;line-height:0px';\r
+\r
+ // Explorer method\r
+ if (rng.duplicate || rng.item) {\r
+ // Text selection\r
+ if (!rng.item) {\r
+ rng2 = rng.duplicate();\r
+\r
+ // Insert start marker\r
+ rng.collapse();\r
+ rng.pasteHTML('<span _mce_type="bookmark" id="' + id + '_start" style="' + styles + '">' + chr + '</span>');\r
+\r
+ // Insert end marker\r
+ if (!collapsed) {\r
+ rng2.collapse(false);\r
+ rng2.pasteHTML('<span _mce_type="bookmark" id="' + id + '_end" style="' + styles + '">' + chr + '</span>');\r
+ }\r
+ } else {\r
+ // Control selection\r
+ element = rng.item(0);\r
+ name = element.nodeName;\r
+\r
+ return {name : name, index : findIndex(name, element)};\r
+ }\r
+ } else {\r
+ element = t.getNode();\r
+ name = element.nodeName;\r
+ if (name == 'IMG')\r
+ return {name : name, index : findIndex(name, element)};\r
+\r
+ // W3C method\r
+ rng2 = rng.cloneRange();\r
+\r
+ // Insert end marker\r
+ if (!collapsed) {\r
+ rng2.collapse(false);\r
+ rng2.insertNode(dom.create('span', {_mce_type : "bookmark", id : id + '_end', style : styles}, chr));\r
+ }\r
+\r
+ rng.collapse(true);\r
+ rng.insertNode(dom.create('span', {_mce_type : "bookmark", id : id + '_start', style : styles}, chr));\r
+ }\r
+\r
+ t.moveToBookmark({id : id, keep : 1});\r
+\r
+ return {id : id};\r
+ },\r
+\r
+ moveToBookmark : function(bookmark) {\r
+ var t = this, dom = t.dom, marker1, marker2, rng, root, startContainer, endContainer, startOffset, endOffset;\r
+\r
+ // Clear selection cache\r
+ if (t.tridentSel)\r
+ t.tridentSel.destroy();\r
+\r
+ if (bookmark) {\r
+ if (bookmark.start) {\r
+ rng = dom.createRng();\r
+ root = dom.getRoot();\r
+\r
+ function setEndPoint(start) {\r
+ var point = bookmark[start ? 'start' : 'end'], i, node, offset, children;\r
+\r
+ if (point) {\r
+ // Find container node\r
+ for (node = root, i = point.length - 1; i >= 1; i--) {\r
+ children = node.childNodes;\r
+\r
+ if (children.length)\r
+ node = children[point[i]];\r
+ }\r
+\r
+ // Set offset within container node\r
+ if (start)\r
+ rng.setStart(node, point[0]);\r
+ else\r
+ rng.setEnd(node, point[0]);\r
+ }\r
+ };\r
+\r
+ setEndPoint(true);\r
+ setEndPoint();\r
+\r
+ t.setRng(rng);\r
+ } else if (bookmark.id) {\r
+ function restoreEndPoint(suffix) {\r
+ var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep;\r
+\r
+ if (marker) {\r
+ node = marker.parentNode;\r
+\r
+ if (suffix == 'start') {\r
+ if (!keep) {\r
+ idx = dom.nodeIndex(marker);\r
+ } else {\r
+ node = marker.firstChild;\r
+ idx = 1;\r
+ }\r
+\r
+ startContainer = endContainer = node;\r
+ startOffset = endOffset = idx;\r
+ } else {\r
+ if (!keep) {\r
+ idx = dom.nodeIndex(marker);\r
+ } else {\r
+ node = marker.firstChild;\r
+ idx = 1;\r
+ }\r
+\r
+ endContainer = node;\r
+ endOffset = idx;\r
+ }\r
+\r
+ if (!keep) {\r
+ prev = marker.previousSibling;\r
+ next = marker.nextSibling;\r
+\r
+ // Remove all marker text nodes\r
+ each(tinymce.grep(marker.childNodes), function(node) {\r
+ if (node.nodeType == 3)\r
+ node.nodeValue = node.nodeValue.replace(/\uFEFF/g, '');\r
+ });\r
+\r
+ // Remove marker but keep children if for example contents where inserted into the marker\r
+ // Also remove duplicated instances of the marker for example by a split operation or by WebKit auto split on paste feature\r
+ while (marker = dom.get(bookmark.id + '_' + suffix))\r
+ dom.remove(marker, 1);\r
+\r
+ // If siblings are text nodes then merge them unless it's Opera since it some how removes the node\r
+ // and we are sniffing since adding a lot of detection code for a browser with 3% of the market isn't worth the effort. Sorry, Opera but it's just a fact\r
+ if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !tinymce.isOpera) {\r
+ idx = prev.nodeValue.length;\r
+ prev.appendData(next.nodeValue);\r
+ dom.remove(next);\r
+\r
+ if (suffix == 'start') {\r
+ startContainer = endContainer = prev;\r
+ startOffset = endOffset = idx;\r
+ } else {\r
+ endContainer = prev;\r
+ endOffset = idx;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ };\r
+\r
+ function addBogus(node) {\r
+ // Adds a bogus BR element for empty block elements\r
+ // on non IE browsers just to have a place to put the caret\r
+ if (!isIE && dom.isBlock(node) && !node.innerHTML)\r
+ node.innerHTML = '<br _mce_bogus="1" />';\r
+\r
+ return node;\r
+ };\r
+\r
+ // Restore start/end points\r
+ restoreEndPoint('start');\r
+ restoreEndPoint('end');\r
+\r
+ if (startContainer) {\r
+ rng = dom.createRng();\r
+ rng.setStart(addBogus(startContainer), startOffset);\r
+ rng.setEnd(addBogus(endContainer), endOffset);\r
+ t.setRng(rng);\r
+ }\r
+ } else if (bookmark.name) {\r
+ t.select(dom.select(bookmark.name)[bookmark.index]);\r
+ } else if (bookmark.rng)\r
+ t.setRng(bookmark.rng);\r
+ }\r
+ },\r
+\r
+ select : function(node, content) {\r
+ var t = this, dom = t.dom, rng = dom.createRng(), idx;\r
+\r
+ idx = dom.nodeIndex(node);\r
+ rng.setStart(node.parentNode, idx);\r
+ rng.setEnd(node.parentNode, idx + 1);\r
+\r
+ // Find first/last text node or BR element\r
+ if (content) {\r
+ function setPoint(node, start) {\r
+ var walker = new tinymce.dom.TreeWalker(node, node);\r
+\r
+ do {\r
+ // Text node\r
+ if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {\r
+ if (start)\r
+ rng.setStart(node, 0);\r
+ else\r
+ rng.setEnd(node, node.nodeValue.length);\r
+\r
+ return;\r
+ }\r
+\r
+ // BR element\r
+ if (node.nodeName == 'BR') {\r
+ if (start)\r
+ rng.setStartBefore(node);\r
+ else\r
+ rng.setEndBefore(node);\r
+\r
+ return;\r
+ }\r
+ } while (node = (start ? walker.next() : walker.prev()));\r
+ };\r
+\r
+ setPoint(node, 1);\r
+ setPoint(node);\r
+ }\r
+\r
+ t.setRng(rng);\r
+\r
+ return node;\r
+ },\r
+\r
+ isCollapsed : function() {\r
+ var t = this, r = t.getRng(), s = t.getSel();\r
+\r
+ if (!r || r.item)\r
+ return false;\r
+\r
+ if (r.compareEndPoints)\r
+ return r.compareEndPoints('StartToEnd', r) === 0;\r
+\r
+ return !s || r.collapsed;\r
+ },\r
+\r
+ collapse : function(b) {\r
+ var t = this, r = t.getRng(), n;\r
+\r
+ // Control range on IE\r
+ if (r.item) {\r
+ n = r.item(0);\r
+ r = this.win.document.body.createTextRange();\r
+ r.moveToElementText(n);\r
+ }\r
+\r
+ r.collapse(!!b);\r
+ t.setRng(r);\r
+ },\r
+\r
+ getSel : function() {\r
+ var t = this, w = this.win;\r
+\r
+ return w.getSelection ? w.getSelection() : w.document.selection;\r
+ },\r
+\r
+ getRng : function(w3c) {\r
+ var t = this, s, r, elm, doc = t.win.document;\r
+\r
+ // Found tridentSel object then we need to use that one\r
+ if (w3c && t.tridentSel)\r
+ return t.tridentSel.getRangeAt(0);\r
+\r
+ try {\r
+ if (s = t.getSel())\r
+ r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : doc.createRange());\r
+ } catch (ex) {\r
+ // IE throws unspecified error here if TinyMCE is placed in a frame/iframe\r
+ }\r
+\r
+ // We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet\r
+ if (tinymce.isIE && r.setStart && doc.selection.createRange().item) {\r
+ elm = doc.selection.createRange().item(0);\r
+ r = doc.createRange();\r
+ r.setStartBefore(elm);\r
+ r.setEndAfter(elm);\r
+ }\r
+\r
+ // No range found then create an empty one\r
+ // This can occur when the editor is placed in a hidden container element on Gecko\r
+ // Or on IE when there was an exception\r
+ if (!r)\r
+ r = doc.createRange ? doc.createRange() : doc.body.createTextRange();\r
+\r
+ if (t.selectedRange && t.explicitRange) {\r
+ if (r.compareBoundaryPoints(r.START_TO_START, t.selectedRange) === 0 && r.compareBoundaryPoints(r.END_TO_END, t.selectedRange) === 0) {\r
+ // Safari, Opera and Chrome only ever select text which causes the range to change.\r
+ // This lets us use the originally set range if the selection hasn't been changed by the user.\r
+ r = t.explicitRange;\r
+ } else {\r
+ t.selectedRange = null;\r
+ t.explicitRange = null;\r
+ }\r
+ }\r
+ return r;\r
+ },\r
+\r
+ setRng : function(r) {\r
+ var s, t = this;\r
+ \r
+ if (!t.tridentSel) {\r
+ s = t.getSel();\r
+\r
+ if (s) {\r
+ t.explicitRange = r;\r
+ s.removeAllRanges();\r
+ s.addRange(r);\r
+ t.selectedRange = s.getRangeAt(0);\r
+ }\r
+ } else {\r
+ // Is W3C Range\r
+ if (r.cloneRange) {\r
+ t.tridentSel.addRange(r);\r
+ return;\r
+ }\r
+\r
+ // Is IE specific range\r
+ try {\r
+ r.select();\r
+ } catch (ex) {\r
+ // Needed for some odd IE bug #1843306\r
+ }\r
+ }\r
+ },\r
+\r
+ setNode : function(n) {\r
+ var t = this;\r
+\r
+ t.setContent(t.dom.getOuterHTML(n));\r
+\r
+ return n;\r
+ },\r
+\r
+ getNode : function() {\r
+ var t = this, rng = t.getRng(), sel = t.getSel(), elm;\r
+\r
+ if (rng.setStart) {\r
+ // Range maybe lost after the editor is made visible again\r
+ if (!rng)\r
+ return t.dom.getRoot();\r
+\r
+ elm = rng.commonAncestorContainer;\r
+\r
+ // Handle selection a image or other control like element such as anchors\r
+ if (!rng.collapsed) {\r
+ if (rng.startContainer == rng.endContainer) {\r
+ if (rng.startOffset - rng.endOffset < 2) {\r
+ if (rng.startContainer.hasChildNodes())\r
+ elm = rng.startContainer.childNodes[rng.startOffset];\r
+ }\r
+ }\r
+\r
+ // If the anchor node is a element instead of a text node then return this element\r
+ if (tinymce.isWebKit && sel.anchorNode && sel.anchorNode.nodeType == 1) \r
+ return sel.anchorNode.childNodes[sel.anchorOffset]; \r
+ }\r
+\r
+ if (elm && elm.nodeType == 3)\r
+ return elm.parentNode;\r
+\r
+ return elm;\r
+ }\r
+\r
+ return rng.item ? rng.item(0) : rng.parentElement();\r
+ },\r
+\r
+ getSelectedBlocks : function(st, en) {\r
+ var t = this, dom = t.dom, sb, eb, n, bl = [];\r
+\r
+ sb = dom.getParent(st || t.getStart(), dom.isBlock);\r
+ eb = dom.getParent(en || t.getEnd(), dom.isBlock);\r
+\r
+ if (sb)\r
+ bl.push(sb);\r
+\r
+ if (sb && eb && sb != eb) {\r
+ n = sb;\r
+\r
+ while ((n = n.nextSibling) && n != eb) {\r
+ if (dom.isBlock(n))\r
+ bl.push(n);\r
+ }\r
+ }\r
+\r
+ if (eb && sb != eb)\r
+ bl.push(eb);\r
+\r
+ return bl;\r
+ },\r
+\r
+ destroy : function(s) {\r
+ var t = this;\r
+\r
+ t.win = null;\r
+\r
+ if (t.tridentSel)\r
+ t.tridentSel.destroy();\r
+\r
+ // Manual destroy then remove unload handler\r
+ if (!s)\r
+ tinymce.removeUnload(t.destroy);\r
+ },\r
+\r
+ // IE has an issue where you can't select/move the caret by clicking outside the body if the document is in standards mode\r
+ _fixIESelection : function() {\r
+ var dom = this.dom, doc = dom.doc, body = doc.body, started, startRng;\r
+\r
+ // Make HTML element unselectable since we are going to handle selection by hand\r
+ doc.documentElement.unselectable = true;\r
+\r
+ // Return range from point or null if it failed\r
+ function rngFromPoint(x, y) {\r
+ var rng = body.createTextRange();\r
+\r
+ try {\r
+ rng.moveToPoint(x, y);\r
+ } catch (ex) {\r
+ // IE sometimes throws and exception, so lets just ignore it\r
+ rng = null;\r
+ }\r
+\r
+ return rng;\r
+ };\r
+\r
+ // Fires while the selection is changing\r
+ function selectionChange(e) {\r
+ var pointRng;\r
+\r
+ // Check if the button is down or not\r
+ if (e.button) {\r
+ // Create range from mouse position\r
+ pointRng = rngFromPoint(e.x, e.y);\r
+\r
+ if (pointRng) {\r
+ // Check if pointRange is before/after selection then change the endPoint\r
+ if (pointRng.compareEndPoints('StartToStart', startRng) > 0)\r
+ pointRng.setEndPoint('StartToStart', startRng);\r
+ else\r
+ pointRng.setEndPoint('EndToEnd', startRng);\r
+\r
+ pointRng.select();\r
+ }\r
+ } else\r
+ endSelection();\r
+ }\r
+\r
+ // Removes listeners\r
+ function endSelection() {\r
+ dom.unbind(doc, 'mouseup', endSelection);\r
+ dom.unbind(doc, 'mousemove', selectionChange);\r
+ started = 0;\r
+ };\r
+\r
+ // Detect when user selects outside BODY\r
+ dom.bind(doc, 'mousedown', function(e) {\r
+ if (e.target.nodeName === 'HTML') {\r
+ if (started)\r
+ endSelection();\r
+\r
+ started = 1;\r
+\r
+ // Setup start position\r
+ startRng = rngFromPoint(e.x, e.y);\r
+ if (startRng) {\r
+ // Listen for selection change events\r
+ dom.bind(doc, 'mouseup', endSelection);\r
+ dom.bind(doc, 'mousemove', selectionChange);\r
+\r
+ dom.win.focus();\r
+ startRng.select();\r
+ }\r
+ }\r
+ });\r
+ }\r
+ });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+ tinymce.create('tinymce.dom.XMLWriter', {\r
+ node : null,\r
+\r
+ XMLWriter : function(s) {\r
+ // Get XML document\r
+ function getXML() {\r
+ var i = document.implementation;\r
+\r
+ if (!i || !i.createDocument) {\r
+ // Try IE objects\r
+ try {return new ActiveXObject('MSXML2.DOMDocument');} catch (ex) {}\r
+ try {return new ActiveXObject('Microsoft.XmlDom');} catch (ex) {}\r
+ } else\r
+ return i.createDocument('', '', null);\r
+ };\r
+\r
+ this.doc = getXML();\r
+ \r
+ // Since Opera and WebKit doesn't escape > into > we need to do it our self to normalize the output for all browsers\r
+ this.valid = tinymce.isOpera || tinymce.isWebKit;\r
+\r
+ this.reset();\r
+ },\r
+\r
+ reset : function() {\r
+ var t = this, d = t.doc;\r
+\r
+ if (d.firstChild)\r
+ d.removeChild(d.firstChild);\r
+\r
+ t.node = d.appendChild(d.createElement("html"));\r
+ },\r
+\r
+ writeStartElement : function(n) {\r
+ var t = this;\r
+\r
+ t.node = t.node.appendChild(t.doc.createElement(n));\r
+ },\r
+\r
+ writeAttribute : function(n, v) {\r
+ if (this.valid)\r
+ v = v.replace(/>/g, '%MCGT%');\r
+\r
+ this.node.setAttribute(n, v);\r
+ },\r
+\r
+ writeEndElement : function() {\r
+ this.node = this.node.parentNode;\r
+ },\r
+\r
+ writeFullEndElement : function() {\r
+ var t = this, n = t.node;\r
+\r
+ n.appendChild(t.doc.createTextNode(""));\r
+ t.node = n.parentNode;\r
+ },\r
+\r
+ writeText : function(v) {\r
+ if (this.valid)\r
+ v = v.replace(/>/g, '%MCGT%');\r
+\r
+ this.node.appendChild(this.doc.createTextNode(v));\r
+ },\r
+\r
+ writeCDATA : function(v) {\r
+ this.node.appendChild(this.doc.createCDATASection(v));\r
+ },\r
+\r
+ writeComment : function(v) {\r
+ // Fix for bug #2035694\r
+ if (tinymce.isIE)\r
+ v = v.replace(/^\-|\-$/g, ' ');\r
+\r
+ this.node.appendChild(this.doc.createComment(v.replace(/\-\-/g, ' ')));\r
+ },\r
+\r
+ getContent : function() {\r
+ var h;\r
+\r
+ h = this.doc.xml || new XMLSerializer().serializeToString(this.doc);\r
+ h = h.replace(/<\?[^?]+\?>|<html[^>]*>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g, '');\r
+ h = h.replace(/ ?\/>/g, ' />');\r
+\r
+ if (this.valid)\r
+ h = h.replace(/\%MCGT%/g, '>');\r
+\r
+ return h;\r
+ }\r
+ });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+ var attrsCharsRegExp = /[&\"<>]/g, textCharsRegExp = /[<>&]/g, encodedChars = {'&' : '&', '"' : '"', '<' : '<', '>' : '>'};\r
+\r
+ tinymce.create('tinymce.dom.StringWriter', {\r
+ str : null,\r
+ tags : null,\r
+ count : 0,\r
+ settings : null,\r
+ indent : null,\r
+\r
+ StringWriter : function(s) {\r
+ this.settings = tinymce.extend({\r
+ indent_char : ' ',\r
+ indentation : 0\r
+ }, s);\r
+\r
+ this.reset();\r
+ },\r
+\r
+ reset : function() {\r
+ this.indent = '';\r
+ this.str = "";\r
+ this.tags = [];\r
+ this.count = 0;\r
+ },\r
+\r
+ writeStartElement : function(n) {\r
+ this._writeAttributesEnd();\r
+ this.writeRaw('<' + n);\r
+ this.tags.push(n);\r
+ this.inAttr = true;\r
+ this.count++;\r
+ this.elementCount = this.count;\r
+ this.attrs = {};\r
+ },\r
+\r
+ writeAttribute : function(n, v) {\r
+ var t = this;\r
+\r
+ if (!t.attrs[n]) {\r
+ t.writeRaw(" " + t.encode(n, true) + '="' + t.encode(v, true) + '"');\r
+ t.attrs[n] = v;\r
+ }\r
+ },\r
+\r
+ writeEndElement : function() {\r
+ var n;\r
+\r
+ if (this.tags.length > 0) {\r
+ n = this.tags.pop();\r
+\r
+ if (this._writeAttributesEnd(1))\r
+ this.writeRaw('</' + n + '>');\r
+\r
+ if (this.settings.indentation > 0)\r
+ this.writeRaw('\n');\r
+ }\r
+ },\r
+\r
+ writeFullEndElement : function() {\r
+ if (this.tags.length > 0) {\r
+ this._writeAttributesEnd();\r
+ this.writeRaw('</' + this.tags.pop() + '>');\r
+\r
+ if (this.settings.indentation > 0)\r
+ this.writeRaw('\n');\r
+ }\r
+ },\r
+\r
+ writeText : function(v) {\r
+ this._writeAttributesEnd();\r
+ this.writeRaw(this.encode(v));\r
+ this.count++;\r
+ },\r
+\r
+ writeCDATA : function(v) {\r
+ this._writeAttributesEnd();\r
+ this.writeRaw('<![CDATA[' + v + ']]>');\r
+ this.count++;\r
+ },\r
+\r
+ writeComment : function(v) {\r
+ this._writeAttributesEnd();\r
+ this.writeRaw('<!--' + v + '-->');\r
+ this.count++;\r
+ },\r
+\r
+ writeRaw : function(v) {\r
+ this.str += v;\r
+ },\r
+\r
+ encode : function(s, attr) {\r
+ return s.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(v) {\r
+ return encodedChars[v];\r
+ });\r
+ },\r
+\r
+ getContent : function() {\r
+ return this.str;\r
+ },\r
+\r
+ _writeAttributesEnd : function(s) {\r
+ if (!this.inAttr)\r
+ return;\r
+\r
+ this.inAttr = false;\r
+\r
+ if (s && this.elementCount == this.count) {\r
+ this.writeRaw(' />');\r
+ return false;\r
+ }\r
+\r
+ this.writeRaw('>');\r
+\r
+ return true;\r
+ }\r
+ });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+ // Shorten names\r
+ var extend = tinymce.extend, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, isIE = tinymce.isIE, isGecko = tinymce.isGecko;\r
+\r
+ function wildcardToRE(s) {\r
+ return s.replace(/([?+*])/g, '.$1');\r
+ };\r
+\r
+ tinymce.create('tinymce.dom.Serializer', {\r
+ Serializer : function(s) {\r
+ var t = this;\r
+\r
+ t.key = 0;\r
+ t.onPreProcess = new Dispatcher(t);\r
+ t.onPostProcess = new Dispatcher(t);\r
+\r
+ try {\r
+ t.writer = new tinymce.dom.XMLWriter();\r
+ } catch (ex) {\r
+ // IE might throw exception if ActiveX is disabled so we then switch to the slightly slower StringWriter\r
+ t.writer = new tinymce.dom.StringWriter();\r
+ }\r
+\r
+ // IE9 broke the XML attributes order so it can't be used anymore\r
+ if (tinymce.isIE && document.documentMode > 8) {\r
+ t.writer = new tinymce.dom.StringWriter();\r
+ }\r
+\r
+ // Default settings\r
+ t.settings = s = extend({\r
+ dom : tinymce.DOM,\r
+ valid_nodes : 0,\r
+ node_filter : 0,\r
+ attr_filter : 0,\r
+ invalid_attrs : /^(_mce_|_moz_|sizset|sizcache)/,\r
+ closed : /^(br|hr|input|meta|img|link|param|area)$/,\r
+ entity_encoding : 'named',\r
+ entities : '160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro',\r
+ valid_elements : '*[*]',\r
+ extended_valid_elements : 0,\r
+ invalid_elements : 0,\r
+ fix_table_elements : 1,\r
+ fix_list_elements : true,\r
+ fix_content_duplication : true,\r
+ convert_fonts_to_spans : false,\r
+ font_size_classes : 0,\r
+ apply_source_formatting : 0,\r
+ indent_mode : 'simple',\r
+ indent_char : '\t',\r
+ indent_levels : 1,\r
+ remove_linebreaks : 1,\r
+ remove_redundant_brs : 1,\r
+ element_format : 'xhtml'\r
+ }, s);\r
+\r
+ t.dom = s.dom;\r
+ t.schema = s.schema;\r
+\r
+ // Use raw entities if no entities are defined\r
+ if (s.entity_encoding == 'named' && !s.entities)\r
+ s.entity_encoding = 'raw';\r
+\r
+ if (s.remove_redundant_brs) {\r
+ t.onPostProcess.add(function(se, o) {\r
+ // Remove single BR at end of block elements since they get rendered\r
+ o.content = o.content.replace(/(<br \/>\s*)+<\/(p|h[1-6]|div|li)>/gi, function(a, b, c) {\r
+ // Check if it's a single element\r
+ if (/^<br \/>\s*<\//.test(a))\r
+ return '</' + c + '>';\r
\r
- s += v;\r
+ return a;\r
+ });\r
});\r
- re = new RegExp('^(' + s.toLowerCase() + ')$', 'i');\r
+ }\r
\r
- each(p[0].split('/'), function(s) {\r
- t.childRules = t.childRules || {};\r
- t.childRules[s] = re;\r
+ // Remove XHTML element endings i.e. produce crap :) XHTML is better\r
+ if (s.element_format == 'html') {\r
+ t.onPostProcess.add(function(se, o) {\r
+ o.content = o.content.replace(/<([^>]+) \/>/g, '<$1>');\r
});\r
- });\r
+ }\r
\r
- // Build regex\r
- s = '';\r
- each(t.childRules, function(v, k) {\r
- if (s)\r
- s += '|';\r
+ if (s.fix_list_elements) {\r
+ t.onPreProcess.add(function(se, o) {\r
+ var nl, x, a = ['ol', 'ul'], i, n, p, r = /^(OL|UL)$/, np;\r
\r
- s += k;\r
- });\r
+ function prevNode(e, n) {\r
+ var a = n.split(','), i;\r
+\r
+ while ((e = e.previousSibling) != null) {\r
+ for (i=0; i<a.length; i++) {\r
+ if (e.nodeName == a[i])\r
+ return e;\r
+ }\r
+ }\r
+\r
+ return null;\r
+ };\r
+\r
+ for (x=0; x<a.length; x++) {\r
+ nl = t.dom.select(a[x], o.node);\r
+\r
+ for (i=0; i<nl.length; i++) {\r
+ n = nl[i];\r
+ p = n.parentNode;\r
+\r
+ if (r.test(p.nodeName)) {\r
+ np = prevNode(n, 'LI');\r
+\r
+ if (!np) {\r
+ np = t.dom.create('li');\r
+ np.innerHTML = ' ';\r
+ np.appendChild(n);\r
+ p.insertBefore(np, p.firstChild);\r
+ } else\r
+ np.appendChild(n);\r
+ }\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+ if (s.fix_table_elements) {\r
+ t.onPreProcess.add(function(se, o) {\r
+ // Since Opera will crash if you attach the node to a dynamic document we need to brrowser sniff a specific build\r
+ // so Opera users with an older version will have to live with less compaible output not much we can do here\r
+ if (!tinymce.isOpera || opera.buildNumber() >= 1767) {\r
+ each(t.dom.select('p table', o.node).reverse(), function(n) {\r
+ var parent = t.dom.getParent(n.parentNode, 'table,p');\r
+\r
+ if (parent.nodeName != 'TABLE') {\r
+ try {\r
+ t.dom.split(parent, n);\r
+ } catch (ex) {\r
+ // IE can sometimes fire an unknown runtime error so we just ignore it\r
+ }\r
+ }\r
+ });\r
+ }\r
+ });\r
+ }\r
+ },\r
+\r
+ setEntities : function(s) {\r
+ var t = this, a, i, l = {}, v;\r
+\r
+ // No need to setup more than once\r
+ if (t.entityLookup)\r
+ return;\r
+\r
+ // Build regex and lookup array\r
+ a = s.split(',');\r
+ for (i = 0; i < a.length; i += 2) {\r
+ v = a[i];\r
+\r
+ // Don't add default & " etc.\r
+ if (v == 34 || v == 38 || v == 60 || v == 62)\r
+ continue;\r
+\r
+ l[String.fromCharCode(a[i])] = a[i + 1];\r
\r
- t.parentElementsRE = new RegExp('^(' + s.toLowerCase() + ')$', 'i');\r
+ v = parseInt(a[i]).toString(16);\r
+ }\r
\r
- /*console.debug(t.parentElementsRE.toString());\r
- each(t.childRules, function(v) {\r
- console.debug(v.toString());\r
- });*/\r
+ t.entityLookup = l;\r
},\r
\r
setRules : function(s) {\r
},\r
\r
serialize : function(n, o) {\r
- var h, t = this;\r
+ var h, t = this, doc, oldDoc, impl, selected;\r
\r
t._setup();\r
o = o || {};\r
o.format = o.format || 'html';\r
t.processObj = o;\r
+\r
+ // IE looses the selected attribute on option elements so we need to store it\r
+ // See: http://support.microsoft.com/kb/829907\r
+ if (isIE) {\r
+ selected = [];\r
+ each(n.getElementsByTagName('option'), function(n) {\r
+ var v = t.dom.getAttrib(n, 'selected');\r
+\r
+ selected.push(v ? v : null);\r
+ });\r
+ }\r
+\r
n = n.cloneNode(true);\r
+\r
+ // IE looses the selected attribute on option elements so we need to restore it\r
+ if (isIE) {\r
+ each(n.getElementsByTagName('option'), function(n, i) {\r
+ t.dom.setAttrib(n, 'selected', selected[i]);\r
+ });\r
+ }\r
+\r
+ // Nodes needs to be attached to something in WebKit/Opera\r
+ // Older builds of Opera crashes if you attach the node to an document created dynamically\r
+ // and since we can't feature detect a crash we need to sniff the acutal build number\r
+ // This fix will make DOM ranges and make Sizzle happy!\r
+ impl = n.ownerDocument.implementation;\r
+ if (impl.createHTMLDocument && (tinymce.isOpera && opera.buildNumber() >= 1767)) {\r
+ // Create an empty HTML document\r
+ doc = impl.createHTMLDocument("");\r
+\r
+ // Add the element or it's children if it's a body element to the new document\r
+ each(n.nodeName == 'BODY' ? n.childNodes : [n], function(node) {\r
+ doc.body.appendChild(doc.importNode(node, true));\r
+ });\r
+\r
+ // Grab first child or body element for serialization\r
+ if (n.nodeName != 'BODY')\r
+ n = doc.body.firstChild;\r
+ else\r
+ n = doc.body;\r
+\r
+ // set the new document in DOMUtils so createElement etc works\r
+ oldDoc = t.dom.doc;\r
+ t.dom.doc = doc;\r
+ }\r
+\r
t.key = '' + (parseInt(t.key) + 1);\r
\r
// Pre process\r
\r
// Serialize HTML DOM into a string\r
t.writer.reset();\r
+ t._info = o;\r
t._serializeNode(n, o.getInner);\r
\r
// Post process\r
o.content = t.writer.getContent();\r
\r
+ // Restore the old document if it was changed\r
+ if (oldDoc)\r
+ t.dom.doc = oldDoc;\r
+\r
if (!o.no_events)\r
t.onPostProcess.dispatch(t, o);\r
\r
content : h,\r
patterns : [\r
{pattern : /(<script[^>]*>)(.*?)(<\/script>)/g},\r
+ {pattern : /(<noscript[^>]*>)(.*?)(<\/noscript>)/g},\r
{pattern : /(<style[^>]*>)(.*?)(<\/style>)/g},\r
{pattern : /(<pre[^>]*>)(.*?)(<\/pre>)/g, encode : 1},\r
{pattern : /(<!--\[CDATA\[)(.*?)(\]\]-->)/g}\r
// This process is only done when getting contents out from the editor.\r
if (!o.set) {\r
// We need to replace paragraph whitespace with an nbsp before indentation to keep the \u00a0 char\r
- h = h.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g, s.entity_encoding == 'numeric' ? '<p$1> </p>' : '<p$1> </p>');\r
+ h = tinymce._replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g, s.entity_encoding == 'numeric' ? '<p$1> </p>' : '<p$1> </p>', h);\r
\r
if (s.remove_linebreaks) {\r
h = h.replace(/\r?\n|\r/g, ' ');\r
- h = h.replace(/(<[^>]+>)\s+/g, '$1 ');\r
- h = h.replace(/\s+(<\/[^>]+>)/g, ' $1');\r
- h = h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g, '<$1 $2>'); // Trim block start\r
- h = h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g, '<$1>'); // Trim block start\r
- h = h.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g, '</$1>'); // Trim block end\r
+ h = tinymce._replace(/(<[^>]+>)\s+/g, '$1 ', h);\r
+ h = tinymce._replace(/\s+(<\/[^>]+>)/g, ' $1', h);\r
+ h = tinymce._replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g, '<$1 $2>', h); // Trim block start\r
+ h = tinymce._replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g, '<$1>', h); // Trim block start\r
+ h = tinymce._replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g, '</$1>', h); // Trim block end\r
}\r
\r
// Simple indentation\r
if (s.apply_source_formatting && s.indent_mode == 'simple') {\r
// Add line breaks before and after block elements\r
- h = h.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g, '\n<$1$2$3>\n');\r
- h = h.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g, '\n<$1$2>');\r
- h = h.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g, '</$1>\n');\r
+ h = tinymce._replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g, '\n<$1$2$3>\n', h);\r
+ h = tinymce._replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g, '\n<$1$2>', h);\r
+ h = tinymce._replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g, '</$1>\n', h);\r
h = h.replace(/\n\n/g, '\n');\r
}\r
}\r
h = t._unprotect(h, p);\r
\r
// Restore CDATA sections\r
- h = h.replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g, '<![CDATA[$1]]>');\r
+ h = tinymce._replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g, '<![CDATA[$1]]>', h);\r
\r
// Restore the \u00a0 character if raw mode is enabled\r
if (s.entity_encoding == 'raw')\r
- h = h.replace(/<p> <\/p>|<p([^>]+)> <\/p>/g, '<p$1>\u00a0</p>');\r
+ h = tinymce._replace(/<p> <\/p>|<p([^>]+)> <\/p>/g, '<p$1>\u00a0</p>', h);\r
+\r
+ // Restore noscript elements\r
+ h = h.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g, function(v, attribs, text) {\r
+ return '<noscript' + attribs + '>' + t.dom.decode(text.replace(/<!--|-->/g, '')) + '</noscript>';\r
+ });\r
}\r
\r
o.content = h;\r
},\r
\r
- _serializeNode : function(n, inn) {\r
- var t = this, s = t.settings, w = t.writer, hc, el, cn, i, l, a, at, no, v, nn, ru, ar, iv;\r
+ _serializeNode : function(n, inner) {\r
+ var t = this, s = t.settings, w = t.writer, hc, el, cn, i, l, a, at, no, v, nn, ru, ar, iv, closed, keep, type, scopeName;\r
\r
if (!s.node_filter || s.node_filter(n)) {\r
switch (n.nodeType) {\r
case 1: // Element\r
- if (n.hasAttribute ? n.hasAttribute('mce_bogus') : n.getAttribute('mce_bogus'))\r
+ if (n.hasAttribute ? n.hasAttribute('_mce_bogus') : n.getAttribute('_mce_bogus'))\r
return;\r
\r
- iv = false;\r
+ iv = keep = false;\r
hc = n.hasChildNodes();\r
- nn = n.getAttribute('mce_name') || n.nodeName.toLowerCase();\r
+ nn = n.getAttribute('_mce_name') || n.nodeName.toLowerCase();\r
+\r
+ // Get internal type\r
+ type = n.getAttribute('_mce_type');\r
+ if (type) {\r
+ if (!t._info.cleanup) {\r
+ iv = true;\r
+ return;\r
+ } else\r
+ keep = 1;\r
+ }\r
\r
// Add correct prefix on IE\r
if (isIE) {\r
- if (n.scopeName !== 'HTML' && n.scopeName !== 'html')\r
- nn = n.scopeName + ':' + nn;\r
+ scopeName = n.scopeName;\r
+ if (scopeName && scopeName !== 'HTML' && scopeName !== 'html')\r
+ nn = scopeName + ':' + nn;\r
}\r
\r
// Remove mce prefix on IE needed for the abbr element\r
nn = nn.substring(4);\r
\r
// Check if valid\r
- if (!t.validElementsRE.test(nn) || (t.invalidElementsRE && t.invalidElementsRE.test(nn)) || inn) {\r
- iv = true;\r
- break;\r
+ if (!keep) {\r
+ if (!t.validElementsRE || !t.validElementsRE.test(nn) || (t.invalidElementsRE && t.invalidElementsRE.test(nn)) || inner) {\r
+ iv = true;\r
+ break;\r
+ }\r
}\r
\r
if (isIE) {\r
// Fix IE content duplication (DOM can have multiple copies of the same node)\r
if (s.fix_content_duplication) {\r
- if (n.mce_serialized == t.key)\r
+ if (n._mce_serialized == t.key)\r
return;\r
\r
- n.mce_serialized = t.key;\r
+ n._mce_serialized = t.key;\r
}\r
\r
// IE sometimes adds a / infront of the node name\r
}\r
\r
// Check if valid child\r
- if (t.childRules) {\r
- if (t.parentElementsRE.test(t.elementName)) {\r
- if (!t.childRules[t.elementName].test(nn)) {\r
- iv = true;\r
- break;\r
- }\r
+ if (s.validate_children) {\r
+ if (t.elementName && !t.schema.isValid(t.elementName, nn)) {\r
+ iv = true;\r
+ break;\r
}\r
\r
t.elementName = nn;\r
}\r
\r
ru = t.findRule(nn);\r
+ \r
+ // No valid rule for this element could be found then skip it\r
+ if (!ru) {\r
+ iv = true;\r
+ break;\r
+ }\r
+\r
nn = ru.name || nn;\r
+ closed = s.closed.test(nn);\r
\r
// Skip empty nodes or empty node name in IE\r
if ((!hc && ru.noEmpty) || (isIE && !nn)) {\r
\r
// Add wild attributes\r
if (ru.validAttribsRE) {\r
- at = isIE ? getIEAtts(n) : n.attributes;\r
+ at = t.dom.getAttribs(n);\r
for (i=at.length-1; i>-1; i--) {\r
no = at[i];\r
\r
}\r
}\r
\r
+ // Keep type attribute\r
+ if (type && keep)\r
+ w.writeAttribute('_mce_type', type);\r
+\r
+ // Write text from script\r
+ if (nn === 'script' && tinymce.trim(n.innerHTML)) {\r
+ w.writeText('// '); // Padd it with a comment so it will parse on older browsers\r
+ w.writeCDATA(n.innerHTML.replace(/<!--|-->|<\[CDATA\[|\]\]>/g, '')); // Remove comments and cdata stuctures\r
+ hc = false;\r
+ break;\r
+ }\r
+\r
// Padd empty nodes with a \r
if (ru.padd) {\r
// If it has only one bogus child, padd it anyway workaround for <td><br /></td> bug\r
if (hc && (cn = n.firstChild) && cn.nodeType === 1 && n.childNodes.length === 1) {\r
- if (cn.hasAttribute ? cn.hasAttribute('mce_bogus') : cn.getAttribute('mce_bogus'))\r
+ if (cn.hasAttribute ? cn.hasAttribute('_mce_bogus') : cn.getAttribute('_mce_bogus'))\r
w.writeText('\u00a0');\r
} else if (!hc)\r
w.writeText('\u00a0'); // No children then padd it\r
\r
case 3: // Text\r
// Check if valid child\r
- if (t.childRules && t.parentElementsRE.test(t.elementName)) {\r
- if (!t.childRules[t.elementName].test(n.nodeName))\r
- return;\r
- }\r
+ if (s.validate_children && t.elementName && !t.schema.isValid(t.elementName, '#text'))\r
+ return;\r
\r
return w.writeText(n.nodeValue);\r
\r
} else if (n.nodeType == 1)\r
hc = n.hasChildNodes();\r
\r
- if (hc) {\r
+ if (hc && !closed) {\r
cn = n.firstChild;\r
\r
while (cn) {\r
\r
// Write element end\r
if (!iv) {\r
- if (hc || !s.closed.test(nn))\r
+ if (!closed)\r
w.writeFullEndElement();\r
else\r
w.writeEndElement();\r
t.setEntities(s.entities);\r
l = t.entityLookup;\r
\r
- h = h.replace(t.entitiesRE, function(a) {\r
+ h = h.replace(/[\u007E-\uFFFF]/g, function(a) {\r
var v;\r
\r
if (v = l[a])\r
\r
t.setRules(s.valid_elements);\r
t.addRules(s.extended_valid_elements);\r
- t.addValidChildRules(s.valid_child_elements);\r
\r
if (s.invalid_elements)\r
t.invalidElementsRE = new RegExp('^(' + wildcardToRE(s.invalid_elements.replace(/,/g, '|').toLowerCase()) + ')$');\r
\r
v = this.dom.getAttrib(n, na);\r
\r
- // Bool attr\r
- if (this.settings.bool_attrs.test(na) && v) {\r
- v = ('' + v).toLowerCase();\r
-\r
- if (v === 'false' || v === '0')\r
- return null;\r
-\r
- v = na;\r
- }\r
-\r
switch (na) {\r
case 'rowspan':\r
case 'colspan':\r
if (v === '' && typeof(a.defaultVal) != 'undefined') {\r
v = a.defaultVal;\r
\r
- if (v === '{$uid}')\r
- return this.dom.uniqueId();\r
+ if (v === '{$uid}')\r
+ return this.dom.uniqueId();\r
+\r
+ return v;\r
+ } else {\r
+ // Remove internal mceItemXX classes when content is extracted from editor\r
+ if (na == 'class' && this.processObj.get)\r
+ v = v.replace(/\s?mceItem\w+\s?/g, '');\r
+ }\r
+\r
+ if (v === '')\r
+ return null;\r
+\r
+\r
+ return v;\r
+ }\r
+ });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+ tinymce.dom.ScriptLoader = function(settings) {\r
+ var QUEUED = 0,\r
+ LOADING = 1,\r
+ LOADED = 2,\r
+ states = {},\r
+ queue = [],\r
+ scriptLoadedCallbacks = {},\r
+ queueLoadedCallbacks = [],\r
+ loading = 0,\r
+ undefined;\r
+\r
+ function loadScript(url, callback) {\r
+ var t = this, dom = tinymce.DOM, elm, uri, loc, id;\r
+\r
+ // Execute callback when script is loaded\r
+ function done() {\r
+ dom.remove(id);\r
+\r
+ if (elm)\r
+ elm.onreadystatechange = elm.onload = elm = null;\r
+\r
+ callback();\r
+ };\r
+\r
+ id = dom.uniqueId();\r
+\r
+ if (tinymce.isIE6) {\r
+ uri = new tinymce.util.URI(url);\r
+ loc = location;\r
+\r
+ // If script is from same domain and we\r
+ // use IE 6 then use XHR since it's more reliable\r
+ if (uri.host == loc.hostname && uri.port == loc.port && (uri.protocol + ':') == loc.protocol) {\r
+ tinymce.util.XHR.send({\r
+ url : tinymce._addVer(uri.getURI()),\r
+ success : function(content) {\r
+ // Create new temp script element\r
+ var script = dom.create('script', {\r
+ type : 'text/javascript'\r
+ });\r
+\r
+ // Evaluate script in global scope\r
+ script.text = content;\r
+ document.getElementsByTagName('head')[0].appendChild(script);\r
+ dom.remove(script);\r
+\r
+ done();\r
+ }\r
+ });\r
+\r
+ return;\r
+ }\r
+ }\r
+\r
+ // Create new script element\r
+ elm = dom.create('script', {\r
+ id : id,\r
+ type : 'text/javascript',\r
+ src : tinymce._addVer(url)\r
+ });\r
+\r
+ // Add onload listener for non IE browsers since IE9\r
+ // fires onload event before the script is parsed and executed\r
+ if (!tinymce.isIE)\r
+ elm.onload = done;\r
+\r
+ elm.onreadystatechange = function() {\r
+ var state = elm.readyState;\r
+\r
+ // Loaded state is passed on IE 6 however there\r
+ // are known issues with this method but we can't use\r
+ // XHR in a cross domain loading\r
+ if (state == 'complete' || state == 'loaded')\r
+ done();\r
+ };\r
+\r
+ // Most browsers support this feature so we report errors\r
+ // for those at least to help users track their missing plugins etc\r
+ // todo: Removed since it produced error if the document is unloaded by navigating away, re-add it as an option\r
+ /*elm.onerror = function() {\r
+ alert('Failed to load: ' + url);\r
+ };*/\r
+\r
+ // Add script to document\r
+ (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);\r
+ };\r
+\r
+ this.isDone = function(url) {\r
+ return states[url] == LOADED;\r
+ };\r
+\r
+ this.markDone = function(url) {\r
+ states[url] = LOADED;\r
+ };\r
+\r
+ this.add = this.load = function(url, callback, scope) {\r
+ var item, state = states[url];\r
+\r
+ // Add url to load queue\r
+ if (state == undefined) {\r
+ queue.push(url);\r
+ states[url] = QUEUED;\r
+ }\r
\r
- return v;\r
- } else {\r
- // Remove internal mceItemXX classes when content is extracted from editor\r
- if (na == 'class' && this.processObj.get)\r
- v = v.replace(/\s?mceItem\w+\s?/g, '');\r
+ if (callback) {\r
+ // Store away callback for later execution\r
+ if (!scriptLoadedCallbacks[url])\r
+ scriptLoadedCallbacks[url] = [];\r
+\r
+ scriptLoadedCallbacks[url].push({\r
+ func : callback,\r
+ scope : scope || this\r
+ });\r
}\r
+ };\r
\r
- if (v === '')\r
- return null;\r
+ this.loadQueue = function(callback, scope) {\r
+ this.loadScripts(queue, callback, scope);\r
+ };\r
\r
+ this.loadScripts = function(scripts, callback, scope) {\r
+ var loadScripts;\r
\r
- return v;\r
- }\r
+ function execScriptLoadedCallbacks(url) {\r
+ // Execute URL callback functions\r
+ tinymce.each(scriptLoadedCallbacks[url], function(callback) {\r
+ callback.func.call(callback.scope);\r
+ });\r
\r
- });\r
-})();\r
+ scriptLoadedCallbacks[url] = undefined;\r
+ };\r
\r
-/* file:jscripts/tiny_mce/classes/dom/ScriptLoader.js */\r
+ queueLoadedCallbacks.push({\r
+ func : callback,\r
+ scope : scope || this\r
+ });\r
\r
-(function() {\r
- var each = tinymce.each, Event = tinymce.dom.Event;\r
+ loadScripts = function() {\r
+ var loadingScripts = tinymce.grep(scripts);\r
\r
- tinymce.create('tinymce.dom.ScriptLoader', {\r
- ScriptLoader : function(s) {\r
- this.settings = s || {};\r
- this.queue = [];\r
- this.lookup = {};\r
- },\r
+ // Current scripts has been handled\r
+ scripts.length = 0;\r
\r
- isDone : function(u) {\r
- return this.lookup[u] ? this.lookup[u].state == 2 : 0;\r
- },\r
+ // Load scripts that needs to be loaded\r
+ tinymce.each(loadingScripts, function(url) {\r
+ // Script is already loaded then execute script callbacks directly\r
+ if (states[url] == LOADED) {\r
+ execScriptLoadedCallbacks(url);\r
+ return;\r
+ }\r
\r
- markDone : function(u) {\r
- this.lookup[u] = {state : 2, url : u};\r
- },\r
+ // Is script not loading then start loading it\r
+ if (states[url] != LOADING) {\r
+ states[url] = LOADING;\r
+ loading++;\r
\r
- add : function(u, cb, s, pr) {\r
- var t = this, lo = t.lookup, o;\r
+ loadScript(url, function() {\r
+ states[url] = LOADED;\r
+ loading--;\r
\r
- if (o = lo[u]) {\r
- // Is loaded fire callback\r
- if (cb && o.state == 2)\r
- cb.call(s || this);\r
+ execScriptLoadedCallbacks(url);\r
\r
- return o;\r
- }\r
+ // Load more scripts if they where added by the recently loaded script\r
+ loadScripts();\r
+ });\r
+ }\r
+ });\r
\r
- o = {state : 0, url : u, func : cb, scope : s || this};\r
+ // No scripts are currently loading then execute all pending queue loaded callbacks\r
+ if (!loading) {\r
+ tinymce.each(queueLoadedCallbacks, function(callback) {\r
+ callback.func.call(callback.scope);\r
+ });\r
\r
- if (pr)\r
- t.queue.unshift(o);\r
- else\r
- t.queue.push(o);\r
+ queueLoadedCallbacks.length = 0;\r
+ }\r
+ };\r
\r
- lo[u] = o;\r
+ loadScripts();\r
+ };\r
+ };\r
\r
- return o;\r
- },\r
+ // Global script loader\r
+ tinymce.ScriptLoader = new tinymce.dom.ScriptLoader();\r
+})(tinymce);\r
\r
- load : function(u, cb, s) {\r
- var t = this, o;\r
+tinymce.dom.TreeWalker = function(start_node, root_node) {\r
+ var node = start_node;\r
\r
- if (o = t.lookup[u]) {\r
- // Is loaded fire callback\r
- if (cb && o.state == 2)\r
- cb.call(s || t);\r
+ function findSibling(node, start_name, sibling_name, shallow) {\r
+ var sibling, parent;\r
\r
- return o;\r
+ if (node) {\r
+ // Walk into nodes if it has a start\r
+ if (!shallow && node[start_name])\r
+ return node[start_name];\r
+\r
+ // Return the sibling if it has one\r
+ if (node != root_node) {\r
+ sibling = node[sibling_name];\r
+ if (sibling)\r
+ return sibling;\r
+\r
+ // Walk up the parents to look for siblings\r
+ for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) {\r
+ sibling = parent[sibling_name];\r
+ if (sibling)\r
+ return sibling;\r
+ }\r
}\r
+ }\r
+ };\r
\r
- function loadScript(u) {\r
- if (Event.domLoaded || t.settings.strict_mode) {\r
- tinymce.util.XHR.send({\r
- url : tinymce._addVer(u),\r
- error : t.settings.error,\r
- async : false,\r
- success : function(co) {\r
- t.eval(co);\r
- }\r
- });\r
- } else\r
- document.write('<script type="text/javascript" src="' + tinymce._addVer(u) + '"></script>');\r
- };\r
+ this.current = function() {\r
+ return node;\r
+ };\r
\r
- if (!tinymce.is(u, 'string')) {\r
- each(u, function(u) {\r
- loadScript(u);\r
- });\r
+ this.next = function(shallow) {\r
+ return (node = findSibling(node, 'firstChild', 'nextSibling', shallow));\r
+ };\r
\r
- if (cb)\r
- cb.call(s || t);\r
- } else {\r
- loadScript(u);\r
+ this.prev = function(shallow) {\r
+ return (node = findSibling(node, 'lastChild', 'lastSibling', shallow));\r
+ };\r
+};\r
\r
- if (cb)\r
- cb.call(s || t);\r
- }\r
- },\r
+(function() {\r
+ var transitional = {};\r
\r
- loadQueue : function(cb, s) {\r
- var t = this;\r
+ function unpack(lookup, data) {\r
+ var key;\r
\r
- if (!t.queueLoading) {\r
- t.queueLoading = 1;\r
- t.queueCallbacks = [];\r
+ function replace(value) {\r
+ return value.replace(/[A-Z]+/g, function(key) {\r
+ return replace(lookup[key]);\r
+ });\r
+ };\r
\r
- t.loadScripts(t.queue, function() {\r
- t.queueLoading = 0;\r
+ // Unpack lookup\r
+ for (key in lookup) {\r
+ if (lookup.hasOwnProperty(key))\r
+ lookup[key] = replace(lookup[key]);\r
+ }\r
\r
- if (cb)\r
- cb.call(s || t);\r
+ // Unpack and parse data into object map\r
+ replace(data).replace(/#/g, '#text').replace(/(\w+)\[([^\]]+)\]/g, function(str, name, children) {\r
+ var i, map = {};\r
\r
- each(t.queueCallbacks, function(o) {\r
- o.func.call(o.scope);\r
- });\r
- });\r
- } else if (cb)\r
- t.queueCallbacks.push({func : cb, scope : s || t});\r
- },\r
+ children = children.split(/\|/);\r
\r
- eval : function(co) {\r
- var w = window;\r
+ for (i = children.length - 1; i >= 0; i--)\r
+ map[children[i]] = 1;\r
\r
- // Evaluate script\r
- if (!w.execScript) {\r
- try {\r
- eval.call(w, co);\r
- } catch (ex) {\r
- eval(co, w); // Firefox 3.0a8\r
- }\r
- } else\r
- w.execScript(co); // IE\r
- },\r
+ transitional[name] = map;\r
+ });\r
+ };\r
\r
- loadScripts : function(sc, cb, s) {\r
- var t = this, lo = t.lookup;\r
+ // This is the XHTML 1.0 transitional elements with it's children packed to reduce it's size\r
+ // we will later include the attributes here and use it as a default for valid elements but it\r
+ // requires us to rewrite the serializer engine\r
+ unpack({\r
+ Z : '#|H|K|N|O|P',\r
+ Y : '#|X|form|R|Q',\r
+ X : 'p|T|div|U|W|isindex|fieldset|table',\r
+ W : 'pre|hr|blockquote|address|center|noframes',\r
+ U : 'ul|ol|dl|menu|dir',\r
+ ZC : '#|p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q',\r
+ T : 'h1|h2|h3|h4|h5|h6',\r
+ ZB : '#|X|S|Q',\r
+ S : 'R|P',\r
+ ZA : '#|a|G|J|M|O|P',\r
+ R : '#|a|H|K|N|O',\r
+ Q : 'noscript|P',\r
+ P : 'ins|del|script',\r
+ O : 'input|select|textarea|label|button',\r
+ N : 'M|L',\r
+ M : 'em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym',\r
+ L : 'sub|sup',\r
+ K : 'J|I',\r
+ J : 'tt|i|b|u|s|strike',\r
+ I : 'big|small|font|basefont',\r
+ H : 'G|F',\r
+ G : 'br|span|bdo',\r
+ F : 'object|applet|img|map|iframe'\r
+ }, 'script[]' + \r
+ 'style[]' + \r
+ 'object[#|param|X|form|a|H|K|N|O|Q]' + \r
+ 'param[]' + \r
+ 'p[S]' + \r
+ 'a[Z]' + \r
+ 'br[]' + \r
+ 'span[S]' + \r
+ 'bdo[S]' + \r
+ 'applet[#|param|X|form|a|H|K|N|O|Q]' + \r
+ 'h1[S]' + \r
+ 'img[]' + \r
+ 'map[X|form|Q|area]' + \r
+ 'h2[S]' + \r
+ 'iframe[#|X|form|a|H|K|N|O|Q]' + \r
+ 'h3[S]' + \r
+ 'tt[S]' + \r
+ 'i[S]' + \r
+ 'b[S]' + \r
+ 'u[S]' + \r
+ 's[S]' + \r
+ 'strike[S]' + \r
+ 'big[S]' + \r
+ 'small[S]' + \r
+ 'font[S]' + \r
+ 'basefont[]' + \r
+ 'em[S]' + \r
+ 'strong[S]' + \r
+ 'dfn[S]' + \r
+ 'code[S]' + \r
+ 'q[S]' + \r
+ 'samp[S]' + \r
+ 'kbd[S]' + \r
+ 'var[S]' + \r
+ 'cite[S]' + \r
+ 'abbr[S]' + \r
+ 'acronym[S]' + \r
+ 'sub[S]' + \r
+ 'sup[S]' + \r
+ 'input[]' + \r
+ 'select[optgroup|option]' + \r
+ 'optgroup[option]' + \r
+ 'option[]' + \r
+ 'textarea[]' + \r
+ 'label[S]' + \r
+ 'button[#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]' + \r
+ 'h4[S]' + \r
+ 'ins[#|X|form|a|H|K|N|O|Q]' + \r
+ 'h5[S]' + \r
+ 'del[#|X|form|a|H|K|N|O|Q]' + \r
+ 'h6[S]' + \r
+ 'div[#|X|form|a|H|K|N|O|Q]' + \r
+ 'ul[li]' + \r
+ 'li[#|X|form|a|H|K|N|O|Q]' + \r
+ 'ol[li]' + \r
+ 'dl[dt|dd]' + \r
+ 'dt[S]' + \r
+ 'dd[#|X|form|a|H|K|N|O|Q]' + \r
+ 'menu[li]' + \r
+ 'dir[li]' + \r
+ 'pre[ZA]' + \r
+ 'hr[]' + \r
+ 'blockquote[#|X|form|a|H|K|N|O|Q]' + \r
+ 'address[S|p]' + \r
+ 'center[#|X|form|a|H|K|N|O|Q]' + \r
+ 'noframes[#|X|form|a|H|K|N|O|Q]' + \r
+ 'isindex[]' + \r
+ 'fieldset[#|legend|X|form|a|H|K|N|O|Q]' + \r
+ 'legend[S]' + \r
+ 'table[caption|col|colgroup|thead|tfoot|tbody|tr]' + \r
+ 'caption[S]' + \r
+ 'col[]' + \r
+ 'colgroup[col]' + \r
+ 'thead[tr]' + \r
+ 'tr[th|td]' + \r
+ 'th[#|X|form|a|H|K|N|O|Q]' + \r
+ 'form[#|X|a|H|K|N|O|Q]' + \r
+ 'noscript[#|X|form|a|H|K|N|O|Q]' + \r
+ 'td[#|X|form|a|H|K|N|O|Q]' + \r
+ 'tfoot[tr]' + \r
+ 'tbody[tr]' + \r
+ 'area[]' + \r
+ 'base[]' + \r
+ 'body[#|X|form|a|H|K|N|O|Q]'\r
+ );\r
+\r
+ tinymce.dom.Schema = function() {\r
+ var t = this, elements = transitional;\r
+\r
+ t.isValid = function(name, child_name) {\r
+ var element = elements[name];\r
+\r
+ return !!(element && (!child_name || element[child_name]));\r
+ };\r
+ };\r
+})();\r
+(function(tinymce) {\r
+ tinymce.dom.RangeUtils = function(dom) {\r
+ var INVISIBLE_CHAR = '\uFEFF';\r
+\r
+ this.walk = function(rng, callback) {\r
+ var startContainer = rng.startContainer,\r
+ startOffset = rng.startOffset,\r
+ endContainer = rng.endContainer,\r
+ endOffset = rng.endOffset,\r
+ ancestor, startPoint,\r
+ endPoint, node, parent, siblings, nodes;\r
+\r
+ // Handle table cell selection the table plugin enables\r
+ // you to fake select table cells and perform formatting actions on them\r
+ nodes = dom.select('td.mceSelected,th.mceSelected');\r
+ if (nodes.length > 0) {\r
+ tinymce.each(nodes, function(node) {\r
+ callback([node]);\r
+ });\r
\r
- function done(o) {\r
- o.state = 2; // Has been loaded\r
+ return;\r
+ }\r
\r
- // Run callback\r
- if (o.func)\r
- o.func.call(o.scope || t);\r
- };\r
+ function collectSiblings(node, name, end_node) {\r
+ var siblings = [];\r
\r
- function allDone() {\r
- var l;\r
+ for (; node && node != end_node; node = node[name])\r
+ siblings.push(node);\r
\r
- // Check if all files are loaded\r
- l = sc.length;\r
- each(sc, function(o) {\r
- o = lo[o.url];\r
+ return siblings;\r
+ };\r
\r
- if (o.state === 2) {// It has finished loading\r
- done(o);\r
- l--;\r
- } else\r
- load(o);\r
- });\r
+ function findEndPoint(node, root) {\r
+ do {\r
+ if (node.parentNode == root)\r
+ return node;\r
\r
- // They are all loaded\r
- if (l === 0 && cb) {\r
- cb.call(s || t);\r
- cb = 0;\r
- }\r
+ node = node.parentNode;\r
+ } while(node);\r
};\r
\r
- function load(o) {\r
- if (o.state > 0)\r
- return;\r
+ function walkBoundary(start_node, end_node, next) {\r
+ var siblingName = next ? 'nextSibling' : 'previousSibling';\r
\r
- o.state = 1; // Is loading\r
+ for (node = start_node, parent = node.parentNode; node && node != end_node; node = parent) {\r
+ parent = node.parentNode;\r
+ siblings = collectSiblings(node == start_node ? node : node[siblingName], siblingName);\r
\r
- tinymce.dom.ScriptLoader.loadScript(o.url, function() {\r
- done(o);\r
- allDone();\r
- });\r
+ if (siblings.length) {\r
+ if (!next)\r
+ siblings.reverse();\r
\r
- /*\r
- tinymce.util.XHR.send({\r
- url : o.url,\r
- error : t.settings.error,\r
- success : function(co) {\r
- t.eval(co);\r
- done(o);\r
- allDone();\r
+ callback(siblings);\r
}\r
- });\r
- */\r
+ }\r
};\r
\r
- each(sc, function(o) {\r
- var u = o.url;\r
+ // If index based start position then resolve it\r
+ if (startContainer.nodeType == 1 && startContainer.hasChildNodes())\r
+ startContainer = startContainer.childNodes[startOffset];\r
\r
- // Add to queue if needed\r
- if (!lo[u]) {\r
- lo[u] = o;\r
- t.queue.push(o);\r
- } else\r
- o = lo[u];\r
+ // If index based end position then resolve it\r
+ if (endContainer.nodeType == 1 && endContainer.hasChildNodes())\r
+ endContainer = endContainer.childNodes[Math.min(startOffset == endOffset ? endOffset : endOffset - 1, endContainer.childNodes.length - 1)];\r
\r
- // Is already loading or has been loaded\r
- if (o.state > 0)\r
- return;\r
+ // Find common ancestor and end points\r
+ ancestor = dom.findCommonAncestor(startContainer, endContainer);\r
\r
- if (!Event.domLoaded && !t.settings.strict_mode) {\r
- var ix, ol = '';\r
+ // Same container\r
+ if (startContainer == endContainer)\r
+ return callback([startContainer]);\r
\r
- // Add onload events\r
- if (cb || o.func) {\r
- o.state = 1; // Is loading\r
+ // Process left side\r
+ for (node = startContainer; node; node = node.parentNode) {\r
+ if (node == endContainer)\r
+ return walkBoundary(startContainer, ancestor, true);\r
\r
- ix = tinymce.dom.ScriptLoader._addOnLoad(function() {\r
- done(o);\r
- allDone();\r
- });\r
+ if (node == ancestor)\r
+ break;\r
+ }\r
\r
- if (tinymce.isIE)\r
- ol = ' onreadystatechange="';\r
- else\r
- ol = ' onload="';\r
+ // Process right side\r
+ for (node = endContainer; node; node = node.parentNode) {\r
+ if (node == startContainer)\r
+ return walkBoundary(endContainer, ancestor);\r
\r
- ol += 'tinymce.dom.ScriptLoader._onLoad(this,\'' + u + '\',' + ix + ');"';\r
- }\r
+ if (node == ancestor)\r
+ break;\r
+ }\r
\r
- document.write('<script type="text/javascript" src="' + tinymce._addVer(u) + '"' + ol + '></script>');\r
+ // Find start/end point\r
+ startPoint = findEndPoint(startContainer, ancestor) || startContainer;\r
+ endPoint = findEndPoint(endContainer, ancestor) || endContainer;\r
\r
- if (!o.func)\r
- done(o);\r
- } else\r
- load(o);\r
- });\r
+ // Walk left leaf\r
+ walkBoundary(startContainer, startPoint, true);\r
\r
- allDone();\r
- },\r
+ // Walk the middle from start to end point\r
+ siblings = collectSiblings(\r
+ startPoint == startContainer ? startPoint : startPoint.nextSibling,\r
+ 'nextSibling',\r
+ endPoint == endContainer ? endPoint.nextSibling : endPoint\r
+ );\r
\r
- // Static methods\r
- 'static' : {\r
- _addOnLoad : function(f) {\r
- var t = this;\r
+ if (siblings.length)\r
+ callback(siblings);\r
\r
- t._funcs = t._funcs || [];\r
- t._funcs.push(f);\r
+ // Walk right leaf\r
+ walkBoundary(endContainer, endPoint);\r
+ };\r
\r
- return t._funcs.length - 1;\r
- },\r
+ /* this.split = function(rng) {\r
+ var startContainer = rng.startContainer,\r
+ startOffset = rng.startOffset,\r
+ endContainer = rng.endContainer,\r
+ endOffset = rng.endOffset;\r
\r
- _onLoad : function(e, u, ix) {\r
- if (!tinymce.isIE || e.readyState == 'complete')\r
- this._funcs[ix].call(this);\r
- },\r
+ function splitText(node, offset) {\r
+ if (offset == node.nodeValue.length)\r
+ node.appendData(INVISIBLE_CHAR);\r
\r
- loadScript : function(u, cb) {\r
- var id = tinymce.DOM.uniqueId(), e;\r
+ node = node.splitText(offset);\r
\r
- function done() {\r
- Event.clear(id);\r
- tinymce.DOM.remove(id);\r
+ if (node.nodeValue === INVISIBLE_CHAR)\r
+ node.nodeValue = '';\r
\r
- if (cb) {\r
- cb.call(document, u);\r
- cb = 0;\r
- }\r
- };\r
+ return node;\r
+ };\r
\r
- if (tinymce.isIE) {\r
-/* Event.add(e, 'readystatechange', function(e) {\r
- if (e.target && e.target.readyState == 'complete')\r
- done();\r
- });*/\r
+ // Handle single text node\r
+ if (startContainer == endContainer) {\r
+ if (startContainer.nodeType == 3) {\r
+ if (startOffset != 0)\r
+ startContainer = endContainer = splitText(startContainer, startOffset);\r
\r
- tinymce.util.XHR.send({\r
- url : tinymce._addVer(u),\r
- async : false,\r
- success : function(co) {\r
- window.execScript(co);\r
- done();\r
- }\r
- });\r
- } else {\r
- e = tinymce.DOM.create('script', {id : id, type : 'text/javascript', src : tinymce._addVer(u)});\r
- Event.add(e, 'load', done);\r
+ if (endOffset - startOffset != startContainer.nodeValue.length)\r
+ splitText(startContainer, endOffset - startOffset);\r
+ }\r
+ } else {\r
+ // Split startContainer text node if needed\r
+ if (startContainer.nodeType == 3 && startOffset != 0) {\r
+ startContainer = splitText(startContainer, startOffset);\r
+ startOffset = 0;\r
+ }\r
\r
- // Check for head or body\r
- (document.getElementsByTagName('head')[0] || document.body).appendChild(e);\r
+ // Split endContainer text node if needed\r
+ if (endContainer.nodeType == 3 && endOffset != endContainer.nodeValue.length) {\r
+ endContainer = splitText(endContainer, endOffset).previousSibling;\r
+ endOffset = endContainer.nodeValue.length;\r
}\r
}\r
- }\r
\r
- });\r
+ return {\r
+ startContainer : startContainer,\r
+ startOffset : startOffset,\r
+ endContainer : endContainer,\r
+ endOffset : endOffset\r
+ };\r
+ };\r
+*/\r
+ };\r
\r
- // Global script loader\r
- tinymce.ScriptLoader = new tinymce.dom.ScriptLoader();\r
-})();\r
+ tinymce.dom.RangeUtils.compareRanges = function(rng1, rng2) {\r
+ if (rng1 && rng2) {\r
+ // Compare native IE ranges\r
+ if (rng1.item || rng1.duplicate) {\r
+ // Both are control ranges and the selected element matches\r
+ if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0))\r
+ return true;\r
\r
-/* file:jscripts/tiny_mce/classes/ui/Control.js */\r
+ // Both are text ranges and the range matches\r
+ if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1))\r
+ return true;\r
+ } else {\r
+ // Compare w3c ranges\r
+ return rng1.startContainer == rng2.startContainer && rng1.startOffset == rng2.startOffset;\r
+ }\r
+ }\r
\r
-(function() {\r
+ return false;\r
+ };\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
// Shorten class names\r
var DOM = tinymce.DOM, is = tinymce.is;\r
\r
destroy : function() {\r
tinymce.dom.Event.clear(this.id);\r
}\r
-\r
- });\r
-})();\r
-/* file:jscripts/tiny_mce/classes/ui/Container.js */\r
-\r
+ });\r
+})(tinymce);\r
tinymce.create('tinymce.ui.Container:tinymce.ui.Control', {\r
Container : function(id, s) {\r
this.parent(id, s);\r
+\r
this.controls = [];\r
+\r
this.lookup = {};\r
},\r
\r
get : function(n) {\r
return this.lookup[n];\r
}\r
+});\r
\r
- });\r
-\r
-\r
-/* file:jscripts/tiny_mce/classes/ui/Separator.js */\r
\r
tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {\r
Separator : function(id, s) {\r
renderHTML : function() {\r
return tinymce.DOM.createHTML('span', {'class' : this.classPrefix});\r
}\r
+});\r
\r
- });\r
-\r
-/* file:jscripts/tiny_mce/classes/ui/MenuItem.js */\r
-\r
-(function() {\r
+(function(tinymce) {\r
var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;\r
\r
tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control', {\r
if (is(t.selected))\r
t.setSelected(t.selected);\r
}\r
+ });\r
+})(tinymce);\r
\r
- });\r
-})();\r
-\r
-/* file:jscripts/tiny_mce/classes/ui/Menu.js */\r
-\r
-(function() {\r
+(function(tinymce) {\r
var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;\r
\r
tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem', {\r
\r
return m;\r
}\r
-\r
- });\r
-})();\r
-/* file:jscripts/tiny_mce/classes/ui/DropMenu.js */\r
-\r
-(function() {\r
+ });\r
+})(tinymce);\r
+(function(tinymce) {\r
var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event, Element = tinymce.dom.Element;\r
\r
tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu', {\r
\r
e = e.target;\r
\r
- if (e && (e = DOM.getParent(e, 'TR')) && !DOM.hasClass(e, cp + 'ItemSub')) {\r
+ if (e && (e = DOM.getParent(e, 'tr')) && !DOM.hasClass(e, cp + 'ItemSub')) {\r
m = t.items[e.id];\r
\r
if (m.isDisabled())\r
var m, r, mi;\r
\r
e = e.target;\r
- if (e && (e = DOM.getParent(e, 'TR'))) {\r
+ if (e && (e = DOM.getParent(e, 'tr'))) {\r
m = t.items[e.id];\r
\r
if (t.lastMenu)\r
\r
DOM.addClass(ro, 'mceLast');\r
}\r
-\r
- });\r
-})();\r
-/* file:jscripts/tiny_mce/classes/ui/Button.js */\r
-\r
-(function() {\r
+ });\r
+})(tinymce);\r
+(function(tinymce) {\r
var DOM = tinymce.DOM;\r
\r
tinymce.create('tinymce.ui.Button:tinymce.ui.Control', {\r
return s.onclick.call(s.scope, e);\r
});\r
}\r
+ });\r
+})(tinymce);\r
\r
- });\r
-})();\r
-\r
-/* file:jscripts/tiny_mce/classes/ui/ListBox.js */\r
-\r
-(function() {\r
+(function(tinymce) {\r
var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;\r
\r
tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', {\r
var t = this;\r
\r
t.parent(id, s);\r
+\r
t.items = [];\r
+\r
t.onChange = new Dispatcher(t);\r
+\r
t.onPostRender = new Dispatcher(t);\r
+\r
t.onAdd = new Dispatcher(t);\r
+\r
t.onRenderMenu = new tinymce.util.Dispatcher(this);\r
+\r
t.classPrefix = 'mceListBox';\r
},\r
\r
}\r
\r
e = 0;\r
- } else\r
- t.selectedValue = t.selectedIndex = null;\r
+ }\r
},\r
\r
add : function(n, v, o) {\r
hideMenu : function(e) {\r
var t = this;\r
\r
- // Prevent double toogles by canceling the mouse click event to the button\r
- if (e && e.type == "mousedown" && (e.target.id == t.id + '_text' || e.target.id == t.id + '_open'))\r
- return;\r
-\r
- if (!e || !DOM.getParent(e.target, function(n) {return DOM.hasClass(n, 'mceMenu');})) {\r
- DOM.removeClass(t.id, t.classPrefix + 'Selected');\r
- Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
+ if (t.menu && t.menu.isMenuVisible) {\r
+ // Prevent double toogles by canceling the mouse click event to the button\r
+ if (e && e.type == "mousedown" && (e.target.id == t.id + '_text' || e.target.id == t.id + '_open'))\r
+ return;\r
\r
- if (t.menu)\r
+ if (!e || !DOM.getParent(e.target, '.mceMenu')) {\r
+ DOM.removeClass(t.id, t.classPrefix + 'Selected');\r
+ Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
t.menu.hideMenu();\r
+ }\r
}\r
},\r
\r
});\r
\r
each(t.items, function(o) {\r
- o.id = DOM.uniqueId();\r
- o.onclick = function() {\r
- if (t.settings.onselect(o.value) !== false)\r
- t.select(o.value); // Must be runned after\r
- };\r
+ // No value then treat it as a title\r
+ if (o.value === undefined) {\r
+ m.add({\r
+ title : o.title,\r
+ 'class' : 'mceMenuItemTitle',\r
+ onclick : function() {\r
+ if (t.settings.onselect('') !== false)\r
+ t.select(''); // Must be runned after\r
+ }\r
+ });\r
+ } else {\r
+ o.id = DOM.uniqueId();\r
+ o.onclick = function() {\r
+ if (t.settings.onselect(o.value) !== false)\r
+ t.select(o.value); // Must be runned after\r
+ };\r
\r
- m.add(o);\r
+ m.add(o);\r
+ }\r
});\r
\r
t.onRenderMenu.dispatch(t, m);\r
var t = this, cp = t.classPrefix;\r
\r
Event.add(t.id, 'click', t.showMenu, t);\r
- Event.add(t.id + '_text', 'focus', function(e) {\r
+ Event.add(t.id + '_text', 'focus', function() {\r
if (!t._focused) {\r
t.keyDownHandler = Event.add(t.id + '_text', 'keydown', function(e) {\r
var idx = -1, v, kc = e.keyCode;\r
this.parent();\r
\r
Event.clear(this.id + '_text');\r
+ Event.clear(this.id + '_open');\r
}\r
-\r
- });\r
-})();\r
-/* file:jscripts/tiny_mce/classes/ui/NativeListBox.js */\r
-\r
-(function() {\r
+ });\r
+})(tinymce);\r
+(function(tinymce) {\r
var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;\r
\r
tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', {\r
},\r
\r
getLength : function() {\r
- return DOM.get(this.id).options.length - 1;\r
+ return this.items.length;\r
},\r
\r
renderHTML : function() {\r
\r
t.onPostRender.dispatch(t, DOM.get(t.id));\r
}\r
-\r
- });\r
-})();\r
-/* file:jscripts/tiny_mce/classes/ui/MenuButton.js */\r
-\r
-(function() {\r
+ });\r
+})(tinymce);\r
+(function(tinymce) {\r
var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;\r
\r
tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button', {\r
MenuButton : function(id, s) {\r
this.parent(id, s);\r
+\r
this.onRenderMenu = new tinymce.util.Dispatcher(this);\r
+\r
s.menu_container = s.menu_container || DOM.doc.body;\r
},\r
\r
if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id || e.id === t.id + '_open';}))\r
return;\r
\r
- if (!e || !DOM.getParent(e.target, function(n) {return DOM.hasClass(n, 'mceMenu');})) {\r
+ if (!e || !DOM.getParent(e.target, '.mceMenu')) {\r
t.setState('Selected', 0);\r
Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
if (t.menu)\r
}\r
});\r
}\r
+ });\r
+})(tinymce);\r
\r
- });\r
-})();\r
-\r
-/* file:jscripts/tiny_mce/classes/ui/SplitButton.js */\r
-\r
-(function() {\r
+(function(tinymce) {\r
var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;\r
\r
tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton', {\r
Event.clear(this.id + '_action');\r
Event.clear(this.id + '_open');\r
}\r
+ });\r
+})(tinymce);\r
\r
- });\r
-})();\r
-\r
-/* file:jscripts/tiny_mce/classes/ui/ColorSplitButton.js */\r
-\r
-(function() {\r
+(function(tinymce) {\r
var DOM = tinymce.DOM, Event = tinymce.dom.Event, is = tinymce.is, each = tinymce.each;\r
\r
tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton', {\r
}, t.settings);\r
\r
t.onShowMenu = new tinymce.util.Dispatcher(t);\r
+\r
t.onHideMenu = new tinymce.util.Dispatcher(t);\r
\r
t.value = s.default_color;\r
e = 0;\r
\r
Event.add(DOM.doc, 'mousedown', t.hideMenu, t);\r
+ t.onShowMenu.dispatch(t);\r
\r
if (t._focused) {\r
t._keyHandler = Event.add(t.id + '_menu', 'keydown', function(e) {\r
DOM.select('a', t.id + '_menu')[0].focus(); // Select first link\r
}\r
\r
- t.onShowMenu.dispatch(t);\r
-\r
t.isMenuVisible = 1;\r
},\r
\r
if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id + '_open';}))\r
return;\r
\r
- if (!e || !DOM.getParent(e.target, function(n) {return DOM.hasClass(n, 'mceSplitButtonMenu');})) {\r
+ if (!e || !DOM.getParent(e.target, '.mceSplitButtonMenu')) {\r
DOM.removeClass(t.id, 'mceSplitButtonSelected');\r
Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
Event.remove(t.id + '_menu', 'keydown', t._keyHandler);\r
style : {\r
backgroundColor : '#' + c\r
},\r
- mce_color : '#' + c\r
+ _mce_color : '#' + c\r
});\r
});\r
\r
\r
e = e.target;\r
\r
- if (e.nodeName == 'A' && (c = e.getAttribute('mce_color')))\r
+ if (e.nodeName == 'A' && (c = e.getAttribute('_mce_color')))\r
t.setColor(c);\r
\r
return Event.cancel(e); // Prevent IE auto save warning\r
Event.clear(this.id + '_more');\r
DOM.remove(this.id + '_menu');\r
}\r
-\r
- });\r
-})();\r
-\r
-/* file:jscripts/tiny_mce/classes/ui/Toolbar.js */\r
+ });\r
+})(tinymce);\r
\r
tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {\r
renderHTML : function() {\r
\r
return dom.createHTML('table', {id : t.id, 'class' : 'mceToolbar' + (s['class'] ? ' ' + s['class'] : ''), cellpadding : '0', cellspacing : '0', align : t.settings.align || ''}, '<tbody><tr>' + h + '</tr></tbody>');\r
}\r
+});\r
\r
- });\r
-\r
-/* file:jscripts/tiny_mce/classes/AddOnManager.js */\r
-\r
-(function() {\r
+(function(tinymce) {\r
var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each;\r
\r
tinymce.create('tinymce.AddOnManager', {\r
- items : [],\r
- urls : {},\r
- lookup : {},\r
- onAdd : new Dispatcher(this),\r
+ AddOnManager : function() {\r
+ var self = this;\r
+\r
+ self.items = [];\r
+ self.urls = {};\r
+ self.lookup = {};\r
+ self.onAdd = new Dispatcher(self);\r
+ },\r
\r
get : function(n) {\r
return this.lookup[n];\r
},\r
\r
requireLangPack : function(n) {\r
- var u, s = tinymce.EditorManager.settings;\r
-\r
- if (s && s.language) {\r
- u = this.urls[n] + '/langs/' + s.language + '.js';\r
+ var s = tinymce.settings;\r
\r
- if (!tinymce.dom.Event.domLoaded && !s.strict_mode)\r
- tinymce.ScriptLoader.load(u);\r
- else\r
- tinymce.ScriptLoader.add(u);\r
- }\r
+ if (s && s.language)\r
+ tinymce.ScriptLoader.add(this.urls[n] + '/langs/' + s.language + '.js');\r
},\r
\r
add : function(id, o) {\r
u = tinymce.baseURL + '/' + u;\r
\r
t.urls[n] = u.substring(0, u.lastIndexOf('/'));\r
- tinymce.ScriptLoader.add(u, cb, s);\r
- }\r
\r
- });\r
+ if (!t.lookup[n])\r
+ tinymce.ScriptLoader.add(u, cb, s);\r
+ }\r
+ });\r
\r
// Create plugin and theme managers\r
tinymce.PluginManager = new tinymce.AddOnManager();\r
tinymce.ThemeManager = new tinymce.AddOnManager();\r
-}());\r
-/* file:jscripts/tiny_mce/classes/EditorManager.js */\r
+}(tinymce));\r
\r
-(function() {\r
+(function(tinymce) {\r
// Shorten names\r
- var each = tinymce.each, extend = tinymce.extend, DOM = tinymce.DOM, Event = tinymce.dom.Event, ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager, explode = tinymce.explode;\r
+ var each = tinymce.each, extend = tinymce.extend,\r
+ DOM = tinymce.DOM, Event = tinymce.dom.Event,\r
+ ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,\r
+ explode = tinymce.explode,\r
+ Dispatcher = tinymce.util.Dispatcher, undefined, instanceCounter = 0;\r
\r
- tinymce.create('static tinymce.EditorManager', {\r
- editors : {},\r
- i18n : {},\r
- activeEditor : null,\r
+ // Setup some URLs where the editor API is located and where the document is\r
+ tinymce.documentBaseURL = window.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');\r
+ if (!/[\/\\]$/.test(tinymce.documentBaseURL))\r
+ tinymce.documentBaseURL += '/';\r
+\r
+ tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);\r
+\r
+ tinymce.baseURI = new tinymce.util.URI(tinymce.baseURL);\r
\r
- preInit : function() {\r
- var t = this, lo = window.location;\r
+ // Add before unload listener\r
+ // This was required since IE was leaking memory if you added and removed beforeunload listeners\r
+ // with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event\r
+ tinymce.onBeforeUnload = new Dispatcher(tinymce);\r
\r
- // Setup some URLs where the editor API is located and where the document is\r
- tinymce.documentBaseURL = lo.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');\r
- if (!/[\/\\]$/.test(tinymce.documentBaseURL))\r
- tinymce.documentBaseURL += '/';\r
+ // Must be on window or IE will leak if the editor is placed in frame or iframe\r
+ Event.add(window, 'beforeunload', function(e) {\r
+ tinymce.onBeforeUnload.dispatch(tinymce, e);\r
+ });\r
\r
- tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);\r
- tinymce.EditorManager.baseURI = new tinymce.util.URI(tinymce.baseURL);\r
+ tinymce.onAddEditor = new Dispatcher(tinymce);\r
\r
- // User already specified a document.domain value\r
- if (document.domain && lo.hostname != document.domain)\r
- tinymce.relaxedDomain = document.domain;\r
+ tinymce.onRemoveEditor = new Dispatcher(tinymce);\r
\r
- // Setup document domain if tinymce is loaded from other domain\r
- if (!tinymce.relaxedDomain && tinymce.EditorManager.baseURI.host != lo.hostname && lo.hostname)\r
- document.domain = tinymce.relaxedDomain = lo.hostname.replace(/.*\.(.+\..+)$/, '$1');\r
+ tinymce.EditorManager = extend(tinymce, {\r
+ editors : [],\r
\r
- // Add before unload listener\r
- // This was required since IE was leaking memory if you added and removed beforeunload listeners\r
- // with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event\r
- t.onBeforeUnload = new tinymce.util.Dispatcher(t);\r
+ i18n : {},\r
\r
- // Must be on window or IE will leak if the editor is placed in frame or iframe\r
- Event.add(window, 'beforeunload', function(e) {\r
- t.onBeforeUnload.dispatch(t, e);\r
- });\r
- },\r
+ activeEditor : null,\r
\r
init : function(s) {\r
- var t = this, pl, sl = tinymce.ScriptLoader, c, e, el = [], ed;\r
+ var t = this, pl, sl = tinymce.ScriptLoader, e, el = [], ed;\r
\r
function execCallback(se, n, s) {\r
var f = se[n];\r
\r
s = extend({\r
theme : "simple",\r
- language : "en",\r
- strict_loading_mode : document.contentType == 'application/xhtml+xml'\r
+ language : "en"\r
}, s);\r
\r
t.settings = s;\r
\r
- // If page not loaded and strict mode isn't enabled then load them\r
- if (!Event.domLoaded && !s.strict_loading_mode) {\r
- // Load language\r
- if (s.language)\r
- sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');\r
-\r
- // Load theme\r
- if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])\r
- ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');\r
-\r
- // Load plugins\r
- if (s.plugins) {\r
- pl = explode(s.plugins);\r
-\r
- // Load compat2x first\r
- if (tinymce.inArray(pl, 'compat2x') != -1)\r
- PluginManager.load('compat2x', 'plugins/compat2x/editor_plugin' + tinymce.suffix + '.js');\r
-\r
- // Load rest if plugins\r
- each(pl, function(v) {\r
- if (v && v.charAt(0) != '-' && !PluginManager.urls[v]) {\r
- // Skip safari plugin for other browsers\r
- if (!tinymce.isWebKit && v == 'safari')\r
- return;\r
-\r
- PluginManager.load(v, 'plugins/' + v + '/editor_plugin' + tinymce.suffix + '.js');\r
- }\r
- });\r
- }\r
-\r
- sl.loadQueue();\r
- }\r
-\r
// Legacy call\r
Event.add(document, 'init', function() {\r
var l, co;\r
\r
execCallback(s, 'onpageload');\r
\r
- // Verify that it's a valid browser\r
- if (s.browsers) {\r
- l = false;\r
-\r
- each(explode(s.browsers), function(v) {\r
- switch (v) {\r
- case 'ie':\r
- case 'msie':\r
- if (tinymce.isIE)\r
- l = true;\r
- break;\r
-\r
- case 'gecko':\r
- if (tinymce.isGecko)\r
- l = true;\r
- break;\r
-\r
- case 'safari':\r
- case 'webkit':\r
- if (tinymce.isWebKit)\r
- l = true;\r
- break;\r
-\r
- case 'opera':\r
- if (tinymce.isOpera)\r
- l = true;\r
-\r
- break;\r
- }\r
- });\r
-\r
- // Not a valid one\r
- if (!l)\r
- return;\r
- }\r
-\r
switch (s.mode) {\r
case "exact":\r
l = s.elements || '';\r
el.push(ed);\r
ed.render(1);\r
} else {\r
- c = 0;\r
-\r
each(document.forms, function(f) {\r
each(f.elements, function(e) {\r
if (e.name === v) {\r
- v = 'mce_editor_' + c;\r
+ v = 'mce_editor_' + instanceCounter++;\r
DOM.setAttrib(e, 'id', v);\r
\r
ed = new tinymce.Editor(v, s);\r
if (s.oninit) {\r
l = co = 0;\r
\r
- each (el, function(ed) {\r
+ each(el, function(ed) {\r
co++;\r
\r
if (!ed.initialized) {\r
},\r
\r
get : function(id) {\r
+ if (id === undefined)\r
+ return this.editors;\r
+\r
return this.editors[id];\r
},\r
\r
return this.get(id);\r
},\r
\r
- add : function(e) {\r
- this.editors[e.id] = e;\r
- this._setActive(e);\r
+ add : function(editor) {\r
+ var self = this, editors = self.editors;\r
\r
- return e;\r
+ // Add named and index editor instance\r
+ editors[editor.id] = editor;\r
+ editors.push(editor);\r
+\r
+ self._setActive(editor);\r
+ self.onAddEditor.dispatch(self, editor);\r
+\r
+\r
+ return editor;\r
},\r
\r
- remove : function(e) {\r
- var t = this;\r
+ remove : function(editor) {\r
+ var t = this, i, editors = t.editors;\r
\r
// Not in the collection\r
- if (!t.editors[e.id])\r
+ if (!editors[editor.id])\r
return null;\r
\r
- delete t.editors[e.id];\r
+ delete editors[editor.id];\r
\r
- // Select another editor since the active one was removed\r
- if (t.activeEditor == e) {\r
- each(t.editors, function(e) {\r
- t._setActive(e);\r
- return false; // Break\r
- });\r
+ for (i = 0; i < editors.length; i++) {\r
+ if (editors[i] == editor) {\r
+ editors.splice(i, 1);\r
+ break;\r
+ }\r
}\r
\r
- e.destroy();\r
+ // Select another editor since the active one was removed\r
+ if (t.activeEditor == editor)\r
+ t._setActive(editors[0]);\r
\r
- return e;\r
+ editor.destroy();\r
+ t.onRemoveEditor.dispatch(t, editor);\r
+\r
+ return editor;\r
},\r
\r
execCommand : function(c, u, v) {\r
\r
// Private methods\r
\r
- _setActive : function(e) {\r
- this.selectedInstance = this.activeEditor = e;\r
+ _setActive : function(editor) {\r
+ this.selectedInstance = this.activeEditor = editor;\r
}\r
+ });\r
+})(tinymce);\r
\r
- });\r
-\r
- tinymce.EditorManager.preInit();\r
-})();\r
-\r
-// Short for editor manager window.tinyMCE is needed when TinyMCE gets loaded though a XHR call\r
-var tinyMCE = window.tinyMCE = tinymce.EditorManager;\r
-\r
-/* file:jscripts/tiny_mce/classes/Editor.js */\r
-\r
-(function() {\r
- var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, Dispatcher = tinymce.util.Dispatcher;\r
- var each = tinymce.each, isGecko = tinymce.isGecko, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit;\r
- var is = tinymce.is, ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager, EditorManager = tinymce.EditorManager;\r
- var inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode;\r
+(function(tinymce) {\r
+ // Shorten these names\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend,\r
+ Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isGecko = tinymce.isGecko,\r
+ isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, is = tinymce.is,\r
+ ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,\r
+ inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode;\r
\r
tinymce.create('tinymce.Editor', {\r
Editor : function(id, s) {\r
var t = this;\r
\r
t.id = t.editorId = id;\r
+\r
t.execCommands = {};\r
t.queryStateCommands = {};\r
t.queryValueCommands = {};\r
+\r
+ t.isNotDirty = false;\r
+\r
t.plugins = {};\r
\r
// Add events to the editor\r
each([\r
'onPreInit',\r
+\r
'onBeforeRenderUI',\r
+\r
'onPostRender',\r
+\r
'onInit',\r
+\r
'onRemove',\r
+\r
'onActivate',\r
+\r
'onDeactivate',\r
+\r
'onClick',\r
+\r
'onEvent',\r
+\r
'onMouseUp',\r
+\r
'onMouseDown',\r
+\r
'onDblClick',\r
+\r
'onKeyDown',\r
+\r
'onKeyUp',\r
+\r
'onKeyPress',\r
+\r
'onContextMenu',\r
+\r
'onSubmit',\r
+\r
'onReset',\r
+\r
'onPaste',\r
+\r
'onPreProcess',\r
+\r
'onPostProcess',\r
+\r
'onBeforeSetContent',\r
+\r
'onBeforeGetContent',\r
+\r
'onSetContent',\r
+\r
'onGetContent',\r
+\r
'onLoadContent',\r
+\r
'onSaveContent',\r
+\r
'onNodeChange',\r
+\r
'onChange',\r
+\r
'onBeforeExecCommand',\r
+\r
'onExecCommand',\r
+\r
'onUndo',\r
+\r
'onRedo',\r
+\r
'onVisualAid',\r
+\r
'onSetProgressState'\r
], function(e) {\r
t[e] = new Dispatcher(t);\r
});\r
\r
- // Default editor config\r
t.settings = s = extend({\r
id : id,\r
language : 'en',\r
custom_undo_redo_keyboard_shortcuts : 1,\r
custom_undo_redo_restore_selection : 1,\r
custom_undo_redo : 1,\r
- doctype : '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',\r
+ doctype : tinymce.isIE6 ? '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' : '<!DOCTYPE>', // Use old doctype on IE 6 to avoid horizontal scroll\r
visual_table_class : 'mceItemTable',\r
visual : 1,\r
- inline_styles : true,\r
- convert_fonts_to_spans : true,\r
font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large',\r
apply_source_formatting : 1,\r
directionality : 'ltr',\r
forced_root_block : 'p',\r
- valid_elements : '@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p[align],-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote[cite],-table[border=0|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value|tabindex|accesskey],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big',\r
+ valid_elements : '@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p,-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote[cite],-table[border|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value|tabindex|accesskey],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big',\r
hidden_input : 1,\r
padd_empty_editor : 1,\r
render_ui : 1,\r
init_theme : 1,\r
force_p_newlines : 1,\r
indentation : '30px',\r
- keep_styles : 1\r
+ keep_styles : 1,\r
+ fix_table_elements : 1,\r
+ inline_styles : 1,\r
+ convert_fonts_to_spans : true\r
}, s);\r
\r
- // Setup URIs\r
t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, {\r
base_uri : tinyMCE.baseURI\r
});\r
- t.baseURI = EditorManager.baseURI;\r
+\r
+ t.baseURI = tinymce.baseURI;\r
\r
// Call setup\r
t.execCallback('setup', t);\r
return;\r
}\r
\r
- // Force strict loading mode if render us called by user and not internally\r
- if (!nst) {\r
- s.strict_loading_mode = 1;\r
- tinyMCE.settings = s;\r
- }\r
+ tinyMCE.settings = s;\r
\r
// Element not found, then skip initialization\r
if (!t.getElement())\r
return;\r
\r
- if (s.strict_loading_mode) {\r
- sl.settings.strict_mode = s.strict_loading_mode;\r
- tinymce.DOM.settings.strict = 1;\r
- }\r
+ // Is a iPad/iPhone, then skip initialization. We need to sniff here since the\r
+ // browser says it has contentEditable support but there is no visible caret\r
+ // We will remove this check ones Apple implements full contentEditable support\r
+ if (tinymce.isIDevice)\r
+ return;\r
\r
// Add hidden input for non input elements inside form elements\r
if (!/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && s.hidden_input && DOM.getParent(id, 'form'))\r
DOM.insertAfter(DOM.create('input', {type : 'hidden', name : id}), id);\r
\r
- t.windowManager = new tinymce.WindowManager(t);\r
+ if (tinymce.WindowManager)\r
+ t.windowManager = new tinymce.WindowManager(t);\r
\r
if (s.encoding == 'xml') {\r
t.onGetContent.add(function(ed, o) {\r
});\r
}\r
\r
- if (s.add_unload_trigger && !s.ask) {\r
+ if (s.add_unload_trigger) {\r
t._beforeUnload = tinyMCE.onBeforeUnload.add(function() {\r
if (t.initialized && !t.destroyed && !t.isHidden())\r
t.save({format : 'raw', no_events : true});\r
n._mceOldSubmit = n.submit;\r
n.submit = function() {\r
// Save all instances\r
- EditorManager.triggerSave();\r
+ tinymce.triggerSave();\r
t.isNotDirty = 1;\r
\r
- return this._mceOldSubmit(this);\r
+ return t.formElement._mceOldSubmit(t.formElement);\r
};\r
}\r
\r
if (s.language)\r
sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');\r
\r
- if (s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])\r
+ if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])\r
ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');\r
\r
each(explode(s.plugins), function(p) {\r
if (p && p.charAt(0) != '-' && !PluginManager.urls[p]) {\r
- // Skip safari plugin for other browsers\r
- if (!isWebKit && p == 'safari')\r
+ // Skip safari plugin, since it is removed as of 3.3b1\r
+ if (p == 'safari')\r
return;\r
\r
PluginManager.load(p, 'plugins/' + p + '/editor_plugin' + tinymce.suffix + '.js');\r
\r
// Init when que is loaded\r
sl.loadQueue(function() {\r
- if (s.ask) {\r
- function ask() {\r
- // Yield for awhile to avoid focus bug on FF 3 when cancel is pressed\r
- window.setTimeout(function() {\r
- Event.remove(t.id, 'focus', ask);\r
-\r
- t.windowManager.confirm(t.getLang('edit_confirm'), function(s) {\r
- if (s)\r
- t.init();\r
- });\r
- }, 0);\r
- };\r
-\r
- Event.add(t.id, 'focus', ask);\r
- return;\r
- }\r
-\r
if (!t.removed)\r
t.init();\r
});\r
};\r
\r
- // Load compat2x first\r
- if (s.plugins.indexOf('compat2x') != -1) {\r
- PluginManager.load('compat2x', 'plugins/compat2x/editor_plugin' + tinymce.suffix + '.js');\r
- sl.loadQueue(loadScripts);\r
- } else\r
- loadScripts();\r
+ loadScripts();\r
},\r
\r
init : function() {\r
var n, t = this, s = t.settings, w, h, e = t.getElement(), o, ti, u, bi, bc, re;\r
\r
- EditorManager.add(t);\r
+ tinymce.add(t);\r
\r
- // Create theme\r
- s.theme = s.theme.replace(/-/, '');\r
- o = ThemeManager.get(s.theme);\r
- t.theme = new o();\r
+ if (s.theme) {\r
+ s.theme = s.theme.replace(/-/, '');\r
+ o = ThemeManager.get(s.theme);\r
+ t.theme = new o();\r
\r
- if (t.theme.init && s.init_theme)\r
- t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));\r
+ if (t.theme.init && s.init_theme)\r
+ t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));\r
+ }\r
\r
// Create all plugins\r
each(explode(s.plugins.replace(/\-/g, '')), function(p) {\r
if (s.popup_css_add)\r
s.popup_css += ',' + t.documentBaseURI.toAbsolute(s.popup_css_add);\r
\r
- // Setup control factory\r
t.controlManager = new tinymce.ControlManager(t);\r
- t.undoManager = new tinymce.UndoManager(t);\r
-\r
- // Pass through\r
- t.undoManager.onAdd.add(function(um, l) {\r
- if (!l.initial)\r
- return t.onChange.dispatch(t, l, um);\r
- });\r
-\r
- t.undoManager.onUndo.add(function(um, l) {\r
- return t.onUndo.dispatch(t, l, um);\r
- });\r
-\r
- t.undoManager.onRedo.add(function(um, l) {\r
- return t.onRedo.dispatch(t, l, um);\r
- });\r
\r
if (s.custom_undo_redo) {\r
+ // Add initial undo level\r
+ t.onBeforeExecCommand.add(function(ed, cmd, ui, val, a) {\r
+ if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo)) {\r
+ if (!t.undoManager.hasUndo())\r
+ t.undoManager.add();\r
+ }\r
+ });\r
+\r
t.onExecCommand.add(function(ed, cmd, ui, val, a) {\r
if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))\r
t.undoManager.add();\r
t.editorContainer = o.editorContainer;\r
}\r
\r
- \r
+\r
+ // User specified a document.domain value\r
+ if (document.domain && location.hostname != document.domain)\r
+ tinymce.relaxedDomain = document.domain;\r
+\r
// Resize editor\r
DOM.setStyles(o.sizeContainer || o.editorContainer, {\r
width : w,\r
if (h < 100)\r
h = 100;\r
\r
- t.iframeHTML = s.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="' + t.documentBaseURI.getURI() + '" />';\r
- t.iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';\r
+ t.iframeHTML = s.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml">';\r
+\r
+ // We only need to override paths if we have to\r
+ // IE has a bug where it remove site absolute urls to relative ones if this is specified\r
+ if (s.document_base_url != tinymce.documentBaseURL)\r
+ t.iframeHTML += '<base href="' + t.documentBaseURI.getURI() + '" />';\r
+\r
+ t.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=7" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';\r
\r
if (tinymce.relaxedDomain)\r
t.iframeHTML += '<script type="text/javascript">document.domain = "' + tinymce.relaxedDomain + '";</script>';\r
DOM.get(o.editorContainer).style.display = t.orgDisplay;\r
DOM.get(t.id).style.display = 'none';\r
\r
- // Safari 2.x requires us to wait for the load event and load a real HTML doc\r
- if (tinymce.isOldWebKit) {\r
- Event.add(n, 'load', t.setupIframe, t);\r
- n.src = tinymce.baseURL + '/plugins/safari/blank.htm';\r
- } else {\r
- if (!isIE || !tinymce.relaxedDomain)\r
- t.setupIframe();\r
+ if (!isIE || !tinymce.relaxedDomain)\r
+ t.setupIframe();\r
\r
- e = n = o = null; // Cleanup\r
- }\r
+ e = n = o = null; // Cleanup\r
},\r
\r
setupIframe : function() {\r
DOM.show(b);\r
}\r
\r
- // Setup objects\r
- t.dom = new tinymce.DOM.DOMUtils(t.getDoc(), {\r
+ t.dom = new tinymce.dom.DOMUtils(t.getDoc(), {\r
keep_values : true,\r
url_converter : t.convertURL,\r
url_converter_scope : t,\r
hex_colors : s.force_hex_style_colors,\r
class_filter : s.class_filter,\r
update_styles : 1,\r
- fix_ie_paragraphs : 1\r
+ fix_ie_paragraphs : 1,\r
+ valid_styles : s.valid_styles\r
});\r
\r
- t.serializer = new tinymce.dom.Serializer({\r
- entity_encoding : s.entity_encoding,\r
- entities : s.entities,\r
+ t.schema = new tinymce.dom.Schema();\r
+\r
+ t.serializer = new tinymce.dom.Serializer(extend(s, {\r
valid_elements : s.verify_html === false ? '*[*]' : s.valid_elements,\r
- extended_valid_elements : s.extended_valid_elements,\r
- valid_child_elements : s.valid_child_elements,\r
- invalid_elements : s.invalid_elements,\r
- fix_table_elements : s.fix_table_elements,\r
- fix_list_elements : s.fix_list_elements,\r
- fix_content_duplication : s.fix_content_duplication,\r
- convert_fonts_to_spans : s.convert_fonts_to_spans,\r
- font_size_classes : s.font_size_classes,\r
- font_size_style_values : s.font_size_style_values,\r
- apply_source_formatting : s.apply_source_formatting,\r
- remove_linebreaks : s.remove_linebreaks,\r
- element_format : s.element_format,\r
- dom : t.dom\r
- });\r
+ dom : t.dom,\r
+ schema : t.schema\r
+ }));\r
\r
t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer);\r
+\r
+ t.formatter = new tinymce.Formatter(this);\r
+\r
+ // Register default formats\r
+ t.formatter.register({\r
+ alignleft : [\r
+ {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}},\r
+ {selector : 'img,table', styles : {'float' : 'left'}}\r
+ ],\r
+\r
+ aligncenter : [\r
+ {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}},\r
+ {selector : 'img', styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}},\r
+ {selector : 'table', styles : {marginLeft : 'auto', marginRight : 'auto'}}\r
+ ],\r
+\r
+ alignright : [\r
+ {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}},\r
+ {selector : 'img,table', styles : {'float' : 'right'}}\r
+ ],\r
+\r
+ alignfull : [\r
+ {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}}\r
+ ],\r
+\r
+ bold : [\r
+ {inline : 'strong'},\r
+ {inline : 'span', styles : {fontWeight : 'bold'}},\r
+ {inline : 'b'}\r
+ ],\r
+\r
+ italic : [\r
+ {inline : 'em'},\r
+ {inline : 'span', styles : {fontStyle : 'italic'}},\r
+ {inline : 'i'}\r
+ ],\r
+\r
+ underline : [\r
+ {inline : 'span', styles : {textDecoration : 'underline'}, exact : true},\r
+ {inline : 'u'}\r
+ ],\r
+\r
+ strikethrough : [\r
+ {inline : 'span', styles : {textDecoration : 'line-through'}, exact : true},\r
+ {inline : 'u'}\r
+ ],\r
+\r
+ forecolor : {inline : 'span', styles : {color : '%value'}},\r
+ hilitecolor : {inline : 'span', styles : {backgroundColor : '%value'}},\r
+ fontname : {inline : 'span', styles : {fontFamily : '%value'}},\r
+ fontsize : {inline : 'span', styles : {fontSize : '%value'}},\r
+ fontsize_class : {inline : 'span', attributes : {'class' : '%value'}},\r
+ blockquote : {block : 'blockquote', wrapper : 1, remove : 'all'},\r
+\r
+ removeformat : [\r
+ {selector : 'b,strong,em,i,font,u,strike', remove : 'all', split : true, expand : false, block_expand : true, deep : true},\r
+ {selector : 'span', attributes : ['style', 'class'], remove : 'empty', split : true, expand : false, deep : true},\r
+ {selector : '*', attributes : ['style', 'class'], split : false, expand : false, deep : true}\r
+ ]\r
+ });\r
+\r
+ // Register default block formats\r
+ each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/), function(name) {\r
+ t.formatter.register(name, {block : name, remove : 'all'});\r
+ });\r
+\r
+ // Register user defined formats\r
+ t.formatter.register(t.settings.formats);\r
+\r
+ t.undoManager = new tinymce.UndoManager(t);\r
+\r
+ // Pass through\r
+ t.undoManager.onAdd.add(function(um, l) {\r
+ if (!l.initial)\r
+ return t.onChange.dispatch(t, l, um);\r
+ });\r
+\r
+ t.undoManager.onUndo.add(function(um, l) {\r
+ return t.onUndo.dispatch(t, l, um);\r
+ });\r
+\r
+ t.undoManager.onRedo.add(function(um, l) {\r
+ return t.onRedo.dispatch(t, l, um);\r
+ });\r
+\r
t.forceBlocks = new tinymce.ForceBlocks(t, {\r
forced_root_block : s.forced_root_block\r
});\r
+\r
t.editorCommands = new tinymce.EditorCommands(t);\r
\r
// Pass through\r
if (s.nowrap)\r
t.getBody().style.whiteSpace = "nowrap";\r
\r
- if (s.auto_resize)\r
- t.onNodeChange.add(t.resizeToContent, t);\r
-\r
if (s.custom_elements) {\r
function handleCustom(ed, o) {\r
each(explode(s.custom_elements), function(v) {\r
} else\r
n = 'div';\r
\r
- o.content = o.content.replace(new RegExp('<(' + v + ')([^>]*)>', 'g'), '<' + n + ' mce_name="$1"$2>');\r
+ o.content = o.content.replace(new RegExp('<(' + v + ')([^>]*)>', 'g'), '<' + n + ' _mce_name="$1"$2>');\r
o.content = o.content.replace(new RegExp('</(' + v + ')>', 'g'), '</' + n + '>');\r
});\r
};\r
t.onBeforeSetContent.add(handleCustom);\r
t.onPostProcess.add(function(ed, o) {\r
if (o.set)\r
- handleCustom(ed, o)\r
+ handleCustom(ed, o);\r
});\r
}\r
\r
};\r
}\r
\r
- if (s.convert_fonts_to_spans)\r
- t._convertFonts();\r
-\r
- if (s.inline_styles)\r
- t._convertInlineElements();\r
-\r
if (s.cleanup_callback) {\r
t.onBeforeSetContent.add(function(ed, o) {\r
o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);\r
});\r
}\r
\r
+ // Add visual aids when new contents is added\r
t.onSetContent.add(function() {\r
- // Safari needs some time, it will crash the browser when a link is created otherwise\r
- // I think this crash issue is resolved in the latest 3.0.4\r
- //window.setTimeout(function() {\r
- t.addVisual(t.getBody());\r
- //}, 1);\r
+ t.addVisual(t.getBody());\r
});\r
\r
// Remove empty contents\r
});\r
}\r
\r
- if (isGecko && !s.readonly) {\r
- try {\r
- // Design mode must be set here once again to fix a bug where\r
- // Ctrl+A/Delete/Backspace didn't work if the editor was added using mceAddControl then removed then added again\r
- d.designMode = 'Off';\r
- d.designMode = 'On';\r
- } catch (ex) {\r
- // Will fail on Gecko if the editor is placed in an hidden container element\r
- // The design mode will be set ones the editor is focused\r
+ if (isGecko) {\r
+ // Fix gecko link bug, when a link is placed at the end of block elements there is\r
+ // no way to move the caret behind the link. This fix adds a bogus br element after the link\r
+ function fixLinks(ed, o) {\r
+ each(ed.dom.select('a'), function(n) {\r
+ var pn = n.parentNode;\r
+\r
+ if (ed.dom.isBlock(pn) && pn.lastChild === n)\r
+ ed.dom.add(pn, 'br', {'_mce_bogus' : 1});\r
+ });\r
+ };\r
+\r
+ t.onExecCommand.add(function(ed, cmd) {\r
+ if (cmd === 'CreateLink')\r
+ fixLinks(ed);\r
+ });\r
+\r
+ t.onSetContent.add(t.selection.onSetContent.add(fixLinks));\r
+\r
+ if (!s.readonly) {\r
+ try {\r
+ // Design mode must be set here once again to fix a bug where\r
+ // Ctrl+A/Delete/Backspace didn't work if the editor was added using mceAddControl then removed then added again\r
+ d.designMode = 'Off';\r
+ d.designMode = 'On';\r
+ } catch (ex) {\r
+ // Will fail on Gecko if the editor is placed in an hidden container element\r
+ // The design mode will be set ones the editor is focused\r
+ }\r
}\r
}\r
\r
\r
t.load({initial : true, format : (s.cleanup_on_startup ? 'html' : 'raw')});\r
t.startContent = t.getContent({format : 'raw'});\r
- t.undoManager.add({initial : true});\r
t.initialized = true;\r
\r
t.onInit.dispatch(t);\r
// Handle auto focus\r
if (s.auto_focus) {\r
setTimeout(function () {\r
- var ed = EditorManager.get(s.auto_focus);\r
+ var ed = tinymce.get(s.auto_focus);\r
\r
ed.selection.select(ed.getBody(), 1);\r
ed.selection.collapse(1);\r
e = null;\r
},\r
\r
- \r
+\r
focus : function(sf) {\r
- var oed, t = this, ce = t.settings.content_editable;\r
+ var oed, t = this, ce = t.settings.content_editable, ieRng, controlElm, doc = t.getDoc();\r
\r
if (!sf) {\r
- // Is not content editable or the selection is outside the area in IE\r
- // the IE statement is needed to avoid bluring if element selections inside layers since\r
- // the layer is like it's own document in IE\r
- if (!ce && (!isIE || t.selection.getNode().ownerDocument != t.getDoc()))\r
+ // Get selected control element\r
+ ieRng = t.selection.getRng();\r
+ if (ieRng.item) {\r
+ controlElm = ieRng.item(0);\r
+ }\r
+\r
+ // Is not content editable\r
+ if (!ce)\r
t.getWin().focus();\r
\r
- }\r
+ // Restore selected control element\r
+ // This is needed when for example an image is selected within a\r
+ // layer a call to focus will then remove the control selection\r
+ if (controlElm && controlElm.ownerDocument == doc) {\r
+ ieRng = doc.body.createControlRange();\r
+ ieRng.addElement(controlElm);\r
+ ieRng.select();\r
+ }\r
+\r
+ }\r
\r
- if (EditorManager.activeEditor != t) {\r
- if ((oed = EditorManager.activeEditor) != null)\r
+ if (tinymce.activeEditor != t) {\r
+ if ((oed = tinymce.activeEditor) != null)\r
oed.onDeactivate.dispatch(oed, t);\r
\r
t.onActivate.dispatch(t, oed);\r
}\r
\r
- EditorManager._setActive(t);\r
+ tinymce._setActive(t);\r
},\r
\r
execCallback : function(n) {\r
},\r
\r
translate : function(s) {\r
- var c = this.settings.language || 'en', i18n = EditorManager.i18n;\r
+ var c = this.settings.language || 'en', i18n = tinymce.i18n;\r
\r
if (!s)\r
return '';\r
},\r
\r
getLang : function(n, dv) {\r
- return EditorManager.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}');\r
+ return tinymce.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}');\r
},\r
\r
getParam : function(n, dv, ty) {\r
},\r
\r
nodeChanged : function(o) {\r
- var t = this, s = t.selection, n = s.getNode() || t.getBody();\r
+ var t = this, s = t.selection, n = (isIE ? s.getNode() : s.getStart()) || t.getBody();\r
\r
// Fix for bug #1896577 it seems that this can not be fired while the editor is loading\r
if (t.initialized) {\r
+ o = o || {};\r
+ n = isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n; // Fix for IE initial state\r
+\r
+ // Get parents and add them to object\r
+ o.parents = [];\r
+ t.dom.getParent(n, function(node) {\r
+ if (node.nodeName == 'BODY')\r
+ return true;\r
+\r
+ o.parents.push(node);\r
+ });\r
+\r
t.onNodeChange.dispatch(\r
t,\r
o ? o.controlManager || t.controlManager : t.controlManager,\r
- isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n, // Fix for IE initial state\r
+ n,\r
s.isCollapsed(),\r
o\r
);\r
return true;\r
\r
// Theme commands\r
- if (t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) {\r
+ if (t.theme && t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) {\r
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+ return true;\r
+ }\r
+\r
+ // Execute global commands\r
+ if (tinymce.GlobalCommands.execCommand(t, cmd, ui, val)) {\r
t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
return true;\r
}\r
t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
},\r
\r
- queryCommandState : function(c) {\r
+ queryCommandState : function(cmd) {\r
var t = this, o, s;\r
\r
// Is hidden then return undefined\r
return;\r
\r
// Registred commands\r
- if (o = t.queryStateCommands[c]) {\r
+ if (o = t.queryStateCommands[cmd]) {\r
s = o.func.call(o.scope);\r
\r
// Fall though on true\r
}\r
\r
// Registred commands\r
- o = t.editorCommands.queryCommandState(c);\r
+ o = t.editorCommands.queryCommandState(cmd);\r
if (o !== -1)\r
return o;\r
\r
// Browser commands\r
try {\r
- return this.getDoc().queryCommandState(c);\r
+ return this.getDoc().queryCommandState(cmd);\r
} catch (ex) {\r
// Fails sometimes see bug: 1896577\r
}\r
return b;\r
},\r
\r
- resizeToContent : function() {\r
- var t = this;\r
-\r
- DOM.setStyle(t.id + "_ifr", 'height', t.getBody().scrollHeight);\r
- },\r
-\r
load : function(o) {\r
var t = this, e = t.getElement(), h;\r
\r
o = o || {};\r
o.load = true;\r
\r
+ // Double encode existing entities in the value\r
h = t.setContent(is(e.value) ? e.value : e.innerHTML, o);\r
o.element = e;\r
\r
// Padd empty content in Gecko and Safari. Commands will otherwise fail on the content\r
// It will also be impossible to place the caret in the editor unless there is a BR element present\r
if (!tinymce.isIE && (h.length === 0 || /^\s+$/.test(h))) {\r
- o.content = t.dom.setHTML(t.getBody(), '<br mce_bogus="1" />');\r
+ o.content = t.dom.setHTML(t.getBody(), '<br _mce_bogus="1" />');\r
o.format = 'raw';\r
}\r
\r
// Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command\r
t.onExecCommand.listeners = [];\r
\r
- EditorManager.remove(t);\r
+ tinymce.remove(t);\r
DOM.remove(e);\r
},\r
\r
tinyMCE.onBeforeUnload.remove(t._beforeUnload);\r
\r
// Manual destroy\r
- if (t.theme.destroy)\r
+ if (t.theme && t.theme.destroy)\r
t.theme.destroy();\r
\r
// Destroy controls, selection and dom\r
\r
_addEvents : function() {\r
// 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset\r
- var t = this, i, s = t.settings, lo = {\r
+ var t = this, i, s = t.settings, dom = t.dom, lo = {\r
mouseup : 'onMouseUp',\r
mousedown : 'onMouseDown',\r
click : 'onClick',\r
case 'contextmenu':\r
if (tinymce.isOpera) {\r
// Fake contextmenu on Opera\r
- Event.add(t.getBody(), 'mousedown', function(e) {\r
+ dom.bind(t.getBody(), 'mousedown', function(e) {\r
if (e.ctrlKey) {\r
e.fakeType = 'contextmenu';\r
eventHandler(e);\r
}\r
});\r
} else\r
- Event.add(t.getBody(), k, eventHandler);\r
+ dom.bind(t.getBody(), k, eventHandler);\r
break;\r
\r
case 'paste':\r
- Event.add(t.getBody(), k, function(e) {\r
- var tx, h, el, r;\r
-\r
- // Get plain text data\r
- if (e.clipboardData)\r
- tx = e.clipboardData.getData('text/plain');\r
- else if (tinymce.isIE)\r
- tx = t.getWin().clipboardData.getData('Text');\r
-\r
- // Get HTML data\r
- /*if (tinymce.isIE) {\r
- el = DOM.add(DOM.doc.body, 'div', {style : 'visibility:hidden;overflow:hidden;position:absolute;width:1px;height:1px'});\r
- r = DOM.doc.body.createTextRange();\r
- r.moveToElementText(el);\r
- r.execCommand('Paste');\r
- h = el.innerHTML;\r
- DOM.remove(el);\r
- }*/\r
-\r
- eventHandler(e, {text : tx, html : h});\r
+ dom.bind(t.getBody(), k, function(e) {\r
+ eventHandler(e);\r
});\r
break;\r
\r
case 'submit':\r
case 'reset':\r
- Event.add(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler);\r
+ dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler);\r
break;\r
\r
default:\r
- Event.add(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler);\r
+ dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler);\r
}\r
});\r
\r
- Event.add(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) {\r
+ dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) {\r
t.focus(true);\r
});\r
\r
- \r
+\r
// Fixes bug where a specified document_base_uri could result in broken images\r
// This will also fix drag drop of images in Gecko\r
if (tinymce.isGecko) {\r
- // Convert all images to absolute URLs\r
-/* t.onSetContent.add(function(ed, o) {\r
- each(ed.dom.select('img'), function(e) {\r
- var v;\r
-\r
- if (v = e.getAttribute('mce_src'))\r
- e.src = t.documentBaseURI.toAbsolute(v);\r
- })\r
- });*/\r
-\r
- Event.add(t.getDoc(), 'DOMNodeInserted', function(e) {\r
+ dom.bind(t.getDoc(), 'DOMNodeInserted', function(e) {\r
var v;\r
\r
e = e.target;\r
\r
- if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('mce_src')))\r
+ if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('_mce_src')))\r
e.src = t.documentBaseURI.toAbsolute(v);\r
});\r
}\r
t.onMouseDown.add(setOpts);\r
}\r
\r
- // Add node change handlers\r
- t.onMouseUp.add(t.nodeChanged);\r
- t.onClick.add(t.nodeChanged);\r
- t.onKeyUp.add(function(ed, e) {\r
- var c = e.keyCode;\r
-\r
- if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey)\r
- t.nodeChanged();\r
- });\r
-\r
- // Add reset handler\r
- t.onReset.add(function() {\r
- t.setContent(t.startContent, {format : 'raw'});\r
- });\r
-\r
- if (t.getParam('tab_focus')) {\r
- function tabCancel(ed, e) {\r
- if (e.keyCode === 9)\r
- return Event.cancel(e);\r
- };\r
-\r
- function tabHandler(ed, e) {\r
- var x, i, f, el, v;\r
-\r
- function find(d) {\r
- f = DOM.getParent(ed.id, 'form');\r
- el = f.elements;\r
-\r
- if (f) {\r
- each(el, function(e, i) {\r
- if (e.id == ed.id) {\r
- x = i;\r
- return false;\r
- }\r
- });\r
-\r
- if (d > 0) {\r
- for (i = x + 1; i < el.length; i++) {\r
- if (el[i].type != 'hidden')\r
- return el[i];\r
- }\r
- } else {\r
- for (i = x - 1; i >= 0; i--) {\r
- if (el[i].type != 'hidden')\r
- return el[i];\r
- }\r
- }\r
- }\r
-\r
- return null;\r
- };\r
-\r
- if (e.keyCode === 9) {\r
- v = explode(ed.getParam('tab_focus'));\r
-\r
- if (v.length == 1) {\r
- v[1] = v[0];\r
- v[0] = ':prev';\r
- }\r
-\r
- // Find element to focus\r
- if (e.shiftKey) {\r
- if (v[0] == ':prev')\r
- el = find(-1);\r
- else\r
- el = DOM.get(v[0]);\r
- } else {\r
- if (v[1] == ':next')\r
- el = find(1);\r
- else\r
- el = DOM.get(v[1]);\r
- }\r
-\r
- if (el) {\r
- if (ed = EditorManager.get(el.id || el.name))\r
- ed.focus();\r
- else\r
- window.setTimeout(function() {window.focus();el.focus();}, 10);\r
+ // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250\r
+ // WebKit can't even do simple things like selecting an image\r
+ // This also fixes so it's possible to select mceItemAnchors\r
+ if (tinymce.isWebKit) {\r
+ t.onClick.add(function(ed, e) {\r
+ e = e.target;\r
\r
- return Event.cancel(e);\r
- }\r
+ // Needs tobe the setBaseAndExtend or it will fail to select floated images\r
+ if (e.nodeName == 'IMG' || (e.nodeName == 'A' && dom.hasClass(e, 'mceItemAnchor'))) {\r
+ t.selection.getSel().setBaseAndExtent(e, 0, e, 1);\r
+ t.nodeChanged();\r
}\r
- };\r
+ });\r
+ }\r
+\r
+ // Add node change handlers\r
+ t.onMouseUp.add(t.nodeChanged);\r
+ //t.onClick.add(t.nodeChanged);\r
+ t.onKeyUp.add(function(ed, e) {\r
+ var c = e.keyCode;\r
\r
- t.onKeyUp.add(tabCancel);\r
+ if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey)\r
+ t.nodeChanged();\r
+ });\r
\r
- if (isGecko) {\r
- t.onKeyPress.add(tabHandler);\r
- t.onKeyDown.add(tabCancel);\r
- } else\r
- t.onKeyDown.add(tabHandler);\r
- }\r
+ // Add reset handler\r
+ t.onReset.add(function() {\r
+ t.setContent(t.startContent, {format : 'raw'});\r
+ });\r
\r
// Add shortcuts\r
if (s.custom_shortcuts) {\r
}\r
\r
// Add default shortcuts for gecko\r
- if (isGecko) {\r
- t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');\r
- t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');\r
- t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');\r
- }\r
+ t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');\r
+ t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');\r
+ t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');\r
\r
// BlockFormat shortcuts keys\r
for (i=1; i<=6; i++)\r
- t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, '<h' + i + '>']);\r
+ t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]);\r
\r
t.addShortcut('ctrl+7', '', ['FormatBlock', false, '<p>']);\r
t.addShortcut('ctrl+8', '', ['FormatBlock', false, '<div>']);\r
if (tinymce.isIE) {\r
// Fix so resize will only update the width and height attributes not the styles of an image\r
// It will also block mceItemNoResize items\r
- Event.add(t.getDoc(), 'controlselect', function(e) {\r
+ dom.bind(t.getDoc(), 'controlselect', function(e) {\r
var re = t.resizeInfo, cb;\r
\r
e = e.target;\r
return;\r
\r
if (re)\r
- Event.remove(re.node, re.ev, re.cb);\r
+ dom.unbind(re.node, re.ev, re.cb);\r
\r
- if (!t.dom.hasClass(e, 'mceItemNoResize')) {\r
+ if (!dom.hasClass(e, 'mceItemNoResize')) {\r
ev = 'resizeend';\r
- cb = Event.add(e, ev, function(e) {\r
+ cb = dom.bind(e, ev, function(e) {\r
var v;\r
\r
e = e.target;\r
\r
- if (v = t.dom.getStyle(e, 'width')) {\r
- t.dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, ''));\r
- t.dom.setStyle(e, 'width', '');\r
+ if (v = dom.getStyle(e, 'width')) {\r
+ dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, ''));\r
+ dom.setStyle(e, 'width', '');\r
}\r
\r
- if (v = t.dom.getStyle(e, 'height')) {\r
- t.dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, ''));\r
- t.dom.setStyle(e, 'height', '');\r
+ if (v = dom.getStyle(e, 'height')) {\r
+ dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, ''));\r
+ dom.setStyle(e, 'height', '');\r
}\r
});\r
} else {\r
ev = 'resizestart';\r
- cb = Event.add(e, 'resizestart', Event.cancel, Event);\r
+ cb = dom.bind(e, 'resizestart', Event.cancel, Event);\r
}\r
\r
re = t.resizeInfo = {\r
case 8:\r
// Fix IE control + backspace browser bug\r
if (t.selection.getRng().item) {\r
- t.selection.getRng().item(0).removeNode();\r
+ ed.dom.remove(t.selection.getRng().item(0));\r
return Event.cancel(e);\r
}\r
}\r
});\r
+\r
+ /*if (t.dom.boxModel) {\r
+ t.getBody().style.height = '100%';\r
+\r
+ Event.add(t.getWin(), 'resize', function(e) {\r
+ var docElm = t.getDoc().documentElement;\r
+\r
+ docElm.style.height = (docElm.offsetHeight - 10) + 'px';\r
+ });\r
+ }*/\r
}\r
\r
if (tinymce.isOpera) {\r
t.undoManager.add();\r
};\r
\r
- // Add undo level on editor blur\r
- if (tinymce.isIE) {\r
- Event.add(t.getWin(), 'blur', function(e) {\r
- var n;\r
+ dom.bind(t.getDoc(), 'focusout', function(e) {\r
+ if (!t.removed && t.undoManager.typing)\r
+ addUndo();\r
+ });\r
\r
- // Check added for fullscreen bug\r
- if (t.selection) {\r
- n = t.selection.getNode();\r
+ t.onKeyUp.add(function(ed, e) {\r
+ if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45 || e.ctrlKey)\r
+ addUndo();\r
+ });\r
\r
- // Add undo level is selection was lost to another document\r
- if (!t.removed && n.ownerDocument && n.ownerDocument != t.getDoc())\r
- addUndo();\r
- }\r
- });\r
- } else {\r
- Event.add(t.getDoc(), 'blur', function() {\r
- if (t.selection && !t.removed)\r
- addUndo();\r
- });\r
- }\r
+ t.onKeyDown.add(function(ed, e) {\r
+ var rng, parent, bookmark;\r
+\r
+ // IE has a really odd bug where the DOM might include an node that doesn't have\r
+ // a proper structure. If you try to access nodeValue it would throw an illegal value exception.\r
+ // This seems to only happen when you delete contents and it seems to be avoidable if you refresh the element\r
+ // after you delete contents from it. See: #3008923\r
+ if (isIE && e.keyCode == 46) {\r
+ rng = t.selection.getRng();\r
+\r
+ if (rng.parentElement) {\r
+ parent = rng.parentElement();\r
+\r
+ // Select next word when ctrl key is used in combo with delete\r
+ if (e.ctrlKey) {\r
+ rng.moveEnd('word', 1);\r
+ rng.select();\r
+ }\r
\r
- t.onMouseDown.add(addUndo);\r
+ // Delete contents\r
+ t.selection.getSel().clear();\r
\r
- t.onKeyUp.add(function(ed, e) {\r
- if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45 || e.ctrlKey) {\r
- t.undoManager.typing = 0;\r
- t.undoManager.add();\r
+ // Check if we are within the same parent\r
+ if (rng.parentElement() == parent) {\r
+ bookmark = t.selection.getBookmark();\r
+\r
+ try {\r
+ // Update the HTML and hopefully it will remove the artifacts\r
+ parent.innerHTML = parent.innerHTML;\r
+ } catch (ex) {\r
+ // And since it's IE it can sometimes produce an unknown runtime error\r
+ }\r
+\r
+ // Restore the caret position\r
+ t.selection.moveToBookmark(bookmark);\r
+ }\r
+\r
+ // Block the default delete behavior since it might be broken\r
+ e.preventDefault();\r
+ return;\r
+ }\r
}\r
- });\r
\r
- t.onKeyDown.add(function(ed, e) {\r
// Is caracter positon keys\r
if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45) {\r
- if (t.undoManager.typing) {\r
- t.undoManager.add();\r
- t.undoManager.typing = 0;\r
- }\r
+ if (t.undoManager.typing)\r
+ addUndo();\r
\r
return;\r
}\r
t.undoManager.typing = 1;\r
}\r
});\r
- }\r
- },\r
-\r
- _convertInlineElements : function() {\r
- var t = this, s = t.settings, dom = t.dom, v, e, na, st, sp;\r
-\r
- function convert(ed, o) {\r
- if (!s.inline_styles)\r
- return;\r
-\r
- if (o.get) {\r
- each(t.dom.select('table,u,strike', o.node), function(n) {\r
- switch (n.nodeName) {\r
- case 'TABLE':\r
- if (v = dom.getAttrib(n, 'height')) {\r
- dom.setStyle(n, 'height', v);\r
- dom.setAttrib(n, 'height', '');\r
- }\r
- break;\r
-\r
- case 'U':\r
- case 'STRIKE':\r
- //sp = dom.create('span', {style : dom.getAttrib(n, 'style')});\r
- n.style.textDecoration = n.nodeName == 'U' ? 'underline' : 'line-through';\r
- dom.setAttrib(n, 'mce_style', '');\r
- dom.setAttrib(n, 'mce_name', 'span');\r
- break;\r
- }\r
- });\r
- } else if (o.set) {\r
- each(t.dom.select('table,span', o.node).reverse(), function(n) {\r
- if (n.nodeName == 'TABLE') {\r
- if (v = dom.getStyle(n, 'height'))\r
- dom.setAttrib(n, 'height', v.replace(/[^0-9%]+/g, ''));\r
- } else {\r
- // Convert spans to elements\r
- if (n.style.textDecoration == 'underline')\r
- na = 'u';\r
- else if (n.style.textDecoration == 'line-through')\r
- na = 'strike';\r
- else\r
- na = '';\r
-\r
- if (na) {\r
- n.style.textDecoration = '';\r
- dom.setAttrib(n, 'mce_style', '');\r
-\r
- e = dom.create(na, {\r
- style : dom.getAttrib(n, 'style')\r
- });\r
\r
- dom.replace(e, n, 1);\r
- }\r
- }\r
- });\r
- }\r
- };\r
-\r
- t.onPreProcess.add(convert);\r
-\r
- if (!s.cleanup_on_startup) {\r
- t.onSetContent.add(function(ed, o) {\r
- if (o.initial)\r
- convert(t, {node : t.getBody(), set : 1});\r
+ t.onMouseDown.add(function() {\r
+ if (t.undoManager.typing)\r
+ addUndo();\r
});\r
}\r
},\r
\r
- _convertFonts : function() {\r
- var t = this, s = t.settings, dom = t.dom, fz, fzn, sl, cl;\r
-\r
- // No need\r
- if (!s.inline_styles)\r
- return;\r
-\r
- // Font pt values and font size names\r
- fz = [8, 10, 12, 14, 18, 24, 36];\r
- fzn = ['xx-small', 'x-small','small','medium','large','x-large', 'xx-large'];\r
-\r
- if (sl = s.font_size_style_values)\r
- sl = explode(sl);\r
-\r
- if (cl = s.font_size_classes)\r
- cl = explode(cl);\r
-\r
- function process(no) {\r
- var n, sp, nl, x;\r
-\r
- // Keep unit tests happy\r
- if (!s.inline_styles)\r
- return;\r
-\r
- nl = t.dom.select('font', no);\r
- for (x = nl.length - 1; x >= 0; x--) {\r
- n = nl[x];\r
-\r
- sp = dom.create('span', {\r
- style : dom.getAttrib(n, 'style'),\r
- 'class' : dom.getAttrib(n, 'class')\r
- });\r
-\r
- dom.setStyles(sp, {\r
- fontFamily : dom.getAttrib(n, 'face'),\r
- color : dom.getAttrib(n, 'color'),\r
- backgroundColor : n.style.backgroundColor\r
- });\r
-\r
- if (n.size) {\r
- if (sl)\r
- dom.setStyle(sp, 'fontSize', sl[parseInt(n.size) - 1]);\r
- else\r
- dom.setAttrib(sp, 'class', cl[parseInt(n.size) - 1]);\r
- }\r
-\r
- dom.setAttrib(sp, 'mce_style', '');\r
- dom.replace(sp, n, 1);\r
- }\r
- };\r
-\r
- // Run on cleanup\r
- t.onPreProcess.add(function(ed, o) {\r
- if (o.get)\r
- process(o.node);\r
- });\r
-\r
- t.onSetContent.add(function(ed, o) {\r
- if (o.initial)\r
- process(o.node);\r
- });\r
- },\r
-\r
_isHidden : function() {\r
var s;\r
\r
\r
return s;\r
}\r
+ });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+ // Added for compression purposes\r
+ var each = tinymce.each, undefined, TRUE = true, FALSE = false;\r
+\r
+ tinymce.EditorCommands = function(editor) {\r
+ var dom = editor.dom,\r
+ selection = editor.selection,\r
+ commands = {state: {}, exec : {}, value : {}},\r
+ settings = editor.settings,\r
+ bookmark;\r
+\r
+ function execCommand(command, ui, value) {\r
+ var func;\r
+\r
+ command = command.toLowerCase();\r
+ if (func = commands.exec[command]) {\r
+ func(command, ui, value);\r
+ return TRUE;\r
+ }\r
+\r
+ return FALSE;\r
+ };\r
+\r
+ function queryCommandState(command) {\r
+ var func;\r
+\r
+ command = command.toLowerCase();\r
+ if (func = commands.state[command])\r
+ return func(command);\r
+\r
+ return -1;\r
+ };\r
+\r
+ function queryCommandValue(command) {\r
+ var func;\r
+\r
+ command = command.toLowerCase();\r
+ if (func = commands.value[command])\r
+ return func(command);\r
\r
+ return FALSE;\r
+ };\r
+\r
+ function addCommands(command_list, type) {\r
+ type = type || 'exec';\r
+\r
+ each(command_list, function(callback, command) {\r
+ each(command.toLowerCase().split(','), function(command) {\r
+ commands[type][command] = callback;\r
+ });\r
+ });\r
+ };\r
+\r
+ // Expose public methods\r
+ tinymce.extend(this, {\r
+ execCommand : execCommand,\r
+ queryCommandState : queryCommandState,\r
+ queryCommandValue : queryCommandValue,\r
+ addCommands : addCommands\r
});\r
-})();\r
\r
-/* file:jscripts/tiny_mce/classes/EditorCommands.js */\r
+ // Private methods\r
\r
-(function() {\r
- var each = tinymce.each, isIE = tinymce.isIE, isGecko = tinymce.isGecko, isOpera = tinymce.isOpera, isWebKit = tinymce.isWebKit;\r
+ function execNativeCommand(command, ui, value) {\r
+ if (ui === undefined)\r
+ ui = FALSE;\r
\r
- function isBlock(n) {\r
- return /^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n.nodeName);\r
- };\r
+ if (value === undefined)\r
+ value = null;\r
\r
- tinymce.create('tinymce.EditorCommands', {\r
- EditorCommands : function(ed) {\r
- this.editor = ed;\r
- },\r
+ return editor.getDoc().execCommand(command, ui, value);\r
+ };\r
+\r
+ function isFormatMatch(name) {\r
+ return editor.formatter.match(name);\r
+ };\r
+\r
+ function toggleFormat(name, value) {\r
+ editor.formatter.toggle(name, value ? {value : value} : undefined);\r
+ };\r
+\r
+ function storeSelection(type) {\r
+ bookmark = selection.getBookmark(type);\r
+ };\r
+\r
+ function restoreSelection() {\r
+ selection.moveToBookmark(bookmark);\r
+ };\r
+\r
+ // Add execCommand overrides\r
+ addCommands({\r
+ // Ignore these, added for compatibility\r
+ 'mceResetDesignMode,mceBeginUndoLevel' : function() {},\r
+\r
+ // Add undo manager logic\r
+ 'mceEndUndoLevel,mceAddUndoLevel' : function() {\r
+ editor.undoManager.add();\r
+ },\r
+\r
+ 'Cut,Copy,Paste' : function(command) {\r
+ var doc = editor.getDoc(), failed;\r
+\r
+ // Try executing the native command\r
+ try {\r
+ execNativeCommand(command);\r
+ } catch (ex) {\r
+ // Command failed\r
+ failed = TRUE;\r
+ }\r
+\r
+ // Present alert message about clipboard access not being available\r
+ if (failed || !doc.queryCommandSupported(command)) {\r
+ if (tinymce.isGecko) {\r
+ editor.windowManager.confirm(editor.getLang('clipboard_msg'), function(state) {\r
+ if (state)\r
+ open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', '_blank');\r
+ });\r
+ } else\r
+ editor.windowManager.alert(editor.getLang('clipboard_no_support'));\r
+ }\r
+ },\r
+\r
+ // Override unlink command\r
+ unlink : function(command) {\r
+ if (selection.isCollapsed())\r
+ selection.select(selection.getNode());\r
+\r
+ execNativeCommand(command);\r
+ selection.collapse(FALSE);\r
+ },\r
+\r
+ // Override justify commands to use the text formatter engine\r
+ 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {\r
+ var align = command.substring(7);\r
+\r
+ // Remove all other alignments first\r
+ each('left,center,right,full'.split(','), function(name) {\r
+ if (align != name)\r
+ editor.formatter.remove('align' + name);\r
+ });\r
+\r
+ toggleFormat('align' + align);\r
+ },\r
+\r
+ // Override list commands to fix WebKit bug\r
+ 'InsertUnorderedList,InsertOrderedList' : function(command) {\r
+ var listElm, listParent;\r
+\r
+ execNativeCommand(command);\r
+\r
+ // WebKit produces lists within block elements so we need to split them\r
+ // we will replace the native list creation logic to custom logic later on\r
+ // TODO: Remove this when the list creation logic is removed\r
+ listElm = dom.getParent(selection.getNode(), 'ol,ul');\r
+ if (listElm) {\r
+ listParent = listElm.parentNode;\r
+\r
+ // If list is within a text block then split that block\r
+ if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\r
+ storeSelection();\r
+ dom.split(listParent, listElm);\r
+ restoreSelection();\r
+ }\r
+ }\r
+ },\r
+\r
+ // Override commands to use the text formatter engine\r
+ 'Bold,Italic,Underline,Strikethrough' : function(command) {\r
+ toggleFormat(command);\r
+ },\r
+\r
+ // Override commands to use the text formatter engine\r
+ 'ForeColor,HiliteColor,FontName' : function(command, ui, value) {\r
+ toggleFormat(command, value);\r
+ },\r
+\r
+ FontSize : function(command, ui, value) {\r
+ var fontClasses, fontSizes;\r
+\r
+ // Convert font size 1-7 to styles\r
+ if (value >= 1 && value <= 7) {\r
+ fontSizes = tinymce.explode(settings.font_size_style_values);\r
+ fontClasses = tinymce.explode(settings.font_size_classes);\r
+\r
+ if (fontClasses)\r
+ value = fontClasses[value - 1] || value;\r
+ else\r
+ value = fontSizes[value - 1] || value;\r
+ }\r
+\r
+ toggleFormat(command, value);\r
+ },\r
+\r
+ RemoveFormat : function(command) {\r
+ editor.formatter.remove(command);\r
+ },\r
+\r
+ mceBlockQuote : function(command) {\r
+ toggleFormat('blockquote');\r
+ },\r
+\r
+ FormatBlock : function(command, ui, value) {\r
+ return toggleFormat(value || 'p');\r
+ },\r
+\r
+ mceCleanup : function() {\r
+ var bookmark = selection.getBookmark();\r
+\r
+ editor.setContent(editor.getContent({cleanup : TRUE}), {cleanup : TRUE});\r
+\r
+ selection.moveToBookmark(bookmark);\r
+ },\r
+\r
+ mceRemoveNode : function(command, ui, value) {\r
+ var node = value || selection.getNode();\r
+\r
+ // Make sure that the body node isn't removed\r
+ if (node != editor.getBody()) {\r
+ storeSelection();\r
+ editor.dom.remove(node, TRUE);\r
+ restoreSelection();\r
+ }\r
+ },\r
+\r
+ mceSelectNodeDepth : function(command, ui, value) {\r
+ var counter = 0;\r
+\r
+ dom.getParent(selection.getNode(), function(node) {\r
+ if (node.nodeType == 1 && counter++ == value) {\r
+ selection.select(node);\r
+ return FALSE;\r
+ }\r
+ }, editor.getBody());\r
+ },\r
+\r
+ mceSelectNode : function(command, ui, value) {\r
+ selection.select(value);\r
+ },\r
+\r
+ mceInsertContent : function(command, ui, value) {\r
+ selection.setContent(value);\r
+ },\r
+\r
+ mceInsertRawHTML : function(command, ui, value) {\r
+ selection.setContent('tiny_mce_marker');\r
+ editor.setContent(editor.getContent().replace(/tiny_mce_marker/g, function() { return value }));\r
+ },\r
+\r
+ mceSetContent : function(command, ui, value) {\r
+ editor.setContent(value);\r
+ },\r
+\r
+ 'Indent,Outdent' : function(command) {\r
+ var intentValue, indentUnit, value;\r
+\r
+ // Setup indent level\r
+ intentValue = settings.indentation;\r
+ indentUnit = /[a-z%]+$/i.exec(intentValue);\r
+ intentValue = parseInt(intentValue);\r
+\r
+ if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) {\r
+ each(selection.getSelectedBlocks(), function(element) {\r
+ if (command == 'outdent') {\r
+ value = Math.max(0, parseInt(element.style.paddingLeft || 0) - intentValue);\r
+ dom.setStyle(element, 'paddingLeft', value ? value + indentUnit : '');\r
+ } else\r
+ dom.setStyle(element, 'paddingLeft', (parseInt(element.style.paddingLeft || 0) + intentValue) + indentUnit);\r
+ });\r
+ } else\r
+ execNativeCommand(command);\r
+ },\r
+\r
+ mceRepaint : function() {\r
+ var bookmark;\r
+\r
+ if (tinymce.isGecko) {\r
+ try {\r
+ storeSelection(TRUE);\r
+\r
+ if (selection.getSel())\r
+ selection.getSel().selectAllChildren(editor.getBody());\r
+\r
+ selection.collapse(TRUE);\r
+ restoreSelection();\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
+ }\r
+ },\r
+\r
+ mceToggleFormat : function(command, ui, value) {\r
+ editor.formatter.toggle(value);\r
+ },\r
+\r
+ InsertHorizontalRule : function() {\r
+ selection.setContent('<hr />');\r
+ },\r
+\r
+ mceToggleVisualAid : function() {\r
+ editor.hasVisual = !editor.hasVisual;\r
+ editor.addVisual();\r
+ },\r
+\r
+ mceReplaceContent : function(command, ui, value) {\r
+ selection.setContent(value.replace(/\{\$selection\}/g, selection.getContent({format : 'text'})));\r
+ },\r
+\r
+ mceInsertLink : function(command, ui, value) {\r
+ var link = dom.getParent(selection.getNode(), 'a');\r
+\r
+ if (tinymce.is(value, 'string'))\r
+ value = {href : value};\r
+\r
+ if (!link) {\r
+ execNativeCommand('CreateLink', FALSE, 'javascript:mctmp(0);');\r
+ each(dom.select('a[href=javascript:mctmp(0);]'), function(link) {\r
+ dom.setAttribs(link, value);\r
+ });\r
+ } else {\r
+ if (value.href)\r
+ dom.setAttribs(link, value);\r
+ else\r
+ editor.dom.remove(link, TRUE);\r
+ }\r
+ },\r
+ \r
+ selectAll : function() {\r
+ var root = dom.getRoot(), rng = dom.createRng();\r
+\r
+ rng.setStart(root, 0);\r
+ rng.setEnd(root, root.childNodes.length);\r
+\r
+ editor.selection.setRng(rng);\r
+ }\r
+ });\r
+\r
+ // Add queryCommandState overrides\r
+ addCommands({\r
+ // Override justify commands\r
+ 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {\r
+ return isFormatMatch('align' + command.substring(7));\r
+ },\r
+\r
+ 'Bold,Italic,Underline,Strikethrough' : function(command) {\r
+ return isFormatMatch(command);\r
+ },\r
+\r
+ mceBlockQuote : function() {\r
+ return isFormatMatch('blockquote');\r
+ },\r
+\r
+ Outdent : function() {\r
+ var node;\r
+\r
+ if (settings.inline_styles) {\r
+ if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)\r
+ return TRUE;\r
+\r
+ if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)\r
+ return TRUE;\r
+ }\r
+\r
+ return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE'));\r
+ },\r
+\r
+ 'InsertUnorderedList,InsertOrderedList' : function(command) {\r
+ return dom.getParent(selection.getNode(), command == 'insertunorderedlist' ? 'UL' : 'OL');\r
+ }\r
+ }, 'state');\r
+\r
+ // Add queryCommandValue overrides\r
+ addCommands({\r
+ 'FontSize,FontName' : function(command) {\r
+ var value = 0, parent;\r
+\r
+ if (parent = dom.getParent(selection.getNode(), 'span')) {\r
+ if (command == 'fontsize')\r
+ value = parent.style.fontSize;\r
+ else\r
+ value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase();\r
+ }\r
+\r
+ return value;\r
+ }\r
+ }, 'value');\r
\r
- execCommand : function(cmd, ui, val) {\r
- var t = this, ed = t.editor, f;\r
+ // Add undo manager logic\r
+ if (settings.custom_undo_redo) {\r
+ addCommands({\r
+ Undo : function() {\r
+ editor.undoManager.undo();\r
+ },\r
\r
- switch (cmd) {\r
- case 'Cut':\r
- case 'Copy':\r
- case 'Paste':\r
- try {\r
- ed.getDoc().execCommand(cmd, ui, val);\r
- } catch (ex) {\r
- if (isGecko) {\r
- ed.windowManager.confirm(ed.getLang('clipboard_msg'), function(s) {\r
- if (s)\r
- window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', 'mceExternal');\r
- });\r
- } else\r
- ed.windowManager.alert(ed.getLang('clipboard_no_support'));\r
- }\r
+ Redo : function() {\r
+ editor.undoManager.redo();\r
+ }\r
+ });\r
+ }\r
+ };\r
+})(tinymce);\r
+(function(tinymce) {\r
+ var Dispatcher = tinymce.util.Dispatcher;\r
\r
- return true;\r
+ tinymce.UndoManager = function(editor) {\r
+ var self, index = 0, data = [];\r
\r
- // Ignore these\r
- case 'mceResetDesignMode':\r
- case 'mceBeginUndoLevel':\r
- return true;\r
+ function getContent() {\r
+ return tinymce.trim(editor.getContent({format : 'raw', no_events : 1}));\r
+ };\r
\r
- // Ignore these\r
- case 'unlink':\r
- t.UnLink();\r
- return true;\r
+ return self = {\r
+ typing : 0,\r
\r
- // Bundle these together\r
- case 'JustifyLeft':\r
- case 'JustifyCenter':\r
- case 'JustifyRight':\r
- case 'JustifyFull':\r
- t.mceJustify(cmd, cmd.substring(7).toLowerCase());\r
- return true;\r
+ onAdd : new Dispatcher(self),\r
+ onUndo : new Dispatcher(self),\r
+ onRedo : new Dispatcher(self),\r
\r
- case 'mceEndUndoLevel':\r
- case 'mceAddUndoLevel':\r
- ed.undoManager.add();\r
- return true;\r
+ add : function(level) {\r
+ var i, settings = editor.settings, lastLevel;\r
\r
- default:\r
- f = this[cmd];\r
+ level = level || {};\r
+ level.content = getContent();\r
\r
- if (f) {\r
- f.call(this, ui, val);\r
- return true;\r
- }\r
- }\r
+ // Add undo level if needed\r
+ lastLevel = data[index];\r
+ if (lastLevel && lastLevel.content == level.content) {\r
+ if (index > 0 || data.length == 1)\r
+ return null;\r
+ }\r
\r
- return false;\r
- },\r
+ // Time to compress\r
+ if (settings.custom_undo_redo_levels) {\r
+ if (data.length > settings.custom_undo_redo_levels) {\r
+ for (i = 0; i < data.length - 1; i++)\r
+ data[i] = data[i + 1];\r
\r
- Indent : function() {\r
- var ed = this.editor, d = ed.dom, s = ed.selection, e, iv, iu;\r
+ data.length--;\r
+ index = data.length;\r
+ }\r
+ }\r
\r
- // Setup indent level\r
- iv = ed.settings.indentation;\r
- iu = /[a-z%]+$/i.exec(iv);\r
- iv = parseInt(iv);\r
+ // Get a non intrusive normalized bookmark\r
+ level.bookmark = editor.selection.getBookmark(2, true);\r
\r
- if (ed.settings.inline_styles && (!this.queryStateInsertUnorderedList() && !this.queryStateInsertOrderedList())) {\r
- each(this._getSelectedBlocks(), function(e) {\r
- d.setStyle(e, 'paddingLeft', (parseInt(e.style.paddingLeft || 0) + iv) + iu);\r
- });\r
+ // Crop array if needed\r
+ if (index < data.length - 1) {\r
+ // Treat first level as initial\r
+ if (index == 0)\r
+ data = [];\r
+ else\r
+ data.length = index + 1;\r
+ }\r
\r
- return;\r
- }\r
+ data.push(level);\r
+ index = data.length - 1;\r
\r
- ed.getDoc().execCommand('Indent', false, null);\r
+ self.onAdd.dispatch(self, level);\r
+ editor.isNotDirty = 0;\r
\r
- if (isIE) {\r
- d.getParent(s.getNode(), function(n) {\r
- if (n.nodeName == 'BLOCKQUOTE') {\r
- n.dir = n.style.cssText = '';\r
- }\r
- });\r
- }\r
- },\r
+ return level;\r
+ },\r
\r
- Outdent : function() {\r
- var ed = this.editor, d = ed.dom, s = ed.selection, e, v, iv, iu;\r
+ undo : function() {\r
+ var level, i;\r
\r
- // Setup indent level\r
- iv = ed.settings.indentation;\r
- iu = /[a-z%]+$/i.exec(iv);\r
- iv = parseInt(iv);\r
+ if (self.typing) {\r
+ self.add();\r
+ self.typing = 0;\r
+ }\r
\r
- if (ed.settings.inline_styles && (!this.queryStateInsertUnorderedList() && !this.queryStateInsertOrderedList())) {\r
- each(this._getSelectedBlocks(), function(e) {\r
- v = Math.max(0, parseInt(e.style.paddingLeft || 0) - iv);\r
- d.setStyle(e, 'paddingLeft', v ? v + iu : '');\r
- });\r
+ if (index > 0) {\r
+ level = data[--index];\r
\r
- return;\r
- }\r
+ editor.setContent(level.content, {format : 'raw'});\r
+ editor.selection.moveToBookmark(level.bookmark);\r
\r
- ed.getDoc().execCommand('Outdent', false, null);\r
- },\r
+ self.onUndo.dispatch(self, level);\r
+ }\r
\r
- mceSetAttribute : function(u, v) {\r
- var ed = this.editor, d = ed.dom, e;\r
+ return level;\r
+ },\r
\r
- if (e = d.getParent(ed.selection.getNode(), d.isBlock))\r
- d.setAttrib(e, v.name, v.value);\r
- },\r
+ redo : function() {\r
+ var level;\r
\r
- mceSetContent : function(u, v) {\r
- this.editor.setContent(v);\r
- },\r
+ if (index < data.length - 1) {\r
+ level = data[++index];\r
\r
- mceToggleVisualAid : function() {\r
- var ed = this.editor;\r
+ editor.setContent(level.content, {format : 'raw'});\r
+ editor.selection.moveToBookmark(level.bookmark);\r
\r
- ed.hasVisual = !ed.hasVisual;\r
- ed.addVisual();\r
- },\r
+ self.onRedo.dispatch(self, level);\r
+ }\r
\r
- mceReplaceContent : function(u, v) {\r
- var s = this.editor.selection;\r
+ return level;\r
+ },\r
\r
- s.setContent(v.replace(/\{\$selection\}/g, s.getContent({format : 'text'})));\r
- },\r
+ clear : function() {\r
+ data = [];\r
+ index = self.typing = 0;\r
+ },\r
\r
- mceInsertLink : function(u, v) {\r
- var ed = this.editor, s = ed.selection, e = ed.dom.getParent(s.getNode(), 'A');\r
+ hasUndo : function() {\r
+ return index > 0 || self.typing;\r
+ },\r
\r
- if (tinymce.is(v, 'string'))\r
- v = {href : v};\r
+ hasRedo : function() {\r
+ return index < data.length - 1;\r
+ }\r
+ };\r
+ };\r
+})(tinymce);\r
\r
- function set(e) {\r
- each(v, function(v, k) {\r
- ed.dom.setAttrib(e, k, v);\r
- });\r
- };\r
+(function(tinymce) {\r
+ // Shorten names\r
+ var Event = tinymce.dom.Event,\r
+ isIE = tinymce.isIE,\r
+ isGecko = tinymce.isGecko,\r
+ isOpera = tinymce.isOpera,\r
+ each = tinymce.each,\r
+ extend = tinymce.extend,\r
+ TRUE = true,\r
+ FALSE = false;\r
+\r
+ function cloneFormats(node) {\r
+ var clone, temp, inner;\r
+\r
+ do {\r
+ if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) {\r
+ if (clone) {\r
+ temp = node.cloneNode(false);\r
+ temp.appendChild(clone);\r
+ clone = temp;\r
+ } else {\r
+ clone = inner = node.cloneNode(false);\r
+ }\r
\r
- if (!e) {\r
- ed.execCommand('CreateLink', false, 'javascript:mctmp(0);');\r
- each(ed.dom.select('a'), function(e) {\r
- if (e.href == 'javascript:mctmp(0);')\r
- set(e);\r
- });\r
- } else {\r
- if (v.href)\r
- set(e);\r
- else\r
- ed.dom.remove(e, 1);\r
+ clone.removeAttribute('id');\r
}\r
- },\r
+ } while (node = node.parentNode);\r
\r
- UnLink : function() {\r
- var ed = this.editor, s = ed.selection;\r
+ if (clone)\r
+ return {wrapper : clone, inner : inner};\r
+ };\r
\r
- if (s.isCollapsed())\r
- s.select(s.getNode());\r
+ // Checks if the selection/caret is at the end of the specified block element\r
+ function isAtEnd(rng, par) {\r
+ var rng2 = par.ownerDocument.createRange();\r
\r
- ed.getDoc().execCommand('unlink', false, null);\r
- s.collapse(0);\r
- },\r
+ rng2.setStart(rng.endContainer, rng.endOffset);\r
+ rng2.setEndAfter(par);\r
\r
- FontName : function(u, v) {\r
- var t = this, ed = t.editor, s = ed.selection, e;\r
+ // Get number of characters to the right of the cursor if it's zero then we are at the end and need to merge the next block element\r
+ return rng2.cloneContents().textContent.length == 0;\r
+ };\r
\r
- if (!v) {\r
- if (s.isCollapsed())\r
- s.select(s.getNode());\r
+ function isEmpty(n) {\r
+ n = n.innerHTML;\r
\r
- t.RemoveFormat();\r
- } else {\r
- if (ed.settings.convert_fonts_to_spans)\r
- t._applyInlineStyle('span', {style : {fontFamily : v}});\r
- else\r
- ed.getDoc().execCommand('FontName', false, v);\r
- }\r
- },\r
+ n = n.replace(/<(img|hr|table|input|select|textarea)[ \>]/gi, '-'); // Keep these convert them to - chars\r
+ n = n.replace(/<[^>]+>/g, ''); // Remove all tags\r
+\r
+ return n.replace(/[ \u00a0\t\r\n]+/g, '') == '';\r
+ };\r
\r
- FontSize : function(u, v) {\r
- var ed = this.editor, s = ed.settings, fc, fs;\r
+ function splitList(selection, dom, li) {\r
+ var listBlock, block;\r
\r
- // Use style options instead\r
- if (s.convert_fonts_to_spans && v >= 1 && v <= 7) {\r
- fs = tinymce.explode(s.font_size_style_values);\r
- fc = tinymce.explode(s.font_size_classes);\r
+ if (isEmpty(li)) {\r
+ listBlock = dom.getParent(li, 'ul,ol');\r
\r
- if (fc)\r
- v = fc[v - 1] || v;\r
- else\r
- v = fs[v - 1] || v;\r
+ if (!dom.getParent(listBlock.parentNode, 'ul,ol')) {\r
+ dom.split(listBlock, li);\r
+ block = dom.create('p', 0, '<br _mce_bogus="1" />');\r
+ dom.replace(block, li);\r
+ selection.select(block, 1);\r
}\r
\r
- if (v >= 1 && v <= 7)\r
- ed.getDoc().execCommand('FontSize', false, v);\r
- else\r
- this._applyInlineStyle('span', {style : {fontSize : v}});\r
- },\r
+ return FALSE;\r
+ }\r
\r
- queryCommandValue : function(c) {\r
- var f = this['queryValue' + c];\r
+ return TRUE;\r
+ };\r
\r
- if (f)\r
- return f.call(this, c);\r
+ tinymce.create('tinymce.ForceBlocks', {\r
+ ForceBlocks : function(ed) {\r
+ var t = this, s = ed.settings, elm;\r
\r
- return false;\r
- },\r
+ t.editor = ed;\r
+ t.dom = ed.dom;\r
+ elm = (s.forced_root_block || 'p').toLowerCase();\r
+ s.element = elm.toUpperCase();\r
\r
- queryCommandState : function(cmd) {\r
- var f;\r
+ ed.onPreInit.add(t.setup, t);\r
\r
- switch (cmd) {\r
- // Bundle these together\r
- case 'JustifyLeft':\r
- case 'JustifyCenter':\r
- case 'JustifyRight':\r
- case 'JustifyFull':\r
- return this.queryStateJustify(cmd, cmd.substring(7).toLowerCase());\r
+ t.reOpera = new RegExp('(\\u00a0| | )<\/' + elm + '>', 'gi');\r
+ t.rePadd = new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g, elm), 'gi');\r
+ t.reNbsp2BR1 = new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g, elm), 'gi');\r
+ t.reNbsp2BR2 = new RegExp('<%p()([^>]+)>( | )<\\\/%p>|<%p>( | )<\\\/%p>'.replace(/%p/g, elm), 'gi');\r
+ t.reBR2Nbsp = new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g, elm), 'gi');\r
\r
- default:\r
- if (f = this['queryState' + cmd])\r
- return f.call(this, cmd);\r
- }\r
+ function padd(ed, o) {\r
+ if (isOpera)\r
+ o.content = o.content.replace(t.reOpera, '</' + elm + '>');\r
\r
- return -1;\r
- },\r
+ o.content = tinymce._replace(t.rePadd, '<' + elm + '$1$2$3$4$5$6>\u00a0</' + elm + '>', o.content);\r
\r
- _queryState : function(c) {\r
- try {\r
- return this.editor.getDoc().queryCommandState(c);\r
- } catch (ex) {\r
- // Ignore exception\r
- }\r
- },\r
+ if (!isIE && !isOpera && o.set) {\r
+ // Use instead of BR in padded paragraphs\r
+ o.content = o.content.replace(t.reNbsp2BR1, '<' + elm + '$1$2><br /></' + elm + '>');\r
+ o.content = o.content.replace(t.reNbsp2BR2, '<' + elm + '$1$2><br /></' + elm + '>');\r
+ } else\r
+ o.content = tinymce._replace(t.reBR2Nbsp, '<' + elm + '$1$2>\u00a0</' + elm + '>', o.content);\r
+ };\r
\r
- _queryVal : function(c) {\r
- try {\r
- return this.editor.getDoc().queryCommandValue(c);\r
- } catch (ex) {\r
- // Ignore exception\r
+ ed.onBeforeSetContent.add(padd);\r
+ ed.onPostProcess.add(padd);\r
+\r
+ if (s.forced_root_block) {\r
+ ed.onInit.add(t.forceRoots, t);\r
+ ed.onSetContent.add(t.forceRoots, t);\r
+ ed.onBeforeGetContent.add(t.forceRoots, t);\r
}\r
},\r
\r
- queryValueFontSize : function() {\r
- var ed = this.editor, v = 0, p;\r
-\r
- if (p = ed.dom.getParent(ed.selection.getNode(), 'SPAN'))\r
- v = p.style.fontSize;\r
-\r
- if (!v && (isOpera || isWebKit)) {\r
- if (p = ed.dom.getParent(ed.selection.getNode(), 'FONT'))\r
- v = p.size;\r
+ setup : function() {\r
+ var t = this, ed = t.editor, s = ed.settings, dom = ed.dom, selection = ed.selection;\r
\r
- return v;\r
+ // Force root blocks when typing and when getting output\r
+ if (s.forced_root_block) {\r
+ ed.onBeforeExecCommand.add(t.forceRoots, t);\r
+ ed.onKeyUp.add(t.forceRoots, t);\r
+ ed.onPreProcess.add(t.forceRoots, t);\r
}\r
\r
- return v || this._queryVal('FontSize');\r
- },\r
-\r
- queryValueFontName : function() {\r
- var ed = this.editor, v = 0, p;\r
+ if (s.force_br_newlines) {\r
+ // Force IE to produce BRs on enter\r
+ if (isIE) {\r
+ ed.onKeyPress.add(function(ed, e) {\r
+ var n;\r
\r
- if (p = ed.dom.getParent(ed.selection.getNode(), 'FONT'))\r
- v = p.face;\r
+ if (e.keyCode == 13 && selection.getNode().nodeName != 'LI') {\r
+ selection.setContent('<br id="__" /> ', {format : 'raw'});\r
+ n = dom.get('__');\r
+ n.removeAttribute('id');\r
+ selection.select(n);\r
+ selection.collapse();\r
+ return Event.cancel(e);\r
+ }\r
+ });\r
+ }\r
+ }\r
\r
- if (p = ed.dom.getParent(ed.selection.getNode(), 'SPAN'))\r
- v = p.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase();\r
+ if (s.force_p_newlines) {\r
+ if (!isIE) {\r
+ ed.onKeyPress.add(function(ed, e) {\r
+ if (e.keyCode == 13 && !e.shiftKey && !t.insertPara(e))\r
+ Event.cancel(e);\r
+ });\r
+ } else {\r
+ // Ungly hack to for IE to preserve the formatting when you press\r
+ // enter at the end of a block element with formatted contents\r
+ // This logic overrides the browsers default logic with\r
+ // custom logic that enables us to control the output\r
+ tinymce.addUnload(function() {\r
+ t._previousFormats = 0; // Fix IE leak\r
+ });\r
\r
- if (!v)\r
- v = this._queryVal('FontName');\r
+ ed.onKeyPress.add(function(ed, e) {\r
+ t._previousFormats = 0;\r
\r
- return v;\r
- },\r
+ // Clone the current formats, this will later be applied to the new block contents\r
+ if (e.keyCode == 13 && !e.shiftKey && ed.selection.isCollapsed() && s.keep_styles)\r
+ t._previousFormats = cloneFormats(ed.selection.getStart());\r
+ });\r
\r
- mceJustify : function(c, v) {\r
- var ed = this.editor, se = ed.selection, n = se.getNode(), nn = n.nodeName, bl, nb, dom = ed.dom, rm;\r
+ ed.onKeyUp.add(function(ed, e) {\r
+ // Let IE break the element and the wrap the new caret location in the previous formats\r
+ if (e.keyCode == 13 && !e.shiftKey) {\r
+ var parent = ed.selection.getStart(), fmt = t._previousFormats;\r
\r
- if (ed.settings.inline_styles && this.queryStateJustify(c, v))\r
- rm = 1;\r
+ // Parent is an empty block\r
+ if (!parent.hasChildNodes() && fmt) {\r
+ parent = dom.getParent(parent, dom.isBlock);\r
\r
- bl = dom.getParent(n, ed.dom.isBlock);\r
+ if (parent && parent.nodeName != 'LI') {\r
+ parent.innerHTML = '';\r
\r
- if (nn == 'IMG') {\r
- if (v == 'full')\r
- return;\r
+ if (t._previousFormats) {\r
+ parent.appendChild(fmt.wrapper);\r
+ fmt.inner.innerHTML = '\uFEFF';\r
+ } else\r
+ parent.innerHTML = '\uFEFF';\r
\r
- if (rm) {\r
- if (v == 'center')\r
- dom.setStyle(bl || n.parentNode, 'textAlign', '');\r
+ selection.select(parent, 1);\r
+ ed.getDoc().execCommand('Delete', false, null);\r
+ t._previousFormats = 0;\r
+ }\r
+ }\r
+ }\r
+ });\r
+ }\r
\r
- dom.setStyle(n, 'float', '');\r
- this.mceRepaint();\r
- return;\r
+ if (isGecko) {\r
+ ed.onKeyDown.add(function(ed, e) {\r
+ if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey)\r
+ t.backspaceDelete(e, e.keyCode == 8);\r
+ });\r
}\r
+ }\r
\r
- if (v == 'center') {\r
- // Do not change table elements\r
- if (bl && /^(TD|TH)$/.test(bl.nodeName))\r
- bl = 0;\r
+ // Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973\r
+ if (tinymce.isWebKit) {\r
+ function insertBr(ed) {\r
+ var rng = selection.getRng(), br, div = dom.create('div', null, ' '), divYPos, vpHeight = dom.getViewPort(ed.getWin()).h;\r
\r
- if (!bl || bl.childNodes.length > 1) {\r
- nb = dom.create('p');\r
- nb.appendChild(n.cloneNode(false));\r
+ // Insert BR element\r
+ rng.insertNode(br = dom.create('br'));\r
\r
- if (bl)\r
- dom.insertAfter(nb, bl);\r
- else\r
- dom.insertAfter(nb, n);\r
+ // Place caret after BR\r
+ rng.setStartAfter(br);\r
+ rng.setEndAfter(br);\r
+ selection.setRng(rng);\r
\r
- dom.remove(n);\r
- n = nb.firstChild;\r
- bl = nb;\r
+ // Could not place caret after BR then insert an nbsp entity and move the caret\r
+ if (selection.getSel().focusNode == br.previousSibling) {\r
+ selection.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br));\r
+ selection.collapse(TRUE);\r
}\r
\r
- dom.setStyle(bl, 'textAlign', v);\r
- dom.setStyle(n, 'float', '');\r
- } else {\r
- dom.setStyle(n, 'float', v);\r
- dom.setStyle(bl || n.parentNode, 'textAlign', '');\r
- }\r
+ // Create a temporary DIV after the BR and get the position as it\r
+ // seems like getPos() returns 0 for text nodes and BR elements.\r
+ dom.insertAfter(div, br);\r
+ divYPos = dom.getPos(div).y;\r
+ dom.remove(div);\r
\r
- this.mceRepaint();\r
- return;\r
- }\r
+ // Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117\r
+ if (divYPos > vpHeight) // It is not necessary to scroll if the DIV is inside the view port.\r
+ ed.getWin().scrollTo(0, divYPos);\r
+ };\r
\r
- // Handle the alignment outselfs, less quirks in all browsers\r
- if (ed.settings.inline_styles && ed.settings.forced_root_block) {\r
- if (rm)\r
- v = '';\r
+ ed.onKeyPress.add(function(ed, e) {\r
+ if (e.keyCode == 13 && (e.shiftKey || (s.force_br_newlines && !dom.getParent(selection.getNode(), 'h1,h2,h3,h4,h5,h6,ol,ul')))) {\r
+ insertBr(ed);\r
+ Event.cancel(e);\r
+ }\r
+ });\r
+ }\r
\r
- each(this._getSelectedBlocks(dom.getParent(se.getStart(), dom.isBlock), dom.getParent(se.getEnd(), dom.isBlock)), function(e) {\r
- dom.setAttrib(e, 'align', '');\r
- dom.setStyle(e, 'textAlign', v == 'full' ? 'justify' : v);\r
+ // Padd empty inline elements within block elements\r
+ // For example: <p><strong><em></em></strong></p> becomes <p><strong><em> </em></strong></p>\r
+ ed.onPreProcess.add(function(ed, o) {\r
+ each(dom.select('p,h1,h2,h3,h4,h5,h6,div', o.node), function(p) {\r
+ if (isEmpty(p)) {\r
+ each(dom.select('span,em,strong,b,i', o.node), function(n) {\r
+ if (!n.hasChildNodes()) {\r
+ n.appendChild(ed.getDoc().createTextNode('\u00a0'));\r
+ return FALSE; // Break the loop one padding is enough\r
+ }\r
+ });\r
+ }\r
});\r
+ });\r
\r
- return;\r
- } else if (!rm)\r
- ed.getDoc().execCommand(c, false, null);\r
-\r
- if (ed.settings.inline_styles) {\r
- if (rm) {\r
- dom.getParent(ed.selection.getNode(), function(n) {\r
- if (n.style && n.style.textAlign)\r
- dom.setStyle(n, 'textAlign', '');\r
+ // IE specific fixes\r
+ if (isIE) {\r
+ // Replaces IE:s auto generated paragraphs with the specified element name\r
+ if (s.element != 'P') {\r
+ ed.onKeyPress.add(function(ed, e) {\r
+ t.lastElm = selection.getNode().nodeName;\r
});\r
\r
- return;\r
- }\r
-\r
- each(dom.select('*'), function(n) {\r
- var v = n.align;\r
+ ed.onKeyUp.add(function(ed, e) {\r
+ var bl, n = selection.getNode(), b = ed.getBody();\r
\r
- if (v) {\r
- if (v == 'full')\r
- v = 'justify';\r
+ if (b.childNodes.length === 1 && n.nodeName == 'P') {\r
+ n = dom.rename(n, s.element);\r
+ selection.select(n);\r
+ selection.collapse();\r
+ ed.nodeChanged();\r
+ } else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') {\r
+ bl = dom.getParent(n, 'p');\r
\r
- dom.setStyle(n, 'textAlign', v);\r
- dom.setAttrib(n, 'align', '');\r
- }\r
- });\r
+ if (bl) {\r
+ dom.rename(bl, s.element);\r
+ ed.nodeChanged();\r
+ }\r
+ }\r
+ });\r
+ }\r
}\r
},\r
\r
- mceSetCSSClass : function(u, v) {\r
- this.mceSetStyleInfo(0, {command : 'setattrib', name : 'class', value : v});\r
- },\r
+ find : function(n, t, s) {\r
+ var ed = this.editor, w = ed.getDoc().createTreeWalker(n, 4, null, FALSE), c = -1;\r
\r
- getSelectedElement : function() {\r
- var t = this, ed = t.editor, dom = ed.dom, se = ed.selection, r = se.getRng(), r1, r2, sc, ec, so, eo, e, sp, ep, re;\r
+ while (n = w.nextNode()) {\r
+ c++;\r
\r
- if (se.isCollapsed() || r.item)\r
- return se.getNode();\r
+ // Index by node\r
+ if (t == 0 && n == s)\r
+ return c;\r
\r
- // Setup regexp\r
- re = ed.settings.merge_styles_invalid_parents;\r
- if (tinymce.is(re, 'string'))\r
- re = new RegExp(re, 'i');\r
+ // Node by index\r
+ if (t == 1 && c == s)\r
+ return n;\r
+ }\r
\r
- if (isIE) {\r
- r1 = r.duplicate();\r
- r1.collapse(true);\r
- sc = r1.parentElement();\r
+ return -1;\r
+ },\r
\r
- r2 = r.duplicate();\r
- r2.collapse(false);\r
- ec = r2.parentElement();\r
+ forceRoots : function(ed, e) {\r
+ var t = this, ed = t.editor, b = ed.getBody(), d = ed.getDoc(), se = ed.selection, s = se.getSel(), r = se.getRng(), si = -2, ei, so, eo, tr, c = -0xFFFFFF;\r
+ var nx, bl, bp, sp, le, nl = b.childNodes, i, n, eid;\r
\r
- if (sc != ec) {\r
- r1.move('character', 1);\r
- sc = r1.parentElement();\r
- }\r
+ // Fix for bug #1863847\r
+ //if (e && e.keyCode == 13)\r
+ // return TRUE;\r
\r
- if (sc == ec) {\r
- r1 = r.duplicate();\r
- r1.moveToElementText(sc);\r
+ // Wrap non blocks into blocks\r
+ for (i = nl.length - 1; i >= 0; i--) {\r
+ nx = nl[i];\r
\r
- if (r1.compareEndPoints('StartToStart', r) == 0 && r1.compareEndPoints('EndToEnd', r) == 0)\r
- return re && re.test(sc.nodeName) ? null : sc;\r
+ // Ignore internal elements\r
+ if (nx.nodeType === 1 && nx.getAttribute('_mce_type')) {\r
+ bl = null;\r
+ continue;\r
}\r
- } else {\r
- function getParent(n) {\r
- return dom.getParent(n, function(n) {return n.nodeType == 1;});\r
- };\r
-\r
- sc = r.startContainer;\r
- ec = r.endContainer;\r
- so = r.startOffset;\r
- eo = r.endOffset;\r
\r
- if (!r.collapsed) {\r
- if (sc == ec) {\r
- if (so - eo < 2) {\r
- if (sc.hasChildNodes()) {\r
- sp = sc.childNodes[so];\r
- return re && re.test(sp.nodeName) ? null : sp;\r
- }\r
- }\r
- }\r
- }\r
+ // Is text or non block element\r
+ if (nx.nodeType === 3 || (!t.dom.isBlock(nx) && nx.nodeType !== 8 && !/^(script|mce:script|style|mce:style)$/i.test(nx.nodeName))) {\r
+ if (!bl) {\r
+ // Create new block but ignore whitespace\r
+ if (nx.nodeType != 3 || /[^\s]/g.test(nx.nodeValue)) {\r
+ // Store selection\r
+ if (si == -2 && r) {\r
+ if (!isIE || r.setStart) {\r
+ // If selection is element then mark it\r
+ if (r.startContainer.nodeType == 1 && (n = r.startContainer.childNodes[r.startOffset]) && n.nodeType == 1) {\r
+ // Save the id of the selected element\r
+ eid = n.getAttribute("id");\r
+ n.setAttribute("id", "__mce");\r
+ } else {\r
+ // If element is inside body, might not be the case in contentEdiable mode\r
+ if (ed.dom.getParent(r.startContainer, function(e) {return e === b;})) {\r
+ so = r.startOffset;\r
+ eo = r.endOffset;\r
+ si = t.find(b, 0, r.startContainer);\r
+ ei = t.find(b, 0, r.endContainer);\r
+ }\r
+ }\r
+ } else {\r
+ // Force control range into text range\r
+ if (r.item) {\r
+ tr = d.body.createTextRange();\r
+ tr.moveToElementText(r.item(0));\r
+ r = tr;\r
+ }\r
\r
- if (sc.nodeType != 3 || ec.nodeType != 3)\r
- return null;\r
+ tr = d.body.createTextRange();\r
+ tr.moveToElementText(b);\r
+ tr.collapse(1);\r
+ bp = tr.move('character', c) * -1;\r
\r
- if (so == 0) {\r
- sp = getParent(sc);\r
+ tr = r.duplicate();\r
+ tr.collapse(1);\r
+ sp = tr.move('character', c) * -1;\r
\r
- if (sp && sp.firstChild != sc)\r
- sp = null;\r
- }\r
+ tr = r.duplicate();\r
+ tr.collapse(0);\r
+ le = (tr.move('character', c) * -1) - sp;\r
\r
- if (so == sc.nodeValue.length) {\r
- e = sc.nextSibling;\r
+ si = sp - bp;\r
+ ei = le;\r
+ }\r
+ }\r
\r
- if (e && e.nodeType == 1)\r
- sp = sc.nextSibling;\r
- }\r
+ // Uses replaceChild instead of cloneNode since it removes selected attribute from option elements on IE\r
+ // See: http://support.microsoft.com/kb/829907\r
+ bl = ed.dom.create(ed.settings.forced_root_block);\r
+ nx.parentNode.replaceChild(bl, nx);\r
+ bl.appendChild(nx);\r
+ }\r
+ } else {\r
+ if (bl.hasChildNodes())\r
+ bl.insertBefore(nx, bl.firstChild);\r
+ else\r
+ bl.appendChild(nx);\r
+ }\r
+ } else\r
+ bl = null; // Time to create new block\r
+ }\r
\r
- if (eo == 0) {\r
- e = ec.previousSibling;\r
+ // Restore selection\r
+ if (si != -2) {\r
+ if (!isIE || r.setStart) {\r
+ bl = b.getElementsByTagName(ed.settings.element)[0];\r
+ r = d.createRange();\r
\r
- if (e && e.nodeType == 1)\r
- ep = e;\r
- }\r
+ // Select last location or generated block\r
+ if (si != -1)\r
+ r.setStart(t.find(b, 1, si), so);\r
+ else\r
+ r.setStart(bl, 0);\r
\r
- if (eo == ec.nodeValue.length) {\r
- ep = getParent(ec);\r
+ // Select last location or generated block\r
+ if (ei != -1)\r
+ r.setEnd(t.find(b, 1, ei), eo);\r
+ else\r
+ r.setEnd(bl, 0);\r
\r
- if (ep && ep.lastChild != ec)\r
- ep = null;\r
+ if (s) {\r
+ s.removeAllRanges();\r
+ s.addRange(r);\r
+ }\r
+ } else {\r
+ try {\r
+ r = s.createRange();\r
+ r.moveToElementText(b);\r
+ r.collapse(1);\r
+ r.moveStart('character', si);\r
+ r.moveEnd('character', ei);\r
+ r.select();\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
}\r
+ } else if ((!isIE || r.setStart) && (n = ed.dom.get('__mce'))) {\r
+ // Restore the id of the selected element\r
+ if (eid)\r
+ n.setAttribute('id', eid);\r
+ else\r
+ n.removeAttribute('id');\r
\r
- // Same element\r
- if (sp == ep)\r
- return re && sp && re.test(sp.nodeName) ? null : sp;\r
+ // Move caret before selected element\r
+ r = d.createRange();\r
+ r.setStartBefore(n);\r
+ r.setEndBefore(n);\r
+ se.setRng(r);\r
}\r
-\r
- return null;\r
- },\r
-\r
- InsertHorizontalRule : function() {\r
- // Fix for Gecko <hr size="1" /> issue and IE bug rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");\r
- if (isGecko || isIE)\r
- this.editor.selection.setContent('<hr />');\r
- else\r
- this.editor.getDoc().execCommand('InsertHorizontalRule', false, '');\r
},\r
\r
- RemoveFormat : function() {\r
- var t = this, ed = t.editor, s = ed.selection, b;\r
-\r
- // Safari breaks tables\r
- if (isWebKit)\r
- s.setContent(s.getContent({format : 'raw'}).replace(/(<(span|b|i|strong|em|strike) [^>]+>|<(span|b|i|strong|em|strike)>|<\/(span|b|i|strong|em|strike)>|)/g, ''), {format : 'raw'});\r
- else\r
- ed.getDoc().execCommand('RemoveFormat', false, null);\r
+ getParentBlock : function(n) {\r
+ var d = this.dom;\r
\r
- t.mceSetStyleInfo(0, {command : 'removeformat'});\r
- ed.addVisual();\r
+ return d.getParent(n, d.isBlock);\r
},\r
\r
- mceSetStyleInfo : function(u, v) {\r
- var t = this, ed = t.editor, d = ed.getDoc(), dom = ed.dom, e, b, s = ed.selection, nn = v.wrapper || 'span', b = s.getBookmark(), re;\r
+ insertPara : function(e) {\r
+ var t = this, ed = t.editor, dom = ed.dom, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body;\r
+ var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car;\r
\r
- function set(n, e) {\r
- if (n.nodeType == 1) {\r
- switch (v.command) {\r
- case 'setattrib':\r
- return dom.setAttrib(n, v.name, v.value);\r
+ // If root blocks are forced then use Operas default behavior since it's really good\r
+// Removed due to bug: #1853816\r
+// if (se.forced_root_block && isOpera)\r
+// return TRUE;\r
\r
- case 'setstyle':\r
- return dom.setStyle(n, v.name, v.value);\r
+ // Setup before range\r
+ rb = d.createRange();\r
\r
- case 'removeformat':\r
- return dom.setAttrib(n, 'class', '');\r
- }\r
- }\r
- };\r
+ // If is before the first block element and in body, then move it into first block element\r
+ rb.setStart(s.anchorNode, s.anchorOffset);\r
+ rb.collapse(TRUE);\r
\r
- // Setup regexp\r
- re = ed.settings.merge_styles_invalid_parents;\r
- if (tinymce.is(re, 'string'))\r
- re = new RegExp(re, 'i');\r
+ // Setup after range\r
+ ra = d.createRange();\r
\r
- // Set style info on selected element\r
- if ((e = t.getSelectedElement()) && !ed.settings.force_span_wrappers)\r
- set(e, 1);\r
- else {\r
- // Generate wrappers and set styles on them\r
- d.execCommand('FontName', false, '__');\r
- each(isWebKit ? dom.select('span') : dom.select('font'), function(n) {\r
- var sp, e;\r
+ // If is before the first block element and in body, then move it into first block element\r
+ ra.setStart(s.focusNode, s.focusOffset);\r
+ ra.collapse(TRUE);\r
\r
- if (dom.getAttrib(n, 'face') == '__' || n.style.fontFamily === '__') {\r
- sp = dom.create(nn, {mce_new : '1'});\r
+ // Setup start/end points\r
+ dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;\r
+ sn = dir ? s.anchorNode : s.focusNode;\r
+ so = dir ? s.anchorOffset : s.focusOffset;\r
+ en = dir ? s.focusNode : s.anchorNode;\r
+ eo = dir ? s.focusOffset : s.anchorOffset;\r
+\r
+ // If selection is in empty table cell\r
+ if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) {\r
+ if (sn.firstChild.nodeName == 'BR')\r
+ dom.remove(sn.firstChild); // Remove BR\r
\r
- set(sp);\r
+ // Create two new block elements\r
+ if (sn.childNodes.length == 0) {\r
+ ed.dom.add(sn, se.element, null, '<br />');\r
+ aft = ed.dom.add(sn, se.element, null, '<br />');\r
+ } else {\r
+ n = sn.innerHTML;\r
+ sn.innerHTML = '';\r
+ ed.dom.add(sn, se.element, null, n);\r
+ aft = ed.dom.add(sn, se.element, null, '<br />');\r
+ }\r
\r
- each (n.childNodes, function(n) {\r
- sp.appendChild(n.cloneNode(true));\r
- });\r
+ // Move caret into the last one\r
+ r = d.createRange();\r
+ r.selectNodeContents(aft);\r
+ r.collapse(1);\r
+ ed.selection.setRng(r);\r
\r
- dom.replace(sp, n);\r
- }\r
- });\r
+ return FALSE;\r
}\r
\r
- // Remove wrappers inside new ones\r
- each(dom.select(nn).reverse(), function(n) {\r
- var p = n.parentNode;\r
+ // If the caret is in an invalid location in FF we need to move it into the first block\r
+ if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) {\r
+ sn = en = sn.firstChild;\r
+ so = eo = 0;\r
+ rb = d.createRange();\r
+ rb.setStart(sn, 0);\r
+ ra = d.createRange();\r
+ ra.setStart(en, 0);\r
+ }\r
\r
- // Check if it's an old span in a new wrapper\r
- if (!dom.getAttrib(n, 'mce_new')) {\r
- // Find new wrapper\r
- p = dom.getParent(n, function(n) {\r
- return n.nodeType == 1 && dom.getAttrib(n, 'mce_new');\r
- });\r
+ // Never use body as start or end node\r
+ sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes\r
+ sn = sn.nodeName == "BODY" ? sn.firstChild : sn;\r
+ en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes\r
+ en = en.nodeName == "BODY" ? en.firstChild : en;\r
\r
- if (p)\r
- dom.remove(n, 1);\r
- }\r
- });\r
+ // Get start and end blocks\r
+ sb = t.getParentBlock(sn);\r
+ eb = t.getParentBlock(en);\r
+ bn = sb ? sb.nodeName : se.element; // Get block name to create\r
\r
- // Merge wrappers with parent wrappers\r
- each(dom.select(nn).reverse(), function(n) {\r
- var p = n.parentNode;\r
+ // Return inside list use default browser behavior\r
+ if (n = t.dom.getParent(sb, 'li,pre')) {\r
+ if (n.nodeName == 'LI')\r
+ return splitList(ed.selection, t.dom, n);\r
\r
- if (!p || !dom.getAttrib(n, 'mce_new'))\r
- return;\r
+ return TRUE;\r
+ }\r
\r
- if (ed.settings.force_span_wrappers && p.nodeName != 'SPAN')\r
- return;\r
+ // If caption or absolute layers then always generate new blocks within\r
+ if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {\r
+ bn = se.element;\r
+ sb = null;\r
+ }\r
\r
- // Has parent of the same type and only child\r
- if (p.nodeName == nn.toUpperCase() && p.childNodes.length == 1)\r
- return dom.remove(p, 1);\r
+ // If caption or absolute layers then always generate new blocks within\r
+ if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {\r
+ bn = se.element;\r
+ eb = null;\r
+ }\r
\r
- // Has parent that is more suitable to have the class and only child\r
- if (n.nodeType == 1 && (!re || !re.test(p.nodeName)) && p.childNodes.length == 1) {\r
- set(p); // Set style info on parent instead\r
- dom.setAttrib(n, 'class', '');\r
- }\r
- });\r
+ // Use P instead\r
+ if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(dom.getStyle(sb, 'float', 1)))) {\r
+ bn = se.element;\r
+ sb = eb = null;\r
+ }\r
\r
- // Remove empty wrappers\r
- each(dom.select(nn).reverse(), function(n) {\r
- if (dom.getAttrib(n, 'mce_new') || (dom.getAttribs(n).length <= 1 && n.className === '')) {\r
- if (!dom.getAttrib(n, 'class') && !dom.getAttrib(n, 'style'))\r
- return dom.remove(n, 1);\r
+ // Setup new before and after blocks\r
+ bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn);\r
+ aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn);\r
\r
- dom.setAttrib(n, 'mce_new', ''); // Remove mce_new marker\r
- }\r
- });\r
+ // Remove id from after clone\r
+ aft.removeAttribute('id');\r
\r
- s.moveToBookmark(b);\r
- },\r
+ // Is header and cursor is at the end, then force paragraph under\r
+ if (/^(H[1-6])$/.test(bn) && isAtEnd(r, sb))\r
+ aft = ed.dom.create(se.element);\r
\r
- queryStateJustify : function(c, v) {\r
- var ed = this.editor, n = ed.selection.getNode(), dom = ed.dom;\r
+ // Find start chop node\r
+ n = sc = sn;\r
+ do {\r
+ if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))\r
+ break;\r
\r
- if (n && n.nodeName == 'IMG') {\r
- if (dom.getStyle(n, 'float') == v)\r
- return 1;\r
+ sc = n;\r
+ } while ((n = n.previousSibling ? n.previousSibling : n.parentNode));\r
\r
- return n.parentNode.style.textAlign == v;\r
- }\r
+ // Find end chop node\r
+ n = ec = en;\r
+ do {\r
+ if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))\r
+ break;\r
\r
- n = dom.getParent(ed.selection.getStart(), function(n) {\r
- return n.nodeType == 1 && n.style.textAlign;\r
- });\r
+ ec = n;\r
+ } while ((n = n.nextSibling ? n.nextSibling : n.parentNode));\r
\r
- if (v == 'full')\r
- v = 'justify';\r
+ // Place first chop part into before block element\r
+ if (sc.nodeName == bn)\r
+ rb.setStart(sc, 0);\r
+ else\r
+ rb.setStartBefore(sc);\r
\r
- if (ed.settings.inline_styles)\r
- return (n && n.style.textAlign == v);\r
+ rb.setEnd(sn, so);\r
+ bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari\r
\r
- return this._queryState(c);\r
- },\r
+ // Place secnd chop part within new block element\r
+ try {\r
+ ra.setEndAfter(ec);\r
+ } catch(ex) {\r
+ //console.debug(s.focusNode, s.focusOffset);\r
+ }\r
\r
- ForeColor : function(ui, v) {\r
- var ed = this.editor;\r
+ ra.setStart(en, eo);\r
+ aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari\r
\r
- if (ed.settings.convert_fonts_to_spans) {\r
- this._applyInlineStyle('span', {style : {color : v}});\r
- return;\r
- } else\r
- ed.getDoc().execCommand('ForeColor', false, v);\r
- },\r
+ // Create range around everything\r
+ r = d.createRange();\r
+ if (!sc.previousSibling && sc.parentNode.nodeName == bn) {\r
+ r.setStartBefore(sc.parentNode);\r
+ } else {\r
+ if (rb.startContainer.nodeName == bn && rb.startOffset == 0)\r
+ r.setStartBefore(rb.startContainer);\r
+ else\r
+ r.setStart(rb.startContainer, rb.startOffset);\r
+ }\r
\r
- HiliteColor : function(ui, val) {\r
- var t = this, ed = t.editor, d = ed.getDoc();\r
+ if (!ec.nextSibling && ec.parentNode.nodeName == bn)\r
+ r.setEndAfter(ec.parentNode);\r
+ else\r
+ r.setEnd(ra.endContainer, ra.endOffset);\r
\r
- if (ed.settings.convert_fonts_to_spans) {\r
- this._applyInlineStyle('span', {style : {backgroundColor : val}});\r
- return;\r
- }\r
+ // Delete and replace it with new block elements\r
+ r.deleteContents();\r
\r
- function set(s) {\r
- if (!isGecko)\r
- return;\r
+ if (isOpera)\r
+ ed.getWin().scrollTo(0, vp.y);\r
\r
- try {\r
- // Try new Gecko method\r
- d.execCommand("styleWithCSS", 0, s);\r
- } catch (ex) {\r
- // Use old\r
- d.execCommand("useCSS", 0, !s);\r
- }\r
- };\r
+ // Never wrap blocks in blocks\r
+ if (bef.firstChild && bef.firstChild.nodeName == bn)\r
+ bef.innerHTML = bef.firstChild.innerHTML;\r
\r
- if (isGecko || isOpera) {\r
- set(true);\r
- d.execCommand('hilitecolor', false, val);\r
- set(false);\r
- } else\r
- d.execCommand('BackColor', false, val);\r
- },\r
+ if (aft.firstChild && aft.firstChild.nodeName == bn)\r
+ aft.innerHTML = aft.firstChild.innerHTML;\r
\r
- Undo : function() {\r
- var ed = this.editor;\r
+ // Padd empty blocks\r
+ if (isEmpty(bef))\r
+ bef.innerHTML = '<br />';\r
\r
- if (ed.settings.custom_undo_redo) {\r
- ed.undoManager.undo();\r
- ed.nodeChanged();\r
- } else\r
- ed.getDoc().execCommand('Undo', false, null);\r
- },\r
+ function appendStyles(e, en) {\r
+ var nl = [], nn, n, i;\r
\r
- Redo : function() {\r
- var ed = this.editor;\r
+ e.innerHTML = '';\r
\r
- if (ed.settings.custom_undo_redo) {\r
- ed.undoManager.redo();\r
- ed.nodeChanged();\r
- } else\r
- ed.getDoc().execCommand('Redo', false, null);\r
- },\r
+ // Make clones of style elements\r
+ if (se.keep_styles) {\r
+ n = en;\r
+ do {\r
+ // We only want style specific elements\r
+ if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) {\r
+ nn = n.cloneNode(FALSE);\r
+ dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique\r
+ nl.push(nn);\r
+ }\r
+ } while (n = n.parentNode);\r
+ }\r
\r
- FormatBlock : function(ui, val) {\r
- var t = this, ed = t.editor, s = ed.selection, dom = ed.dom, bl, nb, b;\r
+ // Append style elements to aft\r
+ if (nl.length > 0) {\r
+ for (i = nl.length - 1, nn = e; i >= 0; i--)\r
+ nn = nn.appendChild(nl[i]);\r
\r
- function isBlock(n) {\r
- return /^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(n.nodeName);\r
+ // Padd most inner style element\r
+ nl[0].innerHTML = isOpera ? ' ' : '<br />'; // Extra space for Opera so that the caret can move there\r
+ return nl[0]; // Move caret to most inner element\r
+ } else\r
+ e.innerHTML = isOpera ? ' ' : '<br />'; // Extra space for Opera so that the caret can move there\r
};\r
\r
- bl = dom.getParent(s.getNode(), function(n) {\r
- return isBlock(n);\r
- });\r
-\r
- // IE has an issue where it removes the parent div if you change format on the paragrah in <div><p>Content</p></div>\r
- // FF and Opera doesn't change parent DIV elements if you switch format\r
- if (bl) {\r
- if ((isIE && isBlock(bl.parentNode)) || bl.nodeName == 'DIV') {\r
- // Rename block element\r
- nb = ed.dom.create(val);\r
-\r
- each(dom.getAttribs(bl), function(v) {\r
- dom.setAttrib(nb, v.nodeName, dom.getAttrib(bl, v.nodeName));\r
- });\r
+ // Fill empty afterblook with current style\r
+ if (isEmpty(aft))\r
+ car = appendStyles(aft, en);\r
\r
- b = s.getBookmark();\r
- dom.replace(nb, bl, 1);\r
- s.moveToBookmark(b);\r
- ed.nodeChanged();\r
- return;\r
- }\r
+ // Opera needs this one backwards for older versions\r
+ if (isOpera && parseFloat(opera.version()) < 9.5) {\r
+ r.insertNode(bef);\r
+ r.insertNode(aft);\r
+ } else {\r
+ r.insertNode(aft);\r
+ r.insertNode(bef);\r
}\r
\r
- val = ed.settings.forced_root_block ? (val || '<p>') : val;\r
-\r
- if (val.indexOf('<') == -1)\r
- val = '<' + val + '>';\r
-\r
- if (tinymce.isGecko)\r
- val = val.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi, '$1');\r
-\r
- ed.getDoc().execCommand('FormatBlock', false, val);\r
- },\r
-\r
- mceCleanup : function() {\r
- var ed = this.editor, s = ed.selection, b = s.getBookmark();\r
- ed.setContent(ed.getContent());\r
- s.moveToBookmark(b);\r
- },\r
+ // Normalize\r
+ aft.normalize();\r
+ bef.normalize();\r
\r
- mceRemoveNode : function(ui, val) {\r
- var ed = this.editor, s = ed.selection, b, n = val || s.getNode();\r
+ function first(n) {\r
+ return d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE).nextNode() || n;\r
+ };\r
\r
- // Make sure that the body node isn't removed\r
- if (n == ed.getBody())\r
- return;\r
+ // Move cursor and scroll into view\r
+ r = d.createRange();\r
+ r.selectNodeContents(isGecko ? first(car || aft) : car || aft);\r
+ r.collapse(1);\r
+ s.removeAllRanges();\r
+ s.addRange(r);\r
\r
- b = s.getBookmark();\r
- ed.dom.remove(n, 1);\r
- s.moveToBookmark(b);\r
- ed.nodeChanged();\r
- },\r
+ // scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs\r
+ y = ed.dom.getPos(aft).y;\r
+ ch = aft.clientHeight;\r
\r
- mceSelectNodeDepth : function(ui, val) {\r
- var ed = this.editor, s = ed.selection, c = 0;\r
+ // Is element within viewport\r
+ if (y < vp.y || y + ch > vp.y + vp.h) {\r
+ ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks\r
+ //console.debug('SCROLL!', 'vp.y: ' + vp.y, 'y' + y, 'vp.h' + vp.h, 'clientHeight' + aft.clientHeight, 'yyy: ' + (y < vp.y ? y : y - vp.h + aft.clientHeight));\r
+ }\r
\r
- ed.dom.getParent(s.getNode(), function(n) {\r
- if (n.nodeType == 1 && c++ == val) {\r
- s.select(n);\r
- ed.nodeChanged();\r
- return false;\r
- }\r
- }, ed.getBody());\r
+ return FALSE;\r
},\r
\r
- mceSelectNode : function(u, v) {\r
- this.editor.selection.select(v);\r
- },\r
+ backspaceDelete : function(e, bs) {\r
+ var t = this, ed = t.editor, b = ed.getBody(), dom = ed.dom, n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn, walker;\r
\r
- mceInsertContent : function(ui, val) {\r
- this.editor.selection.setContent(val);\r
- },\r
+ // Delete when caret is behind a element doesn't work correctly on Gecko see #3011651\r
+ if (!bs && r.collapsed && sc.nodeType == 1 && r.startOffset == sc.childNodes.length) {\r
+ walker = new tinymce.dom.TreeWalker(sc.lastChild, sc);\r
\r
- mceInsertRawHTML : function(ui, val) {\r
- var ed = this.editor;\r
+ // Walk the dom backwards until we find a text node\r
+ for (n = sc.lastChild; n; n = walker.prev()) {\r
+ if (n.nodeType == 3) {\r
+ r.setStart(n, n.nodeValue.length);\r
+ r.collapse(true);\r
+ se.setRng(r);\r
+ return;\r
+ }\r
+ }\r
+ }\r
\r
- ed.selection.setContent('tiny_mce_marker');\r
- ed.setContent(ed.getContent().replace(/tiny_mce_marker/g, val));\r
- },\r
+ // The caret sometimes gets stuck in Gecko if you delete empty paragraphs\r
+ // This workaround removes the element by hand and moves the caret to the previous element\r
+ if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) {\r
+ if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) {\r
+ // Find previous block element\r
+ n = sc;\r
+ while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ;\r
\r
- mceRepaint : function() {\r
- var s, b, e = this.editor;\r
+ if (n) {\r
+ if (sc != b.firstChild) {\r
+ // Find last text node\r
+ w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE);\r
+ while (tn = w.nextNode())\r
+ n = tn;\r
\r
- if (tinymce.isGecko) {\r
- try {\r
- s = e.selection;\r
- b = s.getBookmark(true);\r
+ // Place caret at the end of last text node\r
+ r = ed.getDoc().createRange();\r
+ r.setStart(n, n.nodeValue ? n.nodeValue.length : 0);\r
+ r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0);\r
+ se.setRng(r);\r
\r
- if (s.getSel())\r
- s.getSel().selectAllChildren(e.getBody());\r
+ // Remove the target container\r
+ ed.dom.remove(sc);\r
+ }\r
\r
- s.collapse(true);\r
- s.moveToBookmark(b);\r
- } catch (ex) {\r
- // Ignore\r
+ return Event.cancel(e);\r
+ }\r
}\r
}\r
- },\r
+ }\r
+ });\r
+})(tinymce);\r
\r
- queryStateUnderline : function() {\r
- var ed = this.editor, n = ed.selection.getNode();\r
+(function(tinymce) {\r
+ // Shorten names\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend;\r
\r
- if (n && n.nodeName == 'A')\r
- return false;\r
+ tinymce.create('tinymce.ControlManager', {\r
+ ControlManager : function(ed, s) {\r
+ var t = this, i;\r
+\r
+ s = s || {};\r
+ t.editor = ed;\r
+ t.controls = {};\r
+ t.onAdd = new tinymce.util.Dispatcher(t);\r
+ t.onPostRender = new tinymce.util.Dispatcher(t);\r
+ t.prefix = s.prefix || ed.id + '_';\r
+ t._cls = {};\r
\r
- return this._queryState('Underline');\r
+ t.onPostRender.add(function() {\r
+ each(t.controls, function(c) {\r
+ c.postRender();\r
+ });\r
+ });\r
},\r
\r
- queryStateOutdent : function() {\r
- var ed = this.editor, n;\r
+ get : function(id) {\r
+ return this.controls[this.prefix + id] || this.controls[id];\r
+ },\r
\r
- if (ed.settings.inline_styles) {\r
- if ((n = ed.dom.getParent(ed.selection.getStart(), ed.dom.isBlock)) && parseInt(n.style.paddingLeft) > 0)\r
- return true;\r
+ setActive : function(id, s) {\r
+ var c = null;\r
\r
- if ((n = ed.dom.getParent(ed.selection.getEnd(), ed.dom.isBlock)) && parseInt(n.style.paddingLeft) > 0)\r
- return true;\r
- }\r
+ if (c = this.get(id))\r
+ c.setActive(s);\r
\r
- return this.queryStateInsertUnorderedList() || this.queryStateInsertOrderedList() || (!ed.settings.inline_styles && !!ed.dom.getParent(ed.selection.getNode(), 'BLOCKQUOTE'));\r
+ return c;\r
},\r
\r
- queryStateInsertUnorderedList : function() {\r
- return this.editor.dom.getParent(this.editor.selection.getNode(), 'UL');\r
- },\r
+ setDisabled : function(id, s) {\r
+ var c = null;\r
\r
- queryStateInsertOrderedList : function() {\r
- return this.editor.dom.getParent(this.editor.selection.getNode(), 'OL');\r
- },\r
+ if (c = this.get(id))\r
+ c.setDisabled(s);\r
\r
- queryStatemceBlockQuote : function() {\r
- return !!this.editor.dom.getParent(this.editor.selection.getStart(), function(n) {return n.nodeName === 'BLOCKQUOTE';});\r
+ return c;\r
},\r
\r
- mceBlockQuote : function() {\r
- var t = this, ed = t.editor, s = ed.selection, dom = ed.dom, sb, eb, n, bm, bq, r, bq2, i, nl;\r
-\r
- function getBQ(e) {\r
- return dom.getParent(e, function(n) {return n.nodeName === 'BLOCKQUOTE';});\r
- };\r
-\r
- // Get start/end block\r
- sb = dom.getParent(s.getStart(), isBlock);\r
- eb = dom.getParent(s.getEnd(), isBlock);\r
+ add : function(c) {\r
+ var t = this;\r
\r
- // Remove blockquote(s)\r
- if (bq = getBQ(sb)) {\r
- if (sb != eb || sb.childNodes.length > 1 || (sb.childNodes.length == 1 && sb.firstChild.nodeName != 'BR'))\r
- bm = s.getBookmark();\r
+ if (c) {\r
+ t.controls[c.id] = c;\r
+ t.onAdd.dispatch(c, t);\r
+ }\r
\r
- // Move all elements after the end block into new bq\r
- if (getBQ(eb)) {\r
- bq2 = bq.cloneNode(false);\r
+ return c;\r
+ },\r
\r
- while (n = eb.nextSibling)\r
- bq2.appendChild(n.parentNode.removeChild(n));\r
- }\r
+ createControl : function(n) {\r
+ var c, t = this, ed = t.editor;\r
\r
- // Add new bq after\r
- if (bq2)\r
- dom.insertAfter(bq2, bq);\r
+ each(ed.plugins, function(p) {\r
+ if (p.createControl) {\r
+ c = p.createControl(n, t);\r
\r
- // Move all selected blocks after the current bq\r
- nl = t._getSelectedBlocks(sb, eb);\r
- for (i = nl.length - 1; i >= 0; i--) {\r
- dom.insertAfter(nl[i], bq);\r
+ if (c)\r
+ return false;\r
}\r
+ });\r
\r
- // Empty bq, then remove it\r
- if (/^\s*$/.test(bq.innerHTML))\r
- dom.remove(bq, 1); // Keep children so boomark restoration works correctly\r
-\r
- // Empty bq, then remote it\r
- if (bq2 && /^\s*$/.test(bq2.innerHTML))\r
- dom.remove(bq2, 1); // Keep children so boomark restoration works correctly\r
-\r
- if (!bm) {\r
- // Move caret inside empty block element\r
- if (!isIE) {\r
- r = ed.getDoc().createRange();\r
- r.setStart(sb, 0);\r
- r.setEnd(sb, 0);\r
- s.setRng(r);\r
- } else {\r
- s.select(sb);\r
- s.collapse(0);\r
-\r
- // IE misses the empty block some times element so we must move back the caret\r
- if (dom.getParent(s.getStart(), isBlock) != sb) {\r
- r = s.getRng();\r
- r.move('character', -1);\r
- r.select();\r
- }\r
- }\r
- } else\r
- t.editor.selection.moveToBookmark(bm);\r
-\r
- return;\r
+ switch (n) {\r
+ case "|":\r
+ case "separator":\r
+ return t.createSeparator();\r
}\r
\r
- // Since IE can start with a totally empty document we need to add the first bq and paragraph\r
- if (isIE && !sb && !eb) {\r
- t.editor.getDoc().execCommand('Indent');\r
- n = getBQ(s.getNode());\r
- n.style.margin = n.dir = ''; // IE adds margin and dir to bq\r
- return;\r
- }\r
+ if (!c && ed.buttons && (c = ed.buttons[n]))\r
+ return t.createButton(n, c);\r
\r
- if (!sb || !eb)\r
- return;\r
+ return t.add(c);\r
+ },\r
\r
- // If empty paragraph node then do not use bookmark\r
- if (sb != eb || sb.childNodes.length > 1 || (sb.childNodes.length == 1 && sb.firstChild.nodeName != 'BR'))\r
- bm = s.getBookmark();\r
+ createDropMenu : function(id, s, cc) {\r
+ var t = this, ed = t.editor, c, bm, v, cls;\r
\r
- // Move selected block elements into a bq\r
- each(t._getSelectedBlocks(getBQ(s.getStart()), getBQ(s.getEnd())), function(e) {\r
- // Found existing BQ add to this one\r
- if (e.nodeName == 'BLOCKQUOTE' && !bq) {\r
- bq = e;\r
- return;\r
- }\r
+ s = extend({\r
+ 'class' : 'mceDropDown',\r
+ constrain : ed.settings.constrain_menus\r
+ }, s);\r
\r
- // No BQ found, create one\r
- if (!bq) {\r
- bq = dom.create('blockquote');\r
- e.parentNode.insertBefore(bq, e);\r
- }\r
+ s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin';\r
+ if (v = ed.getParam('skin_variant'))\r
+ s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1);\r
\r
- // Add children from existing BQ\r
- if (e.nodeName == 'BLOCKQUOTE' && bq) {\r
- n = e.firstChild;\r
+ id = t.prefix + id;\r
+ cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu;\r
+ c = t.controls[id] = new cls(id, s);\r
+ c.onAddItem.add(function(c, o) {\r
+ var s = o.settings;\r
\r
- while (n) {\r
- bq.appendChild(n.cloneNode(true));\r
- n = n.nextSibling;\r
- }\r
+ s.title = ed.getLang(s.title, s.title);\r
\r
- dom.remove(e);\r
- return;\r
+ if (!s.onclick) {\r
+ s.onclick = function(v) {\r
+ if (s.cmd)\r
+ ed.execCommand(s.cmd, s.ui || false, s.value);\r
+ };\r
}\r
-\r
- // Add non BQ element to BQ\r
- bq.appendChild(dom.remove(e));\r
});\r
\r
- if (!bm) {\r
- // Move caret inside empty block element\r
- if (!isIE) {\r
- r = ed.getDoc().createRange();\r
- r.setStart(sb, 0);\r
- r.setEnd(sb, 0);\r
- s.setRng(r);\r
- } else {\r
- s.select(sb);\r
- s.collapse(1);\r
- }\r
- } else\r
- s.moveToBookmark(bm);\r
- },\r
-\r
- _applyInlineStyle : function(na, at, op) {\r
- var t = this, ed = t.editor, dom = ed.dom, bm, lo = {}, kh;\r
-\r
- na = na.toUpperCase();\r
-\r
- if (op && op.check_classes && at['class'])\r
- op.check_classes.push(at['class']);\r
+ ed.onRemove.add(function() {\r
+ c.destroy();\r
+ });\r
\r
- function replaceFonts() {\r
- var bm;\r
+ // Fix for bug #1897785, #1898007\r
+ if (tinymce.isIE) {\r
+ c.onShowMenu.add(function() {\r
+ // IE 8 needs focus in order to store away a range with the current collapsed caret location\r
+ ed.focus();\r
\r
- each(dom.select(tinymce.isWebKit && !tinymce.isAir ? 'span' : 'font'), function(n) {\r
- if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline') {\r
- if (!bm)\r
- bm = ed.selection.getBookmark();\r
+ bm = ed.selection.getBookmark(1);\r
+ });\r
\r
- at._mce_new = '1';\r
- dom.replace(dom.create(na, at), n, 1);\r
+ c.onHideMenu.add(function() {\r
+ if (bm) {\r
+ ed.selection.moveToBookmark(bm);\r
+ bm = 0;\r
}\r
});\r
+ }\r
\r
- // Remove redundant elements\r
- each(dom.select(na), function(n) {\r
- if (n.getAttribute('_mce_new')) {\r
- function removeStyle(n) {\r
- if (n.nodeType == 1) {\r
- each(at.style, function(v, k) {\r
- dom.setStyle(n, k, '');\r
- });\r
+ return t.add(c);\r
+ },\r
\r
- // Remove spans with the same class or marked classes\r
- if (at['class'] && n.className && op) {\r
- each(op.check_classes, function(c) {\r
- if (dom.hasClass(n, c))\r
- dom.removeClass(n, c);\r
- });\r
- }\r
- }\r
- };\r
+ createListBox : function(id, s, cc) {\r
+ var t = this, ed = t.editor, cmd, c, cls;\r
+\r
+ if (t.get(id))\r
+ return null;\r
\r
- // Remove specified style information from child elements\r
- each(dom.select(na, n), removeStyle);\r
+ s.title = ed.translate(s.title);\r
+ s.scope = s.scope || ed;\r
\r
- // Remove the specified style information on parent if current node is only child (IE)\r
- if (n.parentNode && n.parentNode.nodeType == 1 && n.parentNode.childNodes.length == 1)\r
- removeStyle(n.parentNode);\r
+ if (!s.onselect) {\r
+ s.onselect = function(v) {\r
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ };\r
+ }\r
\r
- // Remove the child elements style info if a parent already has it\r
- dom.getParent(n.parentNode, function(pn) {\r
- if (pn.nodeType == 1) {\r
- if (at.style) {\r
- each(at.style, function(v, k) {\r
- var sv;\r
+ s = extend({\r
+ title : s.title,\r
+ 'class' : 'mce_' + id,\r
+ scope : s.scope,\r
+ control_manager : t\r
+ }, s);\r
\r
- if (!lo[k] && (sv = dom.getStyle(pn, k))) {\r
- if (sv === v)\r
- dom.setStyle(n, k, '');\r
+ id = t.prefix + id;\r
\r
- lo[k] = 1;\r
- }\r
- });\r
- }\r
+ if (ed.settings.use_native_selects)\r
+ c = new tinymce.ui.NativeListBox(id, s);\r
+ else {\r
+ cls = cc || t._cls.listbox || tinymce.ui.ListBox;\r
+ c = new cls(id, s);\r
+ }\r
\r
- // Remove spans with the same class or marked classes\r
- if (at['class'] && pn.className && op) {\r
- each(op.check_classes, function(c) {\r
- if (dom.hasClass(pn, c))\r
- dom.removeClass(n, c);\r
- });\r
- }\r
- }\r
+ t.controls[id] = c;\r
\r
- return false;\r
- });\r
+ // Fix focus problem in Safari\r
+ if (tinymce.isWebKit) {\r
+ c.onPostRender.add(function(c, n) {\r
+ // Store bookmark on mousedown\r
+ Event.add(n, 'mousedown', function() {\r
+ ed.bookmark = ed.selection.getBookmark(1);\r
+ });\r
\r
- n.removeAttribute('_mce_new');\r
- }\r
+ // Restore on focus, since it might be lost\r
+ Event.add(n, 'focus', function() {\r
+ ed.selection.moveToBookmark(ed.bookmark);\r
+ ed.bookmark = null;\r
+ });\r
});\r
+ }\r
\r
- // Remove empty span elements\r
- each(dom.select(na).reverse(), function(n) {\r
- var c = 0;\r
-\r
- // Check if there is any attributes\r
- each(dom.getAttribs(n), function(an) {\r
- if (an.nodeName.substring(0, 1) != '_' && dom.getAttrib(n, an.nodeName) != '') {\r
- //console.log(dom.getOuterHTML(n), dom.getAttrib(n, an.nodeName));\r
- c++;\r
- }\r
- });\r
+ if (c.hideMenu)\r
+ ed.onMouseDown.add(c.hideMenu, c);\r
\r
- // No attributes then remove the element and keep the children\r
- if (c == 0)\r
- dom.remove(n, 1);\r
- });\r
+ return t.add(c);\r
+ },\r
\r
- ed.selection.moveToBookmark(bm);\r
+ createButton : function(id, s, cc) {\r
+ var t = this, ed = t.editor, o, c, cls;\r
\r
- return !!bm;\r
- };\r
+ if (t.get(id))\r
+ return null;\r
\r
- // Create inline elements\r
- ed.focus();\r
- ed.getDoc().execCommand('FontName', false, 'mceinline');\r
- replaceFonts();\r
+ s.title = ed.translate(s.title);\r
+ s.label = ed.translate(s.label);\r
+ s.scope = s.scope || ed;\r
\r
- if (kh = t._applyInlineStyle.keyhandler) {\r
- ed.onKeyUp.remove(kh);\r
- ed.onKeyPress.remove(kh);\r
- ed.onKeyDown.remove(kh);\r
- ed.onSetContent.remove(t._applyInlineStyle.chandler);\r
+ if (!s.onclick && !s.menu_button) {\r
+ s.onclick = function() {\r
+ ed.execCommand(s.cmd, s.ui || false, s.value);\r
+ };\r
}\r
\r
- if (ed.selection.isCollapsed()) {\r
- // Start collecting styles\r
- t._pendingStyles = tinymce.extend(t._pendingStyles || {}, at.style);\r
+ s = extend({\r
+ title : s.title,\r
+ 'class' : 'mce_' + id,\r
+ unavailable_prefix : ed.getLang('unavailable', ''),\r
+ scope : s.scope,\r
+ control_manager : t\r
+ }, s);\r
\r
- t._applyInlineStyle.chandler = ed.onSetContent.add(function() {\r
- delete t._pendingStyles;\r
- });\r
+ id = t.prefix + id;\r
\r
- t._applyInlineStyle.keyhandler = kh = function(e) {\r
- // Use pending styles\r
- if (t._pendingStyles) {\r
- at.style = t._pendingStyles;\r
- delete t._pendingStyles;\r
- }\r
+ if (s.menu_button) {\r
+ cls = cc || t._cls.menubutton || tinymce.ui.MenuButton;\r
+ c = new cls(id, s);\r
+ ed.onMouseDown.add(c.hideMenu, c);\r
+ } else {\r
+ cls = t._cls.button || tinymce.ui.Button;\r
+ c = new cls(id, s);\r
+ }\r
\r
- if (replaceFonts()) {\r
- ed.onKeyDown.remove(t._applyInlineStyle.keyhandler);\r
- ed.onKeyPress.remove(t._applyInlineStyle.keyhandler);\r
- }\r
+ return t.add(c);\r
+ },\r
\r
- if (e.type == 'keyup')\r
- ed.onKeyUp.remove(t._applyInlineStyle.keyhandler);\r
- };\r
+ createMenuButton : function(id, s, cc) {\r
+ s = s || {};\r
+ s.menu_button = 1;\r
\r
- ed.onKeyDown.add(kh);\r
- ed.onKeyPress.add(kh);\r
- ed.onKeyUp.add(kh);\r
- } else\r
- t._pendingStyles = 0;\r
+ return this.createButton(id, s, cc);\r
},\r
\r
-/*\r
- _mceBlockQuote : function() {\r
- var t = this, s = t.editor.selection, b = s.getBookmark(), bq, dom = t.editor.dom;\r
+ createSplitButton : function(id, s, cc) {\r
+ var t = this, ed = t.editor, cmd, c, cls;\r
\r
- function findBQ(e) {\r
- return dom.getParent(e, function(n) {return n.nodeName === 'BLOCKQUOTE';});\r
- };\r
+ if (t.get(id))\r
+ return null;\r
\r
- // Remove blockquote(s)\r
- if (findBQ(s.getStart())) {\r
- each(t._getSelectedBlocks(findBQ(s.getStart()), findBQ(s.getEnd())), function(e) {\r
- // Found BQ lets remove it\r
- if (e.nodeName == 'BLOCKQUOTE')\r
- dom.remove(e, 1);\r
- });\r
+ s.title = ed.translate(s.title);\r
+ s.scope = s.scope || ed;\r
\r
- t.editor.selection.moveToBookmark(b);\r
- return;\r
+ if (!s.onclick) {\r
+ s.onclick = function(v) {\r
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ };\r
+ }\r
+\r
+ if (!s.onselect) {\r
+ s.onselect = function(v) {\r
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ };\r
}\r
\r
- each(t._getSelectedBlocks(findBQ(s.getStart()), findBQ(s.getEnd())), function(e) {\r
- var n;\r
+ s = extend({\r
+ title : s.title,\r
+ 'class' : 'mce_' + id,\r
+ scope : s.scope,\r
+ control_manager : t\r
+ }, s);\r
\r
- // Found existing BQ add to this one\r
- if (e.nodeName == 'BLOCKQUOTE' && !bq) {\r
- bq = e;\r
- return;\r
- }\r
+ id = t.prefix + id;\r
+ cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton;\r
+ c = t.add(new cls(id, s));\r
+ ed.onMouseDown.add(c.hideMenu, c);\r
\r
- // No BQ found, create one\r
- if (!bq) {\r
- bq = dom.create('blockquote');\r
- e.parentNode.insertBefore(bq, e);\r
- }\r
+ return c;\r
+ },\r
\r
- // Add children from existing BQ\r
- if (e.nodeName == 'BLOCKQUOTE' && bq) {\r
- n = e.firstChild;\r
+ createColorSplitButton : function(id, s, cc) {\r
+ var t = this, ed = t.editor, cmd, c, cls, bm;\r
\r
- while (n) {\r
- bq.appendChild(n.cloneNode(true));\r
- n = n.nextSibling;\r
- }\r
+ if (t.get(id))\r
+ return null;\r
\r
- dom.remove(e);\r
+ s.title = ed.translate(s.title);\r
+ s.scope = s.scope || ed;\r
\r
- return;\r
- }\r
+ if (!s.onclick) {\r
+ s.onclick = function(v) {\r
+ if (tinymce.isIE)\r
+ bm = ed.selection.getBookmark(1);\r
\r
- // Add non BQ element to BQ\r
- bq.appendChild(dom.remove(e));\r
- });\r
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ };\r
+ }\r
\r
- t.editor.selection.moveToBookmark(b);\r
- },\r
-*/\r
- _getSelectedBlocks : function(st, en) {\r
- var ed = this.editor, dom = ed.dom, s = ed.selection, sb, eb, n, bl = [];\r
+ if (!s.onselect) {\r
+ s.onselect = function(v) {\r
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ };\r
+ }\r
\r
- sb = dom.getParent(st || s.getStart(), isBlock);\r
- eb = dom.getParent(en || s.getEnd(), isBlock);\r
+ s = extend({\r
+ title : s.title,\r
+ 'class' : 'mce_' + id,\r
+ 'menu_class' : ed.getParam('skin') + 'Skin',\r
+ scope : s.scope,\r
+ more_colors_title : ed.getLang('more_colors')\r
+ }, s);\r
\r
- if (sb)\r
- bl.push(sb);\r
+ id = t.prefix + id;\r
+ cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton;\r
+ c = new cls(id, s);\r
+ ed.onMouseDown.add(c.hideMenu, c);\r
\r
- if (sb && eb && sb != eb) {\r
- n = sb;\r
+ // Remove the menu element when the editor is removed\r
+ ed.onRemove.add(function() {\r
+ c.destroy();\r
+ });\r
\r
- while ((n = n.nextSibling) && n != eb) {\r
- if (isBlock(n))\r
- bl.push(n);\r
- }\r
+ // Fix for bug #1897785, #1898007\r
+ if (tinymce.isIE) {\r
+ c.onShowMenu.add(function() {\r
+ // IE 8 needs focus in order to store away a range with the current collapsed caret location\r
+ ed.focus();\r
+ bm = ed.selection.getBookmark(1);\r
+ });\r
+\r
+ c.onHideMenu.add(function() {\r
+ if (bm) {\r
+ ed.selection.moveToBookmark(bm);\r
+ bm = 0;\r
+ }\r
+ });\r
}\r
\r
- if (eb && sb != eb)\r
- bl.push(eb);\r
+ return t.add(c);\r
+ },\r
\r
- return bl;\r
- }\r
- });\r
-})();\r
+ createToolbar : function(id, s, cc) {\r
+ var c, t = this, cls;\r
\r
+ id = t.prefix + id;\r
+ cls = cc || t._cls.toolbar || tinymce.ui.Toolbar;\r
+ c = new cls(id, s);\r
\r
-/* file:jscripts/tiny_mce/classes/UndoManager.js */\r
+ if (t.get(id))\r
+ return null;\r
\r
-tinymce.create('tinymce.UndoManager', {\r
- index : 0,\r
- data : null,\r
- typing : 0,\r
+ return t.add(c);\r
+ },\r
\r
- UndoManager : function(ed) {\r
- var t = this, Dispatcher = tinymce.util.Dispatcher;\r
+ createSeparator : function(cc) {\r
+ var cls = cc || this._cls.separator || tinymce.ui.Separator;\r
\r
- t.editor = ed;\r
- t.data = [];\r
- t.onAdd = new Dispatcher(this);\r
- t.onUndo = new Dispatcher(this);\r
- t.onRedo = new Dispatcher(this);\r
- },\r
+ return new cls();\r
+ },\r
\r
- add : function(l) {\r
- var t = this, i, ed = t.editor, b, s = ed.settings, la;\r
+ setControlType : function(n, c) {\r
+ return this._cls[n.toLowerCase()] = c;\r
+ },\r
+ \r
+ destroy : function() {\r
+ each(this.controls, function(c) {\r
+ c.destroy();\r
+ });\r
\r
- l = l || {};\r
- l.content = l.content || ed.getContent({format : 'raw', no_events : 1});\r
+ this.controls = null;\r
+ }\r
+ });\r
+})(tinymce);\r
\r
- // Add undo level if needed\r
- l.content = l.content.replace(/^\s*|\s*$/g, '');\r
- la = t.data[t.index > 0 && (t.index == 0 || t.index == t.data.length) ? t.index - 1 : t.index];\r
- if (!l.initial && la && l.content == la.content)\r
- return null;\r
+(function(tinymce) {\r
+ var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera;\r
\r
- // Time to compress\r
- if (s.custom_undo_redo_levels) {\r
- if (t.data.length > s.custom_undo_redo_levels) {\r
- for (i = 0; i < t.data.length - 1; i++)\r
- t.data[i] = t.data[i + 1];\r
+ tinymce.create('tinymce.WindowManager', {\r
+ WindowManager : function(ed) {\r
+ var t = this;\r
\r
- t.data.length--;\r
- t.index = t.data.length;\r
- }\r
- }\r
+ t.editor = ed;\r
+ t.onOpen = new Dispatcher(t);\r
+ t.onClose = new Dispatcher(t);\r
+ t.params = {};\r
+ t.features = {};\r
+ },\r
\r
- if (s.custom_undo_redo_restore_selection && !l.initial)\r
- l.bookmark = b = l.bookmark || ed.selection.getBookmark();\r
+ open : function(s, p) {\r
+ var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u;\r
\r
- if (t.index < t.data.length)\r
- t.index++;\r
+ // Default some options\r
+ s = s || {};\r
+ p = p || {};\r
+ sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window\r
+ sh = isOpera ? vp.h : screen.height;\r
+ s.name = s.name || 'mc_' + new Date().getTime();\r
+ s.width = parseInt(s.width || 320);\r
+ s.height = parseInt(s.height || 240);\r
+ s.resizable = true;\r
+ s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0);\r
+ s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0);\r
+ p.inline = false;\r
+ p.mce_width = s.width;\r
+ p.mce_height = s.height;\r
+ p.mce_auto_focus = s.auto_focus;\r
\r
- // Only initial marked undo levels should be allowed as first item\r
- // This to workaround a bug with Firefox and the blur event\r
- if (t.data.length === 0 && !l.initial)\r
- return null;\r
+ if (mo) {\r
+ if (isIE) {\r
+ s.center = true;\r
+ s.help = false;\r
+ s.dialogWidth = s.width + 'px';\r
+ s.dialogHeight = s.height + 'px';\r
+ s.scroll = s.scrollbars || false;\r
+ }\r
+ }\r
\r
- // Add level\r
- t.data.length = t.index + 1;\r
- t.data[t.index++] = l;\r
+ // Build features string\r
+ each(s, function(v, k) {\r
+ if (tinymce.is(v, 'boolean'))\r
+ v = v ? 'yes' : 'no';\r
\r
- if (l.initial)\r
- t.index = 0;\r
+ if (!/^(name|url)$/.test(k)) {\r
+ if (isIE && mo)\r
+ f += (f ? ';' : '') + k + ':' + v;\r
+ else\r
+ f += (f ? ',' : '') + k + '=' + v;\r
+ }\r
+ });\r
\r
- // Set initial bookmark use first real undo level\r
- if (t.data.length == 2 && t.data[0].initial)\r
- t.data[0].bookmark = b;\r
+ t.features = s;\r
+ t.params = p;\r
+ t.onOpen.dispatch(t, s, p);\r
\r
- t.onAdd.dispatch(t, l);\r
- ed.isNotDirty = 0;\r
+ u = s.url || s.file;\r
+ u = tinymce._addVer(u);\r
\r
- //console.dir(t.data);\r
+ try {\r
+ if (isIE && mo) {\r
+ w = 1;\r
+ window.showModalDialog(u, window, f);\r
+ } else\r
+ w = window.open(u, s.name, f);\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
\r
- return l;\r
- },\r
+ if (!w)\r
+ alert(t.editor.getLang('popup_blocked'));\r
+ },\r
\r
- undo : function() {\r
- var t = this, ed = t.editor, l = l, i;\r
+ close : function(w) {\r
+ w.close();\r
+ this.onClose.dispatch(this);\r
+ },\r
\r
- if (t.typing) {\r
- t.add();\r
- t.typing = 0;\r
- }\r
+ createInstance : function(cl, a, b, c, d, e) {\r
+ var f = tinymce.resolve(cl);\r
\r
- if (t.index > 0) {\r
- // If undo on last index then take snapshot\r
- if (t.index == t.data.length && t.index > 1) {\r
- i = t.index;\r
- t.typing = 0;\r
+ return new f(a, b, c, d, e);\r
+ },\r
\r
- if (!t.add())\r
- t.index = i;\r
+ confirm : function(t, cb, s, w) {\r
+ w = w || window;\r
\r
- --t.index;\r
- }\r
+ cb.call(s || this, w.confirm(this._decode(this.editor.getLang(t, t))));\r
+ },\r
\r
- l = t.data[--t.index];\r
- ed.setContent(l.content, {format : 'raw'});\r
- ed.selection.moveToBookmark(l.bookmark);\r
+ alert : function(tx, cb, s, w) {\r
+ var t = this;\r
\r
- t.onUndo.dispatch(t, l);\r
- }\r
+ w = w || window;\r
+ w.alert(t._decode(t.editor.getLang(tx, tx)));\r
\r
- return l;\r
- },\r
+ if (cb)\r
+ cb.call(s || t);\r
+ },\r
\r
- redo : function() {\r
- var t = this, ed = t.editor, l = null;\r
+ resizeBy : function(dw, dh, win) {\r
+ win.resizeBy(dw, dh);\r
+ },\r
\r
- if (t.index < t.data.length - 1) {\r
- l = t.data[++t.index];\r
- ed.setContent(l.content, {format : 'raw'});\r
- ed.selection.moveToBookmark(l.bookmark);\r
+ // Internal functions\r
\r
- t.onRedo.dispatch(t, l);\r
+ _decode : function(s) {\r
+ return tinymce.DOM.decode(s).replace(/\\n/g, '\n');\r
}\r
+ });\r
+}(tinymce));\r
+(function(tinymce) {\r
+ function CommandManager() {\r
+ var execCommands = {}, queryStateCommands = {}, queryValueCommands = {};\r
\r
- return l;\r
- },\r
-\r
- clear : function() {\r
- var t = this;\r
+ function add(collection, cmd, func, scope) {\r
+ if (typeof(cmd) == 'string')\r
+ cmd = [cmd];\r
\r
- t.data = [];\r
- t.index = 0;\r
- t.typing = 0;\r
- t.add({initial : true});\r
- },\r
+ tinymce.each(cmd, function(cmd) {\r
+ collection[cmd.toLowerCase()] = {func : func, scope : scope};\r
+ });\r
+ };\r
\r
- hasUndo : function() {\r
- return this.index != 0 || this.typing;\r
- },\r
+ tinymce.extend(this, {\r
+ add : function(cmd, func, scope) {\r
+ add(execCommands, cmd, func, scope);\r
+ },\r
\r
- hasRedo : function() {\r
- return this.index < this.data.length - 1;\r
- }\r
+ addQueryStateHandler : function(cmd, func, scope) {\r
+ add(queryStateCommands, cmd, func, scope);\r
+ },\r
\r
- });\r
-/* file:jscripts/tiny_mce/classes/ForceBlocks.js */\r
+ addQueryValueHandler : function(cmd, func, scope) {\r
+ add(queryValueCommands, cmd, func, scope);\r
+ },\r
\r
-(function() {\r
- // Shorten names\r
- var Event, isIE, isGecko, isOpera, each, extend;\r
+ execCommand : function(scope, cmd, ui, value, args) {\r
+ if (cmd = execCommands[cmd.toLowerCase()]) {\r
+ if (cmd.func.call(scope || cmd.scope, ui, value, args) !== false)\r
+ return true;\r
+ }\r
+ },\r
\r
- Event = tinymce.dom.Event;\r
- isIE = tinymce.isIE;\r
- isGecko = tinymce.isGecko;\r
- isOpera = tinymce.isOpera;\r
- each = tinymce.each;\r
- extend = tinymce.extend;\r
+ queryCommandValue : function() {\r
+ if (cmd = queryValueCommands[cmd.toLowerCase()])\r
+ return cmd.func.call(scope || cmd.scope, ui, value, args);\r
+ },\r
\r
- tinymce.create('tinymce.ForceBlocks', {\r
- ForceBlocks : function(ed) {\r
- var t = this, s = ed.settings, elm;\r
+ queryCommandState : function() {\r
+ if (cmd = queryStateCommands[cmd.toLowerCase()])\r
+ return cmd.func.call(scope || cmd.scope, ui, value, args);\r
+ }\r
+ });\r
+ };\r
\r
- t.editor = ed;\r
- t.dom = ed.dom;\r
- elm = (s.forced_root_block || 'p').toLowerCase();\r
- s.element = elm.toUpperCase();\r
+ tinymce.GlobalCommands = new CommandManager();\r
+})(tinymce);\r
+(function(tinymce) {\r
+ tinymce.Formatter = function(ed) {\r
+ var formats = {},\r
+ each = tinymce.each,\r
+ dom = ed.dom,\r
+ selection = ed.selection,\r
+ TreeWalker = tinymce.dom.TreeWalker,\r
+ rangeUtils = new tinymce.dom.RangeUtils(dom),\r
+ isValid = ed.schema.isValid,\r
+ isBlock = dom.isBlock,\r
+ forcedRootBlock = ed.settings.forced_root_block,\r
+ nodeIndex = dom.nodeIndex,\r
+ INVISIBLE_CHAR = '\uFEFF',\r
+ MCE_ATTR_RE = /^(src|href|style)$/,\r
+ FALSE = false,\r
+ TRUE = true,\r
+ undefined,\r
+ pendingFormats = {apply : [], remove : []};\r
+\r
+ function isArray(obj) {\r
+ return obj instanceof Array;\r
+ };\r
\r
- ed.onPreInit.add(t.setup, t);\r
+ function getParents(node, selector) {\r
+ return dom.getParents(node, selector, dom.getRoot());\r
+ };\r
\r
- t.reOpera = new RegExp('(\\u00a0| | )<\/' + elm + '>', 'gi');\r
- t.rePadd = new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g, elm), 'gi');\r
- t.reNbsp2BR1 = new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g, elm), 'gi');\r
- t.reNbsp2BR2 = new RegExp('<p( )([^>]+)>( | )<\\\/p>|<p>( | )<\\\/p>'.replace(/p/g, elm), 'gi');\r
- t.reBR2Nbsp = new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g, elm), 'gi');\r
- t.reTrailBr = new RegExp('\\s*<br \\/>\\s*<\\\/p>'.replace(/p/g, elm), 'gi');\r
+ function isCaretNode(node) {\r
+ return node.nodeType === 1 && (node.face === 'mceinline' || node.style.fontFamily === 'mceinline');\r
+ };\r
\r
- function padd(ed, o) {\r
- if (isOpera)\r
- o.content = o.content.replace(t.reOpera, '</' + elm + '>');\r
+ // Public functions\r
\r
- o.content = o.content.replace(t.rePadd, '<' + elm + '$1$2$3$4$5$6>\u00a0</' + elm + '>');\r
+ function get(name) {\r
+ return name ? formats[name] : formats;\r
+ };\r
\r
- if (!isIE && !isOpera && o.set) {\r
- // Use instead of BR in padded paragraphs\r
- o.content = o.content.replace(t.reNbsp2BR1, '<' + elm + '$1$2><br /></' + elm + '>');\r
- o.content = o.content.replace(t.reNbsp2BR2, '<' + elm + '$1$2><br /></' + elm + '>');\r
+ function register(name, format) {\r
+ if (name) {\r
+ if (typeof(name) !== 'string') {\r
+ each(name, function(format, name) {\r
+ register(name, format);\r
+ });\r
} else {\r
- o.content = o.content.replace(t.reBR2Nbsp, '<' + elm + '$1$2>\u00a0</' + elm + '>');\r
- o.content = o.content.replace(t.reTrailBr, '</' + elm + '>');\r
- }\r
- };\r
+ // Force format into array and add it to internal collection\r
+ format = format.length ? format : [format];\r
+\r
+ each(format, function(format) {\r
+ // Set deep to false by default on selector formats this to avoid removing\r
+ // alignment on images inside paragraphs when alignment is changed on paragraphs\r
+ if (format.deep === undefined)\r
+ format.deep = !format.selector;\r
+\r
+ // Default to true\r
+ if (format.split === undefined)\r
+ format.split = !format.selector || format.inline;\r
+\r
+ // Default to true\r
+ if (format.remove === undefined && format.selector && !format.inline)\r
+ format.remove = 'none';\r
+\r
+ // Mark format as a mixed format inline + block level\r
+ if (format.selector && format.inline) {\r
+ format.mixed = true;\r
+ format.block_expand = true;\r
+ }\r
\r
- ed.onBeforeSetContent.add(padd);\r
- ed.onPostProcess.add(padd);\r
+ // Split classes if needed\r
+ if (typeof(format.classes) === 'string')\r
+ format.classes = format.classes.split(/\s+/);\r
+ });\r
\r
- if (s.forced_root_block) {\r
- ed.onInit.add(t.forceRoots, t);\r
- ed.onSetContent.add(t.forceRoots, t);\r
- ed.onBeforeGetContent.add(t.forceRoots, t);\r
+ formats[name] = format;\r
+ }\r
}\r
- },\r
+ };\r
\r
- setup : function() {\r
- var t = this, ed = t.editor, s = ed.settings;\r
+ function apply(name, vars, node) {\r
+ var formatList = get(name), format = formatList[0], bookmark, rng, i;\r
\r
- // Force root blocks when typing and when getting output\r
- if (s.forced_root_block) {\r
- ed.onKeyUp.add(t.forceRoots, t);\r
- ed.onPreProcess.add(t.forceRoots, t);\r
- }\r
+ function moveStart(rng) {\r
+ var container = rng.startContainer,\r
+ offset = rng.startOffset,\r
+ walker, node;\r
\r
- if (s.force_br_newlines) {\r
- // Force IE to produce BRs on enter\r
- if (isIE) {\r
- ed.onKeyPress.add(function(ed, e) {\r
- var n, s = ed.selection;\r
+ // Move startContainer/startOffset in to a suitable node\r
+ if (container.nodeType == 1 || container.nodeValue === "") {\r
+ container = container.nodeType == 1 ? container.childNodes[offset] : container;\r
\r
- if (e.keyCode == 13 && s.getNode().nodeName != 'LI') {\r
- s.setContent('<br id="__" /> ', {format : 'raw'});\r
- n = ed.dom.get('__');\r
- n.removeAttribute('id');\r
- s.select(n);\r
- s.collapse();\r
- return Event.cancel(e);\r
+ // Might fail if the offset is behind the last element in it's container\r
+ if (container) {\r
+ walker = new TreeWalker(container, container.parentNode);\r
+ for (node = walker.current(); node; node = walker.next()) {\r
+ if (node.nodeType == 3 && !isWhiteSpaceNode(node)) {\r
+ rng.setStart(node, 0);\r
+ break;\r
+ }\r
}\r
- });\r
+ }\r
}\r
\r
- return;\r
- }\r
+ return rng;\r
+ };\r
\r
- if (!isIE && s.force_p_newlines) {\r
-/* ed.onPreProcess.add(function(ed, o) {\r
- each(ed.dom.select('br', o.node), function(n) {\r
- var p = n.parentNode;\r
+ function setElementFormat(elm, fmt) {\r
+ fmt = fmt || format;\r
\r
- // Replace <p><br /></p> with <p> </p>\r
- if (p && p.nodeName == 'p' && (p.childNodes.length == 1 || p.lastChild == n)) {\r
- p.replaceChild(ed.getDoc().createTextNode('\u00a0'), n);\r
- }\r
+ if (elm) {\r
+ each(fmt.styles, function(value, name) {\r
+ dom.setStyle(elm, name, replaceVars(value, vars));\r
});\r
- });*/\r
\r
- ed.onKeyPress.add(function(ed, e) {\r
- if (e.keyCode == 13 && !e.shiftKey) {\r
- if (!t.insertPara(e))\r
- Event.cancel(e);\r
- }\r
- });\r
+ each(fmt.attributes, function(value, name) {\r
+ dom.setAttrib(elm, name, replaceVars(value, vars));\r
+ });\r
\r
- if (isGecko) {\r
- ed.onKeyDown.add(function(ed, e) {\r
- if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey)\r
- t.backspaceDelete(e, e.keyCode == 8);\r
+ each(fmt.classes, function(value) {\r
+ value = replaceVars(value, vars);\r
+\r
+ if (!dom.hasClass(elm, value))\r
+ dom.addClass(elm, value);\r
});\r
}\r
- }\r
+ };\r
\r
- function ren(rn, na) {\r
- var ne = ed.dom.create(na);\r
+ function applyRngStyle(rng) {\r
+ var newWrappers = [], wrapName, wrapElm;\r
\r
- each(rn.attributes, function(a) {\r
- if (a.specified && a.nodeValue)\r
- ne.setAttribute(a.nodeName.toLowerCase(), a.nodeValue);\r
- });\r
+ // Setup wrapper element\r
+ wrapName = format.inline || format.block;\r
+ wrapElm = dom.create(wrapName);\r
+ setElementFormat(wrapElm);\r
\r
- each(rn.childNodes, function(n) {\r
- ne.appendChild(n.cloneNode(true));\r
- });\r
+ rangeUtils.walk(rng, function(nodes) {\r
+ var currentWrapElm;\r
\r
- rn.parentNode.replaceChild(ne, rn);\r
+ function process(node) {\r
+ var nodeName = node.nodeName.toLowerCase(), parentName = node.parentNode.nodeName.toLowerCase(), found;\r
\r
- return ne;\r
- };\r
+ // Stop wrapping on br elements\r
+ if (isEq(nodeName, 'br')) {\r
+ currentWrapElm = 0;\r
\r
- // Replaces IE:s auto generated paragraphs with the specified element name\r
- if (isIE && s.element != 'P') {\r
- ed.onKeyPress.add(function(ed, e) {\r
- t.lastElm = ed.selection.getNode().nodeName;\r
- });\r
+ // Remove any br elements when we wrap things\r
+ if (format.block)\r
+ dom.remove(node);\r
\r
- ed.onKeyUp.add(function(ed, e) {\r
- var bl, sel = ed.selection, n = sel.getNode(), b = ed.getBody();\r
+ return;\r
+ }\r
\r
- if (b.childNodes.length === 1 && n.nodeName == 'P') {\r
- n = ren(n, s.element);\r
- sel.select(n);\r
- sel.collapse();\r
- ed.nodeChanged();\r
- } else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') {\r
- bl = ed.dom.getParent(n, 'P');\r
+ // If node is wrapper type\r
+ if (format.wrapper && matchNode(node, name, vars)) {\r
+ currentWrapElm = 0;\r
+ return;\r
+ }\r
\r
- if (bl) {\r
- ren(bl, s.element);\r
- ed.nodeChanged();\r
+ // Can we rename the block\r
+ if (format.block && !format.wrapper && isTextBlock(nodeName)) {\r
+ node = dom.rename(node, wrapName);\r
+ setElementFormat(node);\r
+ newWrappers.push(node);\r
+ currentWrapElm = 0;\r
+ return;\r
}\r
- }\r
- });\r
- }\r
- },\r
\r
- find : function(n, t, s) {\r
- var ed = this.editor, w = ed.getDoc().createTreeWalker(n, 4, null, false), c = -1;\r
+ // Handle selector patterns\r
+ if (format.selector) {\r
+ // Look for matching formats\r
+ each(formatList, function(format) {\r
+ if (dom.is(node, format.selector) && !isCaretNode(node)) {\r
+ setElementFormat(node, format);\r
+ found = true;\r
+ }\r
+ });\r
\r
- while (n = w.nextNode()) {\r
- c++;\r
+ // Continue processing if a selector match wasn't found and a inline element is defined\r
+ if (!format.inline || found) {\r
+ currentWrapElm = 0;\r
+ return;\r
+ }\r
+ }\r
\r
- // Index by node\r
- if (t == 0 && n == s)\r
- return c;\r
+ // Is it valid to wrap this item\r
+ if (isValid(wrapName, nodeName) && isValid(parentName, wrapName)) {\r
+ // Start wrapping\r
+ if (!currentWrapElm) {\r
+ // Wrap the node\r
+ currentWrapElm = wrapElm.cloneNode(FALSE);\r
+ node.parentNode.insertBefore(currentWrapElm, node);\r
+ newWrappers.push(currentWrapElm);\r
+ }\r
\r
- // Node by index\r
- if (t == 1 && c == s)\r
- return n;\r
- }\r
+ currentWrapElm.appendChild(node);\r
+ } else {\r
+ // Start a new wrapper for possible children\r
+ currentWrapElm = 0;\r
\r
- return -1;\r
- },\r
+ each(tinymce.grep(node.childNodes), process);\r
\r
- forceRoots : function(ed, e) {\r
- var t = this, ed = t.editor, b = ed.getBody(), d = ed.getDoc(), se = ed.selection, s = se.getSel(), r = se.getRng(), si = -2, ei, so, eo, tr, c = -0xFFFFFF;\r
- var nx, bl, bp, sp, le, nl = b.childNodes, i, n, eid;\r
+ // End the last wrapper\r
+ currentWrapElm = 0;\r
+ }\r
+ };\r
\r
- // Fix for bug #1863847\r
- //if (e && e.keyCode == 13)\r
- // return true;\r
+ // Process siblings from range\r
+ each(nodes, process);\r
+ });\r
\r
- // Wrap non blocks into blocks\r
- for (i = nl.length - 1; i >= 0; i--) {\r
- nx = nl[i];\r
+ // Cleanup\r
+ each(newWrappers, function(node) {\r
+ var childCount;\r
\r
- // Is text or non block element\r
- if (nx.nodeType == 3 || (!t.dom.isBlock(nx) && nx.nodeType != 8)) {\r
- if (!bl) {\r
- // Create new block but ignore whitespace\r
- if (nx.nodeType != 3 || /[^\s]/g.test(nx.nodeValue)) {\r
- // Store selection\r
- if (si == -2 && r) {\r
- if (!isIE) {\r
- // If selection is element then mark it\r
- if (r.startContainer.nodeType == 1 && (n = r.startContainer.childNodes[r.startOffset]) && n.nodeType == 1) {\r
- // Save the id of the selected element\r
- eid = n.getAttribute("id");\r
- n.setAttribute("id", "__mce");\r
- } else {\r
- // If element is inside body, might not be the case in contentEdiable mode\r
- if (ed.dom.getParent(r.startContainer, function(e) {return e === b;})) {\r
- so = r.startOffset;\r
- eo = r.endOffset;\r
- si = t.find(b, 0, r.startContainer);\r
- ei = t.find(b, 0, r.endContainer);\r
- }\r
- }\r
- } else {\r
- tr = d.body.createTextRange();\r
- tr.moveToElementText(b);\r
- tr.collapse(1);\r
- bp = tr.move('character', c) * -1;\r
+ function getChildCount(node) {\r
+ var count = 0;\r
\r
- tr = r.duplicate();\r
- tr.collapse(1);\r
- sp = tr.move('character', c) * -1;\r
+ each(node.childNodes, function(node) {\r
+ if (!isWhiteSpaceNode(node) && !isBookmarkNode(node))\r
+ count++;\r
+ });\r
\r
- tr = r.duplicate();\r
- tr.collapse(0);\r
- le = (tr.move('character', c) * -1) - sp;\r
+ return count;\r
+ };\r
\r
- si = sp - bp;\r
- ei = le;\r
- }\r
+ function mergeStyles(node) {\r
+ var child, clone;\r
+\r
+ each(node.childNodes, function(node) {\r
+ if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) {\r
+ child = node;\r
+ return FALSE; // break loop\r
}\r
+ });\r
\r
- bl = ed.dom.create(ed.settings.forced_root_block);\r
- bl.appendChild(nx.cloneNode(1));\r
- nx.parentNode.replaceChild(bl, nx);\r
+ // If child was found and of the same type as the current node\r
+ if (child && matchName(child, format)) {\r
+ clone = child.cloneNode(FALSE);\r
+ setElementFormat(clone);\r
+\r
+ dom.replace(clone, node, TRUE);\r
+ dom.remove(child, 1);\r
}\r
- } else {\r
- if (bl.hasChildNodes())\r
- bl.insertBefore(nx, bl.firstChild);\r
- else\r
- bl.appendChild(nx);\r
+\r
+ return clone || node;\r
+ };\r
+\r
+ childCount = getChildCount(node);\r
+\r
+ // Remove empty nodes\r
+ if (childCount === 0) {\r
+ dom.remove(node, 1);\r
+ return;\r
}\r
- } else\r
- bl = null; // Time to create new block\r
- }\r
\r
- // Restore selection\r
- if (si != -2) {\r
- if (!isIE) {\r
- bl = b.getElementsByTagName(ed.settings.element)[0];\r
- r = d.createRange();\r
+ if (format.inline || format.wrapper) {\r
+ // Merges the current node with it's children of similar type to reduce the number of elements\r
+ if (!format.exact && childCount === 1)\r
+ node = mergeStyles(node);\r
+\r
+ // Remove/merge children\r
+ each(formatList, function(format) {\r
+ // Merge all children of similar type will move styles from child to parent\r
+ // this: <span style="color:red"><b><span style="color:red; font-size:10px">text</span></b></span>\r
+ // will become: <span style="color:red"><b><span style="font-size:10px">text</span></b></span>\r
+ each(dom.select(format.inline, node), function(child) {\r
+ removeFormat(format, vars, child, format.exact ? child : null);\r
+ });\r
+ });\r
\r
- // Select last location or generated block\r
- if (si != -1)\r
- r.setStart(t.find(b, 1, si), so);\r
- else\r
- r.setStart(bl, 0);\r
+ // Remove child if direct parent is of same type\r
+ if (matchNode(node.parentNode, name, vars)) {\r
+ dom.remove(node, 1);\r
+ node = 0;\r
+ return TRUE;\r
+ }\r
\r
- // Select last location or generated block\r
- if (ei != -1)\r
- r.setEnd(t.find(b, 1, ei), eo);\r
- else\r
- r.setEnd(bl, 0);\r
+ // Look for parent with similar style format\r
+ if (format.merge_with_parents) {\r
+ dom.getParent(node.parentNode, function(parent) {\r
+ if (matchNode(parent, name, vars)) {\r
+ dom.remove(node, 1);\r
+ node = 0;\r
+ return TRUE;\r
+ }\r
+ });\r
+ }\r
\r
- if (s) {\r
- s.removeAllRanges();\r
- s.addRange(r);\r
+ // Merge next and previous siblings if they are similar <b>text</b><b>text</b> becomes <b>texttext</b>\r
+ if (node) {\r
+ node = mergeSiblings(getNonWhiteSpaceSibling(node), node);\r
+ node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE));\r
+ }\r
}\r
+ });\r
+ };\r
+\r
+ if (format) {\r
+ if (node) {\r
+ rng = dom.createRng();\r
+\r
+ rng.setStartBefore(node);\r
+ rng.setEndAfter(node);\r
+\r
+ applyRngStyle(expandRng(rng, formatList));\r
} else {\r
- try {\r
- r = s.createRange();\r
- r.moveToElementText(b);\r
- r.collapse(1);\r
- r.moveStart('character', si);\r
- r.moveEnd('character', ei);\r
- r.select();\r
- } catch (ex) {\r
- // Ignore\r
- }\r
- }\r
- } else if (!isIE && (n = ed.dom.get('__mce'))) {\r
- // Restore the id of the selected element\r
- if (eid)\r
- n.setAttribute('id', eid);\r
- else\r
- n.removeAttribute('id');\r
+ if (!selection.isCollapsed() || !format.inline) {\r
+ // Apply formatting to selection\r
+ bookmark = selection.getBookmark();\r
+ applyRngStyle(expandRng(selection.getRng(TRUE), formatList));\r
\r
- // Move caret before selected element\r
- r = d.createRange();\r
- r.setStartBefore(n);\r
- r.setEndBefore(n);\r
- se.setRng(r);\r
+ selection.moveToBookmark(bookmark);\r
+ selection.setRng(moveStart(selection.getRng(TRUE)));\r
+ ed.nodeChanged();\r
+ } else\r
+ performCaretAction('apply', name, vars);\r
+ }\r
}\r
- },\r
+ };\r
\r
- getParentBlock : function(n) {\r
- var d = this.dom;\r
+ function remove(name, vars, node) {\r
+ var formatList = get(name), format = formatList[0], bookmark, i, rng;\r
\r
- return d.getParent(n, d.isBlock);\r
- },\r
+ function moveStart(rng) {\r
+ var container = rng.startContainer,\r
+ offset = rng.startOffset,\r
+ walker, node, nodes, tmpNode;\r
\r
- insertPara : function(e) {\r
- var t = this, ed = t.editor, dom = ed.dom, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body;\r
- var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car;\r
+ // Convert text node into index if possible\r
+ if (container.nodeType == 3 && offset >= container.nodeValue.length - 1) {\r
+ container = container.parentNode;\r
+ offset = nodeIndex(container) + 1;\r
+ }\r
\r
- function isEmpty(n) {\r
- n = n.innerHTML;\r
- n = n.replace(/<(img|hr|table)/gi, '-'); // Keep these convert them to - chars\r
- n = n.replace(/<[^>]+>/g, ''); // Remove all tags\r
+ // Move startContainer/startOffset in to a suitable node\r
+ if (container.nodeType == 1) {\r
+ nodes = container.childNodes;\r
+ container = nodes[Math.min(offset, nodes.length - 1)];\r
+ walker = new TreeWalker(container);\r
\r
- return n.replace(/[ \t\r\n]+/g, '') == '';\r
+ // If offset is at end of the parent node walk to the next one\r
+ if (offset > nodes.length - 1)\r
+ walker.next();\r
+\r
+ for (node = walker.current(); node; node = walker.next()) {\r
+ if (node.nodeType == 3 && !isWhiteSpaceNode(node)) {\r
+ // IE has a "neat" feature where it moves the start node into the closest element\r
+ // we can avoid this by inserting an element before it and then remove it after we set the selection\r
+ tmpNode = dom.create('a', null, INVISIBLE_CHAR);\r
+ node.parentNode.insertBefore(tmpNode, node);\r
+\r
+ // Set selection and remove tmpNode\r
+ rng.setStart(node, 0);\r
+ selection.setRng(rng);\r
+ dom.remove(tmpNode);\r
+\r
+ return;\r
+ }\r
+ }\r
+ }\r
};\r
\r
- // If root blocks are forced then use Operas default behavior since it's really good\r
-// Removed due to bug: #1853816\r
-// if (se.forced_root_block && isOpera)\r
-// return true;\r
+ // Merges the styles for each node\r
+ function process(node) {\r
+ var children, i, l;\r
\r
- // Setup before range\r
- rb = d.createRange();\r
+ // Grab the children first since the nodelist might be changed\r
+ children = tinymce.grep(node.childNodes);\r
\r
- // If is before the first block element and in body, then move it into first block element\r
- rb.setStart(s.anchorNode, s.anchorOffset);\r
- rb.collapse(true);\r
+ // Process current node\r
+ for (i = 0, l = formatList.length; i < l; i++) {\r
+ if (removeFormat(formatList[i], vars, node, node))\r
+ break;\r
+ }\r
\r
- // Setup after range\r
- ra = d.createRange();\r
+ // Process the children\r
+ if (format.deep) {\r
+ for (i = 0, l = children.length; i < l; i++)\r
+ process(children[i]);\r
+ }\r
+ };\r
\r
- // If is before the first block element and in body, then move it into first block element\r
- ra.setStart(s.focusNode, s.focusOffset);\r
- ra.collapse(true);\r
+ function findFormatRoot(container) {\r
+ var formatRoot;\r
\r
- // Setup start/end points\r
- dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;\r
- sn = dir ? s.anchorNode : s.focusNode;\r
- so = dir ? s.anchorOffset : s.focusOffset;\r
- en = dir ? s.focusNode : s.anchorNode;\r
- eo = dir ? s.focusOffset : s.anchorOffset;\r
+ // Find format root\r
+ each(getParents(container.parentNode).reverse(), function(parent) {\r
+ var format;\r
\r
- // If selection is in empty table cell\r
- if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) {\r
- dom.remove(sn.firstChild); // Remove BR\r
+ // Find format root element\r
+ if (!formatRoot && parent.id != '_start' && parent.id != '_end') {\r
+ // Is the node matching the format we are looking for\r
+ format = matchNode(parent, name, vars);\r
+ if (format && format.split !== false)\r
+ formatRoot = parent;\r
+ }\r
+ });\r
\r
- // Create two new block elements\r
- ed.dom.add(sn, se.element, null, '<br />');\r
- aft = ed.dom.add(sn, se.element, null, '<br />');\r
+ return formatRoot;\r
+ };\r
\r
- // Move caret into the last one\r
- r = d.createRange();\r
- r.selectNodeContents(aft);\r
- r.collapse(1);\r
- ed.selection.setRng(r);\r
+ function wrapAndSplit(format_root, container, target, split) {\r
+ var parent, clone, lastClone, firstClone, i, formatRootParent;\r
\r
- return false;\r
- }\r
+ // Format root found then clone formats and split it\r
+ if (format_root) {\r
+ formatRootParent = format_root.parentNode;\r
\r
- // If the caret is in an invalid location in FF we need to move it into the first block\r
- if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) {\r
- sn = en = sn.firstChild;\r
- so = eo = 0;\r
- rb = d.createRange();\r
- rb.setStart(sn, 0);\r
- ra = d.createRange();\r
- ra.setStart(en, 0);\r
- }\r
+ for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) {\r
+ clone = parent.cloneNode(FALSE);\r
\r
- // Never use body as start or end node\r
- sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes\r
- sn = sn.nodeName == "BODY" ? sn.firstChild : sn;\r
- en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes\r
- en = en.nodeName == "BODY" ? en.firstChild : en;\r
+ for (i = 0; i < formatList.length; i++) {\r
+ if (removeFormat(formatList[i], vars, clone, clone)) {\r
+ clone = 0;\r
+ break;\r
+ }\r
+ }\r
\r
- // Get start and end blocks\r
- sb = t.getParentBlock(sn);\r
- eb = t.getParentBlock(en);\r
- bn = sb ? sb.nodeName : se.element; // Get block name to create\r
+ // Build wrapper node\r
+ if (clone) {\r
+ if (lastClone)\r
+ clone.appendChild(lastClone);\r
\r
- // Return inside list use default browser behavior\r
- if (t.dom.getParent(sb, function(n) { return /OL|UL|PRE/.test(n.nodeName); }))\r
- return true;\r
+ if (!firstClone)\r
+ firstClone = clone;\r
\r
- // If caption or absolute layers then always generate new blocks within\r
- if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(sb.style.position))) {\r
- bn = se.element;\r
- sb = null;\r
- }\r
+ lastClone = clone;\r
+ }\r
+ }\r
\r
- // If caption or absolute layers then always generate new blocks within\r
- if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(eb.style.position))) {\r
- bn = se.element;\r
- eb = null;\r
- }\r
+ // Never split block elements if the format is mixed\r
+ if (split && (!format.mixed || !isBlock(format_root)))\r
+ container = dom.split(format_root, container);\r
\r
- // Use P instead\r
- if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(sb.style.cssFloat))) {\r
- bn = se.element;\r
- sb = eb = null;\r
- }\r
+ // Wrap container in cloned formats\r
+ if (lastClone) {\r
+ target.parentNode.insertBefore(lastClone, target);\r
+ firstClone.appendChild(target);\r
+ }\r
+ }\r
\r
- // Setup new before and after blocks\r
- bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn);\r
- aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn);\r
+ return container;\r
+ };\r
\r
- // Remove id from after clone\r
- aft.removeAttribute('id');\r
+ function splitToFormatRoot(container) {\r
+ return wrapAndSplit(findFormatRoot(container), container, container, true);\r
+ };\r
\r
- // Is header and cursor is at the end, then force paragraph under\r
- if (/^(H[1-6])$/.test(bn) && sn.nodeValue && so == sn.nodeValue.length)\r
- aft = ed.dom.create(se.element);\r
+ function unwrap(start) {\r
+ var node = dom.get(start ? '_start' : '_end'),\r
+ out = node[start ? 'firstChild' : 'lastChild'];\r
\r
- // Find start chop node\r
- n = sc = sn;\r
- do {\r
- if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))\r
- break;\r
+ // If the end is placed within the start the result will be removed\r
+ // So this checks if the out node is a bookmark node if it is it\r
+ // checks for another more suitable node\r
+ if (isBookmarkNode(out))\r
+ out = out[start ? 'firstChild' : 'lastChild'];\r
\r
- sc = n;\r
- } while ((n = n.previousSibling ? n.previousSibling : n.parentNode));\r
+ dom.remove(node, true);\r
\r
- // Find end chop node\r
- n = ec = en;\r
- do {\r
- if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))\r
- break;\r
+ return out;\r
+ };\r
\r
- ec = n;\r
- } while ((n = n.nextSibling ? n.nextSibling : n.parentNode));\r
+ function removeRngStyle(rng) {\r
+ var startContainer, endContainer;\r
\r
- // Place first chop part into before block element\r
- if (sc.nodeName == bn)\r
- rb.setStart(sc, 0);\r
- else\r
- rb.setStartBefore(sc);\r
+ rng = expandRng(rng, formatList, TRUE);\r
\r
- rb.setEnd(sn, so);\r
- bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari\r
+ if (format.split) {\r
+ startContainer = getContainer(rng, TRUE);\r
+ endContainer = getContainer(rng);\r
\r
- // Place secnd chop part within new block element\r
- try {\r
- ra.setEndAfter(ec);\r
- } catch(ex) {\r
- //console.debug(s.focusNode, s.focusOffset);\r
- }\r
+ if (startContainer != endContainer) {\r
+ // Wrap start/end nodes in span element since these might be cloned/moved\r
+ startContainer = wrap(startContainer, 'span', {id : '_start', _mce_type : 'bookmark'});\r
+ endContainer = wrap(endContainer, 'span', {id : '_end', _mce_type : 'bookmark'});\r
\r
- ra.setStart(en, eo);\r
- aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari\r
+ // Split start/end\r
+ splitToFormatRoot(startContainer);\r
+ splitToFormatRoot(endContainer);\r
\r
- // Create range around everything\r
- r = d.createRange();\r
- if (!sc.previousSibling && sc.parentNode.nodeName == bn) {\r
- r.setStartBefore(sc.parentNode);\r
- } else {\r
- if (rb.startContainer.nodeName == bn && rb.startOffset == 0)\r
- r.setStartBefore(rb.startContainer);\r
- else\r
- r.setStart(rb.startContainer, rb.startOffset);\r
+ // Unwrap start/end to get real elements again\r
+ startContainer = unwrap(TRUE);\r
+ endContainer = unwrap();\r
+ } else\r
+ startContainer = endContainer = splitToFormatRoot(startContainer);\r
+\r
+ // Update range positions since they might have changed after the split operations\r
+ rng.startContainer = startContainer.parentNode;\r
+ rng.startOffset = nodeIndex(startContainer);\r
+ rng.endContainer = endContainer.parentNode;\r
+ rng.endOffset = nodeIndex(endContainer) + 1;\r
+ }\r
+\r
+ // Remove items between start/end\r
+ rangeUtils.walk(rng, function(nodes) {\r
+ each(nodes, function(node) {\r
+ process(node);\r
+ });\r
+ });\r
+ };\r
+\r
+ // Handle node\r
+ if (node) {\r
+ rng = dom.createRng();\r
+ rng.setStartBefore(node);\r
+ rng.setEndAfter(node);\r
+ removeRngStyle(rng);\r
+ return;\r
}\r
\r
- if (!ec.nextSibling && ec.parentNode.nodeName == bn)\r
- r.setEndAfter(ec.parentNode);\r
- else\r
- r.setEnd(ra.endContainer, ra.endOffset);\r
+ if (!selection.isCollapsed() || !format.inline) {\r
+ bookmark = selection.getBookmark();\r
+ removeRngStyle(selection.getRng(TRUE));\r
+ selection.moveToBookmark(bookmark);\r
\r
- // Delete and replace it with new block elements\r
- r.deleteContents();\r
+ // Check if start element still has formatting then we are at: "<b>text|</b>text" and need to move the start into the next text node\r
+ if (match(name, vars, selection.getStart())) {\r
+ moveStart(selection.getRng(true));\r
+ }\r
\r
- if (isOpera)\r
- ed.getWin().scrollTo(0, vp.y);\r
+ ed.nodeChanged();\r
+ } else\r
+ performCaretAction('remove', name, vars);\r
+ };\r
\r
- // Never wrap blocks in blocks\r
- if (bef.firstChild && bef.firstChild.nodeName == bn)\r
- bef.innerHTML = bef.firstChild.innerHTML;\r
+ function toggle(name, vars, node) {\r
+ if (match(name, vars, node))\r
+ remove(name, vars, node);\r
+ else\r
+ apply(name, vars, node);\r
+ };\r
\r
- if (aft.firstChild && aft.firstChild.nodeName == bn)\r
- aft.innerHTML = aft.firstChild.innerHTML;\r
+ function matchNode(node, name, vars, similar) {\r
+ var formatList = get(name), format, i, classes;\r
\r
- // Padd empty blocks\r
- if (isEmpty(bef))\r
- bef.innerHTML = '<br />';\r
+ function matchItems(node, format, item_name) {\r
+ var key, value, items = format[item_name], i;\r
\r
- function appendStyles(e, en) {\r
- var nl = [], nn, n, i;\r
+ // Check all items\r
+ if (items) {\r
+ // Non indexed object\r
+ if (items.length === undefined) {\r
+ for (key in items) {\r
+ if (items.hasOwnProperty(key)) {\r
+ if (item_name === 'attributes')\r
+ value = dom.getAttrib(node, key);\r
+ else\r
+ value = getStyle(node, key);\r
\r
- e.innerHTML = '';\r
+ if (similar && !value && !format.exact)\r
+ return;\r
\r
- // Make clones of style elements\r
- if (se.keep_styles) {\r
- n = en;\r
- do {\r
- // We only want style specific elements\r
- if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) {\r
- nn = n.cloneNode(false);\r
- dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique\r
- nl.push(nn);\r
+ if ((!similar || format.exact) && !isEq(value, replaceVars(items[key], vars)))\r
+ return;\r
+ }\r
}\r
- } while (n = n.parentNode);\r
+ } else {\r
+ // Only one match needed for indexed arrays\r
+ for (i = 0; i < items.length; i++) {\r
+ if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i]))\r
+ return format;\r
+ }\r
+ }\r
}\r
\r
- // Append style elements to aft\r
- if (nl.length > 0) {\r
- for (i = nl.length - 1, nn = e; i >= 0; i--)\r
- nn = nn.appendChild(nl[i]);\r
-\r
- // Padd most inner style element\r
- nl[0].innerHTML = isOpera ? ' ' : '<br />'; // Extra space for Opera so that the caret can move there\r
- return nl[0]; // Move caret to most inner element\r
- } else\r
- e.innerHTML = isOpera ? ' ' : '<br />'; // Extra space for Opera so that the caret can move there\r
+ return format;\r
};\r
\r
- // Fill empty afterblook with current style\r
- if (isEmpty(aft))\r
- car = appendStyles(aft, en);\r
+ if (formatList && node) {\r
+ // Check each format in list\r
+ for (i = 0; i < formatList.length; i++) {\r
+ format = formatList[i];\r
+\r
+ // Name name, attributes, styles and classes\r
+ if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) {\r
+ // Match classes\r
+ if (classes = format.classes) {\r
+ for (i = 0; i < classes.length; i++) {\r
+ if (!dom.hasClass(node, classes[i]))\r
+ return;\r
+ }\r
+ }\r
\r
- // Opera needs this one backwards for older versions\r
- if (isOpera && parseFloat(opera.version()) < 9.5) {\r
- r.insertNode(bef);\r
- r.insertNode(aft);\r
- } else {\r
- r.insertNode(aft);\r
- r.insertNode(bef);\r
+ return format;\r
+ }\r
+ }\r
}\r
+ };\r
\r
- // Normalize\r
- aft.normalize();\r
- bef.normalize();\r
+ function match(name, vars, node) {\r
+ var startNode, i;\r
\r
- function first(n) {\r
- return d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false).nextNode() || n;\r
+ function matchParents(node) {\r
+ // Find first node with similar format settings\r
+ node = dom.getParent(node, function(node) {\r
+ return !!matchNode(node, name, vars, true);\r
+ });\r
+\r
+ // Do an exact check on the similar format element\r
+ return matchNode(node, name, vars);\r
};\r
\r
- // Move cursor and scroll into view\r
- r = d.createRange();\r
- r.selectNodeContents(isGecko ? first(car || aft) : car || aft);\r
- r.collapse(1);\r
- s.removeAllRanges();\r
- s.addRange(r);\r
+ // Check specified node\r
+ if (node)\r
+ return matchParents(node);\r
\r
- // scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs\r
- y = ed.dom.getPos(aft).y;\r
- ch = aft.clientHeight;\r
+ // Check pending formats\r
+ if (selection.isCollapsed()) {\r
+ for (i = pendingFormats.apply.length - 1; i >= 0; i--) {\r
+ if (pendingFormats.apply[i].name == name)\r
+ return true;\r
+ }\r
\r
- // Is element within viewport\r
- if (y < vp.y || y + ch > vp.y + vp.h) {\r
- ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks\r
- //console.debug('SCROLL!', 'vp.y: ' + vp.y, 'y' + y, 'vp.h' + vp.h, 'clientHeight' + aft.clientHeight, 'yyy: ' + (y < vp.y ? y : y - vp.h + aft.clientHeight));\r
+ for (i = pendingFormats.remove.length - 1; i >= 0; i--) {\r
+ if (pendingFormats.remove[i].name == name)\r
+ return false;\r
+ }\r
+\r
+ return matchParents(selection.getNode());\r
+ }\r
+\r
+ // Check selected node\r
+ node = selection.getNode();\r
+ if (matchParents(node))\r
+ return TRUE;\r
+\r
+ // Check start node if it's different\r
+ startNode = selection.getStart();\r
+ if (startNode != node) {\r
+ if (matchParents(startNode))\r
+ return TRUE;\r
+ }\r
+\r
+ return FALSE;\r
+ };\r
+\r
+ function matchAll(names, vars) {\r
+ var startElement, matchedFormatNames = [], checkedMap = {}, i, ni, name;\r
+\r
+ // If the selection is collapsed then check pending formats\r
+ if (selection.isCollapsed()) {\r
+ for (ni = 0; ni < names.length; ni++) {\r
+ // If the name is to be removed, then stop it from being added\r
+ for (i = pendingFormats.remove.length - 1; i >= 0; i--) {\r
+ name = names[ni];\r
+\r
+ if (pendingFormats.remove[i].name == name) {\r
+ checkedMap[name] = true;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ // If the format is to be applied\r
+ for (i = pendingFormats.apply.length - 1; i >= 0; i--) {\r
+ for (ni = 0; ni < names.length; ni++) {\r
+ name = names[ni];\r
+\r
+ if (!checkedMap[name] && pendingFormats.apply[i].name == name) {\r
+ checkedMap[name] = true;\r
+ matchedFormatNames.push(name);\r
+ }\r
+ }\r
+ }\r
}\r
\r
- return false;\r
- },\r
+ // Check start of selection for formats\r
+ startElement = selection.getStart();\r
+ dom.getParent(startElement, function(node) {\r
+ var i, name;\r
\r
- backspaceDelete : function(e, bs) {\r
- var t = this, ed = t.editor, b = ed.getBody(), n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn;\r
+ for (i = 0; i < names.length; i++) {\r
+ name = names[i];\r
\r
- // The caret sometimes gets stuck in Gecko if you delete empty paragraphs\r
- // This workaround removes the element by hand and moves the caret to the previous element\r
- if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) {\r
- if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) {\r
- // Find previous block element\r
- n = sc;\r
- while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ;\r
+ if (!checkedMap[name] && matchNode(node, name, vars)) {\r
+ checkedMap[name] = true;\r
+ matchedFormatNames.push(name);\r
+ }\r
+ }\r
+ });\r
\r
- if (n) {\r
- if (sc != b.firstChild) {\r
- // Find last text node\r
- w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);\r
- while (tn = w.nextNode())\r
- n = tn;\r
+ return matchedFormatNames;\r
+ };\r
\r
- // Place caret at the end of last text node\r
- r = ed.getDoc().createRange();\r
- r.setStart(n, n.nodeValue ? n.nodeValue.length : 0);\r
- r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0);\r
- se.setRng(r);\r
+ function canApply(name) {\r
+ var formatList = get(name), startNode, parents, i, x, selector;\r
\r
- // Remove the target container\r
- ed.dom.remove(sc);\r
- }\r
+ if (formatList) {\r
+ startNode = selection.getStart();\r
+ parents = getParents(startNode);\r
\r
- return Event.cancel(e);\r
+ for (x = formatList.length - 1; x >= 0; x--) {\r
+ selector = formatList[x].selector;\r
+\r
+ // Format is not selector based, then always return TRUE\r
+ if (!selector)\r
+ return TRUE;\r
+\r
+ for (i = parents.length - 1; i >= 0; i--) {\r
+ if (dom.is(parents[i], selector))\r
+ return TRUE;\r
}\r
}\r
}\r
\r
- // Gecko generates BR elements here and there, we don't like those so lets remove them\r
- function handler(e) {\r
- var pr;\r
+ return FALSE;\r
+ };\r
+\r
+ // Expose to public\r
+ tinymce.extend(this, {\r
+ get : get,\r
+ register : register,\r
+ apply : apply,\r
+ remove : remove,\r
+ toggle : toggle,\r
+ match : match,\r
+ matchAll : matchAll,\r
+ matchNode : matchNode,\r
+ canApply : canApply\r
+ });\r
\r
- e = e.target;\r
+ // Private functions\r
\r
- // A new BR was created in a block element, remove it\r
- if (e && e.parentNode && e.nodeName == 'BR' && (n = t.getParentBlock(e))) {\r
- pr = e.previousSibling;\r
+ function matchName(node, format) {\r
+ // Check for inline match\r
+ if (isEq(node, format.inline))\r
+ return TRUE;\r
\r
- Event.remove(b, 'DOMNodeInserted', handler);\r
+ // Check for block match\r
+ if (isEq(node, format.block))\r
+ return TRUE;\r
\r
- // Is there whitespace at the end of the node before then we might need the pesky BR\r
- // to place the caret at a correct location see bug: #2013943\r
- if (pr && pr.nodeType == 3 && /\s+$/.test(pr.nodeValue))\r
- return;\r
+ // Check for selector match\r
+ if (format.selector)\r
+ return dom.is(node, format.selector);\r
+ };\r
\r
- // Only remove BR elements that got inserted in the middle of the text\r
- if (e.previousSibling || e.nextSibling)\r
- ed.dom.remove(e);\r
- }\r
- };\r
+ function isEq(str1, str2) {\r
+ str1 = str1 || '';\r
+ str2 = str2 || '';\r
\r
- // Listen for new nodes\r
- Event._add(b, 'DOMNodeInserted', handler);\r
+ str1 = '' + (str1.nodeName || str1);\r
+ str2 = '' + (str2.nodeName || str2);\r
\r
- // Remove listener\r
- window.setTimeout(function() {\r
- Event._remove(b, 'DOMNodeInserted', handler);\r
- }, 1);\r
- }\r
- });\r
-})();\r
+ return str1.toLowerCase() == str2.toLowerCase();\r
+ };\r
\r
-/* file:jscripts/tiny_mce/classes/ControlManager.js */\r
+ function getStyle(node, name) {\r
+ var styleVal = dom.getStyle(node, name);\r
\r
-(function() {\r
- // Shorten names\r
- var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend;\r
+ // Force the format to hex\r
+ if (name == 'color' || name == 'backgroundColor')\r
+ styleVal = dom.toHex(styleVal);\r
\r
- tinymce.create('tinymce.ControlManager', {\r
- ControlManager : function(ed, s) {\r
- var t = this, i;\r
+ // Opera will return bold as 700\r
+ if (name == 'fontWeight' && styleVal == 700)\r
+ styleVal = 'bold';\r
\r
- s = s || {};\r
- t.editor = ed;\r
- t.controls = {};\r
- t.onAdd = new tinymce.util.Dispatcher(t);\r
- t.onPostRender = new tinymce.util.Dispatcher(t);\r
- t.prefix = s.prefix || ed.id + '_';\r
- t._cls = {};\r
+ return '' + styleVal;\r
+ };\r
\r
- t.onPostRender.add(function() {\r
- each(t.controls, function(c) {\r
- c.postRender();\r
+ function replaceVars(value, vars) {\r
+ if (typeof(value) != "string")\r
+ value = value(vars);\r
+ else if (vars) {\r
+ value = value.replace(/%(\w+)/g, function(str, name) {\r
+ return vars[name] || str;\r
});\r
- });\r
- },\r
+ }\r
\r
- get : function(id) {\r
- return this.controls[this.prefix + id] || this.controls[id];\r
- },\r
+ return value;\r
+ };\r
\r
- setActive : function(id, s) {\r
- var c = null;\r
+ function isWhiteSpaceNode(node) {\r
+ return node && node.nodeType === 3 && /^([\s\r\n]+|)$/.test(node.nodeValue);\r
+ };\r
\r
- if (c = this.get(id))\r
- c.setActive(s);\r
+ function wrap(node, name, attrs) {\r
+ var wrapper = dom.create(name, attrs);\r
\r
- return c;\r
- },\r
+ node.parentNode.insertBefore(wrapper, node);\r
+ wrapper.appendChild(node);\r
\r
- setDisabled : function(id, s) {\r
- var c = null;\r
+ return wrapper;\r
+ };\r
\r
- if (c = this.get(id))\r
- c.setDisabled(s);\r
+ function expandRng(rng, format, remove) {\r
+ var startContainer = rng.startContainer,\r
+ startOffset = rng.startOffset,\r
+ endContainer = rng.endContainer,\r
+ endOffset = rng.endOffset, sibling, lastIdx;\r
\r
- return c;\r
- },\r
+ // This function walks up the tree if there is no siblings before/after the node\r
+ function findParentContainer(container, child_name, sibling_name, root) {\r
+ var parent, child;\r
\r
- add : function(c) {\r
- var t = this;\r
+ root = root || dom.getRoot();\r
\r
- if (c) {\r
- t.controls[c.id] = c;\r
- t.onAdd.dispatch(c, t);\r
- }\r
+ for (;;) {\r
+ // Check if we can move up are we at root level or body level\r
+ parent = container.parentNode;\r
\r
- return c;\r
- },\r
+ // Stop expanding on block elements or root depending on format\r
+ if (parent == root || (!format[0].block_expand && isBlock(parent)))\r
+ return container;\r
\r
- createControl : function(n) {\r
- var c, t = this, ed = t.editor;\r
+ for (sibling = parent[child_name]; sibling && sibling != container; sibling = sibling[sibling_name]) {\r
+ if (sibling.nodeType == 1 && !isBookmarkNode(sibling))\r
+ return container;\r
\r
- each(ed.plugins, function(p) {\r
- if (p.createControl) {\r
- c = p.createControl(n, t);\r
+ if (sibling.nodeType == 3 && !isWhiteSpaceNode(sibling))\r
+ return container;\r
+ }\r
\r
- if (c)\r
- return false;\r
+ container = container.parentNode;\r
}\r
- });\r
\r
- switch (n) {\r
- case "|":\r
- case "separator":\r
- return t.createSeparator();\r
+ return container;\r
+ };\r
+\r
+ // If index based start position then resolve it\r
+ if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) {\r
+ lastIdx = startContainer.childNodes.length - 1;\r
+ startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset];\r
+\r
+ if (startContainer.nodeType == 3)\r
+ startOffset = 0;\r
}\r
\r
- if (!c && ed.buttons && (c = ed.buttons[n]))\r
- return t.createButton(n, c);\r
+ // If index based end position then resolve it\r
+ if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) {\r
+ lastIdx = endContainer.childNodes.length - 1;\r
+ endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1];\r
\r
- return t.add(c);\r
- },\r
+ if (endContainer.nodeType == 3)\r
+ endOffset = endContainer.nodeValue.length;\r
+ }\r
\r
- createDropMenu : function(id, s, cc) {\r
- var t = this, ed = t.editor, c, bm, v, cls;\r
+ // Exclude bookmark nodes if possible\r
+ if (isBookmarkNode(startContainer.parentNode))\r
+ startContainer = startContainer.parentNode;\r
\r
- s = extend({\r
- 'class' : 'mceDropDown',\r
- constrain : ed.settings.constrain_menus\r
- }, s);\r
+ if (isBookmarkNode(startContainer))\r
+ startContainer = startContainer.nextSibling || startContainer;\r
\r
- s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin';\r
- if (v = ed.getParam('skin_variant'))\r
- s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1);\r
+ if (isBookmarkNode(endContainer.parentNode))\r
+ endContainer = endContainer.parentNode;\r
\r
- id = t.prefix + id;\r
- cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu;\r
- c = t.controls[id] = new cls(id, s);\r
- c.onAddItem.add(function(c, o) {\r
- var s = o.settings;\r
+ if (isBookmarkNode(endContainer))\r
+ endContainer = endContainer.previousSibling || endContainer;\r
\r
- s.title = ed.getLang(s.title, s.title);\r
+ // Move start/end point up the tree if the leaves are sharp and if we are in different containers\r
+ // Example * becomes !: !<p><b><i>*text</i><i>text*</i></b></p>!\r
+ // This will reduce the number of wrapper elements that needs to be created\r
+ // Move start point up the tree\r
+ if (format[0].inline || format[0].block_expand) {\r
+ startContainer = findParentContainer(startContainer, 'firstChild', 'nextSibling');\r
+ endContainer = findParentContainer(endContainer, 'lastChild', 'previousSibling');\r
+ }\r
\r
- if (!s.onclick) {\r
- s.onclick = function(v) {\r
- ed.execCommand(s.cmd, s.ui || false, s.value);\r
- };\r
- }\r
- });\r
+ // Expand start/end container to matching selector\r
+ if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) {\r
+ function findSelectorEndPoint(container, sibling_name) {\r
+ var parents, i, y;\r
\r
- ed.onRemove.add(function() {\r
- c.destroy();\r
- });\r
+ if (container.nodeType == 3 && container.nodeValue.length == 0 && container[sibling_name])\r
+ container = container[sibling_name];\r
\r
- // Fix for bug #1897785, #1898007\r
- if (tinymce.isIE) {\r
- c.onShowMenu.add(function() {\r
- bm = ed.selection.getBookmark(1);\r
- });\r
+ parents = getParents(container);\r
+ for (i = 0; i < parents.length; i++) {\r
+ for (y = 0; y < format.length; y++) {\r
+ if (dom.is(parents[i], format[y].selector))\r
+ return parents[i];\r
+ }\r
+ }\r
\r
- c.onHideMenu.add(function() {\r
- if (bm)\r
- ed.selection.moveToBookmark(bm);\r
- });\r
+ return container;\r
+ };\r
+\r
+ // Find new startContainer/endContainer if there is better one\r
+ startContainer = findSelectorEndPoint(startContainer, 'previousSibling');\r
+ endContainer = findSelectorEndPoint(endContainer, 'nextSibling');\r
}\r
\r
- return t.add(c);\r
- },\r
+ // Expand start/end container to matching block element or text node\r
+ if (format[0].block || format[0].selector) {\r
+ function findBlockEndPoint(container, sibling_name, sibling_name2) {\r
+ var node;\r
\r
- createListBox : function(id, s, cc) {\r
- var t = this, ed = t.editor, cmd, c, cls;\r
+ // Expand to block of similar type\r
+ if (!format[0].wrapper)\r
+ node = dom.getParent(container, format[0].block);\r
\r
- if (t.get(id))\r
- return null;\r
+ // Expand to first wrappable block element or any block element\r
+ if (!node)\r
+ node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, isBlock);\r
\r
- s.title = ed.translate(s.title);\r
- s.scope = s.scope || ed;\r
+ // Exclude inner lists from wrapping\r
+ if (node && format[0].wrapper)\r
+ node = getParents(node, 'ul,ol').reverse()[0] || node;\r
\r
- if (!s.onselect) {\r
- s.onselect = function(v) {\r
- ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ // Didn't find a block element look for first/last wrappable element\r
+ if (!node) {\r
+ node = container;\r
+\r
+ while (node[sibling_name] && !isBlock(node[sibling_name])) {\r
+ node = node[sibling_name];\r
+\r
+ // Break on BR but include it will be removed later on\r
+ // we can't remove it now since we need to check if it can be wrapped\r
+ if (isEq(node, 'br'))\r
+ break;\r
+ }\r
+ }\r
+\r
+ return node || container;\r
};\r
- }\r
\r
- s = extend({\r
- title : s.title,\r
- 'class' : 'mce_' + id,\r
- scope : s.scope,\r
- control_manager : t\r
- }, s);\r
+ // Find new startContainer/endContainer if there is better one\r
+ startContainer = findBlockEndPoint(startContainer, 'previousSibling');\r
+ endContainer = findBlockEndPoint(endContainer, 'nextSibling');\r
\r
- id = t.prefix + id;\r
+ // Non block element then try to expand up the leaf\r
+ if (format[0].block) {\r
+ if (!isBlock(startContainer))\r
+ startContainer = findParentContainer(startContainer, 'firstChild', 'nextSibling');\r
\r
- if (ed.settings.use_native_selects)\r
- c = new tinymce.ui.NativeListBox(id, s);\r
- else {\r
- cls = cc || t._cls.listbox || tinymce.ui.ListBox;\r
- c = new cls(id, s);\r
+ if (!isBlock(endContainer))\r
+ endContainer = findParentContainer(endContainer, 'lastChild', 'previousSibling');\r
+ }\r
}\r
\r
- t.controls[id] = c;\r
+ // Setup index for startContainer\r
+ if (startContainer.nodeType == 1) {\r
+ startOffset = nodeIndex(startContainer);\r
+ startContainer = startContainer.parentNode;\r
+ }\r
\r
- // Fix focus problem in Safari\r
- if (tinymce.isWebKit) {\r
- c.onPostRender.add(function(c, n) {\r
- // Store bookmark on mousedown\r
- Event.add(n, 'mousedown', function() {\r
- ed.bookmark = ed.selection.getBookmark('simple');\r
- });\r
+ // Setup index for endContainer\r
+ if (endContainer.nodeType == 1) {\r
+ endOffset = nodeIndex(endContainer) + 1;\r
+ endContainer = endContainer.parentNode;\r
+ }\r
\r
- // Restore on focus, since it might be lost\r
- Event.add(n, 'focus', function() {\r
- ed.selection.moveToBookmark(ed.bookmark);\r
- ed.bookmark = null;\r
- });\r
+ // Return new range like object\r
+ return {\r
+ startContainer : startContainer,\r
+ startOffset : startOffset,\r
+ endContainer : endContainer,\r
+ endOffset : endOffset\r
+ };\r
+ }\r
+\r
+ function removeFormat(format, vars, node, compare_node) {\r
+ var i, attrs, stylesModified;\r
+\r
+ // Check if node matches format\r
+ if (!matchName(node, format))\r
+ return FALSE;\r
+\r
+ // Should we compare with format attribs and styles\r
+ if (format.remove != 'all') {\r
+ // Remove styles\r
+ each(format.styles, function(value, name) {\r
+ value = replaceVars(value, vars);\r
+\r
+ // Indexed array\r
+ if (typeof(name) === 'number') {\r
+ name = value;\r
+ compare_node = 0;\r
+ }\r
+\r
+ if (!compare_node || isEq(getStyle(compare_node, name), value))\r
+ dom.setStyle(node, name, '');\r
+\r
+ stylesModified = 1;\r
});\r
- }\r
\r
- if (c.hideMenu)\r
- ed.onMouseDown.add(c.hideMenu, c);\r
+ // Remove style attribute if it's empty\r
+ if (stylesModified && dom.getAttrib(node, 'style') == '') {\r
+ node.removeAttribute('style');\r
+ node.removeAttribute('_mce_style');\r
+ }\r
\r
- return t.add(c);\r
- },\r
+ // Remove attributes\r
+ each(format.attributes, function(value, name) {\r
+ var valueOut;\r
\r
- createButton : function(id, s, cc) {\r
- var t = this, ed = t.editor, o, c, cls;\r
+ value = replaceVars(value, vars);\r
\r
- if (t.get(id))\r
- return null;\r
+ // Indexed array\r
+ if (typeof(name) === 'number') {\r
+ name = value;\r
+ compare_node = 0;\r
+ }\r
\r
- s.title = ed.translate(s.title);\r
- s.label = ed.translate(s.label);\r
- s.scope = s.scope || ed;\r
+ if (!compare_node || isEq(dom.getAttrib(compare_node, name), value)) {\r
+ // Keep internal classes\r
+ if (name == 'class') {\r
+ value = dom.getAttrib(node, name);\r
+ if (value) {\r
+ // Build new class value where everything is removed except the internal prefixed classes\r
+ valueOut = '';\r
+ each(value.split(/\s+/), function(cls) {\r
+ if (/mce\w+/.test(cls))\r
+ valueOut += (valueOut ? ' ' : '') + cls;\r
+ });\r
\r
- if (!s.onclick && !s.menu_button) {\r
- s.onclick = function() {\r
- ed.execCommand(s.cmd, s.ui || false, s.value);\r
- };\r
+ // We got some internal classes left\r
+ if (valueOut) {\r
+ dom.setAttrib(node, name, valueOut);\r
+ return;\r
+ }\r
+ }\r
+ }\r
+\r
+ // IE6 has a bug where the attribute doesn't get removed correctly\r
+ if (name == "class")\r
+ node.removeAttribute('className');\r
+\r
+ // Remove mce prefixed attributes\r
+ if (MCE_ATTR_RE.test(name))\r
+ node.removeAttribute('_mce_' + name);\r
+\r
+ node.removeAttribute(name);\r
+ }\r
+ });\r
+\r
+ // Remove classes\r
+ each(format.classes, function(value) {\r
+ value = replaceVars(value, vars);\r
+\r
+ if (!compare_node || dom.hasClass(compare_node, value))\r
+ dom.removeClass(node, value);\r
+ });\r
+\r
+ // Check for non internal attributes\r
+ attrs = dom.getAttribs(node);\r
+ for (i = 0; i < attrs.length; i++) {\r
+ if (attrs[i].nodeName.indexOf('_') !== 0)\r
+ return FALSE;\r
+ }\r
}\r
\r
- s = extend({\r
- title : s.title,\r
- 'class' : 'mce_' + id,\r
- unavailable_prefix : ed.getLang('unavailable', ''),\r
- scope : s.scope,\r
- control_manager : t\r
- }, s);\r
+ // Remove the inline child if it's empty for example <b> or <span>\r
+ if (format.remove != 'none') {\r
+ removeNode(node, format);\r
+ return TRUE;\r
+ }\r
+ };\r
+\r
+ function removeNode(node, format) {\r
+ var parentNode = node.parentNode, rootBlockElm;\r
+\r
+ if (format.block) {\r
+ if (!forcedRootBlock) {\r
+ function find(node, next, inc) {\r
+ node = getNonWhiteSpaceSibling(node, next, inc);\r
+\r
+ return !node || (node.nodeName == 'BR' || isBlock(node));\r
+ };\r
+\r
+ // Append BR elements if needed before we remove the block\r
+ if (isBlock(node) && !isBlock(parentNode)) {\r
+ if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1))\r
+ node.insertBefore(dom.create('br'), node.firstChild);\r
+\r
+ if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1))\r
+ node.appendChild(dom.create('br'));\r
+ }\r
+ } else {\r
+ // Wrap the block in a forcedRootBlock if we are at the root of document\r
+ if (parentNode == dom.getRoot()) {\r
+ if (!format.list_block || !isEq(node, format.list_block)) {\r
+ each(tinymce.grep(node.childNodes), function(node) {\r
+ if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) {\r
+ if (!rootBlockElm)\r
+ rootBlockElm = wrap(node, forcedRootBlock);\r
+ else\r
+ rootBlockElm.appendChild(node);\r
+ } else\r
+ rootBlockElm = 0;\r
+ });\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
- id = t.prefix + id;\r
+ // Never remove nodes that isn't the specified inline element if a selector is specified too\r
+ if (format.selector && format.inline && !isEq(format.inline, node))\r
+ return;\r
\r
- if (s.menu_button) {\r
- cls = cc || t._cls.menubutton || tinymce.ui.MenuButton;\r
- c = new cls(id, s);\r
- ed.onMouseDown.add(c.hideMenu, c);\r
- } else {\r
- cls = t._cls.button || tinymce.ui.Button;\r
- c = new cls(id, s);\r
- }\r
+ dom.remove(node, 1);\r
+ };\r
\r
- return t.add(c);\r
- },\r
+ function getNonWhiteSpaceSibling(node, next, inc) {\r
+ if (node) {\r
+ next = next ? 'nextSibling' : 'previousSibling';\r
\r
- createMenuButton : function(id, s, cc) {\r
- s = s || {};\r
- s.menu_button = 1;\r
+ for (node = inc ? node : node[next]; node; node = node[next]) {\r
+ if (node.nodeType == 1 || !isWhiteSpaceNode(node))\r
+ return node;\r
+ }\r
+ }\r
+ };\r
\r
- return this.createButton(id, s, cc);\r
- },\r
+ function isBookmarkNode(node) {\r
+ return node && node.nodeType == 1 && node.getAttribute('_mce_type') == 'bookmark';\r
+ };\r
\r
- createSplitButton : function(id, s, cc) {\r
- var t = this, ed = t.editor, cmd, c, cls;\r
+ function mergeSiblings(prev, next) {\r
+ var marker, sibling, tmpSibling;\r
\r
- if (t.get(id))\r
- return null;\r
+ function compareElements(node1, node2) {\r
+ // Not the same name\r
+ if (node1.nodeName != node2.nodeName)\r
+ return FALSE;\r
\r
- s.title = ed.translate(s.title);\r
- s.scope = s.scope || ed;\r
+ function getAttribs(node) {\r
+ var attribs = {};\r
\r
- if (!s.onclick) {\r
- s.onclick = function(v) {\r
- ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
- };\r
- }\r
+ each(dom.getAttribs(node), function(attr) {\r
+ var name = attr.nodeName.toLowerCase();\r
\r
- if (!s.onselect) {\r
- s.onselect = function(v) {\r
- ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ // Don't compare internal attributes or style\r
+ if (name.indexOf('_') !== 0 && name !== 'style')\r
+ attribs[name] = dom.getAttrib(node, name);\r
+ });\r
+\r
+ return attribs;\r
};\r
- }\r
\r
- s = extend({\r
- title : s.title,\r
- 'class' : 'mce_' + id,\r
- scope : s.scope,\r
- control_manager : t\r
- }, s);\r
+ function compareObjects(obj1, obj2) {\r
+ var value, name;\r
\r
- id = t.prefix + id;\r
- cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton;\r
- c = t.add(new cls(id, s));\r
- ed.onMouseDown.add(c.hideMenu, c);\r
+ for (name in obj1) {\r
+ // Obj1 has item obj2 doesn't have\r
+ if (obj1.hasOwnProperty(name)) {\r
+ value = obj2[name];\r
\r
- return c;\r
- },\r
+ // Obj2 doesn't have obj1 item\r
+ if (value === undefined)\r
+ return FALSE;\r
\r
- createColorSplitButton : function(id, s, cc) {\r
- var t = this, ed = t.editor, cmd, c, cls, bm;\r
+ // Obj2 item has a different value\r
+ if (obj1[name] != value)\r
+ return FALSE;\r
\r
- if (t.get(id))\r
- return null;\r
+ // Delete similar value\r
+ delete obj2[name];\r
+ }\r
+ }\r
\r
- s.title = ed.translate(s.title);\r
- s.scope = s.scope || ed;\r
+ // Check if obj 2 has something obj 1 doesn't have\r
+ for (name in obj2) {\r
+ // Obj2 has item obj1 doesn't have\r
+ if (obj2.hasOwnProperty(name))\r
+ return FALSE;\r
+ }\r
\r
- if (!s.onclick) {\r
- s.onclick = function(v) {\r
- ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ return TRUE;\r
};\r
- }\r
\r
- if (!s.onselect) {\r
- s.onselect = function(v) {\r
- ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
- };\r
- }\r
+ // Attribs are not the same\r
+ if (!compareObjects(getAttribs(node1), getAttribs(node2)))\r
+ return FALSE;\r
\r
- s = extend({\r
- title : s.title,\r
- 'class' : 'mce_' + id,\r
- 'menu_class' : ed.getParam('skin') + 'Skin',\r
- scope : s.scope,\r
- more_colors_title : ed.getLang('more_colors')\r
- }, s);\r
+ // Styles are not the same\r
+ if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style'))))\r
+ return FALSE;\r
\r
- id = t.prefix + id;\r
- cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton;\r
- c = new cls(id, s);\r
- ed.onMouseDown.add(c.hideMenu, c);\r
+ return TRUE;\r
+ };\r
\r
- // Remove the menu element when the editor is removed\r
- ed.onRemove.add(function() {\r
- c.destroy();\r
- });\r
+ // Check if next/prev exists and that they are elements\r
+ if (prev && next) {\r
+ function findElementSibling(node, sibling_name) {\r
+ for (sibling = node; sibling; sibling = sibling[sibling_name]) {\r
+ if (sibling.nodeType == 3 && !isWhiteSpaceNode(sibling))\r
+ return node;\r
\r
- // Fix for bug #1897785, #1898007\r
- if (tinymce.isIE) {\r
- c.onShowMenu.add(function() {\r
- bm = ed.selection.getBookmark(1);\r
- });\r
+ if (sibling.nodeType == 1 && !isBookmarkNode(sibling))\r
+ return sibling;\r
+ }\r
\r
- c.onHideMenu.add(function() {\r
- if (bm) {\r
- ed.selection.moveToBookmark(bm);\r
- bm = 0;\r
+ return node;\r
+ };\r
+\r
+ // If previous sibling is empty then jump over it\r
+ prev = findElementSibling(prev, 'previousSibling');\r
+ next = findElementSibling(next, 'nextSibling');\r
+\r
+ // Compare next and previous nodes\r
+ if (compareElements(prev, next)) {\r
+ // Append nodes between\r
+ for (sibling = prev.nextSibling; sibling && sibling != next;) {\r
+ tmpSibling = sibling;\r
+ sibling = sibling.nextSibling;\r
+ prev.appendChild(tmpSibling);\r
}\r
- });\r
- }\r
\r
- return t.add(c);\r
- },\r
+ // Remove next node\r
+ dom.remove(next);\r
\r
- createToolbar : function(id, s, cc) {\r
- var c, t = this, cls;\r
+ // Move children into prev node\r
+ each(tinymce.grep(next.childNodes), function(node) {\r
+ prev.appendChild(node);\r
+ });\r
\r
- id = t.prefix + id;\r
- cls = cc || t._cls.toolbar || tinymce.ui.Toolbar;\r
- c = new cls(id, s);\r
+ return prev;\r
+ }\r
+ }\r
\r
- if (t.get(id))\r
- return null;\r
+ return next;\r
+ };\r
\r
- return t.add(c);\r
- },\r
+ function isTextBlock(name) {\r
+ return /^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(name);\r
+ };\r
\r
- createSeparator : function(cc) {\r
- var cls = cc || this._cls.separator || tinymce.ui.Separator;\r
+ function getContainer(rng, start) {\r
+ var container, offset, lastIdx;\r
\r
- return new cls();\r
- },\r
+ container = rng[start ? 'startContainer' : 'endContainer'];\r
+ offset = rng[start ? 'startOffset' : 'endOffset'];\r
\r
- setControlType : function(n, c) {\r
- return this._cls[n.toLowerCase()] = c;\r
- },\r
+ if (container.nodeType == 1) {\r
+ lastIdx = container.childNodes.length - 1;\r
\r
- destroy : function() {\r
- each(this.controls, function(c) {\r
- c.destroy();\r
- });\r
+ if (!start && offset)\r
+ offset--;\r
\r
- this.controls = null;\r
- }\r
+ container = container.childNodes[offset > lastIdx ? lastIdx : offset];\r
+ }\r
\r
- });\r
-})();\r
+ return container;\r
+ };\r
\r
-/* file:jscripts/tiny_mce/classes/WindowManager.js */\r
+ function performCaretAction(type, name, vars) {\r
+ var i, currentPendingFormats = pendingFormats[type],\r
+ otherPendingFormats = pendingFormats[type == 'apply' ? 'remove' : 'apply'];\r
\r
-(function() {\r
- var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera;\r
+ function hasPending() {\r
+ return pendingFormats.apply.length || pendingFormats.remove.length;\r
+ };\r
\r
- tinymce.create('tinymce.WindowManager', {\r
- WindowManager : function(ed) {\r
- var t = this;\r
+ function resetPending() {\r
+ pendingFormats.apply = [];\r
+ pendingFormats.remove = [];\r
+ };\r
\r
- t.editor = ed;\r
- t.onOpen = new Dispatcher(t);\r
- t.onClose = new Dispatcher(t);\r
- t.params = {};\r
- t.features = {};\r
- },\r
+ function perform(caret_node) {\r
+ // Apply pending formats\r
+ each(pendingFormats.apply.reverse(), function(item) {\r
+ apply(item.name, item.vars, caret_node);\r
+ });\r
\r
- open : function(s, p) {\r
- var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u;\r
+ // Remove pending formats\r
+ each(pendingFormats.remove.reverse(), function(item) {\r
+ remove(item.name, item.vars, caret_node);\r
+ });\r
\r
- // Default some options\r
- s = s || {};\r
- p = p || {};\r
- sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window\r
- sh = isOpera ? vp.h : screen.height;\r
- s.name = s.name || 'mc_' + new Date().getTime();\r
- s.width = parseInt(s.width || 320);\r
- s.height = parseInt(s.height || 240);\r
- s.resizable = true;\r
- s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0);\r
- s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0);\r
- p.inline = false;\r
- p.mce_width = s.width;\r
- p.mce_height = s.height;\r
- p.mce_auto_focus = s.auto_focus;\r
+ dom.remove(caret_node, 1);\r
+ resetPending();\r
+ };\r
\r
- if (mo) {\r
- if (isIE) {\r
- s.center = true;\r
- s.help = false;\r
- s.dialogWidth = s.width + 'px';\r
- s.dialogHeight = s.height + 'px';\r
- s.scroll = s.scrollbars || false;\r
- }\r
+ // Check if it already exists then ignore it\r
+ for (i = currentPendingFormats.length - 1; i >= 0; i--) {\r
+ if (currentPendingFormats[i].name == name)\r
+ return;\r
}\r
\r
- // Build features string\r
- each(s, function(v, k) {\r
- if (tinymce.is(v, 'boolean'))\r
- v = v ? 'yes' : 'no';\r
+ currentPendingFormats.push({name : name, vars : vars});\r
\r
- if (!/^(name|url)$/.test(k)) {\r
- if (isIE && mo)\r
- f += (f ? ';' : '') + k + ':' + v;\r
- else\r
- f += (f ? ',' : '') + k + '=' + v;\r
- }\r
- });\r
+ // Check if it's in the other type, then remove it\r
+ for (i = otherPendingFormats.length - 1; i >= 0; i--) {\r
+ if (otherPendingFormats[i].name == name)\r
+ otherPendingFormats.splice(i, 1);\r
+ }\r
\r
- t.features = s;\r
- t.params = p;\r
- t.onOpen.dispatch(t, s, p);\r
+ // Pending apply or remove formats\r
+ if (hasPending()) {\r
+ ed.getDoc().execCommand('FontName', false, 'mceinline');\r
+ pendingFormats.lastRng = selection.getRng();\r
\r
- u = s.url || s.file;\r
- if (tinymce.relaxedDomain)\r
- u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain;\r
+ // IE will convert the current word\r
+ each(dom.select('font,span'), function(node) {\r
+ var bookmark;\r
\r
- u = tinymce._addVer(u);\r
+ if (isCaretNode(node)) {\r
+ bookmark = selection.getBookmark();\r
+ perform(node);\r
+ selection.moveToBookmark(bookmark);\r
+ ed.nodeChanged();\r
+ }\r
+ });\r
\r
- try {\r
- if (isIE && mo) {\r
- w = 1;\r
- window.showModalDialog(u, window, f);\r
- } else\r
- w = window.open(u, s.name, f);\r
- } catch (ex) {\r
- // Ignore\r
- }\r
+ // Only register listeners once if we need to\r
+ if (!pendingFormats.isListening && hasPending()) {\r
+ pendingFormats.isListening = true;\r
+\r
+ each('onKeyDown,onKeyUp,onKeyPress,onMouseUp'.split(','), function(event) {\r
+ ed[event].addToTop(function(ed, e) {\r
+ // Do we have pending formats and is the selection moved has moved\r
+ if (hasPending() && !tinymce.dom.RangeUtils.compareRanges(pendingFormats.lastRng, selection.getRng())) {\r
+ each(dom.select('font,span'), function(node) {\r
+ var textNode, rng;\r
+\r
+ // Look for marker\r
+ if (isCaretNode(node)) {\r
+ textNode = node.firstChild;\r
+\r
+ if (textNode) {\r
+ perform(node);\r
+\r
+ rng = dom.createRng();\r
+ rng.setStart(textNode, textNode.nodeValue.length);\r
+ rng.setEnd(textNode, textNode.nodeValue.length);\r
+ selection.setRng(rng);\r
+ ed.nodeChanged();\r
+ } else\r
+ dom.remove(node);\r
+ }\r
+ });\r
\r
- if (!w)\r
- alert(t.editor.getLang('popup_blocked'));\r
- },\r
+ // Always unbind and clear pending styles on keyup\r
+ if (e.type == 'keyup' || e.type == 'mouseup')\r
+ resetPending();\r
+ }\r
+ });\r
+ });\r
+ }\r
+ }\r
+ };\r
+ };\r
+})(tinymce);\r
\r
- close : function(w) {\r
- w.close();\r
- this.onClose.dispatch(this);\r
- },\r
+tinymce.onAddEditor.add(function(tinymce, ed) {\r
+ var filters, fontSizes, dom, settings = ed.settings;\r
\r
- createInstance : function(cl, a, b, c, d, e) {\r
- var f = tinymce.resolve(cl);\r
+ if (settings.inline_styles) {\r
+ fontSizes = tinymce.explode(settings.font_size_style_values);\r
\r
- return new f(a, b, c, d, e);\r
- },\r
+ function replaceWithSpan(node, styles) {\r
+ tinymce.each(styles, function(value, name) {\r
+ if (value)\r
+ dom.setStyle(node, name, value);\r
+ });\r
\r
- confirm : function(t, cb, s, w) {\r
- w = w || window;\r
+ dom.rename(node, 'span');\r
+ };\r
\r
- cb.call(s || this, w.confirm(this._decode(this.editor.getLang(t, t))));\r
- },\r
+ filters = {\r
+ font : function(dom, node) {\r
+ replaceWithSpan(node, {\r
+ backgroundColor : node.style.backgroundColor,\r
+ color : node.color,\r
+ fontFamily : node.face,\r
+ fontSize : fontSizes[parseInt(node.size) - 1]\r
+ });\r
+ },\r
\r
- alert : function(tx, cb, s, w) {\r
- var t = this;\r
+ u : function(dom, node) {\r
+ replaceWithSpan(node, {\r
+ textDecoration : 'underline'\r
+ });\r
+ },\r
\r
- w = w || window;\r
- w.alert(t._decode(t.editor.getLang(tx, tx)));\r
+ strike : function(dom, node) {\r
+ replaceWithSpan(node, {\r
+ textDecoration : 'line-through'\r
+ });\r
+ }\r
+ };\r
\r
- if (cb)\r
- cb.call(s || t);\r
- },\r
+ function convert(editor, params) {\r
+ dom = editor.dom;\r
\r
- // Internal functions\r
+ if (settings.convert_fonts_to_spans) {\r
+ tinymce.each(dom.select('font,u,strike', params.node), function(node) {\r
+ filters[node.nodeName.toLowerCase()](ed.dom, node);\r
+ });\r
+ }\r
+ };\r
\r
- _decode : function(s) {\r
- return tinymce.DOM.decode(s).replace(/\\n/g, '\n');\r
- }\r
+ ed.onPreProcess.add(convert);\r
\r
+ ed.onInit.add(function() {\r
+ ed.selection.onSetContent.add(convert);\r
});\r
-}());
\ No newline at end of file
+ }\r
+});\r
+\r
/**\r
- * $Id: editable_selects.js 867 2008-06-09 20:33:40Z spocke $\r
+ * editable_selects.js\r
*\r
- * Makes select boxes editable.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
var TinyMCE_EditableSelects = {\r
/**\r
- * $Id: form_utils.js 673 2008-03-06 13:26:20Z spocke $\r
+ * form_utils.js\r
*\r
- * Various form utilitiy functions.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));\r
var h = "";\r
\r
h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';\r
- h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"></span></a>';\r
+ h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"> </span></a>';\r
\r
return h;\r
}\r
\r
html = "";\r
html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';\r
- html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"></span></a>';\r
+ html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"> </span></a>';\r
\r
return html;\r
}\r
function getSelectValue(form_obj, field_name) {\r
var elm = form_obj.elements[field_name];\r
\r
- if (elm == null || elm.options == null)\r
+ if (elm == null || elm.options == null || elm.selectedIndex === -1)\r
return "";\r
\r
return elm.options[elm.selectedIndex].value;\r
/**\r
- * $Id: mctabs.js 758 2008-03-30 13:53:29Z spocke $\r
+ * mctabs.js\r
*\r
- * Moxiecode DHTML Tabs script.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
function MCTabs() {\r
/**\r
- * $Id: validate.js 758 2008-03-30 13:53:29Z spocke $\r
+ * validate.js\r
*\r
- * Various form validation methods.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
*\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
*/\r
\r
/**\r