diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/EntryEditor.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/EntryEditor.jsp index 5050b299e2..08f20518d0 100644 --- a/app/src/main/webapp/WEB-INF/jsps/editor/EntryEditor.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/editor/EntryEditor.jsp @@ -130,7 +130,7 @@ <%-- Rich text editor (Xinha, see: http://trac.xinha.org/wiki/NewbieGuide) --%> - + "); - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/b5.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/b5.js deleted file mode 100644 index 3550f6e008..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/b5.js +++ /dev/null @@ -1,29 +0,0 @@ -// I18N constants -- UTF-8 -// by Dave Lo -- dlo@interactivetools.com -{ - "Bold": "粗體", - "Italic": "斜體", - "Underline": "底線", - "Strikethrough": "刪除線", - "Subscript": "下標", - "Superscript": "上標", - "Justify Left": "位置靠左", - "Justify Center": "位置居中", - "Justify Right": "位置靠右", - "Justify Full": "位置左右平等", - "Ordered List": "順序清單", - "Bulleted List": "無序清單", - "Decrease Indent": "減小行前空白", - "Increase Indent": "加寬行前空白", - "Font Color": "文字顏色", - "Background Color": "背景顏色", - "Horizontal Rule": "水平線", - "Insert Web Link": "插入連結", - "Insert/Modify Image": "插入圖形", - "Insert Table": "插入表格", - "Toggle HTML Source": "切換HTML原始碼", - "Enlarge Editor": "放大", - "About this editor": "關於 Xinha", - "Help using editor": "說明", - "Current style": "字體例子" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ch.js deleted file mode 100644 index 25ac840aeb..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ch.js +++ /dev/null @@ -1,56 +0,0 @@ -// I18N constants - -// LANG: "ch", ENCODING: UTF-8 -// Samuel Stone, http://stonemicro.com/ - -{ - "Bold": "粗體", - "Italic": "斜體", - "Underline": "底線", - "Strikethrough": "刪線", - "Subscript": "下標", - "Superscript": "上標", - "Justify Left": "靠左", - "Justify Center": "居中", - "Justify Right": "靠右", - "Justify Full": "整齊", - "Ordered List": "順序清單", - "Bulleted List": "無序清單", - "Decrease Indent": "伸排", - "Increase Indent": "縮排", - "Font Color": "文字顏色", - "Background Color": "背景顏色", - "Horizontal Rule": "水平線", - "Insert Web Link": "插入連結", - "Insert/Modify Image": "插入圖像", - "Insert Table": "插入表格", - "Toggle HTML Source": "切換HTML原始碼", - "Enlarge Editor": "伸出編輯系統", - "About this editor": "關於 Xinha", - "Help using editor": "說明", - "Current style": "字體例子", - "Undoes your last action": "回原", - "Redoes your last action": "重来", - "Cut selection": "剪制选项", - "Copy selection": "复制选项", - "Paste from clipboard": "贴上", - "Direction left to right": "从左到右", - "Direction right to left": "从右到左", - "OK": "好", - "Cancel": "取消", - "Path": "途徑", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "你在用純字編輯方式. 用 [<>] 按鈕轉回 所見即所得 編輯方式.", - "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "整頁式在Internet Explorer 上常出問題, 因為這是 Internet Explorer 的無名問題,我們無法解決。你可能看見一些垃圾,或遇到其他問題。我們已警告了你. 如果要轉到 正頁式 請按 好.", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.", - "Cancel": "取消", - "Insert/Modify Link": "插入/改寫連結", - "New window (_blank)": "新窗户(_blank)", - "None (use implicit)": "無(use implicit)", - "Other": "其他", - "Same frame (_self)": "本匡 (_self)", - "Target:": "目標匡:", - "Title (tooltip):": "主題 (tooltip):", - "Top frame (_top)": "上匡 (_top)", - "URL:": "網址:", - "You must enter the URL where this link points to": "你必須輸入你要连结的網址" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/cz.js deleted file mode 100644 index 8cc74241f8..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/cz.js +++ /dev/null @@ -1,50 +0,0 @@ -// I18N constants - -// LANG: "cz", ENCODING: UTF-8 -// Author: Jiri Löw, - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "Tučně", - "Italic": "Kurzíva", - "Underline": "Podtržení", - "Strikethrough": "Přeškrtnutí", - "Subscript": "Dolní index", - "Superscript": "Horní index", - "Justify Left": "Zarovnat doleva", - "Justify Center": "Na střed", - "Justify Right": "Zarovnat doprava", - "Justify Full": "Zarovnat do stran", - "Ordered List": "Seznam", - "Bulleted List": "Odrážky", - "Decrease Indent": "Předsadit", - "Increase Indent": "Odsadit", - "Font Color": "Barva písma", - "Background Color": "Barva pozadí", - "Horizontal Rule": "Vodorovná čára", - "Insert Web Link": "Vložit odkaz", - "Insert/Modify Image": "Vložit obrázek", - "Insert Table": "Vložit tabulku", - "Toggle HTML Source": "Přepnout HTML", - "Enlarge Editor": "Nové okno editoru", - "About this editor": "O této aplikaci", - "Help using editor": "Nápověda aplikace", - "Current style": "Zvolený styl", - "Undoes your last action": "Vrátí poslední akci", - "Redoes your last action": "Opakuje poslední akci", - "Cut selection": "Vyjmout", - "Copy selection": "Kopírovat", - "Paste from clipboard": "Vložit", - "OK": "OK", - "Cancel": "Zrušit", - "Path": "Cesta", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jste v TEXTOVÉM REŽIMU. Použijte tlačítko [<>] pro přepnutí do WYSIWIG." -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/da.js deleted file mode 100644 index 755ebe0a95..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/da.js +++ /dev/null @@ -1,172 +0,0 @@ -// I18N constants -// LANG: "da", ENCODING: UTF-8 -// Author: rene, -// Niels Baggesen, , 0.95, 2009-08-15 -{ - "Bold": "Fed", - "Italic": "Kursiv", - "Underline": "Understregning", - "Strikethrough": "Gennemstregning", - "Subscript": "Sænket skrift", - "Superscript": "Hævet skrift", - "Justify Left": "Venstrejuster", - "Justify Center": "Centrer", - "Justify Right": "Højrejuster", - "Justify Full": "Lige margener", - "Ordered List": "Ordnet liste", - "Bulleted List": "Punktliste", - "Decrease Indent": "Formindsk indrykning", - "Increase Indent": "Forøg indrykning", - "Font Color": "Skriftfarve", - "Background Color": "Baggrundsfarve", - "Horizontal Rule": "Vandret streg", - "Insert Web Link": "Indsæt hyperlink", - "Insert/Modify Image": "Indsæt/udskift billede", - "Insert Table": "Indsæt tabel", - "Toggle HTML Source": "HTML visning", - "Enlarge Editor": "Vis editor i popup", - "About this editor": "Om Xinha", - "Help using editor": "Hjælp", - "Current style": "Anvendt stil", - "Undoes your last action": "Fortryd sidste ændring", - "Redoes your last action": "Gentag sidste ændring", - "Cut selection": "Klip", - "Copy selection": "Kopier", - "Paste from clipboard": "Indsæt", - "Direction left to right": "Tekst venstre mod højre", - "Direction right to left": "Tekst højre mod venstre", - "Remove formatting": "Fjern formatering", - "Select all": "Vælg alt", - "Print document": "Udskriv dokument", - "Clear MSOffice tags": "MSOffice filter", - "Clear Inline Font Specifications": "Fjern skrift valg", - "Would you like to clear font typefaces?": "Vil du fjern skriftsnit valg", - "Would you like to clear font sizes?": "Vil du fjerne skriftstørrelse valg", - "Would you like to clear font colours?": "Vil du fjerne skriftfarve valg", - "Split Block": "Del blok", - "Toggle Borders": "Tabelkanter til/fra", - "Save as": "Gem som", - "Insert/Overwrite": "Indsæt/Overskriv", - "— format —": "— Format —", - "Heading 1": "Overskrift 1", - "Heading 2": "Overskrift 2", - "Heading 3": "Overskrift 3", - "Heading 4": "Overskrift 4", - "Heading 5": "Overskrift 5", - "Heading 6": "Overskrift 6", - "Normal": "Normal", - "Address": "Adresse", - "Formatted": "Formateret", - - //dialogs - "OK": "OK", - "Cancel": "Fortryd", - "Path": "STi", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Du er i TEXT mode. Brug [<>] knappen til at skifte til visuel editering.", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Indsæt-knappen virker ikke i Mozilla-baserede browsere. Brug Ctrl-V på tastaturet for at indsætte.", - - "You need to select some text before create a link": "Du skal markere noget tekst for at indsætte et hyperlink", - "Your Document is not well formed. Check JavaScript console for details.": "Dit dokument er ikke syntaktisk korrekt. Åbn Javascript konsollen for at få flere detaljer.", - - "Alignment:": "Justering:", - "Not set": "Ubestemt", - "Left": "Venstre", - "Right": "Højre", - "Texttop": "Teksttop", - "Absmiddle": "Centreret", - "Baseline": "Grundlinje", - "Absbottom": "Bund", - "Bottom": "Tekstbund", - "Middle": "Midt", - "Top": "Top", - - "Layout": "Layout", - "Spacing": "Afstand", - "Horizontal:": "vandret:", - "Horizontal padding": "Vandret fyld", - "Vertical:": "lodret:", - "Vertical padding": "Lodret fyld", - "Border thickness:": "Kantbredde:", - "Leave empty for no border": "Tom hvis ingen kant", - - //Insert Link - "Insert/Modify Link": "Indsæt/rediger hyperlink", - "None (use implicit)": "ingen (implicit)", - "New window (_blank)": "Nyt vindue (_blank)", - "Same frame (_self)": "Samme ramme (_self)", - "Top frame (_top)": "Topramme (_top)", - "Other": "Andet", - "Target:": "Placering:", - "Title (tooltip):": "Titel (Tooltip):", - "URL:": "URL:", - "You must enter the URL where this link points to": "Du skal angive en mål-URL for linket", - - // Insert Table - "Insert Table": "Indsæt tabel", - "Rows:": "Rækker:", - "Number of rows": "Antal rækker", - "Cols:": "Søjler:", - "Number of columns": "Antal søjler", - "Width:": "Bredde:", - "Width of the table": "Tabelbredde", - "Percent": "Procent", - "Pixels": "Pixel", - "Em": "Geviert (Em)", - "Width unit": "Breddeenhed", - "Fixed width columns": "Fast-bredde søjler", - "Positioning of this table": "Placering af tabel", - "Cell spacing:": "Celleafstand:", - "Space between adjacent cells": "Afstand mellem celler", - "Cell padding:": "Cellefyld:", - "Space between content and border in cell": "Luft mellem indhold og kanter", - "You must enter a number of rows": "Du skal skrive antallet af rækker", - "You must enter a number of columns": "Du skal skrive antallet af søjler", - - // Insert Image - "Insert Image": "Indsæt billede", - "Image URL:": "Billede URL:", - "Enter the image URL here": "Angiv billedets URL", - "Preview": "Smugkig", - "Preview the image in a new window": "Smugkig af billedet i et nyt vindue", - "Alternate text:": "Alternativ text:", - "For browsers that don't support images": "for browsere der ikke understøtter billeder", - "Positioning of this image": "Placering af billedet", - "Image Preview:": "Billede smugkig:", - "You must enter the URL": "Du skal angive en URL", - - // de-buttons have letters matching danish :-) - "button_bold": "de/bold.gif", - "button_italic": "de/italic.gif", - "button_underline": "de/underline.gif", - - // Editor Help - "Keyboard shortcuts": "Tastaturgenveje", - "The editor provides the following key combinations:": "Editoren kender følgende kombinationer:", - "new paragraph": "Nyt afsnit", - "insert linebreak": "Indsæt linjeskift", - "Set format to paragraph": "Formater afsnit", - "Clean content pasted from Word": "Rens indhold kopieret fra Word", - "Headings": "Overskrift 1 til 6", - "Close": "Luk", - - // Loading messages - "Loading in progress. Please wait!": "Editoren hentes ind. Vent venligst.", - "Loading plugin $plugin" : "Plugin $plugin hentes", - "Register plugin $plugin" : "Plugin $plugin registreres", - "Constructing object": "Objekt registreres", - "Generate Xinha framework": "Xinha Framework genereres", - "Init editor size":"Størrelsen beregnes", - "Create Toolbar": "Opretter værktøjslinje", - "Create Statusbar" : "Opretter statuslinje", - "Register right panel" : "Registrerer højre panel", - "Register left panel" : "Registrerer venstre panel", - "Register bottom panel" : "Registrerer nederste panel", - "Register top panel" : "Registrerer øverste panel", - "Finishing" : "Afslutter", - - // ColorPicker - "Click a color..." : "Vælg farve", - "Sample" : "Eksempel", - "Web Safe: " : "Web Safe: ", - "Color: " : "Farve: " -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/de.js deleted file mode 100644 index 98e5ec25ef..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/de.js +++ /dev/null @@ -1,171 +0,0 @@ -// I18N constants -// LANG: "de", ENCODING: UTF-8 -{ - "Bold": "Fett", - "Italic": "Kursiv", - "Underline": "Unterstrichen", - "Strikethrough": "Durchgestrichen", - "Subscript": "Tiefgestellt", - "Superscript": "Hochgestellt", - "Justify Left": "Linksbündig", - "Justify Center": "Zentriert", - "Justify Right": "Rechtsbündig", - "Justify Full": "Blocksatz", - "Ordered List": "Nummerierte Liste", - "Bulleted List": "Aufzählungsliste", - "Decrease Indent": "Einzug verkleinern", - "Increase Indent": "Einzug vergrößern", - "Font Color": "Schriftfarbe", - "Background Color": "Hindergrundfarbe", - "Horizontal Rule": "Horizontale Linie", - "Insert Web Link": "Hyperlink einfügen", - "Insert/Modify Image": "Bild einfügen/verändern", - "Insert Table": "Tabelle einfügen", - "Toggle HTML Source": "HTML Quelltext ein/ausschalten", - "Enlarge Editor": "Editor vergrößern", - "About this editor": "Über diesen Editor", - "Help using editor": "Hilfe", - "Current style": "Derzeitiger Stil", - "Undoes your last action": "Rückgängig", - "Redoes your last action": "Wiederholen", - "Cut selection": "Ausschneiden", - "Copy selection": "Kopieren", - "Paste from clipboard": "Einfügen aus der Zwischenablage", - "Direction left to right": "Textrichtung von Links nach Rechts", - "Direction right to left": "Textrichtung von Rechts nach Links", - "Remove formatting": "Formatierung entfernen", - "Select all": "Alles markieren", - "Print document": "Dokument ausdrucken", - "Clear MSOffice tags": "MSOffice filter", - "Clear Inline Font Specifications": "Zeichensatz Formatierungen entfernen", - "Would you like to clear font typefaces?": "Wollen Sie Zeichensatztypen entfernen", - "Would you like to clear font sizes?": "Wollen Sie Zeichensatzgrößen entfernen", - "Would you like to clear font colours?": "Wollen sie Zeichensatzfarben entfernen", - "Split Block": "Block teilen", - "Toggle Borders": "Tabellenränder ein/ausblenden", - "Save as": "speichern unter", - "Insert/Overwrite": "Einfügen/Überschreiben", - "— format —": "— Format —", - "Heading 1": "Überschrift 1", - "Heading 2": "Überschrift 2", - "Heading 3": "Überschrift 3", - "Heading 4": "Überschrift 4", - "Heading 5": "Überschrift 5", - "Heading 6": "Überschrift 6", - "Normal": "Normal (Absatz)", - "Address": "Adresse", - "Formatted": "Formatiert", - - //dialogs - "OK": "OK", - "Cancel": "Abbrechen", - "Path": "Pfad", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Sie sind im Text-Modus. Benutzen Sie den [<>] Button, um in den visuellen Modus (WYSIWIG) zu gelangen.", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Aus Sicherheitsgründen dürfen Skripte normalerweise nicht auf Ausschneiden/Kopieren/Einfügen zugreifen. Benutzen Sie bitte die entsprechenden Tastatur-Kommandos (Strg + x/c/v).", - - "You need to select some text before create a link": "Sie müssen einen Text markieren, um einen Link zu erstellen", - "Your Document is not well formed. Check JavaScript console for details.": "Ihr Dokument ist in keinem sauberen Format. Benutzen Sie die Javascript Console für weitere Informationen.", - - "Alignment:": "Ausrichtung:", - "Not set": "nicht eingestellt", - "Left": "links", - "Right": "rechts", - "Texttop": "oben bündig", - "Absmiddle": "mittig", - "Baseline": "Grundlinie", - "Absbottom": "unten bündig", - "Bottom": "unten", - "Middle": "zentriert", - "Top": "oben", - - "Layout": "Layout", - "Spacing": "Abstand", - "Horizontal:": "horizontal:", - "Horizontal padding": "horizontaler Inhaltsabstand", - "Vertical:": "vertikal:", - "Vertical padding": "vertikaler Inhaltsabstand", - "Border thickness:": "Randstärke:", - "Leave empty for no border": "leer lassen für keinen Rand", - - //Insert Link - "Insert/Modify Link": "Verknüpfung hinzufügen/ändern", - "None (use implicit)": "k.A. (implizit)", - "New window (_blank)": "Neues Fenster (_blank)", - "Same frame (_self)": "Selber Rahmen (_self)", - "Top frame (_top)": "Oberster Rahmen (_top)", - "Other": "Anderes", - "Target:": "Ziel:", - "Title (tooltip):": "Titel (Tooltip):", - "URL:": "URL:", - "You must enter the URL where this link points to": "Sie müssen eine Ziel-URL angeben für die Verknüpfung angeben", - - // Insert Table - "Insert Table": "Tabelle einfügen", - "Rows:": "Zeilen:", - "Number of rows": "Zeilenanzahl", - "Cols:": "Spalten:", - "Number of columns": "Spaltenanzahl", - "Width:": "Breite:", - "Width of the table": "Tabellenbreite", - "Percent": "Prozent", - "Pixels": "Pixel", - "Em": "Geviert", - "Width unit": "Größeneinheit", - "Fixed width columns": "Spalten mit fester Breite", - "Positioning of this table": "Positionierung der Tabelle", - "Cell spacing:": "Zellenabstand:", - "Space between adjacent cells": "Raum zwischen angrenzenden Zellen", - "Cell padding:": "Innenabstand:", - "Space between content and border in cell": "Raum zwischen Inhalt und Rand der Zelle", - "You must enter a number of rows": "Bitte geben Sie die Anzahl der Zeilen an", - "You must enter a number of columns": "Bitte geben Sie die Anzahl der Spalten an", - - // Insert Image - "Insert Image": "Bild einfügen", - "Image URL:": "Bild URL:", - "Enter the image URL here": "Bitte geben sie hier die Bild URL ein", - "Preview": "Voransicht", - "Preview the image in a new window": "Voransicht des Bildes in einem neuen Fenster", - "Alternate text:": "Alternativer Text:", - "For browsers that don't support images": "für Browser, die keine Bilder unterstützen", - "Positioning of this image": "Positionierung dieses Bildes", - "Image Preview:": "Bild Voransicht:", - "You must enter the URL": "Bitte geben Sie die URL ein", - -/* - "button_bold": "de/bold.gif", - "button_italic": "de/italic.gif", - "button_underline": "de/underline.gif", -*/ - - // Editor Help - "Keyboard shortcuts": "Tastaturkürzel", - "The editor provides the following key combinations:": "Der Editor unterstützt die folgenden kombinationen:", - "new paragraph": "Neuer Absatz(Paragraph)", - "insert linebreak": "Harter Umbruch einfügen", - "Set format to paragraph": "Setze Formatierung auf Absatz", - "Clean content pasted from Word": "Von Word eingefügter Text bereinigen", - "Headings": "Überschrift Typ 1 bis 6", - "Close": "Schließen", - - // Loading messages - "Loading in progress. Please wait!": "Editor wird geladen. Bitte warten !", - "Loading plugin $plugin" : "Plugin $plugin wird geladen", - "Register plugin $plugin" : "Plugin $plugin wird registriert", - "Constructing object": "Objekt wird generiert", - "Generate Xinha framework": "Xinha Framework wird generiert", - "Init editor size":"Größe wird berechnet", - "Create Toolbar": "Werkzeugleiste wird generiert", - "Create Statusbar" : "Statusleiste wird generiert", - "Register right panel" : "Rechtes Panel wird generiert", - "Register left panel" : "Linkes Panel wird generiert", - "Register bottom panel" : "Unteres Panel wird generiert", - "Register top panel" : "Oberes Panel wird generiert", - "Finishing" : "Laden wird abgeschlossen", - - // ColorPicker - "Click a color..." : "Farbe wählen", - "Sample" : "Beispiel", - "Web Safe: " : "Web Safe: ", - "Color: " : "Farbe: " -}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ee.js deleted file mode 100644 index 2534271e29..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ee.js +++ /dev/null @@ -1,50 +0,0 @@ -// I18N constants - -// LANG: "ee", ENCODING: UTF-8 -// Author: Martin Raie, - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "Paks", - "Italic": "Kursiiv", - "Underline": "Allakriipsutatud", - "Strikethrough": "Läbikriipsutatud", - "Subscript": "Allindeks", - "Superscript": "Ülaindeks", - "Justify Left": "Joonda vasakule", - "Justify Center": "Joonda keskele", - "Justify Right": "Joonda paremale", - "Justify Full": "Rööpjoonda", - "Ordered List": "Nummerdus", - "Bulleted List": "Täpploend", - "Decrease Indent": "Vähenda taanet", - "Increase Indent": "Suurenda taanet", - "Font Color": "Fondi värv", - "Background Color": "Tausta värv", - "Horizontal Rule": "Horisontaaljoon", - "Insert Web Link": "Lisa viit", - "Insert/Modify Image": "Lisa pilt", - "Insert Table": "Lisa tabel", - "Toggle HTML Source": "HTML/tavaline vaade", - "Enlarge Editor": "Suurenda toimeti aken", - "About this editor": "Teave toimeti kohta", - "Help using editor": "Spikker", - "Current style": "Kirjastiil", - "Undoes your last action": "Võta tagasi", - "Redoes your last action": "Tee uuesti", - "Cut selection": "Lõika", - "Copy selection": "Kopeeri", - "Paste from clipboard": "Kleebi", - "OK": "OK", - "Cancel": "Loobu", - "Path": "Path", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Sa oled tekstireziimis. Kasuta nuppu [<>] lülitamaks tagasi WYSIWIG reziimi." -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/el.js deleted file mode 100644 index bc3df96f8a..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/el.js +++ /dev/null @@ -1,55 +0,0 @@ -// I18N constants - -// LANG: "el", ENCODING: UTF-8 -// Author: Dimitris Glezos, dimitris@glezos.com - -{ - "Bold": "ΞˆΞ½Ο„ΞΏΞ½Ξ±", - "Italic": "Πλάγια", - "Underline": "Ξ�πογραμμισμένα", - "Strikethrough": "Διαγραμμένα", - "Subscript": "ΔΡίκτης", - "Superscript": "ΔΡίκτης", - "Justify Left": "Στοίχιση ΑριστΡρά", - "Justify Center": "Στοίχιση ΞšΞ­Ξ½Ο„ΟΞΏ", - "Justify Right": "Στοίχιση ΔΡξιά", - "Justify Full": "Ξ Ξ»Ξ�ρης Στοίχιση", - "Ordered List": "Αρίθμηση", - "Bulleted List": "ΞšΞΏΟ…ΞΊΞΊΞ―Ξ΄Ξ΅Ο‚", - "Decrease Indent": "ΞœΞ΅Ξ―Ο‰ΟƒΞ· ΕσοχΞ�Ο‚", - "Increase Indent": "Αύξηση ΕσοχΞ�Ο‚", - "Font Color": "Χρώμα ΓραμματοσΡιράς", - "Background Color": "Χρώμα Ξ¦ΟŒΞ½Ο„ΞΏΟ…", - "Horizontal Rule": "ΞŸΟΞΉΞΆΟŒΞ½Ο„ΞΉΞ± ΓραμμΞ�", - "Insert Web Link": "ΕισαγωγΞ� Συνδέσμου", - "Insert/Modify Image": "ΕισαγωγΞ�/Ξ�ροποποίηση Ξ•ΞΉΞΊΟŒΞ½Ξ±Ο‚", - "Insert Table": "ΕισαγωγΞ� Ξ Ξ―Ξ½Ξ±ΞΊΞ±", - "Toggle HTML Source": "ΕναλλαγΞ� σΡ/Ξ±Ο€ΟŒ HTML", - "Enlarge Editor": "ΞœΞ΅Ξ³Ξ­Ξ½ΞΈΟ…Ξ½ΟƒΞ· ΡπΡξΡργαστΞ�", - "About this editor": "ΠληροφορίΡς", - "Help using editor": "Ξ’ΞΏΞ�θΡια", - "Current style": "Παρών στυλ", - "Undoes your last action": "ΑναίρΡση τΡλΡυταίας ΡνέργΡιας", - "Redoes your last action": "Επαναφορά Ξ±Ο€ΟŒ αναίρΡση", - "Cut selection": "ΑποκοπΞ�", - "Copy selection": "ΑντιγραφΞ�", - "Paste from clipboard": "Ξ•Ο€ΞΉΞΊΟŒΞ»Ξ»Ξ·ΟƒΞ·", - "Direction left to right": "ΞšΞ±Ο„Ξ΅ΟΞΈΟ…Ξ½ΟƒΞ· αριστΡρά προς δΡξιά", - "Direction right to left": "ΞšΞ±Ο„Ξ΅ΟΞΈΟ…Ξ½ΟƒΞ· Ξ±Ο€ΟŒ δΡξιά προς τα αριστΡρά", - "OK": "OK", - "Cancel": "Ακύρωση", - "Path": "ΔιαδρομΞ�", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "ΕίστΡ σΡ TEXT MODE. ΧρησιμοποιΞ�στΡ το κουμπί [<>] Ξ³ΞΉΞ± Ξ½Ξ± ΡπανέρθΡτΡ στο WYSIWIG.", - "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "Ξ— κατάσταση πλΞ�ρης ΞΏΞΈΟŒΞ½Ξ·Ο‚ έχΡι προβλΞ�ματα ΞΌΞ΅ τον Internet Explorer, Ξ»ΟŒΞ³Ο‰ σφαλμάτων στον ίδιο τον browser. Αν το σύστημα σας Ρίναι Windows 9x μπορΡί ΞΊΞ±ΞΉ Ξ½Ξ± χρΡιαστΡίτΡ reboot. Αν ΡίστΡ σίγουροι, πατΞ�στΡ ΟΚ.", - "Cancel": "Ακύρωση", - "Insert/Modify Link": "ΕισαγωγΞ�/Ξ�ροποποίηση σύνδΡσμου", - "New window (_blank)": "Νέο παράθυρο (_blank)", - "None (use implicit)": "Κανένα (χρΞ�ση Ξ±Ο€ΟŒΞ»Ο…Ο„ΞΏΟ…)", - "Other": "Αλλο", - "Same frame (_self)": "Ίδιο frame (_self)", - "Target:": "Target:", - "Title (tooltip):": "Ξ�ίτλος (tooltip):", - "Top frame (_top)": "Πάνω frame (_top)", - "URL:": "URL:", - "You must enter the URL where this link points to": "ΠρέπΡι Ξ½Ξ± ΡισάγΡτΡ το URL που οδηγΡί Ξ±Ο…Ο„ΟŒΟ‚ ΞΏ σύνδΡσμος" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/es.js deleted file mode 100644 index d66dac0ef2..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/es.js +++ /dev/null @@ -1,167 +0,0 @@ -// I18N constants -// LANG: "de", ENCODING: UTF-8 -{ - "Bold": "Negrita", - "Italic": "Cursiva", - "Underline": "Subrayado", - "Strikethrough": "Tachado", - "Subscript": "Subíndice", - "Superscript": "Superíndice", - "Justify Left": "Alinear a la izquierda", - "Justify Center": "Alinear al centro", - "Justify Right": "Alinear a la derecha", - "Justify Full": "Justificar", - "Ordered List": "Lista numerada", - "Bulleted List": "Lista no numerada", - "Decrease Indent": "Reducir sangría", - "Increase Indent": "Aumentar sangría", - "Font Color": "Color de la fuente", - "Background Color": "Color de fondo", - "Horizontal Rule": "Regla horizontal", - "Insert Web Link": "Insertar enlace web", - "Insert/Modify Image": "Insertar/modificar imagen", - "Insert Table": "Insertar una tabla", - "Toggle HTML Source": "Ver HTML", - "Enlarge Editor": "Editor a pantalla completa", - "About this editor": "Sobre este Editor", - "Help using editor": "Ayuda", - "Current style": "Estilo actual", - "Undoes your last action": "Deshacer", - "Redoes your last action": "Rehacer", - "Cut selection": "Cortar", - "Copy selection": "Copiar", - "Paste from clipboard": "Pegar desde el portapapeles", - "Direction left to right": "Dirección de izquierda a derecha", - "Direction right to left": "Dirección de derecha a izquierda", - "Remove formatting": "Borrar formato", - "Select all": "Seleccionar todo", - "Print document": "Imprimir documento", - "Clear MSOffice tags": "Borrar etiquetas de MSOffice", - "Clear Inline Font Specifications": "Borrar las etiquetas de fuente", - "Would you like to clear font typefaces?": "¿Desea eliminar las definiciaones de tipo de fuente?", - "Would you like to clear font sizes?": "¿Desea eliminar las definiciones de tamaño de fuente?", - "Would you like to clear font colours?": "¿Desea eliminar las definiciones de color de fuente?", - "Split Block": "Dividir el bloque", - "Toggle Borders": "Añadir/Quitar bordes", - "Save as": "Guardar como", - "Insert/Overwrite": "Insertar/Sobreescribir", - "— format —": "— formato —", - "— font —": "— fuente —", - "— size —": "— tamaño —", - "Heading 1": "Cabecera 1", - "Heading 2": "Cabecera 2", - "Heading 3": "Cabecera 3", - "Heading 4": "Cabecera 4", - "Heading 5": "Cabecera 5", - "Heading 6": "Cabecera 6", - "Normal": "Normal", - "Address": "Dirección", - "Formatted": "Formateado", - - //dialogs - "OK": "Aceptar", - "Cancel": "Cancelar", - "Path": "Ruta", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Se encuentra en MODO TEXTO. Use el botón [<>] para cambiar de nuevo al modo WYSIWYG", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "El botón de pegar no funciona en los navegadores de Mozilla por motivos de seguridad. Presione CTRL-V en su teclado para pegarlo directamente", - - "You need to select some text before create a link": "Necesita seleccionar algún texto antes de crear un link", - "Your Document is not well formed. Check JavaScript console for details.": "Su documento no está bien formado. Compruebe la consola de JavaScript para obtener más detalles", - - "Alignment:": "Alineación:", - "Not set": "No definido", - "Left": "Izquierda", - "Right": "Derecha", - "Texttop": "Texto Superior", - "Absmiddle": "Medio Absoluto", - "Baseline": "Línea base", - "Absbottom": "Inferior absoluto", - "Bottom": "Inferior", - "Middle": "Medio", - "Top": "Superior", - - "Layout": "Distribución", - "Spacing": "Espaciado", - "Horizontal:": "horizontal:", - "Horizontal padding": "Relleno horizontal", - "Vertical:": "Vertical:", - "Vertical padding": "Relleno Vertical", - "Border thickness:": "Tamaño del borde:", - "Leave empty for no border": "Vacío si no desea ningún borde", - - //Insert Link - "Insert/Modify Link": "Insertar/Modificar un enlace", - "None (use implicit)": "Vacío ( usar implícito )", - "New window (_blank)": "Nueva ventana (_blank)", - "Same frame (_self)": "Mismo marco (_self)", - "Top frame (_top)": "Marco superior (_top)", - "Other": "Otro", - "Target:": "Destino:", - "Title (tooltip):": "Título (Tooltip):", - "URL:": "URL:", - "You must enter the URL where this link points to": "Debe introducir la URL a donde apunta este enlace", - - // Insert Table - "Insert Table": "Añadir una tabla", - "Rows:": "Filas:", - "Number of rows": "Número de filas", - "Cols:": "Columnas:", - "Number of columns": "Número de columnas", - "Width:": "Ancho:", - "Width of the table": "Ancho de la tabla", - "Percent": "Porcentaje", - "Pixels": "Pixels", - "Em": "Em", - "Width unit": "Unidad de anchura", - "Fixed width columns": "Columnas de ancho fijo", - "Positioning of this table": "Posición de esta tabla", - "Cell spacing:": "Espaciado entre celdas:", - "Space between adjacent cells": "Espaciado entre celdas adyacentes", - "Cell padding:": "Relleno de celdas:", - "Space between content and border in cell": "Escapcio entre el contenido y el borde de la celda", - "You must enter a number of rows": "Debe introducir un número de filas", - "You must enter a number of columns": "Debe introducir un número de columnas", - - // Insert Image - "Insert Image": "Insertar una imagen", - "Image URL:": "Imagen URL:", - "Enter the image URL here": "", - "Preview": "Previsualizar", - "Preview the image in a new window": "Previsualizar en una nueva ventana", - "Alternate text:": "Texto alternativo:", - "For browsers that don't support images": "Para navegadores que no soportan imágenes", - "Positioning of this image": "Posición de la imagen", - "Image Preview:": "Previsualización de la imagen:", - "You must enter the URL": "Debe introducir la URL", - - // Editor Help - "Keyboard shortcuts": "Atajos de teclado", - "The editor provides the following key combinations:": "El editor proporciona las siguientes combinaciones:", - "new paragraph": "Nuevo parrafo", - "insert linebreak": "Insertar salto de línea", - "Set format to paragraph": "EStablecer el formato a parrafo", - "Clean content pasted from Word": "Limpiar el contenido pegado desde Word", - "Headings": "Cabeceras", - "Close": "Cerrar", - - // Loading messages - "Loading in progress. Please wait!": "Carga en proceso. Por favor espere.", - "Loading plugin $plugin" : "Cargando el plugin $plugin", - "Register plugin $plugin" : "Registro de plugin $plugin", - "Constructing object": "Construyendo objeto", - "Generate Xinha framework": "Generar Xinha framework", - "Init editor size":"Iniciar el tamaño del editor", - "Create Toolbar": "Crear barra de herramientas", - "Create Statusbar" : "Crear barra de estado", - "Register right panel" : "Registrar panel derecho", - "Register left panel" : "Registrar panel izquierdo", - "Register bottom panel" : "Registar panel inferior", - "Register top panel" : "Registar panel superior", - "Finishing" : "Finalizando", - - // ColorPicker - "Click a color..." : "Seleccione un color...", - "Sample" : "Muestra", - "Web Safe: " : "Color web: ", - "Color: " : "Color: " -} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/eu.js deleted file mode 100644 index 62c13f4068..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/eu.js +++ /dev/null @@ -1,169 +0,0 @@ -// I18N constants -// LANG: "eu", ENCODING: UTF-8 -{ - "Bold": "Lodia", - "Italic": "Etzana", - "Underline": "Azpimarratua", - "Strikethrough": "Marratua", - "Subscript": "Azpindizea", - "Superscript": "Goi-indizea", - "Justify Left": "Ezkerretara lerrokatu", - "Justify Center": "Zentratu", - "Justify Right": "Eskuinetara lerrokatu", - "Justify Full": "Justifikatu", - "Ordered List": "Zerrenda ordenatua", - "Bulleted List": "Zerrenda ez ordenatua", - "Decrease Indent": "Koska handitu", - "Increase Indent": "Koska txikitu", - "Font Color": "Testu-kolorea", - "Background Color": "Atzeko kolorea", - "Horizontal Rule": "Marra horizontala", - "Insert Web Link": "Lotura txertatu", - "Insert/Modify Image": "Irudia txertatu", - "Insert Table": "Taula txertatu", - "Toggle HTML Source": "Ikusi dokumentua HTML-n", - "Enlarge Editor": "Editorea handitu", - "About this editor": "Editoreari buruz...", - "Help using editor": "Laguntza", - "Current style": "Uneko estiloa", - "Undoes your last action": "Desegin", - "Redoes your last action": "Berregin", - "Cut selection": "Ebaki hautaketa", - "Copy selection": "Kopiatu hautaketa", - "Paste from clipboard": "Itsatsi arbelean dagoena", - "Direction left to right": "Ezkerretik eskuinetarako norabidea", - "Direction right to left": "Eskuinetik ezkerretarako norabidea", - "Remove formatting": "Formatoa kendu", - "Select all": "Dena aukeratu", - "Print document": "Dokumentua inprimatu", - "Clear MSOffice tags": "MSOffice etiketak ezabatu", - "Clear Inline Font Specifications": "Ezabatu testuaren ezaugarriak", - "Would you like to clear font typefaces?": "Letra-tipoak ezabatu nahi al dituzu?", - "Would you like to clear font sizes?": "Letra-tipoen neurriak ezabatu nahi al dituzu?", - "Would you like to clear font colours?": "Letra-tipoen koloreak ezabatu nahi al dituzu?", - "Split Block": "Blokea zatitu", - "Toggle Borders": "Ertzak trukatu", - "Save as": "Gorde honela:", - "Insert/Overwrite": "Txertatu/Gainidatzi", - "— format —": "— Formatua —", - "Heading 1": "Goiburua 1", - "Heading 2": "Goiburua 2", - "Heading 3": "Goiburua 3", - "Heading 4": "Goiburua 4", - "Heading 5": "Goiburua 5", - "Heading 6": "Goiburua 6", - "Normal": "Normala", - "Address": "Helbidea", - "Formatted": "Formateatua", - - //dialogs - "OK": "Ados", - "Cancel": "Utzi", - "Path": "Bidea", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "TESTU eran ari zara. Erabil ezazu [<>] botoia WYSIWIG erara itzultzeko.", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Itsatsi botoia ez dabil Mozillan oinarritutako nabigatzaileetan (arrazoi teknikoengatik). Sacatu CTRL-V zure teklatuan, zuzenean itsasteko.", - - "You need to select some text before create a link": "Testu-atal bat aukeratu behar duzu lehendabizi, lotura bat sortzeko", - "Your Document is not well formed. Check JavaScript console for details.": "Zure dokumentuak ez du formatu zuzena. Begira ezazu JavaScript kontsola xehetasunetarako.", - - "Alignment:": "Lerrokatzea:", - "Not set": "Ez gaitua", - "Left": "Ezkerretara", - "Right": "Eskuinetara", - "Texttop": "Irudiaren goialdean", - "Absmiddle": "Irudiaren erdian", - "Baseline": "Irudiaren oinean", - "Absbottom": "Irudiaren behekaldean", - "Bottom": "Behean", - "Middle": "Erdian", - "Top": "Goian", - - "Layout": "Diseinua", - "Spacing": "Tartea", - "Horizontal:": "Horizontala:", - "Horizontal padding": "Betegarri horizontala", - "Vertical:": "Bertikala:", - "Vertical padding": "Betegarri bertikala", - "Border thickness:": "Ertzaren lodiera:", - "Leave empty for no border": "Uztazu hutsik ertzik ez sortzeko", - - //Insert Link - "Insert/Modify Link": "Lotura txertatu/aldatu", - "None (use implicit)": "Bat ere ez (implizituki erabili)", - "New window (_blank)": "Lehio berrian (_blank)", - "Same frame (_self)": "Frame berean (_self)", - "Top frame (_top)": "Goiko frame-an (_top)", - "Other": "Beste bat", - "Target:": "Helburua:", - "Title (tooltip):": "Izenburua (argibidea):", - "URL:": "URL-a:", - "You must enter the URL where this link points to": "Loturaren helburu den URL-a idatzi behar duzu", - - // Insert Table - "Insert Table": "Taula txertatu", - "Rows:": "Lerroak:", - "Number of rows": "Lerro-kopurua", - "Cols:": "Zutabeak:", - "Number of columns": "Zutabe-kopurua", - "Width:": "Zabalera:", - "Width of the table": "Taularen zabalera", - "Percent": "Portzentaia", - "Pixels": "Pixelak", - "Em": "Em", - "Width unit": "Zabalera-unitatea", - "Fixed width columns": "Zabalera finkodun zutabeak", - "Positioning of this table": "Taula honen kokapena", - "Cell spacing:": "Gelaxka-tartea:", - "Space between adjacent cells": "Gelaxka auzokideen arteko tartea", - "Cell padding:": "Gelaxkaren betegarria:", - "Space between content and border in cell": "Gelaxkaren edukia eta ertzaren arteko tartea", - "You must enter a number of rows": "Lerro-kopurua idatzi behar duzu", - "You must enter a number of columns": "Zutabe-kopurua idatzi behar duzu", - - // Insert Image - "Insert Image": "Irudia txertatu", - "Image URL:": "Irudiaren URL-a:", - "Enter the image URL here": "Idatz ezazu irudiaren URL-a hemen", - "Preview": "Aurrebista", - "Preview the image in a new window": "Aurreikusi irudia beste lehio batean", - "Alternate text:": "Testu alternatiboa:", - "For browsers that don't support images": "Irudirik onartzen ez duten nabigatzaileentzat", - "Positioning of this image": "Irudiaren kokapena", - "Image Preview:": "Irudiaren aurrebista:", - "You must enter the URL": "URL-a idatzi behar duzu", - - "button_bold": "de/bold.gif", - "button_italic": "de/italic.gif", - "button_underline": "de/underline.gif", - - // Editor Help - "Keyboard shortcuts": "Laster-teklak", - "The editor provides the following key combinations:": "Editoreak ondorengo tekla-konbinazioak eskaintzen ditu:", - "new paragraph": "Paragrafo berria", - "insert linebreak": "Lerro-jauzia txertatu", - "Set format to paragraph": "Formatua ezarri paragrafoari", - "Clean content pasted from Word": "Word-etik itsatsitako edukia ezabatu", - "Headings": "Goiburuak", - "Close": "Itxi", - - // Loading messages - "Loading in progress. Please wait!": "Kargatzen. Itxaron mesedez", - "Loading plugin $plugin" : "$plugin plugina kargatzen", - "Register plugin $plugin" : "$plugin plugina erregistratu", - "Constructing object": "Objektua eraikitzen", - "Generate Xinha framework": "Xinha Framework sortzen", - "Init editor size":"Editorearen hasierako neurria", - "Create Toolbar": "Tresna-barra sortu", - "Create Statusbar" : "Egoera-barra sortu", - "Register right panel" : "Eskuin-panela erregistratu", - "Register left panel" : "Ezker-panela erregistratu", - "Register bottom panel" : "Beheko panela erregistratu", - "Register top panel" : "Goiko panela erregistratu", - "Finishing" : "Bukatzen", - - // ColorPicker - "Click a color..." : "Kolore bat aukeratu...", - "Sample" : "Lagina", - "Web Safe: " : "Web Safe: ", - "Color: " : "Kolorea: " -}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/fa.js deleted file mode 100644 index 59d0fcac21..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/fa.js +++ /dev/null @@ -1,169 +0,0 @@ -// I18N constants -// LANG: "fa", ENCODING: UTF-8 -{ - "Bold": "ضخیم", - "Italic": "مورب", - "Underline": "زیر خط", - "Strikethrough": "رو خط", - "Subscript": "زیروند", - "Superscript": "بالاوند", - "Justify Left": "تراز از چپ", - "Justify Center": "تراز در وسط", - "Justify Right": "تراز در راست", - "Justify Full": "تراز از چپ و راست", - "Ordered List": "فهرست مرتب", - "Bulleted List": "فهرست گلوله ای", - "Decrease Indent": "کاهش سر خط", - "Increase Indent": "افزایش سر خط", - "Font Color": "رنگ فلم", - "Background Color": "رنگ پس زمینه", - "Horizontal Rule": "خط افقی", - "Insert Web Link": "افزودن لینک وب", - "Insert/Modify Image": "افزودن یا ویرایش تصویر", - "Insert Table": "افزودن جدول", - "Toggle HTML Source": "مشاهده یا عدم مشاهده متن در قالب HTML", - "Enlarge Editor": "بزرگ کردن ویرایش گر", - "About this editor": "درباره این ویرایش گر", - "Help using editor": "راهنمای استفاده ویرایش گر", - "Current style": "شیوه کنونی", - "Undoes your last action": "برگرداندن آخرین عمل", - "Redoes your last action": "انجام مجدد آخرین عمل", - "Cut selection": "بریدن انتخاب شده", - "Copy selection": "کپی انتخاب شده", - "Paste from clipboard": "چسباندن از تخته کار", - "Direction left to right": "جهت از چپ به راست", - "Direction right to left": "جهت از راست به چپ", - "Remove formatting": "حذف فرمت بندی", - "Select all": "انتخاب همه", - "Print document": "چاپ سند", - "Clear MSOffice tags": "پاک کردن متن از برچسب های MSOffice", - "Clear Inline Font Specifications": "پاک کردن متن از مشخصات فونت", - "Would you like to clear font typefaces?": "آیا تمایل دارید ظاهر فلم را پاک کنید؟", - "Would you like to clear font sizes?": "آیا تمایل دارید اندازه قلم را پاک کنید", - "Would you like to clear font colours?": "آیا تمایل دارید رنگ قلم را پاک کنید؟", - "Split Block": "بلاک جداسازی", - "Toggle Borders": "فعال/غیر فعال کردن لبه ها", - "Save as": "ذخیره مانند...", - "Insert/Overwrite": "افزودن/جانویسی", - "— format —": "— قالب —", - "Heading 1": "تیتر 1", - "Heading 2": "تیتر 2", - "Heading 3": "تیتر 3", - "Heading 4": "تیتر 4", - "Heading 5": "تیتر 5", - "Heading 6": "تیتر 6", - "Normal": "معمولی", - "Address": "آدرس", - "Formatted": "قالب بندی شده", - - //dialogs - "OK": "بله", - "Cancel": "انصراف", - "Path": "مسیر", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "در مد متنی هستید. از دکمه [<>] استفاده نمایید تا به مد WYSIWYG برگردید.", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "دکمه چسباندن در مرورگرهای سری Mozilla کار نمی کند (به دلایل فنی امنیتی).برای چسباندن مستقیم ، دکمه CTRL-V را در صفحه کلید بزنید.", - "Your Document is not well formed. Check JavaScript console for details.": "سند شما بدرستی قالب بندی نشده است. برای اطلاعات بیشتر پایانه نمایش جاوااسکریپت را بررسی کنید.", - - "Alignment:": "تراز بندی", - "Not set": "تنظیم نشده", - "Left": "چپ", - "Right": "راست", - "Texttop": "بالای متن", - "Absmiddle": "دقیقا وسط", - "Baseline": "ابتدای خط", - "Absbottom": "دقیقا پایین", - "Bottom": "پایین", - "Middle": "وسط", - "Top": "بالا", - - "Layout": "لایه", - "Spacing": "فاصله گذاری", - "Horizontal:": "افقی", - "Horizontal padding": "پرکننده افقی", - "Vertical:": "عمودی", - "Vertical padding": "پرکننده عمودی", - "Border thickness:": "ضخامت لبه", - "Leave empty for no border": "برای بدون لبه خالی رها کن", - - //Insert Link - "Insert/Modify Link": "افزودن / ویرایش لینک", - "None (use implicit)": "هیچکدام (استفاده از بدون شرط)", - "New window (_blank)": "پنجره جدید (_blank)", - "Same frame (_self)": "فریم یکسان (_self)", - "Top frame (_top)": "فریم بالایی (_top)", - "Other": "سایر", - "Target:": "هدف", - "Title (tooltip):": "عنوان (راهنمای یک خطی)", - "URL:": "URL:", - "You must enter the URL where this link points to": "باید URLی که این لینک به آن اشاره دارد را وارد کنید", - "You need to select some text before creating a link": "باید قبل از ساخت لینک ، متنی را انتخاب نمایید", - - // Insert Table - "Insert Table": "افزودن جدول", - "Rows:": "ردیف ها", - "Number of rows": "تعداد ردیف ها", - "Cols:": "ستون ها", - "Number of columns": "تعداد ستون ها", - "Width:": "طول", - "Width of the table": "طول جدول", - "Percent": "درصد", - "Pixels": "پیکسل ها", - "Em": "Em", - "Width unit": "واحد طول", - "Fixed width columns": "ستون های طول ثابت", - "Positioning of this table": "موقعیت یابی این جدول", - "Cell spacing:": "فاصله سلول ها", - "Space between adjacent cells": "فاصله بین سلول های همجوار", - "Cell padding:": "پر کننده سلول", - "Space between content and border in cell": "فاصله بین محتوا و لبه در سلول", - "You must enter a number of rows": "باید تعداد ردیف ها را وارد کنید", - "You must enter a number of columns": "باید تعداد ستون ها را وارد کنید", - - // Insert Image - "Insert Image": "افزودن تصویر", - "Image URL:": "URL تصویر", - "Enter the image URL here": "URL تصویر را اینجا وارد کنید", - "Preview": "پیش نمایش", - "Preview the image in a new window": "پیش نمایش تصویر در پنجره ای جدید", - "Alternate text:": "متن جایگزین", - "For browsers that don't support images": "برای مرورگرهایی که از تصاویر پشتیبانی نمی کنند", - "Positioning of this image": "موقعیت یابی تصویر", - "Image Preview:": "پیش نمایش تصویر", - "You must enter the URL": "شما باید URL را وارد کنید", - - // toolbar - /* - "button_bold": "fr/bold.gif", - "button_underline": "fr/underline.gif", - "button_strikethrough": "fr/strikethrough.gif", - */ - - // Editor Help - "Xinha Help": "راهنمای Xinha", - "Editor Help": "راهنمای ویرایشگر", - "Keyboard shortcuts": "میانبرهای صفحه کلید", - "The editor provides the following key combinations:": "ویرایشگر استفاده از کلید های گروهی زیر را مسیر می سازد :", - "ENTER": "ENTREE", - "new paragraph": "پاراگراف جدید", - "SHIFT-ENTER": "SHIFT+ENTREE", - "insert linebreak": "افزودن جدا کننده خط", - "Set format to paragraph": "تغییر قالب به پاراگراف", - "Clean content pasted from Word": "تمیز کردن محتوای چسبانده شده از Word", - "Headings": "عنوان گذاری", - "Close": "بستن", - - // Loading messages - "Loading in progress. Please wait !": "بارگذاری در حال انجام است. لطفا صبر کنید !", - "Constructing main object": "ساختن شیء اصلی", - "Constructing object": "ساختن شیء", - "Register panel right": "ثبت قاب راست", - "Register panel left": "ثبت قاب چپ", - "Register panel top": "ثبت قاب بالا", - "Register panel bottom": "ثبت قاب پایین", - "Create Toolbar": "ساخت نوار ابزار", - "Create StatusBar": "ساخت نوار وضعیت", - "Generate Xinha object": "تولید شیء Xinha", - "Init editor size": "مقدار دهی اندازه ویرایشگر", - "Init IFrame": "مقدار دهی IFrame", - "Register plugin $plugin": "ثبت پلاگین $plugin" -}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/fi.js deleted file mode 100644 index e057b9af19..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/fi.js +++ /dev/null @@ -1,38 +0,0 @@ -// I18N constants - -// LANG: "en", ENCODING: UTF-8 - -{ - "Bold": "Lihavoitu", - "Italic": "Kursivoitu", - "Underline": "Alleviivattu", - "Strikethrough": "Yliviivattu", - "Subscript": "Alaindeksi", - "Superscript": "Yläindeksi", - "Justify Left": "Tasaa vasemmat reunat", - "Justify Center": "Keskitä", - "Justify Right": "Tasaa oikeat reunat", - "Justify Full": "Tasaa molemmat reunat", - "Ordered List": "Numerointi", - "Bulleted List": "Luettelomerkit", - "Decrease Indent": "Pienennä sisennystä", - "Increase Indent": "Lisää sisennystä", - "Font Color": "Fontin väri", - "Background Color": "Taustaväri", - "Horizontal Rule": "Vaakaviiva", - "Insert Web Link": "Lisää linkki", - "Insert/Modify Image": "Lisää kuva", - "Insert Table": "Lisää taulukko", - "Toggle HTML Source": "HTML-lähdekoodi vs WYSIWYG", - "Enlarge Editor": "Suurenna editori", - "About this editor": "Tietoja editorista", - "Help using editor": "Näytä ohje", - "Current style": "Nykyinen tyyli", - "Undoes your last action": "Peruuta viimeinen toiminto", - "Redoes your last action": "Palauta viimeinen toiminto", - "Cut selection": "Leikkaa maalattu", - "Copy selection": "Kopioi maalattu", - "Paste from clipboard": "Liitä leikepyödältä", - "OK": "Hyväksy", - "Cancel": "Peruuta" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/fr.js deleted file mode 100644 index a71d8debc0..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/fr.js +++ /dev/null @@ -1,171 +0,0 @@ -// I18N constants -// LANG: "fr", ENCODING: UTF-8 -{ - "Bold": "Gras", - "Italic": "Italique", - "Underline": "Souligné", - "Strikethrough": "Barré", - "Subscript": "Indice", - "Superscript": "Exposant", - "Justify Left": "Aligner à gauche", - "Justify Center": "Centrer", - "Justify Right": "Aligner à droite", - "Justify Full": "Justifier", - "Ordered List": "Liste numérotée", - "Bulleted List": "Liste à puces", - "Decrease Indent": "Diminuer le retrait", - "Increase Indent": "Augmenter le retrait", - "Font Color": "Couleur de police", - "Background Color": "Surlignage", - "Horizontal Rule": "Ligne horizontale", - "Insert Web Link": "Insérer un lien", - "Insert/Modify Image": "Insérer / Modifier une image", - "Insert Table": "Insérer un tableau", - "Toggle HTML Source": "Afficher / Masquer code source", - "Enlarge Editor": "Agrandir l'éditeur", - "About this editor": "A propos", - "Help using editor": "Aide", - "Current style": "Style courant", - "Undoes your last action": "Annuler la dernière action", - "Redoes your last action": "Répéter la dernière action", - "Cut selection": "Couper la sélection", - "Copy selection": "Copier la sélection", - "Paste from clipboard": "Coller depuis le presse-papier", - "Direction left to right": "Direction de gauche à droite", - "Direction right to left": "Direction de droite à gauche", - "Remove formatting": "Supprimer mise en forme", - "Select all": "Tout sélectionner", - "Print document": "Imprimer document", - "Clear MSOffice tags": "Supprimer tags MSOffice", - "Clear Inline Font Specifications": "Supprimer paramètres inline de la police", - "Would you like to clear font typefaces?": "Voulez-vous supprimer les types ?", - "Would you like to clear font sizes?": "Voulez-vous supprimer les tailles ?", - "Would you like to clear font colours?": "Voulez-vous supprimer les couleurs ?", - "Split Block": "Séparer les blocs", - "Toggle Borders": "Afficher / Masquer les bordures", - "Save as": "Enregistrer sous", - "Insert/Overwrite": "Insertion / Remplacement", - "— format —": "— Format —", - "Heading 1": "Titre 1", - "Heading 2": "Titre 2", - "Heading 3": "Titre 3", - "Heading 4": "Titre 4", - "Heading 5": "Titre 5", - "Heading 6": "Titre 6", - "Normal": "Normal", - "Address": "Adresse", - "Formatted": "Formaté", - - //dialogs - "OK": "OK", - "Cancel": "Annuler", - "Path": "Chemin", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Vous êtes en MODE TEXTE. Appuyez sur le bouton [<>] pour retourner au mode WYSIWYG.", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Le bouton Coller ne fonctionne pas sur les navigateurs basés sur Mozilla (pour des raisons de sécurité). Pressez CTRL-V au clavier pour coller directement.", - "Your Document is not well formed. Check JavaScript console for details.": "Le document est mal formé. Vérifiez la console JavaScript pour plus de détails.", - - "Alignment:": "Alignement", - "Not set": "Indéfini", - "Left": "Gauche", - "Right": "Droite", - "Texttop": "Texttop", - "Absmiddle": "Absmiddle", - "Baseline": "Baseline", - "Absbottom": "Absbottom", - "Bottom": "Bas", - "Middle": "Milieu", - "Top": "Haut", - - "Layout": "Mise en page", - "Spacing": "Espacement", - "Horizontal:": "Horizontal", - "Horizontal padding": "Marge horizontale interne", - "Vertical:": "Vertical", - "Vertical padding": "Marge verticale interne", - "Border thickness:": "Epaisseur de bordure", - "Leave empty for no border": "Laisser vide pour pas de bordure", - - //Insert Link - "Insert/Modify Link": "Insérer / Modifier un lien", - "None (use implicit)": "Aucune (implicite)", - "New window (_blank)": "Nouvelle fenêtre (_blank)", - "Same frame (_self)": "Même frame (_self)", - "Top frame (_top)": "Frame principale (_top)", - "Other": "Autre", - "Target:": "Cible", - "Title (tooltip):": "Texte alternatif", - "URL:": "URL:", - "You must enter the URL where this link points to": "Vous devez entrer l'URL de ce lien", - "You need to select some text before creating a link": "Vous devez sélectionner du texte avant de créer un lien", - - // Insert Table - "Insert Table": "Insérer un tableau", - "Rows:": "Lignes", - "Number of rows": "Nombre de lignes", - "Cols:": "Colonnes", - "Number of columns": "Nombre de colonnes", - "Width:": "Largeur", - "Width of the table": "Largeur du tableau", - "Percent": "Pourcent", - "Pixels": "Pixels", - "Em": "Em", - "Width unit": "Unités de largeur", - "Fixed width columns": "Colonnes à taille fixe", - "Positioning of this table": "Position du tableau", - "Cell spacing:": "Espacement", - "Space between adjacent cells": "Espace entre les cellules adjacentes", - "Cell padding:": "Marge interne", - "Space between content and border in cell": "Espace entre le contenu et la bordure d'une cellule", - "You must enter a number of rows": "Vous devez entrer le nombre de lignes", - "You must enter a number of columns": "Vous devez entrer le nombre de colonnes", - - // Insert Image - "Insert Image": "Insérer une image", - "Image URL:": "URL image", - "Enter the image URL here": "Entrer l'URL de l'image ici", - "Preview": "Prévisualiser", - "Preview the image in a new window": "Prévisualiser l'image dans une nouvelle fenêtre", - "Alternate text:": "Texte alternatif", - "For browsers that don't support images": "Pour les navigateurs qui ne supportent pas les images", - "Positioning of this image": "Position de l'image", - "Image Preview:": "Prévisualisation", - "You must enter the URL": "Vous devez entrer l'URL", - - // toolbar -/* - "button_bold": "fr/bold.gif", - "button_underline": "fr/underline.gif", - "button_strikethrough": "fr/strikethrough.gif", -*/ - - // Editor Help - "Xinha Help": "Aide Xinha", - "Editor Help": "Aide de l'éditeur", - "Keyboard shortcuts": "Raccourcis clavier", - "The editor provides the following key combinations:": "L'éditeur fournit les combinaisons de touches suivantes :", - "ENTER": "ENTREE", - "new paragraph": "Nouveau paragraphe", - "SHIFT-ENTER": "SHIFT+ENTREE", - "insert linebreak": "Insère un saut de ligne", - "Set format to paragraph": "Applique le format paragraphe", - "Clean content pasted from Word": "Nettoyage du contenu copié depuis Word", - "Headings": "Titres", - "Close": "Fermer", - - // Loading messages - "Loading in progress. Please wait!": "Chargement en cours. Veuillez patienter!", - "Finishing" : "Chargement bientôt terminé", - "Constructing object": "Construction de l'objet", - "Create Toolbar": "Construction de la barre d'icones", - "Create Statusbar": "Construction de la barre de status", - "Register right panel" : "Enregistrement du panneau droit", - "Register left panel" : "Enregistrement du panneau gauche", - "Register bottom panel" : "Enregistrement du panneau supérieur", - "Register top panel" : "Enregistrement du panneau inférieur", - "Generate Xinha framework": "Génération de Xinha", - "Init editor size": "Initialisation de la taille d'édition", - "Init IFrame": "Initialisation de l'iframe", - "Register plugin $plugin": "Enregistrement du plugin $plugin", - "Loading plugin $plugin" : "Chargement du plugin $plugin" - -}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/gb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/gb.js deleted file mode 100644 index b4fb5b642f..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/gb.js +++ /dev/null @@ -1,29 +0,0 @@ -// I18N constants -- Chinese GB -// by Dave Lo -- dlo@interactivetools.com -{ - "Bold": "粗体", - "Italic": "斜体", - "Underline": "底线", - "Strikethrough": "删除线", - "Subscript": "下标", - "Superscript": "上标", - "Justify Left": "位置靠左", - "Justify Center": "位置居中", - "Justify Right": "位置靠右", - "Justify Full": "位置左右平等", - "Ordered List": "顺序清单", - "Bulleted List": "无序清单", - "Decrease Indent": "减小行前空白", - "Increase Indent": "加宽行前空白", - "Font Color": "文字颜色", - "Background Color": "背景颜色", - "Horizontal Rule": "水平线", - "Insert Web Link": "插入连结", - "Insert/Modify Image": "插入图形", - "Insert Table": "插入表格", - "Toggle HTML Source": "切换HTML原始码", - "Enlarge Editor": "放大", - "About this editor": "关於 Xinha", - "Help using editor": "说明", - "Current style": "字体例子" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/he.js deleted file mode 100644 index e39d3fc02a..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/he.js +++ /dev/null @@ -1,64 +0,0 @@ -// I18N constants - -// LANG: "he", ENCODING: UTF-8 -// Author: Liron Newman, http://www.eesh.net, - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "מודגש", - "Italic": "נטוי", - "Underline": "קו תחתי", - "Strikethrough": "קו אמצע", - "Subscript": "כתב עילי", - "Superscript": "כתב תחתי", - "Justify Left": " ישור לשמאל", - "Justify Center": "ישור למרכז", - "Justify Right": "ישור לימין", - "Justify Full": "ישור לשורה מלאה", - "Ordered List": "רשימה ממוספרת", - "Bulleted List": "רשימה לא ממוספרת", - "Decrease Indent": "הקטן כניסה", - "Increase Indent": "הגדל כניסה", - "Font Color": "צבע גופן", - "Background Color": "צבע רקע", - "Horizontal Rule": "קו אנכי", - "Insert Web Link": "הכנס היפר-קישור", - "Insert/Modify Image": "הכנס/שנה תמונה", - "Insert Table": "הכנס טבלה", - "Toggle HTML Source": "שנה מצב קוד HTML", - "Enlarge Editor": "הגדל את העורך", - "About this editor": "אודות עורך זה", - "Help using editor": "עזרה לשימוש בעורך", - "Current style": "סגנון נוכחי", - "Undoes your last action": "מבטל את פעולתך האחרונה", - "Redoes your last action": "מבצע מחדש את הפעולה האחרונה שביטלת", - "Cut selection": "גזור בחירה", - "Copy selection": "העתק בחירה", - "Paste from clipboard": "הדבק מהלוח", - "Direction left to right": "כיוון משמאל לימין", - "Direction right to left": "כיוון מימין לשמאל", - "OK": "אישור", - "Cancel": "ביטול", - "Path": "נתיב עיצוב", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "אתה במצב טקסט נקי (קוד). השתמש בכפתור [<>] כדי לחזור למצב WYSIWYG (תצוגת עיצוב).", - "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "מצב מסך מלא יוצר בעיות בדפדפן Internet Explorer, עקב באגים בדפדפן לא יכולנו לפתור את זה. את/ה עלול/ה לחוות תצוגת זבל, בעיות בתפקוד העורך ו/או קריסה של הדפדפן. אם המערכת שלך היא Windows 9x סביר להניח שתקבל/י ", - "Cancel": "ביטול", - "Insert/Modify Link": "הוסף/שנה קישור", - "New window (_blank)": "חלון חדש (_blank)", - "None (use implicit)": "ללא (השתמש ב-frame הקיים)", - "Other": "אחר", - "Same frame (_self)": "אותו frame (_self)", - "Target:": "יעד:", - "Title (tooltip):": "כותרת (tooltip):", - "Top frame (_top)": "Frame עליון (_top)", - "URL:": "URL:", - "You must enter the URL where this link points to": "חובה לכתוב URL שאליו קישור זה מצביע" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/hu.js deleted file mode 100644 index a4b1fa4eba..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/hu.js +++ /dev/null @@ -1,64 +0,0 @@ -// I18N constants - -// LANG: "hu", ENCODING: UTF-8 -// Author: Miklós Somogyi, - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "Félkövér", - "Italic": "Dőlt", - "Underline": "Aláhúzott", - "Strikethrough": "Áthúzott", - "Subscript": "Alsó index", - "Superscript": "Felső index", - "Justify Left": "Balra zárt", - "Justify Center": "Középre zárt", - "Justify Right": "Jobbra zárt", - "Justify Full": "Sorkizárt", - "Ordered List": "Számozott lista", - "Bulleted List": "Számozatlan lista", - "Decrease Indent": "Behúzás csökkentése", - "Increase Indent": "Behúzás növelése", - "Font Color": "Karakterszín", - "Background Color": "Háttérszín", - "Horizontal Rule": "Elválasztó vonal", - "Insert Web Link": "Hiperhivatkozás beszúrása", - "Insert/Modify Image": "Kép beszúrása", - "Insert Table": "Táblázat beszúrása", - "Toggle HTML Source": "HTML forrás be/ki", - "Enlarge Editor": "Szerkesztő külön ablakban", - "About this editor": "Névjegy", - "Help using editor": "Súgó", - "Current style": "Aktuális stílus", - "Undoes your last action": "Visszavonás", - "Redoes your last action": "Újra végrehajtás", - "Cut selection": "Kivágás", - "Copy selection": "Másolás", - "Paste from clipboard": "Beillesztés", - "Direction left to right": "Irány balról jobbra", - "Direction right to left": "Irány jobbról balra", - "OK": "Rendben", - "Cancel": "Mégsem", - "Path": "Hierarchia", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Forrás mód. Visszaváltás [<>] gomb", - "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "A teljesképrenyős szerkesztés hibát okozhat Internet Explorer használata esetén, ez a böngésző a hibája, amit nem tudunk kikerülni. Szemetet észlelhet a képrenyőn, illetve néhány funkció hiányozhat és/vagy véletlenszerűen lefagyhat a böngésző. Windows 9x operaciós futtatása esetén elég valószínű, hogy ", - "Cancel": "Mégsem", - "Insert/Modify Link": "Hivatkozás Beszúrása/Módosítása", - "New window (_blank)": "Új ablak (_blank)", - "None (use implicit)": "Nincs (use implicit)", - "Other": "Más", - "Same frame (_self)": "Ugyanabba a keretbe (_self)", - "Target:": "Cél:", - "Title (tooltip):": "Cím (tooltip):", - "Top frame (_top)": "Felső keret (_top)", - "URL:": "URL:", - "You must enter the URL where this link points to": "Be kell írnia az URL-t, ahova a hivatkozás mutasson" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/it.js deleted file mode 100644 index 1c92f23db2..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/it.js +++ /dev/null @@ -1,55 +0,0 @@ -// I18N constants - -// LANG: "it", ENCODING: UTF-8 -// Author: Mattia Landoni, http://www.webpresident.org/ - -{ - "Bold": "Grassetto", - "Italic": "Corsivo", - "Underline": "Sottolineato", - "Strikethrough": "Barrato", - "Subscript": "Pedice", - "Superscript": "Apice", - "Justify Left": "Sinistra", - "Justify Center": "Centrato", - "Justify Right": "Destra", - "Justify Full": "Giustificato", - "Ordered List": "Lista numerata", - "Bulleted List": "Lista non numerata", - "Decrease Indent": "Diminuisci indentazione", - "Increase Indent": "Aumenta indentazione", - "Font Color": "Colore font", - "Background Color": "Colore sfondo", - "Horizontal Rule": "Righello orizzontale", - "Insert Web Link": "Inserisci link", - "Insert/Modify Image": "Inserisci/modifica Immagine", - "Insert Table": "Inserisci tabella", - "Toggle HTML Source": "Visualizza/nascondi sorgente HTML", - "Enlarge Editor": "Allarga editor", - "About this editor": "Informazioni su Xinha", - "Help using editor": "Aiuto", - "Current style": "Stile corrente", - "Undoes your last action": "Annulla ultima azione", - "Redoes your last action": "Ripeti ultima azione", - "Cut selection": "Taglia", - "Copy selection": "Copia", - "Paste from clipboard": "Incolla", - "Direction left to right": "Testo da sx a dx", - "Direction right to left": "Testo da dx a sx", - "OK": "OK", - "Cancel": "Annulla", - "Path": "Percorso", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Sei in MODALITA", - "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "E", - "Cancel": "Annulla", - "Insert/Modify Link": "Inserisci/modifica link", - "New window (_blank)": "Nuova finestra (_blank)", - "None (use implicit)": "Niente (usa implicito)", - "Other": "Altro", - "Same frame (_self)": "Stessa frame (_self)", - "Target:": "Target:", - "Title (tooltip):": "Title (suggerimento):", - "Top frame (_top)": "Pagina intera (_top)", - "URL:": "URL:", - "You must enter the URL where this link points to": "Devi inserire l'indirizzo a cui punta il link" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ja.js deleted file mode 100644 index 3c068f9ede..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ja.js +++ /dev/null @@ -1,175 +0,0 @@ -// I18N constants -// LANG: "ja", ENCODING: UTF-8N - -{ - "Bold": "太字", - "Italic": "斜体", - "Underline": "下線", - "Strikethrough": "打ち消し線", - "Subscript": "下付き添え字", - "Superscript": "上付き添え字", - "Justify Left": "左寄せ", - "Justify Center": "中央寄せ", - "Justify Right": "右寄せ", - "Justify Full": "均等割付", - "Ordered List": "番号付き箇条書き", - "Bulleted List": "記号付き箇条書き", - "Decrease Indent": "インデント解除", - "Increase Indent": "インデント設定", - "Font Color": "文字色", - "Background Color": "背景色", - "Horizontal Rule": "水平線", - "Insert Web Link": "リンクの挿入", - "Insert/Modify Image": "画像の挿入/修正", - "Insert Table": "テーブルを挿入", - "Toggle HTML Source": "HTML編集モードを切替", - "Enlarge Editor": "エディタを最大化", - "About this editor": "バージョン情報", - "Help using editor": "ヘルプ", - "Current style": "現在のスタイル", - "Undoes your last action": "元に戻す", - "Redoes your last action": "やり直し", - "Cut selection": "切り取り", - "Copy selection": "コピー", - "Paste from clipboard": "貼り付け", - "Direction left to right": "左から右へ", - "Direction right to left": "右から左へ", - "Remove formatting": "書式削除", - "Select all": "すべて選択", - "Print document": "印刷", - "Clear MSOffice tags": "MSOfficeタグをクリア", - "Clear Inline Font Specifications": "インラインフォント指定をクリア", - "Would you like to clear font typefaces?": "フォント名をクリアしますか?", - "Would you like to clear font sizes?": "サイズをクリアしますか?", - "Would you like to clear font colours?": "色をクリアしますか?", - "Split Block": "領域分割", - "Toggle Borders": "境界線の切替", - "Save as": "名前をつけて保存", - "Insert/Overwrite": "挿入/上書き", - "— format —": "— 書式 —", - "Heading 1": "見出し1", - "Heading 2": "見出し2", - "Heading 3": "見出し3", - "Heading 4": "見出し4", - "Heading 5": "見出し5", - "Heading 6": "見出し6", - "Normal": "標準", - "Address": "アドレス", - "Formatted": "整形済み", - "— font —": "— フォント —", - "— size —": "— サイズ —", - - //dialogs - "OK": "OK", - "Cancel": "中止", - "Path": "パス", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "テキストモードで操作しています。WYSIWYG編集に戻るには[<>]ボタンを使ってください。", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "MozillaベースのWebブラウザでは、貼り付けボタンは機能しません(技術的なセキュリティ上の理由で)。Ctrl+Vキーを押して直接貼り付けてください。", - "Your Document is not well formed. Check JavaScript console for details.": "この文書には構文的な問題があります。詳細はJavaScriptコンソールを参照してください。", - "You need to select some text before creating a link": "リンクを作成するにはテキストを選択する必要があります", - - "Alignment:": "行揃え:", - "Not set": "なし", - "Left": "左", - "Right": "右", - "Texttop": "テキスト上部", - "Absmiddle": "中央(絶対的)", - "Baseline": "ベースライン", - "Absbottom": "下(絶対的)", - "Bottom": "下", - "Middle": "中央", - "Top": "上", - - "Layout": "レイアウト", - "Spacing": "間隔", - "Horizontal:": "水平:", - "Horizontal padding": "水平余白", - "Vertical:": "垂直:", - "Vertical padding": "垂直余白", - "Border thickness:": "境界線の太さ:", - "Leave empty for no border": "境界線がない場合は空のままにする", - - //Insert Link - "Insert/Modify Link": "リンクの挿入/修正", - "None (use implicit)": "なし (デフォルトに任せる)", - "New window (_blank)": "新しいウィンドウ (_blank)", - "Same frame (_self)": "自己フレーム内 (_self)", - "Top frame (_top)": "最上位フレーム (_top)", - "Other": "その他", - "Target:": "ターゲット:", - "Title (tooltip):": "タイトル:", - "URL:": "URL:", - "You must enter the URL where this link points to": "このリンクが指し示すURLを入力してください", - - // Insert Table - "Insert Table": "テーブルの挿入", - "Rows:": "行:", - "Number of rows": "行数", - "Cols:": "列:", - "Number of columns": "列数", - "Width:": "幅:", - "Width of the table": "テーブルの幅", - "Percent": "パーセント(%)", - "Pixels": "ピクセル(px)", - "Em": "相対値(em)", - "Width unit": "幅の単位", - "Fixed width columns": "列の幅を固定", - "Positioning of this table": "このテーブルの配置", - "Cell spacing:": "セル間隔:", - "Space between adjacent cells": "隣接するセル間の距離", - "Cell padding:": "セル余白:", - "Space between content and border in cell": "セル内における内容と境界線との距離", - "You must enter a number of rows": "行数を入力してください", - "You must enter a number of columns": "列数を入力してください", - - // Insert Image - "Insert Image": "画像の挿入", - "Image URL:": "画像URL:", - "Enter the image URL here": "画像のURLをここに入力します", - "Preview": "表示", - "Preview the image in a new window": "ウィンドウで画像を表示", - "Alternate text:": "代替テキスト:", - "For browsers that don't support images": "画像表示をサポートしないブラウザに必要です", - "Positioning of this image": "画像の配置", - "Image Preview:": "画像表示:", - "You must enter the URL": "URLを入力する必要があります", - - //"button_bold": "fr/bold.gif", - //"button_underline": "fr/underline.gif", - //"button_strikethrough": "fr/strikethrough.gif", - - // Editor Help - "Xinha Help": "ヘルプ", - "Editor Help": "エディタのヘルプ", - "Keyboard shortcuts": "キーボードショートカット", - "The editor provides the following key combinations:": "エディタは以下のキー操作を提供しています:", - "ENTER": "ENTER", - "new paragraph": "新規段落", - "SHIFT-ENTER": "SHIFT+ENTER", - "insert linebreak": "段落内改行の挿入", - "Set format to paragraph": "段落書式の設定", - "Clean content pasted from Word": "Wordから貼り付けられた内容の清書", - "Headings": "見出し", - "Close": "閉じる", - - // Loading messages - "Loading in progress. Please wait!": "ロード中です。しばらくお待ちください", - "Loading plugin $plugin" : "ロード中プラグイン $plugin", - "Register plugin $plugin" : "登録中プラグイン $plugin", - "Constructing object": "オブジェクト構築中", - "Generate Xinha framework": "Xinhaフレームワーク生成中", - "Init editor size":"エディタサイズの初期化", - "Create Toolbar": "ツールバーの作成", - "Create Statusbar" : "ステータスバーの作成", - "Register right panel" : "登録 右パネル", - "Register left panel" : "登録 左パネル", - "Register bottom panel" : "登録 下パネル", - "Register top panel" : "登録 上パネル", - "Finishing" : "完了", - - // ColorPicker - "Click a color..." : "色をクリック...", - "Sample" : "サンプル", - "Web Safe: " : "Webセーフ: ", - "Color: " : "色: " -}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/lt.js deleted file mode 100644 index ea34009554..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/lt.js +++ /dev/null @@ -1,53 +0,0 @@ -// I18N constants - -// LANG: "lt", ENCODING: UTF-8 -// Author: Jaroslav Šatkevič, - -{ - "Bold": "Paryškinti", - "Italic": "Kursyvas", - "Underline": "Pabraukti", - "Strikethrough": "Perbraukti", - "Subscript": "Apatinis indeksas", - "Superscript": "Viršutinis indeksas", - "Justify Left": "Lygiavimas pagal kairę", - "Justify Center": "Lygiavimas pagal centrą", - "Justify Right": "Lygiavimas pagal dešinę", - "Justify Full": "Lygiuoti pastraipą", - "Ordered List": "Numeruotas sąrašas", - "Bulleted List": "Suženklintas sąrašas", - "Decrease Indent": "Sumažinti paraštę", - "Increase Indent": "Padidinti paraštę", - "Font Color": "Šrifto spalva", - "Background Color": "Fono spalva", - "Horizontal Rule": "Horizontali linija", - "Insert Web Link": "Įterpti nuorodą", - "Insert/Modify Image": "Įterpti paveiksliuką", - "Insert Table": "Įterpti lentelę", - "Toggle HTML Source": "Perjungti į HTML/WYSIWYG", - "Enlarge Editor": "Išplėstas redagavimo ekranas/Enlarge Editor", - "About this editor": "Apie redaktorių", - "Help using editor": "Pagalba naudojant redaktorių", - "Current style": "Dabartinis stilius", - "Undoes your last action": "Atšaukia paskutini jūsų veiksmą", - "Redoes your last action": "Pakartoja paskutinį atšauktą jūsų veiksmą", - "Cut selection": "Iškirpti", - "Copy selection": "Kopijuoti", - "Paste from clipboard": "Įterpti", - "OK": "OK", - "Cancel": "Atšaukti", - "Path": "Kelias", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jūs esete teksto režime. Naudokite [<>] mygtuką grįžimui į WYSIWYG.", - "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren", - "Cancel": "Atšaukti", - "Insert/Modify Link": "Idėti/Modifikuoti", - "New window (_blank)": "Naujas langas (_blank)", - "None (use implicit)": "None (use implicit)", - "Other": "Kitas", - "Same frame (_self)": "Same frame (_self)", - "Target:": "Target:", - "Title (tooltip):": "Pavadinimas (tooltip):", - "Top frame (_top)": "Top frame (_top)", - "URL:": "URL:", - "You must enter the URL where this link points to": "Jus privalote nurodyti URL į kuri rodo šitą nuoroda" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/lv.js deleted file mode 100644 index 840b4e7933..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/lv.js +++ /dev/null @@ -1,42 +0,0 @@ -// I18N constants - -// LANG: "lv", ENCODING: UTF-8 -// Author: Mihai Bazon, http://dynarch.com/mishoo -// Translated by: Janis Klavins, - -{ - "Bold": "Trekniem burtiem", - "Italic": "Kursv", - "Underline": "Pasvtrots", - "Strikethrough": "Prsvtrots", - "Subscript": "Novietot zem rindas", - "Superscript": "Novietot virs rindas", - "Justify Left": "Izldzint pa kreisi", - "Justify Center": "Izldzint centr", - "Justify Right": "Izldzint pa labi", - "Justify Full": "Izldzint pa visu lapu", - "Ordered List": "Numurts saraksts", - "Bulleted List": "Saraksts", - "Decrease Indent": "Samazint atkpi", - "Increase Indent": "Palielint atkpi", - "Font Color": "Burtu krsa", - "Background Color": "Fona krsa", - "Horizontal Rule": "Horizontla atdaltjsvtra", - "Insert Web Link": "Ievietot hipersaiti", - "Insert/Modify Image": "Ievietot attlu", - "Insert Table": "Ievietot tabulu", - "Toggle HTML Source": "Skatt HTML kodu", - "Enlarge Editor": "Palielint Reditju", - "About this editor": "Par o reditju", - "Help using editor": "Reditja palgs", - "Current style": "Patreizjais stils", - "Undoes your last action": "Atcelt pdjo darbbu", - "Redoes your last action": "Atkrtot pdjo darbbu", - "Cut selection": "Izgriezt iezmto", - "Copy selection": "Kopt iezmto", - "Paste from clipboard": "Ievietot iezmto", - "OK": "Labi", - "Cancel": "Atcelt", - "Path": "Ce", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Js patlaban darbojaties TEKSTA REM. Lai prietu atpaka uz GRAFISKO REMU (WYSIWIG), lietojiet [<>] pogu." -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/nb.js deleted file mode 100644 index 06943790f6..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/nb.js +++ /dev/null @@ -1,78 +0,0 @@ -// I18N constants - -// LANG: "nb", ENCODING: UTF-8 - -// - translated by ses -// Additional translations by Håvard Wigtil -// Additional translations by Kim Steinhaug - -{ - "Bold": "Fet", - "Italic": "Kursiv", - "Underline": "Understreket", - "Strikethrough": "Gjennomstreket", - "Subscript": "Nedsenket", - "Superscript": "Opphøyet", - "Justify Left": "Venstrejuster", - "Justify Center": "Midtjuster", - "Justify Right": "Høyrejuster", - "Justify Full": "Blokkjuster", - "Ordered List": "Nummerert liste", - "Bulleted List": "Punktliste", - "Decrease Indent": "Reduser innrykk", - "Increase Indent": "Øke innrykk", - "Font Color": "Tekstfarge", - "Background Color": "Bakgrundsfarge", - "Horizontal Rule": "Vannrett linje", - "Insert Web Link": "Lag lenke", - "Insert/Modify Image": "Sett inn bilde", - "Insert Table": "Sett inn tabell", - "Toggle HTML Source": "Vis kildekode", - "Enlarge Editor": "Vis i eget vindu", - "About this editor": "Om denne editor", - "Help using editor": "Hjelp", - "Current style": "Nåværende stil", - "Undoes your last action": "Angrer siste redigering", - "Redoes your last action": "Gjør om siste angring", - "Cut selection": "Klipp ut område", - "Copy selection": "Kopier område", - "Save as": "Lagre som", - "Paste from clipboard": "Lim inn", - "Remove formatting": "Fjern formattering", - "Direction left to right": "Fra venstre mot høyre", - "Direction right to left": "Fra høyre mot venstre", - "Insert/Overwrite": "Sett inn/Overskriv", - "OK": "OK", - "Cancel": "Avbryt", - "Path": "Tekstvelger", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Du er i tekstmodus Klikk på [<>] for å gå tilbake til WYSIWIG.", - "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "Visning i eget vindu har kjente problemer med Internet Explorer, på grunn av problemer med denne nettleseren. Mulige problemer er et uryddig skjermbilde, manglende editorfunksjoner og/eller at nettleseren crasher. Hvis du bruker Windows 95 eller Windows 98 er det også muligheter for at Windows will crashe.\n\nTrykk ", - "Cancel": "Avbryt", - "Insert/Modify Link": "Rediger lenke", - "New window (_blank)": "Eget vindu (_blank)", - "None (use implicit)": "Ingen (bruk standardinnstilling)", - "Other": "Annen", - "Same frame (_self)": "Samme ramme (_self)", - "Target:": "Mål:", - "Title (tooltip):": "Tittel (tooltip):", - "Top frame (_top)": "Toppramme (_top)", - "URL:": "Adresse:", - "You must enter the URL where this link points to": "Du må skrive inn en adresse som denne lenken skal peke til", - "Clear Inline Font Specifications": "Fjerne inline font spesifikasjoner", - "Would you like to clear font typefaces?": "Ønsker du å fjerne skrifttyper", - "Would you like to clear font sizes?": "Ønsker du å fjerne skrift størrelser", - "Would you like to clear font colours?": "Ønsker du å fjerne farger på skriften", - "Print document": "Skriv ut dokumentet", - "Split Block": "Seperasjonsblokk", - "Toggle Borders": "Skru av/på hjelpelinjer på tabeller", - "Select all": "Merk alt", - // Loading messages - "Loading in progress. Please wait !": "WYSIWYG laster, vennligst vent!", - "Constructing main object": "Vennligst vent", - "Create Toolbar": "Lag verktøylinje", - "Register panel right": "Registrer høyrepanel", - "Register panel left": "Registrer venstrepanel", - "Register panel top": "Registrer toppanel", - "Register panel bottom": "Registrer bunnpanel" - -}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/nl.js deleted file mode 100644 index 13042cab0c..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/nl.js +++ /dev/null @@ -1,64 +0,0 @@ -// I18N constants - -// LANG: "nl", ENCODING: UTF-8 -// Author: Michel Weegeerink (info@mmc-shop.nl), http://mmc-shop.nl - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "Vet", - "Italic": "Cursief", - "Underline": "Onderstrepen", - "Strikethrough": "Doorhalen", - "Subscript": "Subscript", - "Superscript": "Superscript", - "Justify Left": "Links uitlijnen", - "Justify Center": "Centreren", - "Justify Right": "Rechts uitlijnen", - "Justify Full": "Uitvullen", - "Ordered List": "Nummering", - "Bulleted List": "Opsommingstekens", - "Decrease Indent": "Inspringing verkleinen", - "Increase Indent": "Inspringing vergroten", - "Font Color": "Tekstkleur", - "Background Color": "Achtergrondkleur", - "Horizontal Rule": "Horizontale lijn", - "Insert Web Link": "Hyperlink invoegen/aanpassen", - "Insert/Modify Image": "Afbeelding invoegen/aanpassen", - "Insert Table": "Tabel invoegen", - "Toggle HTML Source": "HTML broncode", - "Enlarge Editor": "Vergroot Editor", - "About this editor": "Over deze editor", - "Help using editor": "Xinha help", - "Current style": "Huidige stijl", - "Undoes your last action": "Ongedaan maken", - "Redoes your last action": "Herhalen", - "Cut selection": "Knippen", - "Copy selection": "Kopi?ren", - "Paste from clipboard": "Plakken", - "Direction left to right": "Tekstrichting links naar rechts", - "Direction right to left": "Tekstrichting rechts naar links", - "OK": "OK", - "Cancel": "Annuleren", - "Path": "Pad", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Je bent in TEKST-mode. Gebruik de [<>] knop om terug te keren naar WYSIWYG-mode.", - "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "Fullscreen-mode veroorzaakt problemen met Internet Explorer door bugs in de webbrowser die we niet kunnen omzeilen. Hierdoor kunnen de volgende effecten optreden: verknoeide teksten, een verlies aan editor-functionaliteit en/of willekeurig vastlopen van de webbrowser. Als u Windows 95 of 98 gebruikt, is het zeer waarschijnlijk dat u een algemene beschermingsfout (", - "Cancel": "Annuleren", - "Insert/Modify Link": "Hyperlink invoegen/aanpassen", - "New window (_blank)": "Nieuw venster (_blank)", - "None (use implicit)": "Geen", - "Other": "Ander", - "Same frame (_self)": "Zelfde frame (_self)", - "Target:": "Doel:", - "Title (tooltip):": "Titel (tooltip):", - "Top frame (_top)": "Bovenste frame (_top)", - "URL:": "URL:", - "You must enter the URL where this link points to": "Geef de URL in waar de link naar verwijst" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/pl.js deleted file mode 100644 index edf16991cd..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/pl.js +++ /dev/null @@ -1,125 +0,0 @@ -// I18N constants -// LANG: "pl", ENCODING: UTF-8 -// translated: Krzysztof Kotowicz, http://www.eskot.krakow.pl/portfolio/, koto@webworkers.pl -{ - "Bold": "Pogrubienie", - "Italic": "Pochylenie", - "Underline": "Podkreślenie", - "Strikethrough": "Przekreślenie", - "Subscript": "Indeks dolny", - "Superscript": "Indeks górny", - "Justify Left": "Wyrównaj do lewej", - "Justify Center": "Wyśrodkuj", - "Justify Right": "Wyrównaj do prawej", - "Justify Full": "Wyjustuj", - "Ordered List": "Numerowanie", - "Bulleted List": "Wypunktowanie", - "Decrease Indent": "Zmniejsz wcięcie", - "Increase Indent": "Zwiększ wcięcie", - "Font Color": "Kolor czcionki", - "Background Color": "Kolor tła", - "Horizontal Rule": "Linia pozioma", - "Insert Web Link": "Wstaw adres sieci Web", - "Insert/Modify Image": "Wstaw obraz", - "Insert Table": "Wstaw tabelę", - "Toggle HTML Source": "Edycja WYSIWYG/w źródle strony", - "Enlarge Editor": "Pełny ekran", - "About this editor": "Informacje o tym edytorze", - "Help using editor": "Pomoc", - "Current style": "Obecny styl", - "Undoes your last action": "Cofa ostatnio wykonane polecenie", - "Redoes your last action": "Ponawia ostatnio wykonane polecenie", - "Cut selection": "Wycina zaznaczenie do schowka", - "Copy selection": "Kopiuje zaznaczenie do schowka", - "Paste from clipboard": "Wkleja zawartość schowka", - "Direction left to right": "Kierunek tekstu lewo-prawo", - "Direction right to left": "Kierunek tekstu prawo-lewo", - "Remove formatting": "Usuń formatowanie", - "Select all": "Zaznacz wszystko", - "Print document": "Drukuj dokument", - "Clear MSOffice tags": "Wyczyść tagi MSOffice", - "Clear Inline Font Specifications": "Wycisz bezpośrednie przypisania czcionek", - "Split Block": "Podziel blok", - "Toggle Borders": "Włącz / wyłącz ramki", - - "— format —": "— Format —", - "Heading 1": "Nagłówek 1", - "Heading 2": "Nagłówek 2", - "Heading 3": "Nagłówek 3", - "Heading 4": "Nagłówek 4", - "Heading 5": "Nagłówek 5", - "Heading 6": "Nagłówek 6", - "Normal": "Normalny", - "Address": "Adres", - "Formatted": "Preformatowany", - - //dialogs - "OK": "OK", - "Cancel": "Anuluj", - "Path": "Ścieżka", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jesteś w TRYBIE TEKSTOWYM. Użyj przycisku [<>], aby przełączyć się na tryb WYSIWYG.", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Przycisk Wklej nie działa w przeglądarkach Mozilla z uwagi na ustawienia bezpieczeństwa. Naciśnij CRTL-V, aby wkleić zawartość schowka.", - - "Alignment:": "Wyrównanie:", - "Not set": "Nie ustawione", - "Left": "Do lewej", - "Right": "Do prawej", - "Texttop": "Góra tekstu", - "Absmiddle": "Abs. środek", - "Baseline": "Linia bazowa", - "Absbottom": "Abs. dół", - "Bottom": "Dół", - "Middle": "Środek", - "Top": "Góra", - - "Layout": "Layout", - "Spacing": "Spacjowanie", - "Horizontal:": "Poziome:", - "Horizontal padding": "Wcięcie poziome", - "Vertical:": "Pionowe:", - "Vertical padding": "Wcięcie pionowe", - "Border thickness:": "Grubość obramowania:", - "Leave empty for no border": "Bez ramek - zostaw puste", - - //Insert Link - "Insert/Modify Link": "Wstaw/edytuj odnośnik", - "None (use implicit)": "Brak", - "New window (_blank)": "Nowe okno (_blank)", - "Same frame (_self)": "Ta sama ramka (_self)", - "Top frame (_top)": "Główna ramka (_top)", - "Other": "Inne", - "Target:": "Okno docelowe:", - "Title (tooltip):": "Tytuł (tooltip):", - "URL:": "URL:", - "You must enter the URL where this link points to": "Musisz podać URL, na jaki będzie wskazywał odnośnik", - - // Insert Table - "Insert Table": "Wstaw tabelę", - "Rows:": "Wierszy:", - "Number of rows": "Liczba wierszy", - "Cols:": "Kolumn:", - "Number of columns": "Liczba kolumn", - "Width:": "Szerokość:", - "Width of the table": "Szerokość tabeli", - "Percent": "Procent", - "Pixels": "Pikseli", - "Em": "Em", - "Width unit": "Jednostka", - "Fixed width columns": "Kolumny o stałej szerokości", - "Positioning of this table": "Pozycjonowanie tabeli", - "Cell spacing:": "Odstęp komórek:", - "Space between adjacent cells": "Przestrzeń pomiędzy komórkami", - "Cell padding:": "Wcięcie komórek:", - "Space between content and border in cell": "Przestrzeń między krawędzią a zawartością komórki", - - // Insert Image - "Insert Image": "Wstaw obrazek", - "Image URL:": "URL obrazka:", - "Enter the image URL here": "Podaj URL obrazka", - "Preview": "Podgląd", - "Preview the image in a new window": "Podgląd obrazka w nowym oknie", - "Alternate text:": "Tekst alternatywny:", - "For browsers that don't support images": "Dla przeglądarek, które nie obsługują obrazków", - "Positioning of this image": "Pozycjonowanie obrazka", - "Image Preview:": "Podgląd obrazka:" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/pt_br.js deleted file mode 100644 index 729873f9f9..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/pt_br.js +++ /dev/null @@ -1,184 +0,0 @@ -// I18N constants -// -// LANG: "pt_br", ENCODING: UTF-8 -// Portuguese Brazilian Translation -// -// Initial basic work by Alex Piaz -// -// Author: Marcio Barbosa, -// MSN: tomarshall@msn.com - ICQ: 69419933 -// Site: http://www.mpg.com.br -// -// Last revision: 06 september 2007 -// Please don´t remove this information -// If you modify any source, please insert a comment with your name and e-mail -// -// Distributed under the same terms as HTMLArea itself. -// This notice MUST stay intact for use (see license.txt) -{ - "About": "Sobre", - "About Xinha": "Sobre o Xinha", - "Absbottom": "Inferior absoluto", - "Absmiddle": "Meio absoluto", - "Alignment:": "Alinhamento", - "Alternate text:": "Texto alternativo", - "Baseline": "Linha base", - "Bold": "Negrito", - "Border thickness:": "Espessura da borda", - "Bottom": "Botão", - "CTRL-0 (zero)": "CTRL-0 (zero)", - "CTRL-1 .. CTRL-6": "CTRL-1 .. CTRL-6", - "CTRL-A": "CTRL-A", - "CTRL-B": "CTRL-B", - "CTRL-C": "CTRL-C", - "CTRL-E": "CTRL-E", - "CTRL-I": "CTRL-I", - "CTRL-J": "CTRL-J", - "CTRL-L": "CTRL-L", - "CTRL-N": "CTRL-N", - "CTRL-R": "CTRL-R", - "CTRL-S": "CTRL-S", - "CTRL-U": "CTRL-U", - "CTRL-V": "CTRL-V", - "CTRL-X": "CTRL-X", - "CTRL-Y": "CTRL-Y", - "CTRL-Z": "CTRL-Z", - "Cancel": "Cancelar", - "Cell padding:": "Espaçamento interno da célula:", - "Cell spacing:": "Espaçamento da célula:", - "Clean content pasted from Word": "Limpar conteúdo copiado do Word", - "Close": "Fechar", - "Collapse borders:": "Bordas fechadas:", - "Cols:": "Colunas:", - "Constructing object": "Construindo objeto", - "Copy selection": "Copiar seleção", - "Create Statusbar": "Criar barra de informação (statusbar)", - "Create Toolbar": "Criar Barra de Ferramentas", - "Current style": "Estilo Atual", - "Cut selection": "Recortar seleção", - "Developer": "Desenvolvedor", - "ENTER": "ENTRAR", - "Editor Help": "Ajuda do Editor", - "Em": "Em", - "Enter the image URL here": "Entre aqui com a URL da imagem", - "Finishing": "Terminando", - "Fixed width columns": "Colunas com largura fixa", - "For browsers that don't support images": "Para navegadores que não suportam imagens", - "Generate Xinha framework": "Gerar Área de Trabalho do Xinha", - "Headings": "Títulos", - "Horizontal padding": "Espaçamento interno horizontal", - "Horizontal:": "Horizontal:", - "Image Preview:": "Visualização da Imagem:", - "Image URL:": "URL da imagem:", - "Init editor size": "Iniciar tamanho do editor", - "Insert Image": "Inserir Imagem", - "Insert Table": "Inserir Tabela", - "Insert/Modify Link": "Inserir/Modificar Link", - "Italic": "Itálico", - "Justify Center": "Justificar Centralizado", - "Justify Full": "Justificar Completamente", - "Justify Left": "Justificar à Esquerda", - "Justify Right": "Justificar à Direita", - "Keyboard shortcuts": "Atalhos de Teclado", - "Layout": "Esquema", - "Leave empty for no border": "Deixe em branco para não ter bordas", - "Left": "Esquerda", - "License": "Licença", - "Loading in progress. Please wait!": "Carregamento em processo. Por favor, aguarde!", - "Middle": "Meio", - "Name": "Nome", - "New window (_blank)": "Nova janela (_blank)", - "None (use implicit)": "Nenhum (uso implicito)", - "Not set": "Não definido", - "Number of columns": "Número de colunas", - "Number of rows": "Número de linhas", - "OK": "OK", - "Paste from clipboard": "Colar da Área de Transferência", - "Path": "Caminho", - "Percent": "Porcentagem", - "Pixels": "Pixels", - "Plugins": "Plugins", - "Positioning of this image": "Posicionamento desta imagem", - "Positioning of this table": "Posicionamento desta tabela", - "Preview": "Visualização", - "Preview the image in a new window": "Visualizar a imagem em uma nova janela", - "Redoes your last action": "Refazer sua última ação", - "Right": "Direita", - "Rows:": "Linhas:", - "SHIFT-ENTER": "SHIFT-ENTER", - "Same frame (_self)": "Mesmo frame (_self)", - "Select Color": "Selecionar côr", - "Select all": "Selecionar tudo", - "Set format to paragraph": "Definir formato para o parágrafo", - "Space between adjacent cells": "Espaço entre células adjacentes", - "Space between content and border in cell": "Espaço entre conteúdo e borda na célula", - "Spacing": "Espaçamento", - "Sponsored by": "Patrocinado por", - "Strikethrough": "Tachado", - "Target:": "Destino:", - "Texttop": "Texto no topo", - "Thanks": "Agradecimentos", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "O botão Colar não funciona em navegadores baseado no Mozilla (por razões técnicas de segurança). Pressione CTRL-V no seu teclado para colar diretamente.", - "The editor provides the following key combinations:": "Este editor fornece a seguinte combinação de teclas:", - "Title (tooltip):": "Título (tooltip)", - "Top": "Topo", - "Top frame (_top)": "Frame no topo (_top)", - "URL:": "URL:", - "Underline": "Sublinhado", - "Undoes your last action": "Desfazer sua última ação", - "Version": "Versão", - "Vertical padding": "Espaçamento interno vertical", - "Vertical:": "Vertical:", - "Width of the table": "Larguran da tabela", - "Width unit": "Unidade de largura", - "Width:": "Largura:", - "Would you like to clear font colours?": "Deseja limpar as cores de fonte", - "Would you like to clear font sizes?": "Deseja limpar os tamanhos de fonte", - "Would you like to clear font typefaces?": "Deseja limpar os tipos de fonte", - "Xinha Help": "Ajuda do Xinha", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Você está no MODO TEXTO. Use o botão [<>] para mudar para o modo de Visualização (WYSIWYG)", - "Your Document is not well formed. Check JavaScript console for details.": "Seu Documento não está formatado corretamente. Verifique o console do JavaScript para maiores detalhes.", - "insert linebreak": "inserir quebra de linha", - "new paragraph": "novo parágrafo", - - // not find with lc_parse_strings.php - "Subscript": "Subescrito", - "Superscript": "Sobrescrito", - "Direction left to right": "Da esquerda para direita", - "Direction right to left": "Da direita para esquerda", - "Remove formatting": "Remover formatação", - "Select all": "Selecionar tudo", - "Print document": "Imprimir documento", - "Clear MSOffice tags": "Limpar tags do MS Office", - "Clear Inline Font Specifications": "Limpar especificações de fontes inline", - "Split Block": "Dividir Bloco", - "Toggle Borders": "Mudar Bordas", - "Save as": "Salvar como", - "Insert/Overwrite": "Inserir/Sobrescrever", - "— format —": "— formato —", - "Heading 1": "Título 1", - "Heading 2": "Título 2", - "Heading 3": "Título 3", - "Heading 4": "Título 4", - "Heading 5": "Título 5", - "Heading 6": "Título 6", - "Normal": "Normal", - "Address": "Endereço", - "Formatted": "Formatado", - "— font —": "— fonte —", - "— size —": "— tamanho —", - "Ordered List": "Lista Numerada", - "Bulleted List": "Lista Marcadores", - "Decrease Indent": "Diminuir Indentação", - "Increase Indent": "Aumentar Indentação", - "Font Color": "Cor da Fonte", - "Background Color": "Cor do Fundo", - "Horizontal Rule": "Linha Horizontal", - "Insert Web Link": "Inserir Link", - "Insert/Modify Image": "Inserir/Modificar Imagem", - "Insert Table": "Inserir Tabela", - "Toggle HTML Source": "Ver Código-Fonte", - "Enlarge Editor": "Expandir Editor", - "About this editor": "Sobre este editor", - "Help using editor": "Ajuda - Usando o editor" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ro.js deleted file mode 100644 index e622932ff8..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ro.js +++ /dev/null @@ -1,63 +0,0 @@ -// I18N constants - -// LANG: "ro", ENCODING: UTF-8 -// Author: Mihai Bazon, http://dynarch.com/mishoo - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "Îngroşat", - "Italic": "Italic", - "Underline": "Subliniat", - "Strikethrough": "Tăiat", - "Subscript": "Indice jos", - "Superscript": "Indice sus", - "Justify Left": "Aliniere la stânga", - "Justify Center": "Aliniere pe centru", - "Justify Right": "Aliniere la dreapta", - "Justify Full": "Aliniere în ambele părţi", - "Ordered List": "Listă ordonată", - "Bulleted List": "Listă marcată", - "Decrease Indent": "Micşorează alineatul", - "Increase Indent": "Măreşte alineatul", - "Font Color": "Culoarea textului", - "Background Color": "Culoare de fundal", - "Horizontal Rule": "Linie orizontală", - "Insert Web Link": "Inserează/modifică link", - "Insert/Modify Image": "Inserează/modifică imagine", - "Insert Table": "Inserează un tabel", - "Toggle HTML Source": "Sursa HTML / WYSIWYG", - "Enlarge Editor": "Maximizează editorul", - "About this editor": "Despre editor", - "Help using editor": "Documentaţie (devel)", - "Current style": "Stilul curent", - "Undoes your last action": "Anulează ultima acţiune", - "Redoes your last action": "Reface ultima acţiune anulată", - "Cut selection": "Taie în clipboard", - "Copy selection": "Copie în clipboard", - "Paste from clipboard": "Aduce din clipboard", - "Direction left to right": "Direcţia de scriere: stânga - dreapta", - "Direction right to left": "Direcţia de scriere: dreapta - stânga", - "OK": "OK", - "Cancel": "Anulează", - "Path": "Calea", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Eşti în modul TEXT. Apasă butonul [<>] pentru a te întoarce în modul WYSIWYG.", - "Cancel": "Renunţă", - "Insert/Modify Link": "Inserează/modifcă link", - "New window (_blank)": "Fereastră nouă (_blank)", - "None (use implicit)": "Nimic (foloseşte ce-i implicit)", - "Other": "Alt target", - "Same frame (_self)": "Aceeaşi fereastră (_self)", - "Target:": "Ţinta:", - "Title (tooltip):": "Titlul (tooltip):", - "Top frame (_top)": "Fereastra principală (_top)", - "URL:": "URL:", - "You must enter the URL where this link points to": "Trebuie să introduceţi un URL" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ru.js deleted file mode 100644 index 92394c2063..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/ru.js +++ /dev/null @@ -1,185 +0,0 @@ -// I18N constants - -// LANG: "ru", ENCODING: UTF-8 -// Author: Yulya Shtyryakova, - -// Some additions by: Alexey Kirpichnikov, -// I took French version as a source of English phrases because French version was the most comprehensive -// (fr.js was the largest file, actually) %) - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "Полужирный", - "Italic": "Наклонный", - "Underline": "Подчеркнутый", - "Strikethrough": "Перечеркнутый", - "Subscript": "Нижний индекс", - "Superscript": "Верхний индекс", - "Justify Left": "По левому краю", - "Justify Center": "По центру", - "Justify Right": "По правому краю", - "Justify Full": "По ширине", - "Ordered List": "Нумерованный список", - "Bulleted List": "Маркированный список", - "Decrease Indent": "Уменьшить отступ", - "Increase Indent": "Увеличить отступ", - "Font Color": "Цвет шрифта", - "Background Color": "Цвет фона", - "Horizontal Rule": "Горизонтальный разделитель", - "Insert Web Link": "Вставить гиперссылку", - "Insert/Modify Image": "Вставить изображение", - "Insert Table": "Вставить таблицу", - "Toggle HTML Source": "Показать Html-код", - "Enlarge Editor": "Увеличить редактор", - "About this editor": "О редакторе", - "Help using editor": "Помощь", - "Current style": "Текущий стиль", - "Undoes your last action": "Отменить", - "Redoes your last action": "Повторить", - "Cut selection": "Вырезать", - "Copy selection": "Копировать", - "Paste from clipboard": "Вставить", - "Direction left to right": "Направление слева направо", - "Direction right to left": "Направление справа налево", - "Remove formatting": "Убрать форматирование", - "Select all": "Выделить все", - "Print document": "Печать", - "Clear MSOffice tags": "Удалить разметку MSOffice", - "Clear Inline Font Specifications": "Удалить непосредственное задание шрифтов", - "Would you like to clear font typefaces?": "Удалить типы шрифтов?", - "Would you like to clear font sizes?": "Удалить размеры шрифтов ?", - "Would you like to clear font colours?": "Удалить цвета шрифтов ?", - "Split Block": "Разделить блок", - "Toggle Borders": "Включить/выключить отображение границ", - "Save as": "Сохранить как", - "Insert/Overwrite": "Вставка/замена", - "— format —": "— форматирование —", - "Heading 1": "Заголовок 1", - "Heading 2": "Заголовок 2", - "Heading 3": "Заголовок 3", - "Heading 4": "Заголовок 4", - "Heading 5": "Заголовок 5", - "Heading 6": "Заголовок 6", - "Normal": "Обычный текст", - "Address": "Адрес", - "Formatted": "Отформатированный текст", - - "— font —": "— шрифт —", - "— size —": "— размер —", - - -// Диалоги - - "OK": "OK", - "Cancel": "Отмена", - "Path": "Путь", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Вы в режиме отображения Html-кода. нажмите кнопку [<>], чтобы переключиться в визуальный режим.", - -"The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Кнопка Вставить не работает в браузерах на основе Mozilla (по техническим причинам, связанным с безопасностью). Нажмите Ctrl-V на клавиатуре, чтобы вставить.", - - "Your Document is not well formed. Check JavaScript console for details.": "Ваш документ неправильно сформирован. Посмотрите Консоль JavaScript, чтобы узнать подробности.", - - "Alignment:": "Выравнивание", - "Not set": "Не установлено", - "Left": "По левому краю", - "Right": "По правому краю", - "Texttop": "По верхней границе текста", - "Absmiddle": "По середине текста", - "Baseline": "По нижней границе текста", - "Absbottom": "По нижней границе", - "Bottom": "По нижнему краю", - "Middle": "Посредине", - "Top": "По верхнему краю", - - "Layout": "Расположение", - "Spacing": "Поля", - "Horizontal:": "По горизонтали", - "Horizontal padding": "Горизонтальные поля", - "Vertical:": "По вертикали", - "Vertical padding": "Вертикальные поля", - "Border thickness:": "Толщина рамки", - "Leave empty for no border": "Оставьте пустым, чтобы убрать рамку", - - //Insert Link - "Insert/Modify Link": "Вставка/изменение ссылки", - "None (use implicit)": "По умолчанию", - "New window (_blank)": "Новое окно (_blank)", - "Same frame (_self)": "То же окно (_self)", - "Top frame (_top)": "Родительское окно (_top)", - "Other": "Другое", - "Target:": "Открывать в окне:", - "Title (tooltip):": "Всплывающая подсказка", - "URL:": "URL:", - "You must enter the URL where this link points to": "Вы должны указать URL, на который будет указывать ссылка", - "You need to select some text before creating a link": "Вы должны выделить текст, который будет преобразован в ссылку", - - // Insert Table - "Insert Table": "Вставка таблицы", - "Rows:": "Строки", - "Number of rows": "Количество строк", - "Cols:": "Столбцы", - "Number of columns": "Количество столбцов", - "Width:": "Ширина", - "Width of the table": "Ширина таблицы", - "Percent": "проценты", - "Pixels": "пикселы", - "Em": "em", - "Width unit": "Единицы измерения", - "Fixed width columns": "Столбцы фиксированной ширины", - "Positioning of this table": "Расположение таблицы", - "Cell spacing:": "Расстояние между ячейками", - "Space between adjacent cells": "Расстояние между соседними ячейками", - "Cell padding:": "Поля в ячейках", - "Space between content and border in cell": "Расстояние между границей ячейки и текстом", - "You must enter a number of rows": "Вы должны ввести количество строк", - "You must enter a number of columns": "Вы должны ввести количество столбцов", - - // Insert Image - "Insert Image": "Вставка изображения", - "Image URL:": "URL изображения", - "Enter the image URL here": "Вставьте адрес изображения", - "Preview": "Предварительный просмотр", - "Preview the image in a new window": "Предварительный просмотр в отдельном окне", - "Alternate text:": "Альтернативный текст", - "For browsers that don't support images": "Для браузеров, которые не отображают картинки", - "Positioning of this image": "Расположение изображения", - "Image Preview:": "Предварительный просмотр", - "You must enter the URL": "Вы должны ввести URL", - - // Editor Help - "Xinha Help": "Помощь", - "Editor Help": "Помощь", - "Keyboard shortcuts": "Горячие клавиши", - "The editor provides the following key combinations:": "Редактор поддерживает следующие комбинации клавиш:", - "ENTER": "ENTER", - "new paragraph": "новый абзац", - "SHIFT-ENTER": "SHIFT+ENTER", - "insert linebreak": "перенос строки", - "Set format to paragraph": "Отформатировать абзац", - "Clean content pasted from Word": "Очистить текст, вставленный из Word", - "Headings": "Заголовки", - "Close": "Закрыть", - - // Loading messages - "Loading in progress. Please wait !": "Загрузка... Пожалуйста, подождите.", - "Constructing main object": "Создание главного объекта", - "Constructing object": "Создание объекта", - "Register panel right": "Регистрация правой панели", - "Register panel left": "Регистрация левой панели", - "Register panel top": "Регистрация верхней панели", - "Register panel bottom": "Регистрация нижней панели", - "Create Toolbar": "Создание панели инструментов", - "Create StatusBar": "Создание панели состояния", - "Generate Xinha object": "Создание объекта Xinha", - "Init editor size": "Инициализация размера редактора", - "Init IFrame": "инициализация iframe", - "Register plugin $plugin": "Регистрация $plugin" -}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/sh.js deleted file mode 100644 index b56a0df2b4..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/sh.js +++ /dev/null @@ -1,140 +0,0 @@ -// I18N constants - -// LANG: "sh", ENCODING: UTF-8 | ISO-8859-2 -// Author: Ljuba Ranković, http://www.rankovic.net/ljubar - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "Masno", - "Italic": "Kurziv", - "Underline": "Podvučeno", - "Strikethrough": "Precrtano", - "Subscript": "Indeks-tekst", - "Superscript": "Eksponent-tekst", - "Justify Left":"Ravnanje ulevo", - "Justify Center": "Ravnanje po simetrali", - "Justify Right": "Ravnanje udesno", - "Justify Full": "Puno ravnanje", - "Ordered List": "Lista sa rednim brojevima", - "Bulleted List": "Lista sa simbolima", - "Decrease Indent": "smanji uvlačenje", - "Increase Indent": "Povećaj uvlačenje", - "Font Color": "Boja slova", - "Background Color": "Boja pozadine", - "Horizontal Rule": "Horizontalna linija", - "Insert Web Link": "Dodaj web link", - "Insert/Modify Image": "Dodaj/promeni sliku", - "Insert Table": "Ubaci tabelu", - "Toggle HTML Source": "Prebaci na HTML kod", - "Enlarge Editor": "Povećaj editor", - "About this editor": "O ovom editoru", - "Help using editor": "Pomoć pri korišćenju editora", - "Current style": "Važeći stil", - "Undoes your last action": "Poništava poslednju radnju", - "Redoes your last action": "Vraća poslednju radnju", - "Cut selection": "Iseci izabrano", - "Copy selection": "Kopiraj izabrano", - "Paste from clipboard": "Zalepi iz klipborda", - "Direction left to right": "Pravac s leva na desno", - "Direction right to left": "Pravac s desna na levo", - "Remove formatting": "Ukoni formatiranje", - "Select all": "Izaberi sve", - "Print document": "Štampaj dokument", - "Clear MSOffice tags": "Obriši MSOffice tagove", - "Clear Inline Font Specifications": "Obriši dodeljene osobine fonta", - "Split Block": "Podeli blok", - "Toggle Borders": "Izmeni okvire", - - "— format —": "— Format —", - "Heading 1": "Zaglavlje 1", - "Heading 2": "Zaglavlje 2", - "Heading 3": "Zaglavlje 3", - "Heading 4": "Zaglavlje 4", - "Heading 5": "Zaglavlje 5", - "Heading 6": "Zaglavlje 6", - "Normal": "Običan", - "Address": "Adresa", - "Formatted": "Formatiran", - - // dialogs - "OK": "OK", - "Cancel": "Poništi", - "Path": "Putanja", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Nalazite se u TEXT režimu. Koristite [<>] dugme za povratak na WYSIWYG.", - - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "", - - "Alignment:": "Ravnanje", - "Not set": "Nije postavljeno", - "Left": "Levo", - "Right": "Desno", - "Texttop": "Vrh teksta", - "Absmiddle": "Apsolutna sredina", - "Baseline": "Donja linija", - "Absbottom": "Apsolutno dno", - "Bottom": "Dno", - "Middle": "Sredina", - "Top": "Vrh", - - "Layout": "Prelom", - "Spacing": "Razmak", - "Horizontal:": "Po horizontali", - "Horizontal padding": "Horizontalno odstojanje", - "Vertical:": "Po vertikali", - "Vertical padding": "Vertikalno odstojanje", - "Border thickness:": "Debljina okvira", - "Leave empty for no border": "Ostavi prazno kad nema okvira", - - // Insert Link - "Insert/Modify Link": "Dodaj/promeni Link", - "None (use implicit)": "koristi podrazumevano", - "New window (_blank)": "Novom prozoru (_blank)", - "Same frame (_self)": "Isti frejm (_self)", - "Top frame (_top)": "Glavni frejm (_top)", - "Other": "Drugo", - "Target:": "Otvori u:", - "Title (tooltip):": "Naziv (tooltip):", - "URL:": "URL:", - "You must enter the URL where this link points to": "Morate uneti URL na koji vodi ovaj link", - - // Insert Table - "Insert Table": "Ubaci tabelu", - "Rows:": "Redovi", - "Number of rows": "Broj redova", - "Cols:": "Kolone", - "Number of columns": "Broj kolona", - "Width:": "Širina", - "Width of the table": "Širina tabele", - "Percent": "Procenat", - "Pixels": "Pikseli", - "Em": "Em", - "Width unit": "Jedinica širine", - "Fixed width columns": "Fiksirana širina kolona", - "Positioning of this table": "Postavljanje ove tabele", - "Cell spacing:": "Rastojanje ćelija", - "Space between adjacent cells": "Rastojanje naspramnih ćelija", - "Cell padding:": "Unutrašnja odstojanja u ćeliji", - "Space between content and border in cell": "Rastojanje između sadržaja i okvira ćelije", - - // Insert Image - "Insert Image": "Ubaci sliku", - "Image URL:": "URL slike", - "Enter the image URL here": "Unesite URL slike ovde", - "Preview": "Pregled", - "Preview the image in a new window": "Pregledaj sliku u novom prozoru", - "Alternate text:": "Alternativni tekst", - "For browsers that don't support images": "Za pretraživače koji ne podržavaju slike", - "Positioning of this image": "Postavljanje ove slike", - "Image Preview:": "Pregled slike", - - // Select Color popup - "Select Color": "Izaberite boju" -}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/si.js deleted file mode 100644 index c34abbe576..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/si.js +++ /dev/null @@ -1,50 +0,0 @@ -// I18N constants - -// LANG: "si", ENCODING: UTF-8 -// Author: Tomaz Kregar, x_tomo_x@email.si - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "Krepko", - "Italic": "Ležeče", - "Underline": "Podčrtano", - "Strikethrough": "Prečrtano", - "Subscript": "Podpisano", - "Superscript": "Nadpisano", - "Justify Left": "Poravnaj levo", - "Justify Center": "Na sredino", - "Justify Right": "Poravnaj desno", - "Justify Full": "Porazdeli vsebino", - "Ordered List": "Oštevilčevanje", - "Bulleted List": "Označevanje", - "Decrease Indent": "Zmanjšaj zamik", - "Increase Indent": "Povečaj zamik", - "Font Color": "Barva pisave", - "Background Color": "Barva ozadja", - "Horizontal Rule": "Vodoravna črta", - "Insert Web Link": "Vstavi hiperpovezavo", - "Insert/Modify Image": "Vstavi sliko", - "Insert Table": "Vstavi tabelo", - "Toggle HTML Source": "Preklopi na HTML kodo", - "Enlarge Editor": "Povečaj urejevalnik", - "About this editor": "Vizitka za urejevalnik", - "Help using editor": "Pomoč za urejevalnik", - "Current style": "Trenutni slog", - "Undoes your last action": "Razveljavi zadnjo akcijo", - "Redoes your last action": "Uveljavi zadnjo akcijo", - "Cut selection": "Izreži", - "Copy selection": "Kopiraj", - "Paste from clipboard": "Prilepi", - "OK": "V redu", - "Cancel": "Prekliči", - "Path": "Pot", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Si v tekstovnem načinu. Uporabi [<>] gumb za prklop nazaj na WYSIWYG." -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/sr.js deleted file mode 100644 index 613dd7e2aa..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/sr.js +++ /dev/null @@ -1,140 +0,0 @@ -// I18N constants - -// LANG: "sh", ENCODING: UTF-8 | ISO-8859-5 -// Author: Ljuba Ranković, http://www.rankovic.net/ljubar - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "Масно", - "Italic": "Курзив", - "Underline": "Подвучено", - "Strikethrough": "Прецртано", - "Subscript": "Индекс-текст", - "Superscript": "Експонент-текст", - "Justify Left": "Равнање улево", - "Justify Center": "Равнање по симетрали", - "Justify Right": "Равнање удесно", - "Justify Full": "Пуно равнање", - "Ordered List": "Листа са редним бројевима", - "Bulleted List": "Листа са симболима", - "Decrease Indent": "Смањи увлачење", - "Increase Indent": "Повећај увлачење", - "Font Color": "Боја слова", - "Background Color": "Боја позадине", - "Horizontal Rule": "Хоризонтална линија", - "Insert Web Link": "додај веб линк", - "Insert/Modify Image": "додај/промени слику", - "Insert Table": "Убаци табелу", - "Toggle HTML Source": "Пребаци на приказ ХТМЛ кода", - "Enlarge Editor": "Повећај едитор", - "About this editor": "О овом едитору", - "Help using editor": "Помоћ при коришћењу едитора", - "Current style": "Важећи стил", - "Undoes your last action": "Поништава последњу радњу", - "Redoes your last action": "Враћа последњу радњу", - "Cut selection": "Исеци изабрано", - "Copy selection": "Копирај изабрано", - "Paste from clipboard": "Залепи из клипборда", - "Direction left to right": "Правац с лева на десно", - "Direction right to left": "Правац с десна на лево", - "Remove formatting": "Уклони форматирање", - "Select all": "Изабери све", - "Print document": "Штампај документ", - "Clear MSOffice tags": "Обриши MSOffice тагове", - "Clear Inline Font Specifications": "Обриши примењене особине фонта", - "Split Block": "Подели блок", - "Toggle Borders": "Пребаци оквирне линије", - - "— format —": "— Format —", - "Heading 1": "Заглавље 1", - "Heading 2": "Заглавље 2", - "Heading 3": "Заглавље 3", - "Heading 4": "Заглавље 4", - "Heading 5": "Заглавље 5", - "Heading 6": "Заглавље 6", - "Normal": "обичан", - "Address": "адреса", - "Formatted": "форматиран", - - // dialogs - "OK": "OK", - "Cancel": "Поништи", - "Path": "Путања", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Налазите се у ТЕКСТ режиму. Користите [<>] дугме за повратак на ШВТИД (WYSIWYG).", - - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Дугме 'залепи' не ради у претраживачима породице Mozilla (из разлога сигурности). Притисните CTRL-V на тастатури да директно залепите.", - - "Alignment:": "Равнање", - "Not set": "Није постављено", - "Left": "Лево", - "Right": "Десно", - "Texttop": "Врх текста", - "Absmiddle": "Апсолутна средина", - "Baseline": "Доња линија", - "Absbottom": "Апсолутно дно", - "Bottom": "Дно", - "Middle": "Средина", - "Top": "Врх", - - "Layout": "Прелом", - "Spacing": "Размак", - "Horizontal:": "По хоризонтали", - "Horizontal padding": "Хортизонтално одстојање", - "Vertical:": "По вертикали", - "Vertical padding": "Вертикално одстојање", - "Border thickness:": "Дебљина оквира", - "Leave empty for no border": "Остави празно кад нема оквира", - - // Insert Link - "Insert/Modify Link": "додај/промени линк", - "None (use implicit)": "користи подразумевано", - "New window (_blank)": "Новом прозору (_blank)", - "Same frame (_self)": "Исти фрејм (_self)", - "Top frame (_top)": "Главни фрејм (_top)", - "Other": "Друго", - "Target:": "Отвори у:", - "Title (tooltip):": "Назив (tooltip):", - "URL:": "УРЛ:", - "You must enter the URL where this link points to": "Морате унети УРЛ на који води овај линк", - - // Insert Table - "Insert Table": "Убаци табелу", - "Rows:": "Редови", - "Number of rows": "Број редова", - "Cols:": "Колоне", - "Number of columns": "Број колона", - "Width:": "Ширина", - "Width of the table": "Ширина табеле", - "Percent": "Процената", - "Pixels": "Пиксела", - "Em": "Ем", - "Width unit": "Јединица ширине", - "Fixed width columns": "Фиксирана ширина колоне", - "Positioning of this table": "Постављање ове табеле", - "Cell spacing:": "Размак између ћелија", - "Space between adjacent cells": "Размак између наспрамних ћелија", - "Cell padding:": "Унутрашња одстојања од ивица ћелије", - "Space between content and border in cell": "Растојање између садржаја у ћелији и њеног оквира", - - // Insert Image - "Insert Image": "Убаци слику", - "Image URL:": "УРЛ слике", - "Enter the image URL here": "Унесите УРЛ слике овде", - "Preview": "Преглед", - "Preview the image in a new window": "Прегледај слику у новом прозору", - "Alternate text:": "алтернативни текст", - "For browsers that don't support images": "За претраживаче који не подржавају слике", - "Positioning of this image": "Постављање ове слике", - "Image Preview:": "Преглед слике", - - // Select Color popup - "Select Color": "Изабери боју" -}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/sv.js deleted file mode 100644 index 61af49e3ef..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/sv.js +++ /dev/null @@ -1,116 +0,0 @@ -// I18N constants -// LANG: "sv", ENCODING: UTF-8 - -// Swedish version for htmlArea v3.0 -// Initital translation by pat -// Synced with additional contants in rev. 477 (Mar 2006) by Thomas Loo - -{ - "Bold": "Fet", - "Italic": "Kursiv", - "Underline": "Understruken", - "Strikethrough": "Genomstruken", - "Subscript": "Nedsänkt", - "Superscript": "Upphöjd", - "Justify Left": "Vänsterjustera", - "Justify Center": "Centrera", - "Justify Right": "Högerjustera", - "Justify Full": "Marginaljustera", - "Ordered List": "Numrerad lista", - "Bulleted List": "Punktlista", - "Decrease Indent": "Minska indrag", - "Increase Indent": "Öka indrag", - "Font Color": "Textfärg", - "Background Color": "Bakgrundsfärg", - "Horizontal Rule": "Vågrät linje", - "Insert Web Link": "Infoga länk", - "Insert/Modify Image": "Infoga bild", - "Toggle HTML Source": "Visa källkod", - "Enlarge Editor": "Visa i eget fönster", - "About this editor": "Om denna editor", - "Help using editor": "Hjälp", - "Current style": "Nuvarande stil", - - "Undoes your last action": "Ångra kommando", - "Redoes your last action": "Upprepa kommando", - "Select all": "Markera allt", - "Print document": "Skriv ut", - "Clear MSOffice tags": "Städa bort MS Office taggar", - "Clear Inline Font Specifications": "Rensa inbäddad typsnittsinformation", - "Remove formatting": "Rensa formattering", - "Toggle Borders": "Objektramar", - "Split Block": "Dela block", - "Direction left to right": "Vänster till höger", - "Direction right to left": "Höger till vänster", - - "Insert/Overwrite": "Infoga/Skriv över", - "OK": "OK", - "Cancel": "Avbryt", - "Path": "Objekt", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Du befinner dig i texläge. Klicka på ikonen [<>] ovan för att växla tillbaka till WYSIWIG läge", - "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "Visning i fullskärmsläga fungerar dåligt i din webläsare. Möjliga problem resulterar i en ryckig editor, saknade editorfunktioner och/eller att webläsaren kraschar. Om du använder Windows 95/98 finns också möjligheten att Windows kraschar.\n\nTryck ", - "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Denna knapp fungerar ej i Mozillabaserad webläsare, använd istället snabbtangenterna CTRL-V på tangentbordet för att klistra in.", - - "Insert/Modify Link": "Redigera länk", - "New window (_blank)": "Nytt fönster (_blank)", - "None (use implicit)": "Ingen (använd standardinställing)", - "Other": "Annan", - "Same frame (_self)": "Samma ram (_self)", - "Target:": "Mål:", - "Title (tooltip):": "Titel (tooltip):", - "Top frame (_top)": "Toppram (_top)", - "URL:": "Sökväg:", - "You must enter the URL where this link points to": "Du måsta ange en adress till vilken länken skall peka på", - "Would you like to clear font typefaces?": "Radera alla typsnittsinformation ?", - "Would you like to clear font sizes?": "Radera alla fontstorlekar ?", - "Would you like to clear font colours?": "Ta bort all textfärger ?", - - "You need to select some text before creating a link": "Du måsta markera ett objekt att applicera länken på!", - - // Insert Table - "Insert Table": "Infoga tabell", - "Rows:": "Rader:", - "Number of rows": "Antal rader", - "Cols:": "Kolumner:", - "Number of columns": "Antal kolumner", - "Width:": "Bredd:", - "Width of the table": "Tabellbredd", - "Percent": "Procent", - "Pixels": "Pixlar", - "Em": "", - "Width unit": "Breddenheter", - "Fixed width columns": "Fixerad bredd", - "Alignment:": "Marginaljustering", - "Positioning of this table": "Tabellposition", - "Border thickness:": "Ramtjocklek", - "Leave empty for no border": "Lämna fältet tomt för att undvika ramar", - "Spacing": "Cellegenskaper", - "Cell spacing:": "Cellmarginaler:", - "Space between adjacent cells": "Utrymme mellan celler", - "Cell padding:": "Cellindrag:", - "Space between content and border in cell": "Utrymme mellan ram och cellinnehåll", - "You must enter a number of rows": "Ange ental rader", - "You must enter a number of columns": "Ange antal kolumner", - - // Editor Help - "Keyboard shortcuts": "Snabbtangenter", - "The editor provides the following key combinations:": "Editorn nyttjar följande kombinationer:", - "new paragraph": "Ny paragraf ", - "insert linebreak": "Infoga radbrytning ", - "Set format to paragraph": "Aktivera paragrafläge", - "Clean content pasted from Word": "Rensa innehåll inklistrat från MS Word", - "Headings": "Skapa standardrubrik", - "Cut selection": "Klipp ut markering", - "Copy selection": "Kopiera markering", - "Paste from clipboard": "Klistra in", - "Close": "Stäng", - - // Loading messages - "Loading in progress. Please wait !": "Editorn laddas. Vänta...", - "Constructing main object": "Skapar huvudobjekt", - "Create Toolbar": "Skapar verktygspanel", - "Register panel right": "Registerar panel höger", - "Register panel left": "Registerar panel vänster", - "Register panel top": "Registerar toppanel", - "Register panel bottom": "Registerar fotpanel" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/th.js deleted file mode 100644 index 8a116af72c..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/th.js +++ /dev/null @@ -1,50 +0,0 @@ -// I18N constants - -// LANG: "th", ENCODING: UTF-8 -// Author: Suchin Prasongbundit, - -// FOR TRANSLATORS: -// -// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE -// (at least a valid email address) -// -// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; -// (if this is not possible, please include a comment -// that states what encoding is necessary.) - -{ - "Bold": "ตัวหนา", - "Italic": "ตัวเอียง", - "Underline": "ขีดเส้นใต้", - "Strikethrough": "ขีดทับ", - "Subscript": "ตัวห้อย", - "Superscript": "ตัวยก", - "Justify Left": "จัดชิดซ้าย", - "Justify Center": "จัดกึ่งกลาง", - "Justify Right": "จัดชิดขวา", - "Justify Full": "จัดเต็มขอบ", - "Ordered List": "เลขลำดับ", - "Bulleted List": "ลำดับ", - "Decrease Indent": "ลดย่อหน้า", - "Increase Indent": "เพิ่มย่อหน้า", - "Font Color": "สีขอบแบบอักษร", - "Background Color": "สีพื้นหลัง", - "Horizontal Rule": "เส้นกึ่งกลาง", - "Insert Web Link": "ิเพิ่มลิ้งค์", - "Insert/Modify Image": "เพิ่ม/แก้ไขภาพ", - "Insert Table": "เพิ่มตาราง", - "Toggle HTML Source": "สลับการแสดงโค้ด HTML", - "Enlarge Editor": "ขยายให้เต็มจอ", - "About this editor": "เกี่ยวกับโปรแกรมนี้", - "Help using editor": "การใช้งานโปรแกรม", - "Current style": "รูปแบบปัจจุบัน", - "Undoes your last action": "ย้อนกลับ", - "Redoes your last action": "ทำซ้ำ", - "Cut selection": "ตัดส่วนที่เลือก", - "Copy selection": "สำเนาส่วนที่เลือก", - "Paste from clipboard": "วางจากคลิปบอร์ด", - "OK": "ตกลง", - "Cancel": "ยกเลิก", - "Path": "เส้นทาง", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "คุณอยู่ในโหมดธรรมดา กดที่ปุ่ม [<>] เพื่อสลับกลับไปยังโหมดพิมพ์งานแบบเวิร์ด" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/vn.js deleted file mode 100644 index 0aa641661e..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/lang/vn.js +++ /dev/null @@ -1,56 +0,0 @@ -// I18N constants : Vietnamese -// LANG: "en", ENCODING: UTF-8 -// Author: Nguyễn Đình Nam, -// Modified 21/07/2004 by Phạm Mai Quân - -{ - "Bold": "Đậm", - "Italic": "Nghiêng", - "Underline": "Gạch Chân", - "Strikethrough": "Gạch Xóa", - "Subscript": "Viết Xuống Dưới", - "Superscript": "Viết Lên Trên", - "Justify Left": "Căn Trái", - "Justify Center": "Căn Giữa", - "Justify Right": "Căn Phải", - "Justify Full": "Căn Đều", - "Ordered List": "Danh Sách Có Thứ Tự (1, 2, 3)", - "Bulleted List": "Danh Sách Phi Thứ Tự (Chấm đầu dòng)", - "Decrease Indent": "Lùi Ra Ngoài", - "Increase Indent": "Thụt Vào Trong", - "Font Color": "Màu Chữ", - "Background Color": "Màu Nền", - "Horizontal Rule": "Dòng Kẻ Ngang", - "Insert Web Link": "Tạo Liên Kết", - "Insert/Modify Image": "Chèn Ảnh", - "Insert Table": "Chèn Bảng", - "Toggle HTML Source": "Chế Độ Mã HTML", - "Enlarge Editor": "Phóng To Ô Soạn Thảo", - "About this editor": "Tự Giới Thiệu", - "Help using editor": "Giúp Đỡ", - "Current style": "Định Dạng Hiện Thời", - "Undoes your last action": "Hủy thao tác trước", - "Redoes your last action": "Lấy lại thao tác vừa bỏ", - "Cut selection": "Cắt", - "Copy selection": "Sao chép", - "Paste from clipboard": "Dán", - "Direction left to right": "Viết từ trái sang phải", - "Direction right to left": "Viết từ phải sang trái", - "OK": "Đồng ý", - "Cancel": "Hủy", - "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "Chế độ phóng to ô soạn thảo có thể gây lỗi với Internet Explorer vì một số lỗi của trình duyệt này, vì thế chế độ này có thể sẽ không chạy. Hiển thị không đúng, lộn xộn, không có đầy đủ chức năng, và cũng có thể làm trình duyệt của bạn bị tắt ngang. Nếu bạn đang sử dụng Windows 9x bạn có thể bị báo lỗi ", - "Path": "Đường Dẫn", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Bạn đang ở chế độ text. Sử dụng nút [<>] để chuyển lại chế độ WYSIWIG.", - "Cancel": "Hủy", - "Insert/Modify Link": "Thêm/Chỉnh sửa đường dẫn", - "New window (_blank)": "Cửa sổ mới (_blank)", - "None (use implicit)": "Không (sử dụng implicit)", - "OK": "Đồng ý", - "Other": "Khác", - "Same frame (_self)": "Trên cùng khung (_self)", - "Target:": "Nơi hiện thị:", - "Title (tooltip):": "Tiêu đề (của hướng dẫn):", - "Top frame (_top)": "Khung trên cùng (_top)", - "URL:": "URL:", - "You must enter the URL where this link points to": "Bạn phải điền địa chỉ (URL) mà đường dẫn sẽ liên kết tới" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/ColorPicker/ColorPicker.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/ColorPicker/ColorPicker.js deleted file mode 100644 index dba2f6b26a..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/ColorPicker/ColorPicker.js +++ /dev/null @@ -1,624 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/ColorPicker/ColorPicker.js */ -ColorPicker._pluginInfo={name:"colorPicker",version:"$LastChangedRevision: 1237 $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),developer:"James Sleeman",developer_url:"http://www.gogo.co.nz/",c_owner:"Gogo Internet Services",license:"htmlArea",sponsor:"Gogo Internet Services",sponsor_url:"http://www.gogo.co.nz/"}; -function ColorPicker(){ -}; -try{ -if(window.opener&&window.opener.Xinha){ -var openerColorPicker=window.opener.Xinha.colorPicker; -Xinha._addEvent(window,"unload",function(){ -Xinha.colorPicker=openerColorPicker; -}); -} -} -catch(e){ -} -Xinha.colorPicker=function(_1){ -if(Xinha.colorPicker.savedColors.length===0){ -Xinha.colorPicker.loadColors(); -} -this.is_ie_6=(Xinha.is_ie&&Xinha.ie_version<7); -var _2=this; -var _3=false; -var _4=false; -var _5=0; -var _6=0; -this.callback=_1.callback?_1.callback:function(_7){ -alert("You picked "+_7); -}; -this.websafe=_1.websafe?_1.websafe:false; -this.savecolors=_1.savecolors?_1.savecolors:20; -this.cellsize=parseInt(_1.cellsize?_1.cellsize:"10px",10); -this.side=_1.granularity?_1.granularity:18; -var _8=this.side+1; -var _9=this.side-1; -this.value=1; -this.saved_cells=null; -this.table=document.createElement("table"); -this.table.className="dialog"; -this.table.cellSpacing=this.table.cellPadding=0; -this.table.onmouseup=function(){ -_3=false; -_4=false; -}; -this.tbody=document.createElement("tbody"); -this.table.appendChild(this.tbody); -this.table.style.border="1px solid WindowFrame"; -this.table.style.zIndex="1050"; -var tr=document.createElement("tr"); -var td=document.createElement("td"); -td.colSpan=this.side; -td.className="title"; -td.style.fontFamily="small-caption,caption,sans-serif"; -td.style.fontSize="x-small"; -td.unselectable="on"; -td.style.MozUserSelect="none"; -td.style.cursor="default"; -td.appendChild(document.createTextNode(Xinha._lc("Click a color..."))); -td.style.borderBottom="1px solid WindowFrame"; -tr.appendChild(td); -td=null; -var td=document.createElement("td"); -td.className="title"; -td.colSpan=2; -td.style.fontFamily="Tahoma,Verdana,sans-serif"; -td.style.borderBottom="1px solid WindowFrame"; -td.style.paddingRight="0"; -tr.appendChild(td); -var _c=document.createElement("div"); -_c.title=Xinha._lc("Close"); -_c.className="buttonColor"; -_c.style.height="11px"; -_c.style.width="11px"; -_c.style.cursor="pointer"; -_c.onclick=function(){ -_2.close(); -}; -_c.appendChild(document.createTextNode("×")); -_c.align="center"; -_c.style.verticalAlign="top"; -_c.style.position="relative"; -_c.style.cssFloat="right"; -_c.style.styleFloat="right"; -_c.style.padding="0"; -_c.style.margin="2px"; -_c.style.backgroundColor="transparent"; -_c.style.fontSize="11px"; -if(!Xinha.is_ie){ -_c.style.lineHeight="9px"; -} -_c.style.letterSpacing="0"; -td.appendChild(_c); -this.tbody.appendChild(tr); -_c=tr=td=null; -this.constrain_cb=document.createElement("input"); -this.constrain_cb.type="checkbox"; -this.chosenColor=document.createElement("input"); -this.chosenColor.type="text"; -this.chosenColor.maxLength=7; -this.chosenColor.style.width="50px"; -this.chosenColor.style.fontSize="11px"; -this.chosenColor.onchange=function(){ -if(/#[0-9a-f]{6,6}/i.test(this.value)){ -_2.backSample.style.backgroundColor=this.value; -_2.foreSample.style.color=this.value; -} -}; -this.backSample=document.createElement("div"); -this.backSample.appendChild(document.createTextNode(" ")); -this.backSample.style.fontWeight="bold"; -this.backSample.style.fontFamily="small-caption,caption,sans-serif"; -this.backSample.fontSize="x-small"; -this.foreSample=document.createElement("div"); -this.foreSample.appendChild(document.createTextNode(Xinha._lc("Sample"))); -this.foreSample.style.fontWeight="bold"; -this.foreSample.style.fontFamily="small-caption,caption,sans-serif"; -this.foreSample.fontSize="x-small"; -function toHex(_d){ -var h=_d.toString(16); -if(h.length<2){ -h="0"+h; -} -return h; -}; -function tupleToColor(_f){ -return "#"+toHex(_f.red)+toHex(_f.green)+toHex(_f.blue); -}; -function nearestPowerOf(num,_11){ -return Math.round(Math.round(num/_11)*_11); -}; -function doubleHexDec(dec){ -return parseInt(dec.toString(16)+dec.toString(16),16); -}; -function rgbToWebsafe(_13){ -_13.red=doubleHexDec(nearestPowerOf(parseInt(toHex(_13.red).charAt(0),16),3)); -_13.blue=doubleHexDec(nearestPowerOf(parseInt(toHex(_13.blue).charAt(0),16),3)); -_13.green=doubleHexDec(nearestPowerOf(parseInt(toHex(_13.green).charAt(0),16),3)); -return _13; -}; -function hsvToRGB(h,s,v){ -var _17; -if(s===0){ -_17={red:v,green:v,blue:v}; -}else{ -h/=60; -var i=Math.floor(h); -var f=h-i; -var p=v*(1-s); -var q=v*(1-s*f); -var t=v*(1-s*(1-f)); -switch(i){ -case 0: -_17={red:v,green:t,blue:p}; -break; -case 1: -_17={red:q,green:v,blue:p}; -break; -case 2: -_17={red:p,green:v,blue:t}; -break; -case 3: -_17={red:p,green:q,blue:v}; -break; -case 4: -_17={red:t,green:p,blue:v}; -break; -default: -_17={red:v,green:p,blue:q}; -break; -} -} -_17.red=Math.ceil(_17.red*255); -_17.green=Math.ceil(_17.green*255); -_17.blue=Math.ceil(_17.blue*255); -return _17; -}; -var _1d=this; -function closeOnBodyClick(ev){ -ev=ev?ev:window.event; -el=ev.target?ev.target:ev.srcElement; -do{ -if(el==_1d.table){ -return; -} -}while(el=el.parentNode); -_1d.close(); -}; -this.open=function(_1f,_20,_21){ -this.table.style.display=""; -this.pick_color(); -if(_21&&/#[0-9a-f]{6,6}/i.test(_21)){ -this.chosenColor.value=_21; -this.backSample.style.backgroundColor=_21; -this.foreSample.style.color=_21; -} -Xinha._addEvent(document.body,"mousedown",closeOnBodyClick); -this.table.style.position="absolute"; -var e=_20; -var top=0; -var _24=0; -do{ -if(e.style.position=="fixed"){ -this.table.style.position="fixed"; -} -top+=e.offsetTop-e.scrollTop; -_24+=e.offsetLeft-e.scrollLeft; -e=e.offsetParent; -}while(e); -var x,y; -if(/top/.test(_1f)||(top+this.table.offsetHeight>document.body.offsetHeight)){ -if(top-this.table.offsetHeight>0){ -this.table.style.top=(top-this.table.offsetHeight)+"px"; -}else{ -this.table.style.top=0; -} -}else{ -this.table.style.top=(top+_20.offsetHeight)+"px"; -} -if(/left/.test(_1f)||(_24+this.table.offsetWidth>document.body.offsetWidth)){ -if(_24-(this.table.offsetWidth-_20.offsetWidth)>0){ -this.table.style.left=(_24-(this.table.offsetWidth-_20.offsetWidth))+"px"; -}else{ -this.table.style.left=0; -} -}else{ -this.table.style.left=_24+"px"; -} -if(this.is_ie_6){ -this.iframe.style.top=this.table.style.top; -this.iframe.style.left=this.table.style.left; -} -}; -function pickCell(_27){ -_2.chosenColor.value=_27.colorCode; -_2.backSample.style.backgroundColor=_27.colorCode; -_2.foreSample.style.color=_27.colorCode; -if((_27.hue>=195&&_27.saturation>0.5)||(_27.hue===0&&_27.saturation===0&&_27.value<0.5)||(_27.hue!==0&&_2.value<0.75)){ -_27.style.borderColor="#fff"; -}else{ -_27.style.borderColor="#000"; -} -_5=_27.thisrow; -_6=_27.thiscol; -}; -function pickValue(_28){ -if(_2.value<0.5){ -_28.style.borderColor="#fff"; -}else{ -_28.style.borderColor="#000"; -} -_9=_28.thisrow; -_8=_28.thiscol; -_2.chosenColor.value=_2.saved_cells[_5][_6].colorCode; -_2.backSample.style.backgroundColor=_2.saved_cells[_5][_6].colorCode; -_2.foreSample.style.color=_2.saved_cells[_5][_6].colorCode; -}; -function unpickCell(row,col){ -_2.saved_cells[row][col].style.borderColor=_2.saved_cells[row][col].colorCode; -}; -this.pick_color=function(){ -var _2b,_2c; -var _2d=this; -var _2e=359/(this.side); -var _2f=1/(this.side-1); -var _30=1/(this.side-1); -var _31=this.constrain_cb.checked; -if(this.saved_cells===null){ -this.saved_cells=[]; -for(var row=0;row=195&&_43.saturation>0.5)||(_43.hue===0&&_43.saturation===0&&_43.value<0.5)||(_43.hue!==0&&_2d.value<0.75)){ -_43.style.borderColor="#fff"; -}else{ -_43.style.borderColor="#000"; -} -} -}; -this.close=function(){ -Xinha._removeEvent(document.body,"mousedown",closeOnBodyClick); -this.table.style.display="none"; -if(this.is_ie_6){ -if(this.iframe){ -this.iframe.style.display="none"; -} -} -}; -}; -Xinha.colorPicker.savedColors=[]; -Xinha.colorPicker.remember=function(_44,_45){ -for(var i=Xinha.colorPicker.savedColors.length;i--;){ -if(Xinha.colorPicker.savedColors[i]==_44){ -return false; -} -} -Xinha.colorPicker.savedColors.splice(0,0,_44); -Xinha.colorPicker.savedColors=Xinha.colorPicker.savedColors.slice(0,_45); -var _47=new Date(); -_47.setMonth(_47.getMonth()+1); -document.cookie="XinhaColorPicker="+escape(Xinha.colorPicker.savedColors.join("-"))+";expires="+_47.toGMTString(); -return true; -}; -Xinha.colorPicker.loadColors=function(){ -var _48=document.cookie.indexOf("XinhaColorPicker"); -if(_48!=-1){ -var _49=(document.cookie.indexOf("=",_48)+1); -var end=document.cookie.indexOf(";",_48); -if(end==-1){ -end=document.cookie.length; -} -Xinha.colorPicker.savedColors=unescape(document.cookie.substring(_49,end)).split("-"); -} -}; -Xinha.colorPicker.InputBinding=function(_4b,_4c){ -var doc=_4b.ownerDocument; -var _4e=doc.createElement("span"); -_4e.className="buttonColor"; -var _4f=this.chooser=doc.createElement("span"); -_4f.className="chooser"; -if(_4b.value){ -_4f.style.backgroundColor=_4b.value; -} -_4f.onmouseover=function(){ -_4f.className="chooser buttonColor-hilite"; -}; -_4f.onmouseout=function(){ -_4f.className="chooser"; -}; -_4f.appendChild(doc.createTextNode(" ")); -_4e.appendChild(_4f); -var _50=doc.createElement("span"); -_50.className="nocolor"; -_50.onmouseover=function(){ -_50.className="nocolor buttonColor-hilite"; -_50.style.color="#f00"; -}; -_50.onmouseout=function(){ -_50.className="nocolor"; -_50.style.color="#000"; -}; -_50.onclick=function(){ -_4b.value=""; -_4f.style.backgroundColor=""; -}; -_50.appendChild(doc.createTextNode("×")); -_4e.appendChild(_50); -_4b.parentNode.insertBefore(_4e,_4b.nextSibling); -Xinha._addEvent(_4b,"change",function(){ -_4f.style.backgroundColor=this.value; -}); -_4c=(_4c)?Xinha.cloneObject(_4c):{cellsize:"5px"}; -_4c.callback=(_4c.callback)?_4c.callback:function(_51){ -_4f.style.backgroundColor=_51; -_4b.value=_51; -}; -_4f.onclick=function(){ -var _52=new Xinha.colorPicker(_4c); -_52.open("",_4f,_4b.value); -}; -Xinha.freeLater(this,"chooser"); -}; -Xinha.colorPicker.InputBinding.prototype.setColor=function(_53){ -this.chooser.style.backgroundColor=_53; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/ColorPicker/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/ColorPicker/lang/pt_br.js deleted file mode 100644 index 4b1ea7e480..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/ColorPicker/lang/pt_br.js +++ /dev/null @@ -1,22 +0,0 @@ -// I18N constants -// -// LANG: "pt_br", ENCODING: UTF-8 -// Portuguese Brazilian Translation -// -// Author: Marcio Barbosa, -// MSN: tomarshall@msn.com - ICQ: 69419933 -// Site: http://www.mpg.com.br -// -// Last revision: 06 september 2007 -// Please don´t remove this information -// If you modify any source, please insert a comment with your name and e-mail -// -// Distributed under the same terms as HTMLArea itself. -// This notice MUST stay intact for use (see license.txt). -{ - "Click a color...": "Selecione uma côr...", - "Close": "Fechar", - "Color: ": "Côr:", - "Sample": "Exemplo", - "Web Safe: ": "Web Segura:" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/CreateLink/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/CreateLink/lang/pt_br.js deleted file mode 100644 index f75cd02c8e..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/CreateLink/lang/pt_br.js +++ /dev/null @@ -1,18 +0,0 @@ -// I18N constants -// -// LANG: "pt_br", ENCODING: UTF-8 -// Portuguese Brazilian Translation -// -// Author: Marcio Barbosa, -// MSN: tomarshall@msn.com - ICQ: 69419933 -// Site: http://www.mpg.com.br -// -// Last revision: 06 september 2007 -// Please don´t remove this information -// If you modify any source, please insert a comment with your name and e-mail -// -// Distributed under the same terms as HTMLArea itself. -// This notice MUST stay intact for use (see license.txt). -{ - "You need to select some text before creating a link": "Você precisa selecionar um texto antes de criar um link" -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/CreateLink/link.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/CreateLink/link.js deleted file mode 100644 index fbd334f66e..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/CreateLink/link.js +++ /dev/null @@ -1,67 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/CreateLink/link.js */ -function CreateLink(_1){ -this.editor=_1; -var _2=_1.config; -var _3=this; -_1.config.btnList.createlink[3]=function(){ -_3.show(_3._getSelectedAnchor()); -}; -}; -CreateLink._pluginInfo={name:"CreateLink",origin:"Xinha Core",version:"$LastChangedRevision: 1084 $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.org/tags/0.96.1/modules/CreateLink/link.js $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),sponsor:"",sponsor_url:"",license:"htmlArea"}; -CreateLink.prototype._lc=function(_4){ -return Xinha._lc(_4,"Xinha"); -}; -CreateLink.prototype.onGenerateOnce=function(){ -CreateLink.loadAssets(); -}; -CreateLink.loadAssets=function(){ -var _5=CreateLink; -if(_5.loading){ -return; -} -_5.loading=true; -Xinha._getback(_editor_url+"modules/CreateLink/dialog.html",function(_6){ -_5.html=_6; -_5.dialogReady=true; -}); -Xinha._getback(_editor_url+"modules/CreateLink/pluginMethods.js",function(_7){ -eval(_7); -_5.methodsReady=true; -}); -}; -CreateLink.prototype.onUpdateToolbar=function(){ -if(!(CreateLink.dialogReady&&CreateLink.methodsReady)){ -this.editor._toolbarObjects.createlink.state("enabled",false); -}else{ -this.onUpdateToolbar=null; -} -}; -CreateLink.prototype.prepareDialog=function(){ -var _8=this; -var _9=this.editor; -var _a=this.dialog=new Xinha.Dialog(_9,CreateLink.html,"Xinha",{width:400}); -_a.getElementById("ok").onclick=function(){ -_8.apply(); -}; -_a.getElementById("cancel").onclick=function(){ -_8.dialog.hide(); -}; -if(!_9.config.makeLinkShowsTarget){ -_a.getElementById("f_target_label").style.visibility="hidden"; -_a.getElementById("f_target").style.visibility="hidden"; -_a.getElementById("f_other_target").style.visibility="hidden"; -} -_a.getElementById("f_target").onchange=function(){ -var f=_a.getElementById("f_other_target"); -if(this.value=="_other"){ -f.style.visibility="visible"; -f.select(); -f.focus(); -}else{ -f.style.visibility="hidden"; -} -}; -this.dialogReady=true; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/CreateLink/pluginMethods.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/CreateLink/pluginMethods.js deleted file mode 100644 index 9303b6dd71..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/CreateLink/pluginMethods.js +++ /dev/null @@ -1,109 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/CreateLink/pluginMethods.js */ -CreateLink.prototype.show=function(a){ -if(!this.dialog){ -this.prepareDialog(); -} -var _2=this.editor; -this.a=a; -if(!a&&this.editor.selectionEmpty(this.editor.getSelection())){ -alert(this._lc("You need to select some text before creating a link")); -return false; -} -var _3={f_href:"",f_title:"",f_target:"",f_other_target:""}; -if(a&&a.tagName.toLowerCase()=="a"){ -_3.f_href=this.editor.fixRelativeLinks(a.getAttribute("href")); -_3.f_title=a.title; -if(a.target){ -if(!/_self|_top|_blank/.test(a.target)){ -_3.f_target="_other"; -_3.f_other_target=a.target; -}else{ -_3.f_target=a.target; -_3.f_other_target=""; -} -} -} -this.dialog.show(_3); -}; -CreateLink.prototype.apply=function(){ -var _4=this.dialog.hide(); -var a=this.a; -var _6=this.editor; -var _7={href:"",target:"",title:""}; -if(_4.f_href){ -_7.href=_4.f_href; -_7.title=_4.f_title; -if(_4.f_target.value){ -if(_4.f_target.value=="other"){ -_7.target=_4.f_other_target; -}else{ -_7.target=_4.f_target.value; -} -} -} -if(_4.f_target.value){ -if(_4.f_target.value!="_other"){ -_7.target=_4.f_target.value; -}else{ -_7.target=_4.f_other_target; -} -} -if(a&&a.tagName.toLowerCase()=="a"){ -if(!_7.href){ -if(confirm(this._lc("Are you sure you wish to remove this link?"))){ -var p=a.parentNode; -while(a.hasChildNodes()){ -p.insertBefore(a.removeChild(a.childNodes[0]),a); -} -p.removeChild(a); -_6.updateToolbar(); -return; -} -}else{ -for(var i in _7){ -a.setAttribute(i,_7[i]); -} -if(Xinha.is_ie){ -if(/mailto:([^?<>]*)(\?[^<]*)?$/i.test(a.innerHTML)){ -a.innerHTML=RegExp.$1; -} -} -} -}else{ -if(!_7.href){ -return true; -} -var _a=Xinha.uniq("http://www.example.com/Link"); -_6._doc.execCommand("createlink",false,_a); -var _b=_6._doc.getElementsByTagName("a"); -for(var i=0;i<_b.length;i++){ -var _c=_b[i]; -if(_c.href==_a){ -if(!a){ -a=_c; -} -for(var j in _7){ -_c.setAttribute(j,_7[j]); -} -} -} -} -_6.selectNodeContents(a); -_6.updateToolbar(); -}; -CreateLink.prototype._getSelectedAnchor=function(){ -var _e=this.editor.getSelection(); -var _f=this.editor.createRange(_e); -var a=this.editor.activeElement(_e); -if(a!=null&&a.tagName.toLowerCase()=="a"){ -return a; -}else{ -a=this.editor._getFirstAncestor(_e,"a"); -if(a!=null){ -return a; -} -} -return null; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/DetachedDialog.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/DetachedDialog.js deleted file mode 100644 index 934c3a8aa1..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/DetachedDialog.js +++ /dev/null @@ -1,24 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/Dialogs/DetachedDialog.js */ -Xinha.DetachedDialog=function(_1,_2,_3,_4){ -var _5={"config":new Xinha.Config(),"scrollPos":Xinha.prototype.scrollPos,"_someEditorHasBeenActivated":false,"saveSelection":function(){ -},"deactivateEditor":function(){ -},"_textArea":document.createElement("textarea"),"_iframe":document.createElement("div"),"_doc":document,"hidePanels":function(){ -},"showPanels":function(){ -},"_isFullScreen":false,"activateEditor":function(){ -},"restoreSelection":function(){ -},"updateToolbar":function(){ -},"focusEditor":function(){ -}}; -Xinha.Dialog.initialZ=100; -this.attached=false; -Xinha.DetachedDialog.parentConstructor.call(this,_5,_1,_2,_3,_4); -}; -Xinha.extend(Xinha.DetachedDialog,Xinha.Dialog); -Xinha.DetachedDialog.prototype.attachToPanel=function(){ -return false; -}; -Xinha.DetachedDialog.prototype.detachFromToPanel=function(){ -return false; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/XinhaDialog.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/XinhaDialog.js deleted file mode 100644 index 387f2c6123..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/XinhaDialog.js +++ /dev/null @@ -1,916 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/Dialogs/XinhaDialog.js */ -Xinha.Dialog=function(_1,_2,_3,_4,_5){ -var _6=this; -this.id={}; -this.r_id={}; -this.editor=_1; -this.document=document; -this.size=_4; -this.modal=(_5&&_5.modal===false)?false:true; -this.closable=(_5&&_5.closable===false)?false:true; -this.resizable=(_5&&_5.resizable===false)?false:true; -this.layer=(_5&&_5.layer)?_5.layer:0; -this.centered=(_5&&_5.centered===true)?true:false; -this.closeOnEscape=(_5&&_5.closeOnEscape===true)?true:false; -this.rootElem=null; -this.captionBar=null; -this.main=null; -this.background=null; -this.centered=null; -this.greyout=null; -this.buttons=null; -this.closer=null; -this.icon=null; -this.resizer=null; -this.initialZ=null; -var _7=_1.config.dialogOptions; -if(_7){ -if(typeof _7.centered!="undefined"){ -this.centered=_7.centered; -} -if(typeof _7.resizable!="undefined"){ -this.resizable=_7.resizable; -} -if(typeof _7.closable!="undefined"){ -this.closable=_7.closable; -} -if(typeof _7.greyout!="undefined"){ -this.greyout=_7.greyout; -} -if(typeof _7.closeOnEscape!="undefined"){ -this.closeOnEscape=_7.closeOnEscape; -} -} -var _8; -if(Xinha.is_ie){ -_8=document.createElement("iframe"); -_8.src="about:blank"; -_8.onreadystatechange=function(){ -var _9=window.event.srcElement.contentWindow.document; -if(this.readyState=="complete"&&_9&&_9.body){ -var _a=_9.createElement("div"); -var _b,_c=document.styleSheets; -for(var i=0;i<_c.length;i++){ -if(_c[i].id.indexOf("Xinha")!=-1&&_c[i].cssText){ -_b+=_c[i].cssText; -} -} -_a.innerHTML="
"; -_9.getElementsByTagName("body")[0].appendChild(_a); -_9.body.className="xinha_dialog_background"; -if(_6.modal){ -_9.body.className+="_modal"; -} -if(_6.greyout){ -_9.body.className+="_greyout"; -} -} -}; -}else{ -_8=document.createElement("div"); -} -_8.className="xinha_dialog_background"; -if(this.modal){ -_8.className+="_modal"; -} -if(this.greyout){ -_8.className+="_greyout"; -} -var z=1000; -if(!Xinha.Dialog.initialZ){ -var p=_1._htmlArea; -while(p){ -if(p.style&&parseInt(p.style.zIndex,10)>z){ -z=parseInt(p.style.zIndex,10); -} -p=p.parentNode; -} -Xinha.Dialog.initialZ=z; -} -z=Xinha.Dialog.initialZ; -var s=_8.style; -s.position="absolute"; -s.top=0; -s.left=0; -s.border="none"; -s.overflow="hidden"; -s.display="none"; -s.zIndex=(this.modal?z+25:z+1)+this.layer; -document.body.appendChild(_8); -this.background=_8; -_8=null; -Xinha.freeLater(this,"background"); -var _11=document.createElement("div"); -_11.style.position=(Xinha.is_ie||!this.modal)?"absolute":"fixed"; -_11.style.zIndex=(this.modal?z+27:z+3)+this.layer; -_11.style.display="none"; -if(!this.modal){ -Xinha._addEvent(_11,"mousedown",function(){ -Xinha.Dialog.activateModeless(_6); -}); -} -_11.className="dialog"+(this.modal?"":" modeless"); -if(Xinha.is_chrome){ -_11.className+=" chrome"; -} -document.body.appendChild(_11); -_11.style.paddingBottom="10px"; -_11.style.width=(_4&&_4.width)?_4.width+"px":""; -if(_4&&_4.height){ -if(Xinha.ie_version<7){ -_11.style.height=_4.height+"px"; -}else{ -_11.style.minHeight=_4.height+"px"; -} -} -_2=this.translateHtml(_2,_3); -var _12=document.createElement("div"); -_11.appendChild(_12); -_12.innerHTML=_2; -this.fixupDOM(_12,_3); -var _13=_12.removeChild(_12.getElementsByTagName("h1")[0]); -_11.insertBefore(_13,_12); -Xinha._addEvent(_13,"mousedown",function(ev){ -_6.dragStart(ev); -}); -_13.style.MozUserSelect="none"; -_13.style.WebkitUserSelect="none"; -_13.unselectable="on"; -_13.onselectstart=function(){ -return false; -}; -this.buttons=document.createElement("div"); -s=this.buttons.style; -s.position="absolute"; -s.top="0"; -s.right="2px"; -_11.appendChild(this.buttons); -if(this.closable&&this.closeOnEscape){ -Xinha._addEvent(document,"keypress",function(ev){ -if(ev.keyCode==27){ -if(Xinha.Dialog.activeModeless==_6||_6.modal){ -_6.hide(); -return true; -} -} -}); -} -this.closer=null; -if(this.closable){ -this.closer=document.createElement("div"); -this.closer.className="closeButton"; -this.closer.onmousedown=function(ev){ -this.className="closeButton buttonClick"; -Xinha._stopEvent(Xinha.getEvent(ev)); -return false; -}; -this.closer.onmouseout=function(ev){ -this.className="closeButton"; -Xinha._stopEvent(Xinha.getEvent(ev)); -return false; -}; -this.closer.onmouseup=function(){ -this.className="closeButton"; -_6.hide(); -return false; -}; -this.buttons.appendChild(this.closer); -var _18=document.createElement("span"); -_18.className="innerX"; -_18.style.position="relative"; -_18.style.top="-3px"; -_18.appendChild(document.createTextNode("×")); -this.closer.appendChild(_18); -_18=null; -} -this.icon=document.createElement("img"); -var _19=this.icon; -_19.className="icon"; -_19.src=_1.config.iconList.dialogCaption; -_19.style.position="absolute"; -_19.style.top="3px"; -_19.style.left="2px"; -_19.ondrag=function(){ -return false; -}; -_11.appendChild(this.icon); -var all=_11.getElementsByTagName("*"); -for(var i=0;i_29){ -_20.height=_29+"px"; -if(_1f.scrollHeight>_26){ -_23.main.style.overflowY="auto"; -} -} -if(this.size.top&&this.size.left){ -_20.top=parseInt(this.size.top,10)+"px"; -_20.left=parseInt(this.size.left,10)+"px"; -}else{ -if(this.editor.btnClickEvent&&!this.centered){ -var _2b=this.editor.btnClickEvent; -if(_20.position=="absolute"){ -_20.top=_2b.clientY+this.scrollPos.y+"px"; -}else{ -_20.top=_2b.clientY+"px"; -} -if(_26+_1f.offsetTop>_29){ -_20.top=(_20.position=="absolute"?this.scrollPos.y:0)+"px"; -} -if(_20.position=="absolute"){ -_20.left=_2b.clientX+this.scrollPos.x+"px"; -}else{ -_20.left=_2b.clientX+"px"; -} -if(_27+_1f.offsetLeft>_2a){ -_20.left=_2b.clientX-_27+"px"; -if(_1f.offsetLeft<0){ -_20.left=0; -} -} -this.editor.btnClickEvent=null; -}else{ -var top=(_29-_26)/2; -var _2d=(_2a-_27)/2; -_20.top=((top>0)?top:0)+"px"; -_20.left=((_2d>0)?_2d:0)+"px"; -} -} -} -this.width=_27; -this.height=_26; -if(!_21){ -this.resizeBackground({width:_27+"px",height:_26+"px"}); -this.posBackground({top:_20.top,left:_20.left}); -} -if(typeof _1e!="undefined"){ -this.setValues(_1e); -} -this.dialogShown=true; -}; -Xinha.Dialog.prototype.hide=function(){ -if(this.attached){ -this.editor.hidePanel(this.rootElem); -}else{ -Xinha.Dialog.fadeOut(this.rootElem); -this.hideBackground(); -var _2e=this; -if(Xinha.is_ff2&&this.modal){ -this.editor._textArea.style.display=this._restoreTo[0]; -this.editor._iframe.style.visibility=this._restoreTo[1]; -this.editor.showPanels(this._restoreTo[2]); -} -if(!this.editor._isFullScreen&&this.modal){ -window.scroll(this.scrollPos.x,this.scrollPos.y); -} -if(Xinha.is_ie&&!this.modal){ -Xinha._removeEvent(this.editor._doc,"mouseup",_2e.saveSelection); -} -if(this.modal){ -this.editor.suspendUpdateToolbar=false; -this.editor.currentModal=null; -this.editor.activateEditor(); -} -} -if(this.modal){ -this.editor.restoreSelection(this._lastRange); -} -this.dialogShown=false; -this.editor.updateToolbar(); -this.editor.focusEditor(); -return this.getValues(); -}; -Xinha.Dialog.prototype.toggle=function(){ -if(this.rootElem.style.display=="none"){ -this.show(); -}else{ -this.hide(); -} -}; -Xinha.Dialog.prototype.collapse=function(){ -if(this.collapsed){ -this.collapsed=false; -this.show(); -}else{ -this.main.style.height=0; -this.collapsed=true; -} -}; -Xinha.Dialog.prototype.getElementById=function(id){ -if(!this.rootElem.parentNode){ -this.document.body.appendChild(this.rootElem); -} -return this.document.getElementById(this.id[id]?this.id[id]:id); -}; -Xinha.Dialog.prototype.getElementsByName=function(_30){ -if(!this.rootElem.parentNode){ -this.document.body.appendChild(this.rootElem); -} -var els=this.document.getElementsByName(this.id[_30]?this.id[_30]:_30); -return Xinha.collectionToArray(els); -}; -Xinha.Dialog.prototype.getElementsByClassName=function(_32){ -return Xinha.getElementsByClassName(this.rootElem,_32); -}; -Xinha.Dialog.prototype.dragStart=function(ev){ -if(this.attached||this.dragging){ -return; -} -if(!this.modal){ -this.posBackground({top:0,left:0}); -this.resizeBackground(Xinha.Dialog.calcFullBgSize()); -this.editor.suspendUpdateToolbar=true; -} -ev=Xinha.getEvent(ev); -var _34=this; -_34.dragging=true; -_34.scrollPos=_34.editor.scrollPos(); -var st=_34.rootElem.style; -_34.xOffs=ev.offsetX||ev.layerX; -_34.yOffs=ev.offsetY||ev.layerY; -_34.mouseMove=function(ev){ -_34.dragIt(ev); -}; -Xinha._addEvent(document,"mousemove",_34.mouseMove); -if(Xinha.is_ie){ -Xinha._addEvent(this.background.contentWindow.document,"mousemove",_34.mouseMove); -} -_34.mouseUp=function(ev){ -_34.dragEnd(ev); -}; -Xinha._addEvent(document,"mouseup",_34.mouseUp); -if(Xinha.is_ie){ -Xinha._addEvent(this.background.contentWindow.document,"mouseup",_34.mouseUp); -} -}; -Xinha.Dialog.prototype.dragIt=function(ev){ -var _39=this; -if(!_39.dragging){ -return false; -} -var _3a,_3b,_3c; -if(_39.rootElem.style.position=="absolute"){ -_3a=(ev.clientY+this.scrollPos.y)-_39.yOffs+"px"; -_3b=(ev.clientX+this.scrollPos.x)-_39.xOffs+"px"; -_3c={top:_3a,left:_3b}; -}else{ -if(_39.rootElem.style.position=="fixed"){ -_3a=ev.clientY-_39.yOffs+"px"; -_3b=ev.clientX-_39.xOffs+"px"; -_3c={top:_3a,left:_3b}; -} -} -_39.posDialog(_3c); -}; -Xinha.Dialog.prototype.dragEnd=function(ev){ -var _3e=this; -if(!this.modal){ -this.editor.suspendUpdateToolbar=false; -} -if(!_3e.dragging){ -return false; -} -_3e.dragging=false; -Xinha._removeEvent(document,"mousemove",_3e.mouseMove); -if(Xinha.is_ie){ -Xinha._removeEvent(this.background.contentWindow.document,"mousemove",_3e.mouseMove); -} -Xinha._removeEvent(document,"mouseup",_3e.mouseUp); -if(Xinha.is_ie){ -Xinha._removeEvent(this.background.contentWindow.document,"mouseup",_3e.mouseUp); -} -var _3f=_3e.rootElem.style; -_3e.size.top=_3f.top; -_3e.size.left=_3f.left; -if(!this.modal){ -this.sizeBgToDialog(); -} -}; -Xinha.Dialog.prototype.resizeStart=function(ev){ -var _41=this; -if(_41.resizing){ -return; -} -_41.resizing=true; -if(!this.modal){ -this.editor.suspendUpdateToolbar=true; -this.posBackground({top:0,left:0}); -this.resizeBackground(Xinha.Dialog.calcFullBgSize()); -} -_41.scrollPos=_41.editor.scrollPos(); -var st=_41.rootElem.style; -st.minHeight=""; -st.overflow="hidden"; -_41.xOffs=parseInt(st.left,10); -_41.yOffs=parseInt(st.top,10); -_41.mouseMove=function(ev){ -_41.resizeIt(ev); -}; -Xinha._addEvent(document,"mousemove",_41.mouseMove); -if(Xinha.is_ie){ -Xinha._addEvent(this.background.contentWindow.document,"mousemove",_41.mouseMove); -} -_41.mouseUp=function(ev){ -_41.resizeEnd(ev); -}; -Xinha._addEvent(document,"mouseup",_41.mouseUp); -if(Xinha.is_ie){ -Xinha._addEvent(this.background.contentWindow.document,"mouseup",_41.mouseUp); -} -}; -Xinha.Dialog.prototype.resizeIt=function(ev){ -var _46=this; -if(!_46.resizing){ -return false; -} -var _47,_48; -if(_46.rootElem.style.position=="absolute"){ -_47=ev.clientY+_46.scrollPos.y; -_48=ev.clientX+_46.scrollPos.x; -}else{ -_47=ev.clientY; -_48=ev.clientX; -} -_48-=_46.xOffs; -_47-=_46.yOffs; -var _49={}; -_49.width=((_48>10)?_48:10)+8+"px"; -_49.height=((_47>10)?_47:10)+"px"; -_46.sizeDialog(_49); -_46.width=_46.rootElem.offsetWidth; -_46.height=_46.rootElem.offsetHeight; -_46.onresize(); -}; -Xinha.Dialog.prototype.resizeEnd=function(ev){ -var _4b=this; -_4b.resizing=false; -if(!this.modal){ -this.editor.suspendUpdateToolbar=false; -} -Xinha._removeEvent(document,"mousemove",_4b.mouseMove); -if(Xinha.is_ie){ -Xinha._removeEvent(this.background.contentWindow.document,"mouseup",_4b.mouseUp); -} -Xinha._removeEvent(document,"mouseup",_4b.mouseUp); -if(Xinha.is_ie){ -Xinha._removeEvent(this.background.contentWindow.document,"mouseup",_4b.mouseUp); -} -_4b.size.width=_4b.rootElem.offsetWidth; -_4b.size.height=_4b.rootElem.offsetHeight; -if(!this.modal){ -this.sizeBgToDialog(); -} -}; -Xinha.Dialog.prototype.attachToPanel=function(_4c){ -var _4d=this; -var _4e=this.rootElem; -var _4f=this.editor; -this.attached=true; -this.rootElem.side=_4c; -this.captionBar.ondblclick=function(ev){ -_4d.detachFromPanel(Xinha.getEvent(ev)); -}; -_4e.style.position="static"; -_4e.parentNode.removeChild(_4e); -this.background.style.display="none"; -this.captionBar.style.paddingLeft="3px"; -this.resizer.style.display="none"; -if(this.closable){ -this.closer.style.display="none"; -} -this.icon.style.display="none"; -if(_4c=="left"||_4c=="right"){ -_4e.style.width=_4f.config.panel_dimensions[_4c]; -}else{ -_4e.style.width=""; -} -Xinha.addClasses(_4e,"panel"); -_4f._panels[_4c].panels.push(_4e); -_4f._panels[_4c].div.appendChild(_4e); -_4f.notifyOf("panel_change",{"action":"add","panel":_4e}); -}; -Xinha.Dialog.prototype.detachFromPanel=function(){ -var _51=this; -var _52=_51.rootElem; -var _53=_52.style; -var _54=_51.editor; -_51.attached=false; -var pos=Xinha.getElementTopLeft(_52); -_53.position="absolute"; -_53.top=pos.top+"px"; -_53.left=pos.left+"px"; -_51.resizer.style.display=""; -if(_51.closable){ -_51.closer.style.display=""; -} -_51.icon.style.display=""; -if(_51.size.width){ -_52.style.width=_51.size.width+"px"; -} -Xinha.removeClasses(_52,"panel"); -_54.removePanel(_52); -document.body.appendChild(_52); -_51.captionBar.ondblclick=function(){ -_51.attachToPanel(_52.side); -}; -this.background.style.display=""; -this.sizeBgToDialog(); -}; -Xinha.Dialog.calcFullBgSize=function(){ -var _56=Xinha.pageSize(); -var _57=Xinha.viewportSize(); -return {width:(_56.x>_57.x?_56.x:_57.x)+"px",height:(_56.x>_57.y?_56.y:_57.y)+"px"}; -}; -Xinha.Dialog.prototype.sizeBgToDialog=function(){ -var _58=this.rootElem.style; -var _59=this.background.style; -_59.top=_58.top; -_59.left=_58.left; -_59.width=_58.width; -_59.height=_58.height; -}; -Xinha.Dialog.prototype.hideBackground=function(){ -Xinha.Dialog.fadeOut(this.background); -}; -Xinha.Dialog.prototype.showBackground=function(){ -Xinha.Dialog.fadeIn(this.background,70); -}; -Xinha.Dialog.prototype.posBackground=function(pos){ -if(this.background.style.display!="none"){ -this.background.style.top=pos.top; -this.background.style.left=pos.left; -} -}; -Xinha.Dialog.prototype.resizeBackground=function(_5b){ -if(this.background.style.display!="none"){ -this.background.style.width=_5b.width; -this.background.style.height=_5b.height; -} -}; -Xinha.Dialog.prototype.posDialog=function(pos){ -var st=this.rootElem.style; -st.left=pos.left; -st.top=pos.top; -}; -Xinha.Dialog.prototype.sizeDialog=function(_5e){ -var st=this.rootElem.style; -st.height=_5e.height; -st.width=_5e.width; -var _60=parseInt(_5e.width,10); -var _61=parseInt(_5e.height,10)-this.captionBar.offsetHeight; -this.main.style.height=(_61>20)?_61:20+"px"; -this.main.style.width=(_60>10)?_60:10+"px"; -}; -Xinha.Dialog.prototype.setValues=function(_62){ -for(var i in _62){ -if(typeof i=="string"){ -var _64=this.getElementsByName(i); -if(!_64){ -continue; -} -for(var x=0;x<_64.length;x++){ -var e=_64[x]; -switch(e.tagName.toLowerCase()){ -case "select": -for(var j=0;j=0){ -v=i.options[i.selectedIndex]; -} -} -break; -default: -switch(i.type.toLowerCase()){ -case "radio": -if(i.checked){ -v=i.value; -} -break; -case "checkbox": -if(v===null){ -if(this.getElementsByName(this.r_id[i.name]).length>1){ -v=[]; -} -} -if(i.checked){ -if(v!==null&&typeof v=="object"&&v.push){ -v.push(i.value); -}else{ -v=i.value; -} -} -break; -default: -v=i.value; -break; -} -} -_69[this.r_id[i.name]]=v; -} -return _69; -}; -Xinha.Dialog.prototype.setLocalizer=function(_6f){ -var _70=this; -if(typeof _6f=="function"){ -_70._lc=_6f; -}else{ -if(_6f){ -this._lc=function(_71){ -return Xinha._lc(_71,_6f); -}; -}else{ -this._lc=function(_72){ -return _72; -}; -} -} -}; -Xinha.Dialog.prototype.translateHtml=function(_73,_74){ -var _75=this; -if(_74){ -this.setLocalizer(_74); -} -_73=_73.replace(/((?:name)|(?:id))=(['"])\[([a-z0-9_]+)\]\2/ig,function(_76,_77,_78,id){ -return _77+"="+_78+_75.createId(id)+_78; -}).replace(/(.*?)<\/l10n>/ig,function(_7a,_7b){ -return _75._lc(_7b); -}).replace(/\="_\((.*?)\)"/g,function(_7c,_7d){ -return "=\""+_75._lc(_7d)+"\""; -}); -return _73; -}; -Xinha.Dialog.prototype.fixupDOM=function(_7e,_7f){ -var _80=this; -if(typeof _7f!="string"){ -_7f="GenericPlugin"; -} -var _81=function(_82,_83){ -switch(_83){ -case "editor": -return _editor_url; -case "plugin": -return Xinha.getPluginDir(_7f); -case "images": -return _80.editor.imgURL("images"); -} -}; -var _84=Xinha.collectionToArray(_7e.getElementsByTagName("img")); -for(var _85=0;_85<_84.length;++_85){ -var _86=_84[_85]; -var _87=_86.getAttribute("src"); -if(_87){ -var _88=_87.replace(/^\[(editor|plugin|images)\]/,_81); -if(_88!=_87){ -_86.setAttribute("src",_88); -} -} -} -var _89=Xinha.collectionToArray(_7e.getElementsByTagName("a")); -for(var _85=0;_85<_89.length;++_85){ -var _8a=_89[_85]; -var _87=_8a.getAttribute("href"); -if(_87){ -var _88=_87.replace(/^\[(editor|plugin|images)\]/,_81); -if(_88!=_87){ -_8a.setAttribute("href",_88); -} -} -} -}; -Xinha.Dialog.prototype.createId=function(id){ -var _8c=this; -if(typeof _8c.id[id]=="undefined"){ -_8c.id[id]=Xinha.uniq("Dialog"); -_8c.r_id[_8c.id[id]]=id; -} -return _8c.id[id]; -}; -Xinha.Dialog.activateModeless=function(_8d){ -if(Xinha.Dialog.activeModeless==_8d||_8d.attached){ -return; -} -if(Xinha.Dialog.activeModeless){ -Xinha.Dialog.activeModeless.rootElem.style.zIndex=parseInt(Xinha.Dialog.activeModeless.rootElem.style.zIndex,10)-10; -} -Xinha.Dialog.activeModeless=_8d; -Xinha.Dialog.activeModeless.rootElem.style.zIndex=parseInt(Xinha.Dialog.activeModeless.rootElem.style.zIndex,10)+10; -}; -Xinha.Dialog.setOpacity=function(el,_8f){ -if(typeof el.style.filter!="undefined"){ -el.style.filter=(_8f<100)?"alpha(opacity="+_8f+")":""; -}else{ -el.style.opacity=_8f/100; -} -}; -Xinha.Dialog.fadeIn=function(el,_91,_92,_93,_94){ -_93=_93||1; -_94=_94||25; -_91=_91||100; -el.op=el.op||0; -var op=el.op; -if(el.style.display=="none"){ -Xinha.Dialog.setOpacity(el,0); -el.style.display=""; -} -if(op<_91){ -el.op+=_94; -Xinha.Dialog.setOpacity(el,op); -el.timeOut=setTimeout(function(){ -Xinha.Dialog.fadeIn(el,_91,_92,_93,_94); -},_93); -}else{ -Xinha.Dialog.setOpacity(el,_91); -el.op=_91; -el.timeOut=null; -if(typeof _92=="function"){ -_92.call(); -} -} -}; -Xinha.Dialog.fadeOut=function(el,_97,_98){ -_97=_97||1; -_98=_98||30; -if(typeof el.op=="undefined"){ -el.op=100; -} -var op=el.op; -if(op>=0){ -el.op-=_98; -Xinha.Dialog.setOpacity(el,op); -el.timeOut=setTimeout(function(){ -Xinha.Dialog.fadeOut(el,_97,_98); -},_97); -}else{ -Xinha.Dialog.setOpacity(el,0); -el.style.display="none"; -el.op=0; -el.timeOut=null; -} -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/dialog.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/dialog.js deleted file mode 100644 index 41f4a4aa33..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/dialog.js +++ /dev/null @@ -1,74 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/Dialogs/dialog.js */ -function Dialog(_1,_2,_3){ -if(typeof _3=="undefined"){ -_3=window; -} -if(typeof window.showModalDialog=="function"&&!Xinha.is_webkit){ -Dialog._return=function(_4){ -if(typeof _2=="function"){ -_2(_4); -} -}; -var r=window.showModalDialog(_1,_3,"dialogheight=300;dialogwidth=400;resizable=yes"); -}else{ -Dialog._geckoOpenModal(_1,_2,_3); -} -}; -Dialog._parentEvent=function(ev){ -setTimeout(function(){ -if(Dialog._modal&&!Dialog._modal.closed){ -Dialog._modal.focus(); -} -},50); -try{ -if(Dialog._modal&&!Dialog._modal.closed){ -Xinha._stopEvent(ev); -} -} -catch(e){ -} -}; -Dialog._return=null; -Dialog._modal=null; -Dialog._arguments=null; -Dialog._selection=null; -Dialog._geckoOpenModal=function(_7,_8,_9){ -var _a=window.open(_7,"hadialog","toolbar=no,menubar=no,personalbar=no,width=10,height=10,"+"scrollbars=no,resizable=yes,modal=yes,dependable=yes"); -Dialog._modal=_a; -Dialog._arguments=_9; -function capwin(w){ -Xinha._addEvent(w,"click",Dialog._parentEvent); -Xinha._addEvent(w,"mousedown",Dialog._parentEvent); -Xinha._addEvent(w,"focus",Dialog._parentEvent); -}; -function relwin(w){ -Xinha._removeEvent(w,"click",Dialog._parentEvent); -Xinha._removeEvent(w,"mousedown",Dialog._parentEvent); -Xinha._removeEvent(w,"focus",Dialog._parentEvent); -}; -capwin(window); -for(var i=0;i(.*?)<\/l10n>/ig,function(_a,_b){ -return _5._lc(_b); -}).replace(/="_\((.*?)\)"/g,function(_c,_d){ -return "=\""+_5._lc(_d)+"\""; -}); -this.rootElem.innerHTML=_3; -}; -Xinha.PanelDialog.prototype.show=function(_e){ -this.setValues(_e); -this.editor.showPanel(this.rootElem); -}; -Xinha.PanelDialog.prototype.hide=function(){ -this.editor.hidePanel(this.rootElem); -return this.getValues(); -}; -Xinha.PanelDialog.prototype.onresize=Xinha.Dialog.prototype.onresize; -Xinha.PanelDialog.prototype.toggle=Xinha.Dialog.prototype.toggle; -Xinha.PanelDialog.prototype.setValues=Xinha.Dialog.prototype.setValues; -Xinha.PanelDialog.prototype.getValues=Xinha.Dialog.prototype.getValues; -Xinha.PanelDialog.prototype.getElementById=Xinha.Dialog.prototype.getElementById; -Xinha.PanelDialog.prototype.getElementsByName=Xinha.Dialog.prototype.getElementsByName; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/popupwin.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/popupwin.js deleted file mode 100644 index 16fa407cc3..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Dialogs/popupwin.js +++ /dev/null @@ -1,122 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/Dialogs/popupwin.js */ -function PopupWin(_1,_2,_3,_4){ -this.editor=_1; -this.handler=_3; -var _5=window.open("","__ha_dialog","toolbar=no,menubar=no,personalbar=no,width=600,height=600,left=20,top=40,scrollbars=no,resizable=yes"); -this.window=_5; -var _6=_5.document; -this.doc=_6; -var _7=this; -var _8=document.baseURI||document.URL; -if(_8&&_8.match(/(.*)\/([^\/]+)/)){ -_8=RegExp.$1+"/"; -} -if(typeof _editor_url!="undefined"&&!(/^\//.test(_editor_url))&&!(/http:\/\//.test(_editor_url))){ -_8+=_editor_url; -}else{ -_8=_editor_url; -} -if(!(/\/$/.test(_8))){ -_8+="/"; -} -this.baseURL=_8; -_6.open(); -var _9=""+_2+"\n"; -_9+="\n"; -if(_editor_skin!=""){ -_9+="\n"; -} -_9+="\n"; -_9+=""; -_6.write(_9); -_6.close(); -function init2(){ -var _a=_6.body; -if(!_a){ -setTimeout(init2,25); -return false; -} -_5.title=_2; -_6.documentElement.style.padding="0px"; -_6.documentElement.style.margin="0px"; -var _b=_6.createElement("div"); -_b.className="content"; -_7.content=_b; -_a.appendChild(_b); -_7.element=_a; -_4(_7); -_5.focus(); -}; -init2(); -}; -PopupWin.prototype.callHandler=function(){ -var _c=["input","textarea","select"]; -var _d={}; -for(var ti=_c.length;--ti>=0;){ -var _f=_c[ti]; -var els=this.content.getElementsByTagName(_f); -for(var j=0;j -{ - "Maximize/Minimize Editor": "Maximizar/Minimizar Editor" -}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/fr.js deleted file mode 100644 index af4b014f94..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -// I18N constants -// LANG: "fr", ENCODING: UTF-8 -{ - "Maximize/Minimize Editor": "Agrandir/Réduire l'éditeur" -}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/ja.js deleted file mode 100644 index f10c4da110..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -// I18N constants -// LANG: "ja", ENCODING: UTF-8 -{ - "Maximize/Minimize Editor": "エディタの最大化/最小化" -}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/nb.js deleted file mode 100644 index aba7c2b69e..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/nb.js +++ /dev/null @@ -1,6 +0,0 @@ -// I18N constants -// LANG: "nb", ENCODING: UTF-8 -// translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com -{ - "Maximize/Minimize Editor": "Maksimer/Minimer WYSIWYG vindu" -}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/nl.js deleted file mode 100644 index 4fcdc3f113..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/nl.js +++ /dev/null @@ -1,6 +0,0 @@ -// I18N constants -// LANG: "nl", ENCODING: UTF-8 -// translated: Arthur Bogaart a.bogaart@onehippo.org -{ - "Maximize/Minimize Editor": "Editor maximaliseren/verkleinen" -}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/pl.js deleted file mode 100644 index 0c639bb495..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/pl.js +++ /dev/null @@ -1,6 +0,0 @@ -// I18N constants -// LANG: "pl", ENCODING: UTF-8 -// translated: Krzysztof Kotowicz, koto1sa@o2.pl, http://www.eskot.krakow.pl/portfolio -{ - "Maximize/Minimize Editor": "Maksymalizuj/minimalizuj edytor" -}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/pt_br.js deleted file mode 100644 index 06e4812dcb..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/pt_br.js +++ /dev/null @@ -1,18 +0,0 @@ -// I18N constants -// -// LANG: "pt_br", ENCODING: UTF-8 -// Portuguese Brazilian Translation -// -// Author: Marcio Barbosa, -// MSN: tomarshall@msn.com - ICQ: 69419933 -// Site: http://www.mpg.com.br -// -// Last revision: 06 september 2007 -// Please don´t remove this information -// If you modify any source, please insert a comment with your name and e-mail -// -// Distributed under the same terms as HTMLArea itself. -// This notice MUST stay intact for use (see license.txt). -{ - "Maximize/Minimize Editor": "Maximizar/Minimizar Editor" -}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/ru.js deleted file mode 100644 index b2248ef880..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/ru.js +++ /dev/null @@ -1,6 +0,0 @@ -// I18N constants -// LANG: "ru", ENCODING: UTF-8 -// Author: Andrei Blagorazumov, a@fnr.ru -{ - "Maximize/Minimize Editor": "Развернуть/Свернуть редактор" -}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/sv.js deleted file mode 100755 index c27fee57a2..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/FullScreen/lang/sv.js +++ /dev/null @@ -1,6 +0,0 @@ -// I18N constants -// LANG: "sv" (Swedish), ENCODING: UTF-8 -// translated: Erik Dalén, -{ - "Maximize/Minimize Editor": "Maximera/Minimera WYSIWYG fönster" -}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Gecko/Gecko.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Gecko/Gecko.js deleted file mode 100644 index 45237c46a5..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Gecko/Gecko.js +++ /dev/null @@ -1,471 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/Gecko/Gecko.js */ -Gecko._pluginInfo={name:"Gecko",origin:"Xinha Core",version:"$LastChangedRevision: 1084 $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.org/tags/0.96.1/modules/Gecko/Gecko.js $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),sponsor:"",sponsor_url:"",license:"htmlArea"}; -function Gecko(_1){ -this.editor=_1; -_1.Gecko=this; -}; -Gecko.prototype.onKeyPress=function(ev){ -var _3=this.editor; -var s=_3.getSelection(); -if(_3.isShortCut(ev)){ -switch(_3.getKey(ev).toLowerCase()){ -case "z": -if(_3._unLink&&_3._unlinkOnUndo){ -Xinha._stopEvent(ev); -_3._unLink(); -_3.updateToolbar(); -return true; -} -break; -case "a": -sel=_3.getSelection(); -sel.removeAllRanges(); -range=_3.createRange(); -range.selectNodeContents(_3._doc.body); -sel.addRange(range); -Xinha._stopEvent(ev); -return true; -break; -case "v": -if(!_3.config.htmlareaPaste){ -return true; -} -break; -} -} -switch(_3.getKey(ev)){ -case " ": -var _5=function(_6,_7){ -var _8=_6.nextSibling; -if(typeof _7=="string"){ -_7=_3._doc.createElement(_7); -} -var a=_6.parentNode.insertBefore(_7,_8); -Xinha.removeFromParent(_6); -a.appendChild(_6); -_8.data=" "+_8.data; -s.collapse(_8,1); -_3._unLink=function(){ -var t=a.firstChild; -a.removeChild(t); -a.parentNode.insertBefore(t,a); -Xinha.removeFromParent(a); -_3._unLink=null; -_3._unlinkOnUndo=false; -}; -_3._unlinkOnUndo=true; -return a; -}; -if(_3.config.convertUrlsToLinks&&s&&s.isCollapsed&&s.anchorNode.nodeType==3&&s.anchorNode.data.length>3&&s.anchorNode.data.indexOf(".")>=0){ -var _b=s.anchorNode.data.substring(0,s.anchorOffset).search(/\S{4,}$/); -if(_b==-1){ -break; -} -if(_3._getFirstAncestor(s,"a")){ -break; -} -var _c=s.anchorNode.data.substring(0,s.anchorOffset).replace(/^.*?(\S*)$/,"$1"); -var _d=_c.match(Xinha.RE_email); -if(_d){ -var _e=s.anchorNode; -var _f=_e.splitText(s.anchorOffset); -var _10=_e.splitText(_b); -_5(_10,"a").href="mailto:"+_d[0]; -break; -} -RE_date=/([0-9]+\.)+/; -RE_ip=/(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/; -var _11=_c.match(Xinha.RE_url); -if(_11){ -if(RE_date.test(_c)){ -break; -} -var _12=s.anchorNode; -var _13=_12.splitText(s.anchorOffset); -var _14=_12.splitText(_b); -_5(_14,"a").href=(_11[1]?_11[1]:"http://")+_11[2]; -break; -} -} -break; -} -switch(ev.keyCode){ -case 27: -if(_3._unLink){ -_3._unLink(); -Xinha._stopEvent(ev); -} -break; -break; -case 8: -case 46: -if(!ev.shiftKey&&this.handleBackspace()){ -Xinha._stopEvent(ev); -} -default: -_3._unlinkOnUndo=false; -if(s.anchorNode&&s.anchorNode.nodeType==3){ -var a=_3._getFirstAncestor(s,"a"); -if(!a){ -break; -} -if(!a._updateAnchTimeout){ -if(s.anchorNode.data.match(Xinha.RE_email)&&a.href.match("mailto:"+s.anchorNode.data.trim())){ -var _16=s.anchorNode; -var _17=function(){ -a.href="mailto:"+_16.data.trim(); -a._updateAnchTimeout=setTimeout(_17,250); -}; -a._updateAnchTimeout=setTimeout(_17,1000); -break; -} -var m=s.anchorNode.data.match(Xinha.RE_url); -if(m&&a.href.match(new RegExp("http(s)?://"+Xinha.escapeStringForRegExp(s.anchorNode.data.trim())))){ -var _19=s.anchorNode; -var _1a=function(){ -m=_19.data.match(Xinha.RE_url); -if(m){ -a.href=(m[1]?m[1]:"http://")+m[2]; -} -a._updateAnchTimeout=setTimeout(_1a,250); -}; -a._updateAnchTimeout=setTimeout(_1a,1000); -} -} -} -break; -} -return false; -}; -Gecko.prototype.handleBackspace=function(){ -var _1b=this.editor; -setTimeout(function(){ -var sel=_1b.getSelection(); -var _1d=_1b.createRange(sel); -var SC=_1d.startContainer; -var SO=_1d.startOffset; -var EC=_1d.endContainer; -var EO=_1d.endOffset; -var _22=SC.nextSibling; -if(SC.nodeType==3){ -SC=SC.parentNode; -} -if(!(/\S/.test(SC.tagName))){ -var p=document.createElement("p"); -while(SC.firstChild){ -p.appendChild(SC.firstChild); -} -SC.parentNode.insertBefore(p,SC); -Xinha.removeFromParent(SC); -var r=_1d.cloneRange(); -r.setStartBefore(_22); -r.setEndAfter(_22); -r.extractContents(); -sel.removeAllRanges(); -sel.addRange(r); -} -},10); -}; -Gecko.prototype.inwardHtml=function(_25){ -_25=_25.replace(/<(\/?)strong(\s|>|\/)/ig,"<$1b$2"); -_25=_25.replace(/<(\/?)em(\s|>|\/)/ig,"<$1i$2"); -_25=_25.replace(/<(\/?)del(\s|>|\/)/ig,"<$1strike$2"); -return _25; -}; -Gecko.prototype.outwardHtml=function(_26){ -_26=_26.replace(/[\s]*<\/script>/ig,""); -return _26; -}; -Gecko.prototype.onExecCommand=function(_27,UI,_29){ -try{ -this.editor._doc.execCommand("useCSS",false,true); -this.editor._doc.execCommand("styleWithCSS",false,false); -} -catch(ex){ -} -switch(_27){ -case "paste": -alert(Xinha._lc("The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.")); -return true; -break; -case "removeformat": -var _2a=this.editor; -var sel=_2a.getSelection(); -var _2c=_2a.saveSelection(sel); -var _2d=_2a.createRange(sel); -var els=_2a._doc.body.getElementsByTagName("*"); -var _2f=(_2d.startContainer.nodeType==1)?_2d.startContainer:_2d.startContainer.parentNode; -var i,el; -if(sel.isCollapsed){ -_2d.selectNodeContents(_2a._doc.body); -} -for(i=0;isel.anchorOffset&&sel.anchorNode.childNodes[sel.anchorOffset].nodeType==1){ -return sel.anchorNode.childNodes[sel.anchorOffset]; -}else{ -if(sel.anchorNode.nodeType==1){ -return sel.anchorNode; -}else{ -return null; -} -} -} -return null; -}; -Xinha.prototype.selectionEmpty=function(sel){ -if(!sel){ -return true; -} -if(typeof sel.isCollapsed!="undefined"){ -return sel.isCollapsed; -} -return true; -}; -Xinha.prototype.saveSelection=function(){ -return this.createRange(this.getSelection()).cloneRange(); -}; -Xinha.prototype.restoreSelection=function(_40){ -try{ -var sel=this.getSelection(); -sel.removeAllRanges(); -sel.addRange(_40); -} -catch(e){ -} -}; -Xinha.prototype.selectNodeContents=function(_42,_43){ -this.focusEditor(); -this.forceRedraw(); -var _44; -var _45=typeof _43=="undefined"?true:false; -var sel=this.getSelection(); -_44=this._doc.createRange(); -if(!_42){ -sel.removeAllRanges(); -return; -} -if(_45&&_42.tagName&&_42.tagName.toLowerCase().match(/table|img|input|textarea|select/)){ -_44.selectNode(_42); -}else{ -_44.selectNodeContents(_42); -} -sel.removeAllRanges(); -sel.addRange(_44); -if(typeof _43!="undefined"){ -if(_43){ -sel.collapse(_44.startContainer,_44.startOffset); -}else{ -sel.collapse(_44.endContainer,_44.endOffset); -} -} -}; -Xinha.prototype.insertHTML=function(_47){ -var sel=this.getSelection(); -var _49=this.createRange(sel); -this.focusEditor(); -var _4a=this._doc.createDocumentFragment(); -var div=this._doc.createElement("div"); -div.innerHTML=_47; -while(div.firstChild){ -_4a.appendChild(div.firstChild); -} -var _4c=this.insertNodeAtSelection(_4a); -}; -Xinha.prototype.getSelectedHTML=function(){ -var sel=this.getSelection(); -if(sel.isCollapsed){ -return ""; -} -var _4e=this.createRange(sel); -return Xinha.getHTML(_4e.cloneContents(),false,this); -}; -Xinha.prototype.getSelection=function(){ -return this._iframe.contentWindow.getSelection(); -}; -Xinha.prototype.createRange=function(sel){ -this.activateEditor(); -if(typeof sel!="undefined"){ -try{ -return sel.getRangeAt(0); -} -catch(ex){ -return this._doc.createRange(); -} -}else{ -return this._doc.createRange(); -} -}; -Xinha.prototype.isKeyEvent=function(_50){ -return _50.type=="keypress"; -}; -Xinha.prototype.getKey=function(_51){ -return String.fromCharCode(_51.charCode); -}; -Xinha.getOuterHTML=function(_52){ -return (new XMLSerializer()).serializeToString(_52); -}; -Xinha.cc=String.fromCharCode(8286); -Xinha.prototype.setCC=function(_53){ -var cc=Xinha.cc; -try{ -if(_53=="textarea"){ -var ta=this._textArea; -var _56=ta.selectionStart; -var _57=ta.value.substring(0,_56); -var _58=ta.value.substring(_56,ta.value.length); -if(_58.match(/^[^<]*>/)){ -var _59=_58.indexOf(">")+1; -ta.value=_57+_58.substring(0,_59)+cc+_58.substring(_59,_58.length); -}else{ -ta.value=_57+cc+_58; -} -ta.value=ta.value.replace(new RegExp("(&[^"+cc+"]*?)("+cc+")([^"+cc+"]*?;)"),"$1$3$2"); -ta.value=ta.value.replace(new RegExp("(]*>[^"+cc+"]*?)("+cc+")([^"+cc+"]*?)"),"$1$3$2"); -ta.value=ta.value.replace(new RegExp("^([^"+cc+"]*)("+cc+")([^"+cc+"]*]*>)(.*?)"),"$1$3$2$4"); -}else{ -var sel=this.getSelection(); -sel.getRangeAt(0).insertNode(this._doc.createTextNode(cc)); -} -} -catch(e){ -} -}; -Xinha.prototype.findCC=function(_5b){ -if(_5b=="textarea"){ -var ta=this._textArea; -var pos=ta.value.indexOf(Xinha.cc); -if(pos==-1){ -return; -} -var end=pos+Xinha.cc.length; -var _5f=ta.value.substring(0,pos); -var _60=ta.value.substring(end,ta.value.length); -ta.value=_5f; -ta.scrollTop=ta.scrollHeight; -var _61=ta.scrollTop; -ta.value+=_60; -ta.setSelectionRange(pos,pos); -ta.focus(); -ta.scrollTop=_61; -}else{ -try{ -var doc=this._doc; -doc.body.innerHTML=doc.body.innerHTML.replace(new RegExp(Xinha.cc),""); -var _63=doc.getElementById("XinhaEditingPostion"); -this.selectNodeContents(_63); -this.scrollToElement(_63); -_63.parentNode.removeChild(_63); -this._iframe.contentWindow.focus(); -} -catch(e){ -} -} -}; -Xinha.prototype._standardToggleBorders=Xinha.prototype._toggleBorders; -Xinha.prototype._toggleBorders=function(){ -var _64=this._standardToggleBorders(); -var _65=this._doc.getElementsByTagName("TABLE"); -for(var i=0;i<_65.length;i++){ -_65[i].style.display="none"; -_65[i].style.display="table"; -} -return _64; -}; -Xinha.getDoctype=function(doc){ -var d=""; -if(doc.doctype){ -d+=""; -} -return d; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Gecko/paraHandlerBest.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Gecko/paraHandlerBest.js deleted file mode 100644 index aa57a7dea4..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Gecko/paraHandlerBest.js +++ /dev/null @@ -1,295 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/Gecko/paraHandlerBest.js */ -EnterParagraphs._pluginInfo={name:"EnterParagraphs",version:"1.0",developer:"Adam Wright",developer_url:"http://www.hipikat.org/",sponsor:"The University of Western Australia",sponsor_url:"http://www.uwa.edu.au/",license:"htmlArea"}; -EnterParagraphs.prototype._whiteSpace=/^\s*$/; -EnterParagraphs.prototype._pExclusions=/^(address|blockquote|body|dd|div|dl|dt|fieldset|form|h1|h2|h3|h4|h5|h6|hr|li|noscript|ol|p|pre|table|ul)$/i; -EnterParagraphs.prototype._pContainers=/^(body|del|div|fieldset|form|ins|map|noscript|object|td|th)$/i; -EnterParagraphs.prototype._pBreak=/^(address|pre|blockquote)$/i; -EnterParagraphs.prototype._permEmpty=/^(area|base|basefont|br|col|frame|hr|img|input|isindex|link|meta|param)$/i; -EnterParagraphs.prototype._elemSolid=/^(applet|br|button|hr|img|input|table)$/i; -EnterParagraphs.prototype._pifySibling=/^(address|blockquote|del|div|dl|fieldset|form|h1|h2|h3|h4|h5|h6|hr|ins|map|noscript|object|ol|p|pre|table|ul|)$/i; -EnterParagraphs.prototype._pifyForced=/^(ul|ol|dl|table)$/i; -EnterParagraphs.prototype._pifyParent=/^(dd|dt|li|td|th|tr)$/i; -function EnterParagraphs(_1){ -this.editor=_1; -if(Xinha.is_gecko){ -this.onKeyPress=this.__onKeyPress; -} -}; -EnterParagraphs.prototype.name="EnterParagraphs"; -EnterParagraphs.prototype.insertAdjacentElement=function(_2,_3,el){ -if(_3=="BeforeBegin"){ -_2.parentNode.insertBefore(el,_2); -}else{ -if(_3=="AfterEnd"){ -_2.nextSibling?_2.parentNode.insertBefore(el,_2.nextSibling):_2.parentNode.appendChild(el); -}else{ -if(_3=="AfterBegin"&&_2.firstChild){ -_2.insertBefore(el,_2.firstChild); -}else{ -if(_3=="BeforeEnd"||_3=="AfterBegin"){ -_2.appendChild(el); -} -} -} -} -}; -EnterParagraphs.prototype.forEachNodeUnder=function(_5,_6,_7,_8){ -var _9,_a; -if(_5.nodeType==11&&_5.firstChild){ -_9=_5.firstChild; -_a=_5.lastChild; -}else{ -_9=_a=_5; -} -while(_a.lastChild){ -_a=_a.lastChild; -} -return this.forEachNode(_9,_a,_6,_7,_8); -}; -EnterParagraphs.prototype.forEachNode=function(_b,_c,_d,_e,_f){ -var _10=function(_11,_12){ -return (_12=="ltr"?_11.nextSibling:_11.previousSibling); -}; -var _13=function(_14,_15){ -return (_15=="ltr"?_14.firstChild:_14.lastChild); -}; -var _16,_17,_18; -var _19=_f; -var _1a=false; -while(_16!=_e=="ltr"?_c:_b){ -if(!_16){ -_16=_e=="ltr"?_b:_c; -}else{ -if(_13(_16,_e)){ -_16=_13(_16,_e); -}else{ -if(_10(_16,_e)){ -_16=_10(_16,_e); -}else{ -_17=_16; -while(!_10(_17,_e)&&_17!=(_e=="ltr"?_c:_b)){ -_17=_17.parentNode; -} -_16=(_10(_17,_e)?_10(_17,_e):_17); -} -} -} -_1a=(_16==(_e=="ltr"?_c:_b)); -switch(_d){ -case "cullids": -_18=this._fenCullIds(_16,_19); -break; -case "find_fill": -_18=this._fenEmptySet(_16,_19,_d,_1a); -break; -case "find_cursorpoint": -_18=this._fenEmptySet(_16,_19,_d,_1a); -break; -} -if(_18[0]){ -return _18[1]; -} -if(_1a){ -break; -} -if(_18[1]){ -_19=_18[1]; -} -} -return false; -}; -EnterParagraphs.prototype._fenEmptySet=function(_1b,_1c,_1d,_1e){ -if(!_1c&&!_1b.firstChild){ -_1c=_1b; -} -if((_1b.nodeType==1&&this._elemSolid.test(_1b.nodeName))||(_1b.nodeType==3&&!this._whiteSpace.test(_1b.nodeValue))||(_1b.nodeType!=1&&_1b.nodeType!=3)){ -switch(_1d){ -case "find_fill": -return new Array(true,false); -break; -case "find_cursorpoint": -return new Array(true,_1b); -break; -} -} -if(_1e){ -return new Array(true,_1c); -} -return new Array(false,_1c); -}; -EnterParagraphs.prototype._fenCullIds=function(_1f,_20,_21){ -if(_20.id){ -_21[_20.id]?_20.id="":_21[_20.id]=true; -} -return new Array(false,_21); -}; -EnterParagraphs.prototype.processSide=function(rng,_23){ -var _24=function(_25,_26){ -return (_26=="left"?_25.previousSibling:_25.nextSibling); -}; -var _27=_23=="left"?rng.startContainer:rng.endContainer; -var _28=_23=="left"?rng.startOffset:rng.endOffset; -var _29,_2a=_27; -while(_2a.nodeType==1&&!this._permEmpty.test(_2a.nodeName)){ -_2a=(_28?_2a.lastChild:_2a.firstChild); -} -while(_29=_29?(_24(_29,_23)?_24(_29,_23):_29.parentNode):_2a){ -if(_24(_29,_23)){ -if(this._pExclusions.test(_24(_29,_23).nodeName)){ -return this.processRng(rng,_23,_29,_24(_29,_23),(_23=="left"?"AfterEnd":"BeforeBegin"),true,false); -} -}else{ -if(this._pContainers.test(_29.parentNode.nodeName)){ -return this.processRng(rng,_23,_29,_29.parentNode,(_23=="left"?"AfterBegin":"BeforeEnd"),true,false); -}else{ -if(this._pExclusions.test(_29.parentNode.nodeName)){ -if(this._pBreak.test(_29.parentNode.nodeName)){ -return this.processRng(rng,_23,_29,_29.parentNode,(_23=="left"?"AfterBegin":"BeforeEnd"),false,(_23=="left"?true:false)); -}else{ -return this.processRng(rng,_23,(_29=_29.parentNode),(_24(_29,_23)?_24(_29,_23):_29.parentNode),(_24(_29,_23)?(_23=="left"?"AfterEnd":"BeforeBegin"):(_23=="left"?"AfterBegin":"BeforeEnd")),false,false); -} -} -} -} -} -}; -EnterParagraphs.prototype.processRng=function(rng,_2c,_2d,_2e,_2f,_30,_31){ -var _32=_2c=="left"?rng.startContainer:rng.endContainer; -var _33=_2c=="left"?rng.startOffset:rng.endOffset; -var _34=this.editor; -var _35=_34._doc.createRange(); -_35.selectNode(_2d); -if(_2c=="left"){ -_35.setEnd(_32,_33); -rng.setStart(_35.startContainer,_35.startOffset); -}else{ -if(_2c=="right"){ -_35.setStart(_32,_33); -rng.setEnd(_35.endContainer,_35.endOffset); -} -} -var cnt=_35.cloneContents(); -this.forEachNodeUnder(cnt,"cullids","ltr",this.takenIds,false,false); -var _37,_38,_39; -_37=_2c=="left"?(_35.endContainer.nodeType==3?true:false):(_35.startContainer.nodeType==3?false:true); -_38=_37?_35.startOffset:_35.endOffset; -_37=_37?_35.startContainer:_35.endContainer; -if(this._pifyParent.test(_37.nodeName)&&_37.parentNode.childNodes.item(0)==_37){ -while(!this._pifySibling.test(_37.nodeName)){ -_37=_37.parentNode; -} -} -if(cnt.nodeType==11&&!cnt.firstChild){ -if(_37.nodeName!="BODY"||(_37.nodeName=="BODY"&&_38!=0)){ -cnt.appendChild(_34._doc.createElement(_37.nodeName)); -} -} -_39=this.forEachNodeUnder(cnt,"find_fill","ltr",false); -if(_39&&this._pifySibling.test(_37.nodeName)&&((_38==0)||(_38==1&&this._pifyForced.test(_37.nodeName)))){ -_2d=_34._doc.createElement("p"); -_2d.innerHTML=" "; -if((_2c=="left")&&_37.previousSibling){ -return new Array(_37.previousSibling,"AfterEnd",_2d); -}else{ -if((_2c=="right")&&_37.nextSibling){ -return new Array(_37.nextSibling,"BeforeBegin",_2d); -}else{ -return new Array(_37.parentNode,(_2c=="left"?"AfterBegin":"BeforeEnd"),_2d); -} -} -} -if(_39){ -if(_39.nodeType==3){ -_39=_34._doc.createDocumentFragment(); -} -if((_39.nodeType==1&&!this._elemSolid.test())||_39.nodeType==11){ -var _3a=_34._doc.createElement("p"); -_3a.innerHTML=" "; -_39.appendChild(_3a); -}else{ -var _3a=_34._doc.createElement("p"); -_3a.innerHTML=" "; -_39.parentNode.insertBefore(parentNode,_39); -} -} -if(_39){ -_2d=_39; -}else{ -_2d=(_30||(cnt.nodeType==11&&!cnt.firstChild))?_34._doc.createElement("p"):_34._doc.createDocumentFragment(); -_2d.appendChild(cnt); -} -if(_31){ -_2d.appendChild(_34._doc.createElement("br")); -} -return new Array(_2e,_2f,_2d); -}; -EnterParagraphs.prototype.isNormalListItem=function(rng){ -var _3c,_3d; -_3c=rng.startContainer; -if((typeof _3c.nodeName!="undefined")&&(_3c.nodeName.toLowerCase()=="li")){ -_3d=_3c; -}else{ -if((typeof _3c.parentNode!="undefined")&&(typeof _3c.parentNode.nodeName!="undefined")&&(_3c.parentNode.nodeName.toLowerCase()=="li")){ -_3d=_3c.parentNode; -}else{ -return false; -} -} -if(!_3d.previousSibling){ -if(rng.startOffset==0){ -return false; -} -} -return true; -}; -EnterParagraphs.prototype.__onKeyPress=function(ev){ -if(ev.keyCode==13&&!ev.shiftKey&&this.editor._iframe.contentWindow.getSelection){ -return this.handleEnter(ev); -} -}; -EnterParagraphs.prototype.handleEnter=function(ev){ -var _40; -var sel=this.editor.getSelection(); -var rng=this.editor.createRange(sel); -if(this.isNormalListItem(rng)){ -return true; -} -this.takenIds=new Object(); -var _43=this.processSide(rng,"left"); -var _44=this.processSide(rng,"right"); -_40=_44[2]; -sel.removeAllRanges(); -rng.deleteContents(); -var _45=this.forEachNodeUnder(_40,"find_cursorpoint","ltr",false,true); -if(!_45){ -alert("INTERNAL ERROR - could not find place to put cursor after ENTER"); -} -if(_43){ -this.insertAdjacentElement(_43[0],_43[1],_43[2]); -} -if(_44&&_44.nodeType!=1){ -this.insertAdjacentElement(_44[0],_44[1],_44[2]); -} -if((_45)&&(this._permEmpty.test(_45.nodeName))){ -var _46=0; -while(_45.parentNode.childNodes.item(_46)!=_45){ -_46++; -} -sel.collapse(_45.parentNode,_46); -}else{ -try{ -sel.collapse(_45,0); -if(_45.nodeType==3){ -_45=_45.parentNode; -} -this.editor.scrollToElement(_45); -} -catch(e){ -} -} -this.editor.updateToolbar(); -Xinha._stopEvent(ev); -return true; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/GetHtml/DOMwalk.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/GetHtml/DOMwalk.js deleted file mode 100644 index f436ae0401..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/GetHtml/DOMwalk.js +++ /dev/null @@ -1,197 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/GetHtml/DOMwalk.js */ -function GetHtmlImplementation(_1){ -this.editor=_1; -}; -GetHtmlImplementation._pluginInfo={name:"GetHtmlImplementation DOMwalk",origin:"Xinha Core",version:"$LastChangedRevision: 1185 $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.org/tags/0.96.1/modules/GetHtml/DOMwalk.js $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),sponsor:"",sponsor_url:"",license:"htmlArea"}; -Xinha.getHTML=function(_2,_3,_4){ -return Xinha.getHTMLWrapper(_2,_3,_4); -}; -Xinha.emptyAttributes=" checked disabled ismap readonly nowrap compact declare selected defer multiple noresize noshade "; -Xinha.getHTMLWrapper=function(_5,_6,_7,_8){ -var _9=""; -if(!_8){ -_8=""; -} -switch(_5.nodeType){ -case 10: -case 6: -case 12: -break; -case 2: -break; -case 4: -_9+=(Xinha.is_ie?("\n"+_8):"")+""; -break; -case 5: -_9+="&"+_5.nodeValue+";"; -break; -case 7: -_9+=(Xinha.is_ie?("\n"+_8):"")+"<"+"?"+_5.target+" "+_5.data+" ?>"; -break; -case 1: -case 11: -case 9: -var _a; -var i; -var _c=(_5.nodeType==1)?_5.tagName.toLowerCase():""; -if((_c=="script"||_c=="noscript")&&_7.config.stripScripts){ -break; -} -if(_6){ -_6=!(_7.config.htmlRemoveTags&&_7.config.htmlRemoveTags.test(_c)); -} -if(Xinha.is_ie&&_c=="head"){ -if(_6){ -_9+=(Xinha.is_ie?("\n"+_8):"")+""; -} -var _d=RegExp.multiline; -RegExp.multiline=true; -var _e=_5.innerHTML.replace(Xinha.RE_tagName,function(_f,p1,p2){ -return p1+p2.toLowerCase(); -}).replace(/\s*=\s*(([^'"][^>\s]*)([>\s])|"([^"]+)"|'([^']+)')/g,"=\"$2$4$5\"$3").replace(/<(link|meta)((\s*\S*="[^"]*")*)>([\n\r]*)/g,"<$1$2 />\n"); -RegExp.multiline=_d; -_9+=_e+"\n"; -if(_6){ -_9+=(Xinha.is_ie?("\n"+_8):"")+""; -} -break; -}else{ -if(_6){ -_a=(!(_5.hasChildNodes()||Xinha.needsClosingTag(_5))); -_9+=((Xinha.isBlockElement(_5))?("\n"+_8):"")+"<"+_5.tagName.toLowerCase(); -var _12=_5.attributes; -for(i=0;i<_12.length;++i){ -var a=_12.item(i); -if(Xinha.is_real_gecko&&(_5.tagName.toLowerCase()=="img")&&((a.nodeName.toLowerCase()=="height")||(a.nodeName.toLowerCase()=="width"))){ -if(!_5.complete||_5.naturalWidth===0){ -continue; -} -} -if(typeof a.nodeValue=="object"){ -continue; -} -if(_5.tagName.toLowerCase()=="input"&&_5.type.toLowerCase()=="checkbox"&&a.nodeName.toLowerCase()=="value"&&a.nodeValue.toLowerCase()=="on"){ -continue; -} -if(!a.specified&&!(_5.tagName.toLowerCase().match(/input|option/)&&a.nodeName=="value")&&!(_5.tagName.toLowerCase().match(/area/)&&a.nodeName.match(/shape|coords/i))){ -continue; -} -var _14=a.nodeName.toLowerCase(); -if(/_moz_editor_bogus_node/.test(_14)||(_14=="class"&&a.nodeValue=="webkit-block-placeholder")){ -_9=""; -break; -} -if(/(_moz)|(contenteditable)|(_msh)/.test(_14)){ -continue; -} -var _15; -if(Xinha.emptyAttributes.indexOf(" "+_14+" ")!=-1){ -_15=_14; -}else{ -if(_14!="style"){ -if(typeof _5[a.nodeName]!="undefined"&&_14!="href"&&_14!="src"&&!(/^on/.test(_14))){ -_15=_5[a.nodeName]; -}else{ -_15=a.nodeValue; -if(_14=="class"){ -_15=_15.replace(/Apple-style-span/,""); -if(!_15){ -continue; -} -} -if(Xinha.is_ie&&(_14=="href"||_14=="src")){ -_15=_7.stripBaseURL(_15); -} -if(_7.config.only7BitPrintablesInURLs&&(_14=="href"||_14=="src")){ -_15=_15.replace(/([^!-~]+)/g,function(_16){ -return escape(_16); -}); -} -} -}else{ -if(!Xinha.is_ie){ -_15=_5.style.cssText.replace(/rgb\(.*?\)/ig,function(rgb){ -return Xinha._colorToRgb(rgb); -}); -}else{ -if(!_15){ -continue; -} -} -} -} -if(/^(_moz)?$/.test(_15)){ -continue; -} -_9+=" "+_14+"=\""+Xinha.htmlEncode(_15)+"\""; -} -if(Xinha.is_ie&&_5.style.cssText){ -_9+=" style=\""+_5.style.cssText.replace(/(^)?([^:]*):(.*?)(;|$)/g,function(m0,m1,m2,m3,m4){ -return m2.toLowerCase()+":"+m3+m4; -})+"\""; -} -if(Xinha.is_ie&&_5.tagName.toLowerCase()=="option"&&_5.selected){ -_9+=" selected=\"selected\""; -} -if(_9!==""){ -if(_a&&_c=="p"){ -_9+="> 

"; -}else{ -if(_a){ -_9+=" />"; -}else{ -_9+=">"; -} -} -} -} -} -var _1d=false; -if(_c=="script"||_c=="noscript"){ -if(!_7.config.stripScripts){ -if(Xinha.is_ie){ -var _1e="\n"+_5.innerHTML.replace(/^[\n\r]*/,"").replace(/\s+$/,"")+"\n"+_8; -}else{ -var _1e=(_5.hasChildNodes())?_5.firstChild.nodeValue:""; -} -_9+=_1e+""+((Xinha.is_ie)?"\n":""); -} -}else{ -if(_c=="pre"){ -_9+=((Xinha.is_ie)?"\n":"")+_5.innerHTML.replace(/
/g,"\n")+""; -}else{ -for(i=_5.firstChild;i;i=i.nextSibling){ -if(!_1d&&i.nodeType==1&&Xinha.isBlockElement(i)){ -_1d=true; -} -_9+=Xinha.getHTMLWrapper(i,true,_7,_8+" "); -} -if(_6&&!_a){ -_9+=(((Xinha.isBlockElement(_5)&&_1d)||_c=="head"||_c=="html")?("\n"+_8):"")+""; -} -} -} -break; -case 3: -if(/^script|noscript|style$/i.test(_5.parentNode.tagName)){ -_9=_5.data; -}else{ -if(_5.data.trim()==""){ -if(_5.data){ -_9=" "; -}else{ -_9=""; -} -}else{ -_9=Xinha.htmlEncode(_5.data); -} -} -break; -case 8: -_9=""; -break; -} -return _9; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/GetHtml/TransformInnerHTML.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/GetHtml/TransformInnerHTML.js deleted file mode 100644 index e3b116eebb..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/GetHtml/TransformInnerHTML.js +++ /dev/null @@ -1,155 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/GetHtml/TransformInnerHTML.js */ -function GetHtmlImplementation(_1){ -this.editor=_1; -}; -GetHtmlImplementation._pluginInfo={name:"GetHtmlImplementation TransformInnerHTML",version:"1.0",developer:"Nelson Bright",developer_url:"http://www.brightworkweb.com/",sponsor:"",sponsor_url:"",license:"htmlArea"}; -Xinha.RegExpCache=[/<\s*\/?([^\s\/>]+)[\s*\/>]/gi,/(\s+)_moz[^=>]*=[^\s>]*/gi,/\s*=\s*(([^'"][^>\s]*)([>\s])|"([^"]+)"|'([^']+)')/g,/\/>/g,/<(br|hr|img|input|link|meta|param|embed|area)((\s*\S*="[^"]*")*)>/g,/(<\w+\s+(\w*="[^"]*"\s+)*)(checked|compact|declare|defer|disabled|ismap|multiple|no(href|resize|shade|wrap)|readonly|selected)([\s>])/gi,/(="[^']*)'([^'"]*")/,/&(?=(?!(#[0-9]{2,5};|[a-zA-Z0-9]{2,6};|#x[0-9a-fA-F]{2,4};))[^<]*>)/g,/<\s+/g,/\s+(\/)?>/g,/\s{2,}/g,/\s+([^=\s]+)((="[^"]+")|([\s>]))/g,/\s+contenteditable(=[^>\s\/]*)?/gi,/((href|src)=")([^\s]*)"/g,/<\/?(div|p|h[1-6]|table|tr|td|th|ul|ol|li|dl|dt|dd|blockquote|object|br|hr|img|embed|param|pre|script|html|head|body|meta|link|title|area|input|form|textarea|select|option)[^>]*>/g,/<\/(div|p|h[1-6]|table|tr|ul|ol|dl|blockquote|html|head|body|script|form|select)( [^>]*)?>/g,/<(div|p|h[1-6]|table|tr|ul|ol|dl|blockquote|object|html|head|body|script|form|select)( [^>]*)?>/g,/<(td|th|li|dt|dd|option|br|hr|embed|param|pre|meta|link|title|area|input|textarea)[^>]*>/g,/(^|<\/(pre|script)>)(\s|[^\s])*?(<(pre|script)[^>]*>|$)/g,/(]*>)([\s\S])*?(<\/pre>)/g,/(^|)([\s\S]*?)(?=|$)/g,/\S*=""/g,/|<\?[\s\S]*?\?>|<\/?\w[^>]*>/g,/(^|<\/script>)[\s\S]*?(]*>|$)/g]; -var testRE=new RegExp().compile(Xinha.RegExpCache[3]); -if(typeof testRE!="undefined"){ -for(var i=0;i").replace(c[9],"$1>").replace(c[5],"$1$3=\"$3\"$5").replace(c[4],"<$1$2 />").replace(c[6],"$1$2").replace(c[7],"&").replace(c[8],"<").replace(c[10]," "); -if(Xinha.is_ie&&c[13].test(_2)){ -_2=_2.replace(c[13],"$1"+Xinha._escapeDollars(this.stripBaseURL(RegExp.$3))+"\""); -} -if(this.config.only7BitPrintablesInURLs){ -if(Xinha.is_ie){ -c[13].test(_2); -} -if(c[13].test(_2)){ -try{ -_2=_2.replace(c[13],"$1"+Xinha._escapeDollars(decodeURIComponent(RegExp.$3).replace(/([^!-~]+)/g,function(_8){ -return escape(_8); -}))+"\""); -} -catch(e){ -_2=_2.replace(c[13],Xinha._escapeDollars("$1"+RegExp.$3.replace(/([^!-~]+)/g,function(_9){ -return escape(_9); -})+"\"")); -} -} -} -return _2; -}; -Xinha.indent=function(s,_b){ -Xinha.__nindent=0; -Xinha.__sindent=""; -Xinha.__sindentChar=(typeof _b=="undefined")?" ":_b; -var c=Xinha.RegExpCache; -if(Xinha.is_gecko){ -s=s.replace(c[19],function(_d){ -return _d.replace(/
/g,"\n"); -}); -} -s=s.replace(c[18],function(_e){ -_e=_e.replace(c[20],function(st,$1,$2){ -string=$2.replace(/[\n\r]/gi," ").replace(/\s+/gi," ").replace(c[14],function(str){ -if(str.match(c[16])){ -var s="\n"+Xinha.__sindent+str; -Xinha.__sindent+=Xinha.__sindentChar; -++Xinha.__nindent; -return s; -}else{ -if(str.match(c[15])){ ---Xinha.__nindent; -Xinha.__sindent=""; -for(var i=Xinha.__nindent;i>0;--i){ -Xinha.__sindent+=Xinha.__sindentChar; -} -return "\n"+Xinha.__sindent+str; -}else{ -if(str.match(c[17])){ -return "\n"+Xinha.__sindent+str; -} -} -} -return str; -}); -return $1+string; -}); -return _e; -}); -s=s.replace(/^\s*/,"").replace(/ +\n/g,"\n").replace(/[\r\n]+(\s+)<\/script>/g,"\n$1"); -return s; -}; -Xinha.getHTML=function(_15,_16,_17){ -var _18=""; -var c=Xinha.RegExpCache; -if(_15.nodeType==11){ -var div=document.createElement("div"); -var _1b=_15.insertBefore(div,_15.firstChild); -for(j=_1b.nextSibling;j;j=j.nextSibling){ -_1b.appendChild(j.cloneNode(true)); -} -_18+=_1b.innerHTML.replace(c[23],function(_1c){ -_1c=_1c.replace(c[22],function(tag){ -if(/^<[!\?]/.test(tag)){ -return tag; -}else{ -return _17.cleanHTML(tag); -} -}); -return _1c; -}); -}else{ -var _1e=(_15.nodeType==1)?_15.tagName.toLowerCase():""; -if(_16){ -_18+="<"+_1e; -var _1f=_15.attributes; -for(i=0;i<_1f.length;++i){ -var a=_1f.item(i); -if(!a.specified){ -continue; -} -var _21=a.nodeName.toLowerCase(); -var _22=a.nodeValue; -_18+=" "+_21+"=\""+_22+"\""; -} -_18+=">"; -} -if(_1e=="html"){ -innerhtml=_17._doc.documentElement.innerHTML; -}else{ -innerhtml=_15.innerHTML; -} -_18+=innerhtml.replace(c[23],function(_23){ -_23=_23.replace(c[22],function(tag){ -if(/^<[!\?]/.test(tag)){ -return tag; -}else{ -if(!(_17.config.htmlRemoveTags&&_17.config.htmlRemoveTags.test(tag.replace(/<([^\s>\/]+)/,"$1")))){ -return _17.cleanHTML(tag); -}else{ -return ""; -} -} -}); -return _23; -}); -if(Xinha.is_ie){ -_18=_18.replace(/<(li|dd|dt)( [^>]*)?>/g,"<$1$2>").replace(/(<[uod]l[^>]*>[\s\S]*?)<\/(li|dd|dt)>/g,"$1").replace(/\s*<\/(li|dd|dt)>(\s*<\/(li|dd|dt)>)+/g,"").replace(/(][\s\S]*?)(<\/d[dt]>)+/g,"$1"); -} -if(Xinha.is_gecko){ -_18=_18.replace(/
\n$/,""); -} -_18=_18.replace(/\s*(<\/(li|dd|dt)>)/g,"$1"); -if(_16){ -_18+=""; -} -_18=Xinha.indent(_18); -} -return _18; -}; -Xinha._escapeDollars=function(str){ -return str.replace(/\$/g,"$$$$"); -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertImage/insert_image.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertImage/insert_image.js deleted file mode 100644 index c25225c631..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertImage/insert_image.js +++ /dev/null @@ -1,70 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/InsertImage/insert_image.js */ -InsertImage._pluginInfo={name:"InsertImage",origin:"Xinha Core",version:"$LastChangedRevision: 1239 $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.org/tags/0.96.1/modules/InsertImage/insert_image.js $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),sponsor:"",sponsor_url:"",license:"htmlArea"}; -function InsertImage(_1){ -this.editor=_1; -var _2=_1.config; -var _3=this; -if(typeof _1._insertImage=="undefined"){ -_1._insertImage=function(){ -_3.show(); -}; -} -}; -InsertImage.prototype._lc=function(_4){ -return Xinha._lc(_4,"Xinha"); -}; -InsertImage.prototype.onGenerateOnce=function(){ -InsertImage.loadAssets(); -}; -InsertImage.loadAssets=function(){ -var _5=InsertImage; -if(_5.loading){ -return; -} -_5.loading=true; -Xinha._getback(_editor_url+"modules/InsertImage/dialog.html",function(_6){ -_5.html=_6; -_5.dialogReady=true; -}); -Xinha._getback(_editor_url+"modules/InsertImage/pluginMethods.js",function(_7){ -eval(_7); -_5.methodsReady=true; -}); -}; -InsertImage.prototype.onUpdateToolbar=function(){ -if(!(InsertImage.dialogReady&&InsertImage.methodsReady)){ -this.editor._toolbarObjects.insertimage.state("enabled",false); -}else{ -this.onUpdateToolbar=null; -} -}; -InsertImage.prototype.prepareDialog=function(){ -var _8=this; -var _9=this.editor; -var _a=this.dialog=new Xinha.Dialog(_9,InsertImage.html,"Xinha",{width:410}); -_a.getElementById("ok").onclick=function(){ -_8.apply(); -}; -_a.getElementById("cancel").onclick=function(){ -_8.dialog.hide(); -}; -_a.getElementById("preview").onclick=function(){ -var _b=_a.getElementById("f_url"); -var _c=_b.value; -if(!_c){ -alert(_a._lc("You must enter the URL")); -_b.focus(); -return false; -} -_a.getElementById("ipreview").src=_c; -return false; -}; -this.dialog.onresize=function(){ -var _d=parseInt(this.height,10)-this.getElementById("h1").offsetHeight-this.getElementById("buttons").offsetHeight-this.getElementById("inputs").offsetHeight-parseInt(this.rootElem.style.paddingBottom,10); -this.getElementById("ipreview").style.height=((_d>0)?_d:0)+"px"; -this.getElementById("ipreview").style.width=this.width-2+"px"; -}; -this.dialogReady=true; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertImage/pluginMethods.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertImage/pluginMethods.js deleted file mode 100644 index 40b2f7dad4..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertImage/pluginMethods.js +++ /dev/null @@ -1,113 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/InsertImage/pluginMethods.js */ -InsertImage.prototype.show=function(_1){ -if(!this.dialog){ -this.prepareDialog(); -} -var _2=this.editor; -if(typeof _1=="undefined"){ -_1=_2.getParentElement(); -if(_1&&_1.tagName.toLowerCase()!="img"){ -_1=null; -} -} -if(_1){ -function getSpecifiedAttribute(_3,_4){ -var a=_3.attributes; -for(var i=0;iInsert Table -
- - - - - - - - - - - - - - - - - - - - - - - -
- Caption: - - -
Rows:Width:
Cols:
- -
- -
-Layout - -
- -
Alignment:
- - -
- -
Border
- Pixels - - -
Collapse borders: - - -
- -
- -
-Spacing - -
- -
Cell spacing:
- - -
- -
Cell padding:
- - - -
-
- - -
-
diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertTable/insert_table.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertTable/insert_table.js deleted file mode 100644 index 427340de0d..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertTable/insert_table.js +++ /dev/null @@ -1,57 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/InsertTable/insert_table.js */ -InsertTable._pluginInfo={name:"InsertTable",origin:"Xinha Core",version:"$LastChangedRevision: 1085 $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.org/tags/0.96.1/modules/InsertTable/insert_table.js $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),sponsor:"",sponsor_url:"",license:"htmlArea"}; -function InsertTable(_1){ -this.editor=_1; -var _2=_1.config; -var _3=this; -_1.config.btnList.inserttable[3]=function(){ -_3.show(); -}; -}; -InsertTable.prototype._lc=function(_4){ -return Xinha._lc(_4,"Xinha"); -}; -InsertTable.prototype.onGenerateOnce=function(){ -InsertTable.loadAssets(); -}; -InsertTable.loadAssets=function(){ -var _5=InsertTable; -if(_5.loading){ -return; -} -_5.loading=true; -Xinha._getback(_editor_url+"modules/InsertTable/dialog.html",function(_6){ -_5.html=_6; -_5.dialogReady=true; -}); -Xinha._getback(_editor_url+"modules/InsertTable/pluginMethods.js",function(_7){ -eval(_7); -_5.methodsReady=true; -}); -}; -InsertTable.prototype.onUpdateToolbar=function(){ -if(!(InsertTable.dialogReady&&InsertTable.methodsReady)){ -this.editor._toolbarObjects.inserttable.state("enabled",false); -}else{ -this.onUpdateToolbar=null; -} -}; -InsertTable.prototype.prepareDialog=function(){ -var _8=this; -var _9=this.editor; -var _a=this.dialog=new Xinha.Dialog(_9,InsertTable.html,"Xinha",{width:400}); -_a.getElementById("ok").onclick=function(){ -_8.apply(); -}; -_a.getElementById("cancel").onclick=function(){ -_8.dialog.hide(); -}; -this.borderColorPicker=new Xinha.colorPicker.InputBinding(_a.getElementById("border_color")); -this.dialog.onresize=function(){ -this.getElementById("layout_fieldset").style.width=(this.width/2)+50+"px"; -this.getElementById("spacing_fieldset").style.width=(this.width/2)-120+"px"; -}; -this.dialogReady=true; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertTable/pluginMethods.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertTable/pluginMethods.js deleted file mode 100644 index 1c898e4cda..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InsertTable/pluginMethods.js +++ /dev/null @@ -1,81 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/InsertTable/pluginMethods.js */ -InsertTable.prototype.show=function(_1){ -if(!this.dialog){ -this.prepareDialog(); -} -var _2=this.editor; -var _3={"caption":"","rows":"2","cols":"4","width":"100","unit":"%","fixed":"","align":"","border":"1","border_style":"dotted","border_color":"#000000","border_collapse":"on","spacing":"","padding":"5"}; -this.borderColorPicker.setColor("#000000"); -this.dialog.show(_3); -this.dialog.onresize(); -}; -InsertTable.prototype.apply=function(){ -var _4=this.editor; -var _5=_4._doc; -var _6=this.dialog.getValues(); -if(!_6.rows||!_6.cols){ -if(!_6.rows){ -this.dialog.getElementById("rows_alert").style.display=""; -} -if(!_6.cols){ -this.dialog.getElementById("columns_alert").style.display=""; -} -return; -} -this.dialog.hide(); -var _7=_5.createElement("table"); -for(var _8 in _6){ -var _9=_6[_8]; -if(!_9){ -continue; -} -switch(_8){ -case "width": -_7.style.width=_9+_6.unit.value; -break; -case "align": -_7.align=_9.value; -break; -case "border": -_7.style.border=_9+"px "+_6.border_style.value+" "+_6.border_color; -break; -case "border_collapse": -_7.style.borderCollapse=(_9=="on")?"collapse":""; -break; -case "spacing": -_7.cellSpacing=parseInt(_9,10); -break; -case "padding": -_7.cellPadding=parseInt(_9,10); -break; -} -} -if(_6.caption){ -var _a=_7.createCaption(); -_a.appendChild(_5.createTextNode(_6.caption)); -} -var _b=0; -if(_6.fixed){ -_b=Math.floor(100/parseInt(_6.cols,10)); -} -var _c=_5.createElement("tbody"); -_7.appendChild(_c); -for(var i=0;i<_6.rows;++i){ -var tr=_5.createElement("tr"); -_c.appendChild(tr); -for(var j=0;j<_6.cols;++j){ -var td=_5.createElement("td"); -if(_b&&i===0){ -td.style.width=_b+"%"; -} -if(_6.border){ -td.style.border=_6.border+"px "+_6.border_style.value+" "+_6.border_color; -} -tr.appendChild(td); -td.appendChild(_5.createTextNode(" ")); -} -} -_4.insertNodeAtSelection(_7); -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InternetExplorer/InternetExplorer.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InternetExplorer/InternetExplorer.js deleted file mode 100644 index 855507be79..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/InternetExplorer/InternetExplorer.js +++ /dev/null @@ -1,477 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/InternetExplorer/InternetExplorer.js */ -InternetExplorer._pluginInfo={name:"Internet Explorer",origin:"Xinha Core",version:"$LastChangedRevision: 1260 $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.org/tags/0.96.1/modules/InternetExplorer/InternetExplorer.js $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),sponsor:"",sponsor_url:"",license:"htmlArea"}; -function InternetExplorer(_1){ -this.editor=_1; -_1.InternetExplorer=this; -}; -InternetExplorer.prototype.onKeyPress=function(ev){ -if(this.editor.isShortCut(ev)){ -switch(this.editor.getKey(ev).toLowerCase()){ -case "n": -this.editor.execCommand("formatblock",false,"

"); -Xinha._stopEvent(ev); -return true; -break; -case "1": -case "2": -case "3": -case "4": -case "5": -case "6": -this.editor.execCommand("formatblock",false,""); -Xinha._stopEvent(ev); -return true; -break; -} -} -switch(ev.keyCode){ -case 8: -case 46: -if(this.handleBackspace()){ -Xinha._stopEvent(ev); -return true; -} -break; -case 9: -Xinha._stopEvent(ev); -return true; -} -return false; -}; -InternetExplorer.prototype.handleBackspace=function(){ -var _3=this.editor; -var _4=_3.getSelection(); -if(_4.type=="Control"){ -var _5=_3.activeElement(_4); -Xinha.removeFromParent(_5); -return true; -} -var _6=_3.createRange(_4); -var r2=_6.duplicate(); -r2.moveStart("character",-1); -var a=r2.parentElement(); -if(a!=_6.parentElement()&&(/^a$/i.test(a.tagName))){ -r2.collapse(true); -r2.moveEnd("character",1); -r2.pasteHTML(""); -r2.select(); -return true; -} -}; -InternetExplorer.prototype.inwardHtml=function(_9){ -_9=_9.replace(/<(\/?)del(\s|>|\/)/ig,"<$1strike$2"); -_9=_9.replace(/(]+id="__InsertSpan_Workaround_[a-z]+".*?>([\s\S]*?)<\/span>/i,"$1"); -return _9; -}; -InternetExplorer.prototype.outwardHtml=function(_a){ -_a=_a.replace(/ (\s*)(]+id="__InsertSpan_Workaround_[a-z]+".*?>([\s\S]*?)<\/span>/i,"$1"); -return _a; -}; -InternetExplorer.prototype.onExecCommand=function(_b,UI,_d){ -switch(_b){ -case "saveas": -var _e=null; -var _f=this.editor; -var _10=document.createElement("iframe"); -_10.src="about:blank"; -_10.style.display="none"; -document.body.appendChild(_10); -try{ -if(_10.contentDocument){ -_e=_10.contentDocument; -}else{ -_e=_10.contentWindow.document; -} -} -catch(ex){ -} -_e.open("text/html","replace"); -var _11=""; -if(_f.config.browserQuirksMode===false){ -var _12=""; -}else{ -if(_f.config.browserQuirksMode===true){ -var _12=""; -}else{ -var _12=Xinha.getDoctype(document); -} -} -if(!_f.config.fullPage){ -_11+=_12+"\n"; -_11+="\n"; -_11+="\n"; -_11+="\n"; -if(typeof _f.config.baseHref!="undefined"&&_f.config.baseHref!==null){ -_11+="\n"; -} -if(typeof _f.config.pageStyleSheets!=="undefined"){ -for(var i=0;i<_f.config.pageStyleSheets.length;i++){ -if(_f.config.pageStyleSheets[i].length>0){ -_11+=""; -} -} -} -if(_f.config.pageStyle){ -_11+=""; -} -_11+="\n"; -_11+="\n"; -_11+=_f.getEditorContent(); -_11+="\n"; -_11+=""; -}else{ -_11=_f.getEditorContent(); -if(_11.match(Xinha.RE_doctype)){ -_f.setDoctype(RegExp.$1); -} -} -_e.write(_11); -_e.close(); -_e.execCommand(_b,UI,_d); -document.body.removeChild(_10); -return true; -break; -case "removeformat": -var _f=this.editor; -var sel=_f.getSelection(); -var _15=_f.saveSelection(sel); -var i,el,els; -function clean(el){ -if(el.nodeType!=1){ -return; -} -el.removeAttribute("style"); -for(var j=0;j"); -var _34=_2c.getElementById(_33); -_24.moveToElementText(_34); -_24.select(); -break; -case "JustificationHack": -var _35=String.fromCharCode(1); -_24.pasteHTML(_35); -_24.findText(_35,-1); -_24.select(); -_24.execCommand("JustifyNone"); -_24.pasteHTML(""); -break; -case "VisibleCue": -default: -var _35=String.fromCharCode(1); -_24.pasteHTML(_35); -_24.findText(_35,-1); -_24.select(); -} -} -}; -Xinha.prototype.selectNodeContents=function(_36,_37){ -this.focusEditor(); -this.forceRedraw(); -var _38; -var _39=typeof _37=="undefined"?true:false; -if(_39&&_36.tagName&&_36.tagName.toLowerCase().match(/table|img|input|select|textarea/)){ -_38=this._doc.body.createControlRange(); -_38.add(_36); -}else{ -_38=this._doc.body.createTextRange(); -if(3==_36.nodeType){ -if(_36.parentNode){ -_38.moveToElementText(_36.parentNode); -}else{ -_38.moveToElementText(this._doc.body); -} -var _3a=this._doc.body.createTextRange(); -var _3b=0; -var _3c=_36.previousSibling; -for(;_3c&&(1!=_3c.nodeType);_3c=_3c.previousSibling){ -if(3==_3c.nodeType){ -_3b+=_3c.nodeValue.length-_3c.nodeValue.split("\r").length-1; -} -} -if(_3c&&(1==_3c.nodeType)){ -_3a.moveToElementText(_3c); -_38.setEndPoint("StartToEnd",_3a); -} -if(_3b){ -_38.moveStart("character",_3b); -} -_3b=0; -_3c=_36.nextSibling; -for(;_3c&&(1!=_3c.nodeType);_3c=_3c.nextSibling){ -if(3==_3c.nodeType){ -_3b+=_3c.nodeValue.length-_3c.nodeValue.split("\r").length-1; -if(!_3c.nextSibling){ -_3b+=1; -} -} -} -if(_3c&&(1==_3c.nodeType)){ -_3a.moveToElementText(_3c); -_38.setEndPoint("EndToStart",_3a); -} -if(_3b){ -_38.moveEnd("character",-_3b); -} -if(!_36.nextSibling){ -_38.moveEnd("character",-1); -} -}else{ -_38.moveToElementText(_36); -} -} -if(typeof _37!="undefined"){ -_38.collapse(_37); -if(!_37){ -_38.moveStart("character",-1); -_38.moveEnd("character",-1); -} -} -_38.select(); -}; -Xinha.prototype.insertHTML=function(_3d){ -this.focusEditor(); -var sel=this.getSelection(); -var _3f=this.createRange(sel); -_3f.pasteHTML(_3d); -}; -Xinha.prototype.getSelectedHTML=function(){ -var sel=this.getSelection(); -if(this.selectionEmpty(sel)){ -return ""; -} -var _41=this.createRange(sel); -if(_41.htmlText){ -return _41.htmlText; -}else{ -if(_41.length>=1){ -return _41.item(0).outerHTML; -} -} -return ""; -}; -Xinha.prototype.getSelection=function(){ -return this._doc.selection; -}; -Xinha.prototype.createRange=function(sel){ -if(!sel){ -sel=this.getSelection(); -} -return sel.createRange(); -}; -Xinha.prototype.isKeyEvent=function(_43){ -return _43.type=="keydown"; -}; -Xinha.prototype.getKey=function(_44){ -return String.fromCharCode(_44.keyCode); -}; -Xinha.getOuterHTML=function(_45){ -return _45.outerHTML; -}; -Xinha.cc=String.fromCharCode(8201); -Xinha.prototype.setCC=function(_46){ -var cc=Xinha.cc; -if(_46=="textarea"){ -var ta=this._textArea; -var pos=document.selection.createRange(); -pos.collapse(); -pos.text=cc; -var _4a=ta.value.indexOf(cc); -var _4b=ta.value.substring(0,_4a); -var _4c=ta.value.substring(_4a+cc.length,ta.value.length); -if(_4c.match(/^[^<]*>/)){ -var _4d=_4c.indexOf(">")+1; -ta.value=_4b+_4c.substring(0,_4d)+cc+_4c.substring(_4d,_4c.length); -}else{ -ta.value=_4b+cc+_4c; -} -ta.value=ta.value.replace(new RegExp("(&[^"+cc+"]*?)("+cc+")([^"+cc+"]*?;)"),"$1$3$2"); -ta.value=ta.value.replace(new RegExp("(]*>[^"+cc+"]*?)("+cc+")([^"+cc+"]*?)"),"$1$3$2"); -ta.value=ta.value.replace(new RegExp("^([^"+cc+"]*)("+cc+")([^"+cc+"]*]*>)(.*?)"),"$1$3$2$4"); -}else{ -var sel=this.getSelection(); -var r=sel.createRange(); -if(sel.type=="Control"){ -var _50=r.item(0); -_50.outerHTML+=cc; -}else{ -r.collapse(); -r.text=cc; -} -} -}; -Xinha.prototype.findCC=function(_51){ -var _52=(_51=="textarea")?this._textArea:this._doc.body; -range=_52.createTextRange(); -if(range.findText(escape(Xinha.cc))){ -range.select(); -range.text=""; -range.select(); -} -if(range.findText(Xinha.cc)){ -range.select(); -range.text=""; -range.select(); -} -if(_51=="textarea"){ -this._textArea.focus(); -} -}; -Xinha.getDoctype=function(doc){ -return (doc.compatMode=="CSS1Compat"&&Xinha.ie_version<8)?"":""; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Opera/Opera.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Opera/Opera.js deleted file mode 100644 index ce08b45b22..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/Opera/Opera.js +++ /dev/null @@ -1,471 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/Opera/Opera.js */ -Opera._pluginInfo={name:"Opera",origin:"Xinha Core",version:"$LastChangedRevision: 1084 $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.org/tags/0.96.1/modules/Opera/Opera.js $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),sponsor:"Gogo Internet Services Limited",sponsor_url:"http://www.gogo.co.nz/",license:"htmlArea"}; -function Opera(_1){ -this.editor=_1; -_1.Opera=this; -}; -Opera.prototype.onKeyPress=function(ev){ -var _3=this.editor; -var s=_3.getSelection(); -if(_3.isShortCut(ev)){ -switch(_3.getKey(ev).toLowerCase()){ -case "z": -if(_3._unLink&&_3._unlinkOnUndo){ -Xinha._stopEvent(ev); -_3._unLink(); -_3.updateToolbar(); -return true; -} -break; -case "a": -sel=_3.getSelection(); -sel.removeAllRanges(); -range=_3.createRange(); -range.selectNodeContents(_3._doc.body); -sel.addRange(range); -Xinha._stopEvent(ev); -return true; -break; -case "v": -if(!_3.config.htmlareaPaste){ -return true; -} -break; -} -} -switch(_3.getKey(ev)){ -case " ": -var _5=function(_6,_7){ -var _8=_6.nextSibling; -if(typeof _7=="string"){ -_7=_3._doc.createElement(_7); -} -var a=_6.parentNode.insertBefore(_7,_8); -Xinha.removeFromParent(_6); -a.appendChild(_6); -_8.data=" "+_8.data; -s.collapse(_8,1); -_3._unLink=function(){ -var t=a.firstChild; -a.removeChild(t); -a.parentNode.insertBefore(t,a); -Xinha.removeFromParent(a); -_3._unLink=null; -_3._unlinkOnUndo=false; -}; -_3._unlinkOnUndo=true; -return a; -}; -if(_3.config.convertUrlsToLinks&&s&&s.isCollapsed&&s.anchorNode.nodeType==3&&s.anchorNode.data.length>3&&s.anchorNode.data.indexOf(".")>=0){ -var _b=s.anchorNode.data.substring(0,s.anchorOffset).search(/\S{4,}$/); -if(_b==-1){ -break; -} -if(_3._getFirstAncestor(s,"a")){ -break; -} -var _c=s.anchorNode.data.substring(0,s.anchorOffset).replace(/^.*?(\S*)$/,"$1"); -var _d=_c.match(Xinha.RE_email); -if(_d){ -var _e=s.anchorNode; -var _f=_e.splitText(s.anchorOffset); -var _10=_e.splitText(_b); -_5(_10,"a").href="mailto:"+_d[0]; -break; -} -RE_date=/([0-9]+\.)+/; -RE_ip=/(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/; -var _11=_c.match(Xinha.RE_url); -if(_11){ -if(RE_date.test(_c)){ -break; -} -var _12=s.anchorNode; -var _13=_12.splitText(s.anchorOffset); -var _14=_12.splitText(_b); -_5(_14,"a").href=(_11[1]?_11[1]:"http://")+_11[2]; -break; -} -} -break; -} -switch(ev.keyCode){ -case 27: -if(_3._unLink){ -_3._unLink(); -Xinha._stopEvent(ev); -} -break; -break; -case 8: -case 46: -if(!ev.shiftKey&&this.handleBackspace()){ -Xinha._stopEvent(ev); -} -default: -_3._unlinkOnUndo=false; -if(s.anchorNode&&s.anchorNode.nodeType==3){ -var a=_3._getFirstAncestor(s,"a"); -if(!a){ -break; -} -if(!a._updateAnchTimeout){ -if(s.anchorNode.data.match(Xinha.RE_email)&&a.href.match("mailto:"+s.anchorNode.data.trim())){ -var _16=s.anchorNode; -var _17=function(){ -a.href="mailto:"+_16.data.trim(); -a._updateAnchTimeout=setTimeout(_17,250); -}; -a._updateAnchTimeout=setTimeout(_17,1000); -break; -} -var m=s.anchorNode.data.match(Xinha.RE_url); -if(m&&a.href.match(new RegExp("http(s)?://"+Xinha.escapeStringForRegExp(s.anchorNode.data.trim())))){ -var _19=s.anchorNode; -var _1a=function(){ -m=_19.data.match(Xinha.RE_url); -if(m){ -a.href=(m[1]?m[1]:"http://")+m[2]; -} -a._updateAnchTimeout=setTimeout(_1a,250); -}; -a._updateAnchTimeout=setTimeout(_1a,1000); -} -} -} -break; -} -return false; -}; -Opera.prototype.handleBackspace=function(){ -var _1b=this.editor; -setTimeout(function(){ -var sel=_1b.getSelection(); -var _1d=_1b.createRange(sel); -var SC=_1d.startContainer; -var SO=_1d.startOffset; -var EC=_1d.endContainer; -var EO=_1d.endOffset; -var _22=SC.nextSibling; -if(SC.nodeType==3){ -SC=SC.parentNode; -} -if(!(/\S/.test(SC.tagName))){ -var p=document.createElement("p"); -while(SC.firstChild){ -p.appendChild(SC.firstChild); -} -SC.parentNode.insertBefore(p,SC); -Xinha.removeFromParent(SC); -var r=_1d.cloneRange(); -r.setStartBefore(_22); -r.setEndAfter(_22); -r.extractContents(); -sel.removeAllRanges(); -sel.addRange(r); -} -},10); -}; -Opera.prototype.inwardHtml=function(_25){ -_25=_25.replace(/<(\/?)del(\s|>|\/)/ig,"<$1strike$2"); -return _25; -}; -Opera.prototype.outwardHtml=function(_26){ -return _26; -}; -Opera.prototype.onExecCommand=function(_27,UI,_29){ -switch(_27){ -case "removeformat": -var _2a=this.editor; -var sel=_2a.getSelection(); -var _2c=_2a.saveSelection(sel); -var _2d=_2a.createRange(sel); -var els=_2a._doc.body.getElementsByTagName("*"); -var _2f=(_2d.startContainer.nodeType==1)?_2d.startContainer:_2d.startContainer.parentNode; -var i,el; -if(sel.isCollapsed){ -_2d.selectNodeContents(_2a._doc.body); -} -for(i=0;isel.anchorOffset&&sel.anchorNode.childNodes[sel.anchorOffset].nodeType==1){ -return sel.anchorNode.childNodes[sel.anchorOffset]; -}else{ -if(sel.anchorNode.nodeType==1){ -return sel.anchorNode; -}else{ -return null; -} -} -} -return null; -}; -Xinha.prototype.selectionEmpty=function(sel){ -if(!sel){ -return true; -} -if(typeof sel.isCollapsed!="undefined"){ -return sel.isCollapsed; -} -return true; -}; -Xinha.prototype.saveSelection=function(){ -return this.createRange(this.getSelection()).cloneRange(); -}; -Xinha.prototype.restoreSelection=function(_3e){ -var sel=this.getSelection(); -sel.removeAllRanges(); -sel.addRange(_3e); -}; -Xinha.prototype.selectNodeContents=function(_40,_41){ -this.focusEditor(); -this.forceRedraw(); -var _42; -var _43=typeof _41=="undefined"?true:false; -var sel=this.getSelection(); -_42=this._doc.createRange(); -if(_43&&_40.tagName&&_40.tagName.toLowerCase().match(/table|img|input|textarea|select/)){ -_42.selectNode(_40); -}else{ -_42.selectNodeContents(_40); -} -sel.removeAllRanges(); -sel.addRange(_42); -if(typeof _41!="undefined"){ -if(_41){ -sel.collapse(_42.startContainer,_42.startOffset); -}else{ -sel.collapse(_42.endContainer,_42.endOffset); -} -} -}; -Xinha.prototype.insertHTML=function(_45){ -var sel=this.getSelection(); -var _47=this.createRange(sel); -this.focusEditor(); -var _48=this._doc.createDocumentFragment(); -var div=this._doc.createElement("div"); -div.innerHTML=_45; -while(div.firstChild){ -_48.appendChild(div.firstChild); -} -var _4a=this.insertNodeAtSelection(_48); -}; -Xinha.prototype.getSelectedHTML=function(){ -var sel=this.getSelection(); -if(sel.isCollapsed){ -return ""; -} -var _4c=this.createRange(sel); -return Xinha.getHTML(_4c.cloneContents(),false,this); -}; -Xinha.prototype.getSelection=function(){ -var sel=this._iframe.contentWindow.getSelection(); -if(sel&&sel.focusNode&&sel.focusNode.tagName&&sel.focusNode.tagName=="HTML"){ -var bod=this._doc.getElementsByTagName("body")[0]; -var rng=this.createRange(); -rng.selectNodeContents(bod); -sel.removeAllRanges(); -sel.addRange(rng); -sel.collapseToEnd(); -} -return sel; -}; -Xinha.prototype.createRange=function(sel){ -this.activateEditor(); -if(typeof sel!="undefined"){ -try{ -return sel.getRangeAt(0); -} -catch(ex){ -return this._doc.createRange(); -} -}else{ -return this._doc.createRange(); -} -}; -Xinha.prototype.isKeyEvent=function(_51){ -return _51.type=="keypress"; -}; -Xinha.prototype.getKey=function(_52){ -return String.fromCharCode(_52.charCode); -}; -Xinha.getOuterHTML=function(_53){ -return (new XMLSerializer()).serializeToString(_53); -}; -Xinha.cc=String.fromCharCode(8286); -Xinha.prototype.setCC=function(_54){ -var cc=Xinha.cc; -try{ -if(_54=="textarea"){ -var ta=this._textArea; -var _57=ta.selectionStart; -var _58=ta.value.substring(0,_57); -var _59=ta.value.substring(_57,ta.value.length); -if(_59.match(/^[^<]*>/)){ -var _5a=_59.indexOf(">")+1; -ta.value=_58+_59.substring(0,_5a)+cc+_59.substring(_5a,_59.length); -}else{ -ta.value=_58+cc+_59; -} -ta.value=ta.value.replace(new RegExp("(&[^"+cc+"]*?)("+cc+")([^"+cc+"]*?;)"),"$1$3$2"); -ta.value=ta.value.replace(new RegExp("(]*>[^"+cc+"]*?)("+cc+")([^"+cc+"]*?)"),"$1$3$2"); -ta.value=ta.value.replace(new RegExp("^([^"+cc+"]*)("+cc+")([^"+cc+"]*]*>)(.*?)"),"$1$3$2$4"); -ta.value=ta.value.replace(cc,"MARK"); -}else{ -var sel=this.getSelection(); -var _5c=this._doc.createElement("span"); -_5c.id="XinhaOperaCaretMarker"; -sel.getRangeAt(0).insertNode(_5c); -} -} -catch(e){ -} -}; -Xinha.prototype.findCC=function(_5d){ -if(_5d=="textarea"){ -var ta=this._textArea; -var pos=ta.value.search(/(((\s|(MARK))*<\/span>)?)/); -if(pos==-1){ -return; -} -var cc=RegExp.$1; -var end=pos+cc.length; -var _62=ta.value.substring(0,pos); -var _63=ta.value.substring(end,ta.value.length); -ta.value=_62; -ta.scrollTop=ta.scrollHeight; -var _64=ta.scrollTop; -ta.value+=_63; -ta.setSelectionRange(pos,pos); -ta.focus(); -ta.scrollTop=_64; -}else{ -var _65=this._doc.getElementById("XinhaOperaCaretMarker"); -if(_65){ -this.focusEditor(); -var rng=this.createRange(); -rng.selectNode(_65); -var sel=this.getSelection(); -sel.addRange(rng); -sel.collapseToStart(); -this.scrollToElement(_65); -_65.parentNode.removeChild(_65); -return; -} -} -}; -Xinha.getDoctype=function(doc){ -var d=""; -if(doc.doctype){ -d+=""; -} -return d; -}; -Xinha.prototype._standardInitIframe=Xinha.prototype.initIframe; -Xinha.prototype.initIframe=function(){ -if(!this._iframeLoadDone){ -if(this._iframe.contentWindow&&this._iframe.contentWindow.xinhaReadyToRoll){ -this._iframeLoadDone=true; -this._standardInitIframe(); -}else{ -var _6a=this; -setTimeout(function(){ -_6a.initIframe(); -},5); -} -} -}; -Xinha._addEventOperaOrig=Xinha._addEvent; -Xinha._addEvent=function(el,_6c,_6d){ -if(el.tagName&&el.tagName.toLowerCase()=="select"&&_6c=="change"){ -return Xinha.addDom0Event(el,_6c,_6d); -} -return Xinha._addEventOperaOrig(el,_6c,_6d); -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/WebKit/WebKit.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/WebKit/WebKit.js deleted file mode 100644 index 6e37e1ae53..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/modules/WebKit/WebKit.js +++ /dev/null @@ -1,485 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/modules/WebKit/WebKit.js */ -WebKit._pluginInfo={name:"WebKit",origin:"Xinha Core",version:"$LastChangedRevision: 1146 $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.org/tags/0.96.1/modules/WebKit/WebKit.js $".replace(/^[^:]*:\s*(.*)\s*\$$/,"$1"),sponsor:"",sponsor_url:"",license:"htmlArea"}; -function WebKit(_1){ -this.editor=_1; -_1.WebKit=this; -}; -WebKit.prototype.onKeyPress=function(ev){ -var _3=this.editor; -var s=_3.getSelection(); -if(_3.isShortCut(ev)){ -switch(_3.getKey(ev).toLowerCase()){ -case "z": -if(_3._unLink&&_3._unlinkOnUndo){ -Xinha._stopEvent(ev); -_3._unLink(); -_3.updateToolbar(); -return true; -} -break; -case "a": -break; -case "v": -if(!_3.config.htmlareaPaste){ -return true; -} -break; -} -} -switch(_3.getKey(ev)){ -case " ": -var _5=function(_6,_7){ -var _8=_6.nextSibling; -if(typeof _7=="string"){ -_7=_3._doc.createElement(_7); -} -var a=_6.parentNode.insertBefore(_7,_8); -Xinha.removeFromParent(_6); -a.appendChild(_6); -_8.data=" "+_8.data; -s.collapse(_8,1); -_3._unLink=function(){ -var t=a.firstChild; -a.removeChild(t); -a.parentNode.insertBefore(t,a); -Xinha.removeFromParent(a); -_3._unLink=null; -_3._unlinkOnUndo=false; -}; -_3._unlinkOnUndo=true; -return a; -}; -if(_3.config.convertUrlsToLinks&&s&&s.isCollapsed&&s.anchorNode.nodeType==3&&s.anchorNode.data.length>3&&s.anchorNode.data.indexOf(".")>=0){ -var _b=s.anchorNode.data.substring(0,s.anchorOffset).search(/\S{4,}$/); -if(_b==-1){ -break; -} -if(_3._getFirstAncestor(s,"a")){ -break; -} -var _c=s.anchorNode.data.substring(0,s.anchorOffset).replace(/^.*?(\S*)$/,"$1"); -var _d=_c.match(Xinha.RE_email); -if(_d){ -var _e=s.anchorNode; -var _f=_e.splitText(s.anchorOffset); -var _10=_e.splitText(_b); -_5(_10,"a").href="mailto:"+_d[0]; -break; -} -RE_date=/([0-9]+\.)+/; -RE_ip=/(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/; -var _11=_c.match(Xinha.RE_url); -if(_11){ -if(RE_date.test(_c)){ -break; -} -var _12=s.anchorNode; -var _13=_12.splitText(s.anchorOffset); -var _14=_12.splitText(_b); -_5(_14,"a").href=(_11[1]?_11[1]:"http://")+_11[2]; -break; -} -} -break; -} -switch(ev.keyCode){ -case 13: -if(ev.shiftKey){ -} -break; -case 27: -if(_3._unLink){ -_3._unLink(); -Xinha._stopEvent(ev); -} -break; -case 8: -case 46: -if(!ev.shiftKey&&this.handleBackspace()){ -Xinha._stopEvent(ev); -} -break; -default: -_3._unlinkOnUndo=false; -if(s.anchorNode&&s.anchorNode.nodeType==3){ -var a=_3._getFirstAncestor(s,"a"); -if(!a){ -break; -} -if(!a._updateAnchTimeout){ -if(s.anchorNode.data.match(Xinha.RE_email)&&a.href.match("mailto:"+s.anchorNode.data.trim())){ -var _16=s.anchorNode; -var _17=function(){ -a.href="mailto:"+_16.data.trim(); -a._updateAnchTimeout=setTimeout(_17,250); -}; -a._updateAnchTimeout=setTimeout(_17,1000); -break; -} -var m=s.anchorNode.data.match(Xinha.RE_url); -if(m&&a.href.match(new RegExp("http(s)?://"+Xinha.escapeStringForRegExp(s.anchorNode.data.trim())))){ -var _19=s.anchorNode; -var _1a=function(){ -m=_19.data.match(Xinha.RE_url); -if(m){ -a.href=(m[1]?m[1]:"http://")+m[2]; -} -a._updateAnchTimeout=setTimeout(_1a,250); -}; -a._updateAnchTimeout=setTimeout(_1a,1000); -} -} -} -break; -} -return false; -}; -WebKit.prototype.handleBackspace=function(){ -var _1b=this.editor; -setTimeout(function(){ -var sel=_1b.getSelection(); -var _1d=_1b.createRange(sel); -var SC=_1d.startContainer; -var SO=_1d.startOffset; -var EC=_1d.endContainer; -var EO=_1d.endOffset; -var _22=SC.nextSibling; -if(SC.nodeType==3){ -SC=SC.parentNode; -} -if(!(/\S/.test(SC.tagName))){ -var p=document.createElement("p"); -while(SC.firstChild){ -p.appendChild(SC.firstChild); -} -SC.parentNode.insertBefore(p,SC); -Xinha.removeFromParent(SC); -var r=_1d.cloneRange(); -r.setStartBefore(_22); -r.setEndAfter(_22); -r.extractContents(); -sel.removeAllRanges(); -sel.addRange(r); -} -},10); -}; -WebKit.prototype.inwardHtml=function(_25){ -return _25; -}; -WebKit.prototype.outwardHtml=function(_26){ -return _26; -}; -WebKit.prototype.onExecCommand=function(_27,UI,_29){ -this.editor._doc.execCommand("styleWithCSS",false,false); -switch(_27){ -case "paste": -alert(Xinha._lc("The Paste button does not work in the Safari browser for security reasons. Press CTRL-V on your keyboard to paste directly.")); -return true; -break; -case "removeformat": -var _2a=this.editor; -var sel=_2a.getSelection(); -var _2c=_2a.saveSelection(sel); -var _2d=_2a.createRange(sel); -var els=_2a._doc.getElementsByTagName("*"); -els=Xinha.collectionToArray(els); -var _2f=(_2d.startContainer.nodeType==1)?_2d.startContainer:_2d.startContainer.parentNode; -var i,el,_32,_33,_34,r2=_2a._doc.createRange(); -function clean(el){ -if(el.nodeType!=1){ -return; -} -el.removeAttribute("style"); -for(var j=0;jsel.anchorOffset&&sel.anchorNode.childNodes[sel.anchorOffset].nodeType==1){ -return sel.anchorNode.childNodes[sel.anchorOffset]; -}else{ -if(sel.anchorNode.nodeType==1){ -return sel.anchorNode; -}else{ -return null; -} -} -} -return null; -}; -Xinha.prototype.selectionEmpty=function(sel){ -if(!sel){ -return true; -} -if(typeof sel.isCollapsed!="undefined"){ -return sel.isCollapsed; -} -return true; -}; -Xinha.prototype.saveSelection=function(){ -return this.createRange(this.getSelection()).cloneRange(); -}; -Xinha.prototype.restoreSelection=function(_44){ -var sel=this.getSelection(); -sel.removeAllRanges(); -sel.addRange(_44); -}; -Xinha.prototype.selectNodeContents=function(_46,_47){ -this.focusEditor(); -this.forceRedraw(); -var _48; -var _49=typeof _47=="undefined"?true:false; -var sel=this.getSelection(); -_48=this._doc.createRange(); -if(_49&&_46.tagName&&_46.tagName.toLowerCase().match(/table|img|input|textarea|select/)){ -_48.selectNode(_46); -}else{ -_48.selectNodeContents(_46); -} -sel.removeAllRanges(); -sel.addRange(_48); -if(typeof _47!="undefined"){ -if(_47){ -sel.collapse(_48.startContainer,_48.startOffset); -}else{ -sel.collapse(_48.endContainer,_48.endOffset); -} -} -}; -Xinha.prototype.insertHTML=function(_4b){ -var sel=this.getSelection(); -var _4d=this.createRange(sel); -this.focusEditor(); -var _4e=this._doc.createDocumentFragment(); -var div=this._doc.createElement("div"); -div.innerHTML=_4b; -while(div.firstChild){ -_4e.appendChild(div.firstChild); -} -var _50=this.insertNodeAtSelection(_4e); -}; -Xinha.prototype.getSelectedHTML=function(){ -var sel=this.getSelection(); -if(sel.isCollapsed){ -return ""; -} -var _52=this.createRange(sel); -if(_52){ -return Xinha.getHTML(_52.cloneContents(),false,this); -}else{ -return ""; -} -}; -Xinha.prototype.getSelection=function(){ -return this._iframe.contentWindow.getSelection(); -}; -Xinha.prototype.createRange=function(sel){ -this.activateEditor(); -if(typeof sel!="undefined"){ -try{ -return sel.getRangeAt(0); -} -catch(ex){ -return this._doc.createRange(); -} -}else{ -return this._doc.createRange(); -} -}; -Xinha.prototype.isKeyEvent=function(_54){ -return _54.type=="keydown"; -}; -Xinha.prototype.getKey=function(_55){ -var key=String.fromCharCode(parseInt(_55.keyIdentifier.replace(/^U\+/,""),16)); -if(_55.shiftKey){ -return key; -}else{ -return key.toLowerCase(); -} -}; -Xinha.getOuterHTML=function(_57){ -return (new XMLSerializer()).serializeToString(_57); -}; -Xinha.cc=String.fromCharCode(8286); -Xinha.prototype.setCC=function(_58){ -var cc=Xinha.cc; -try{ -if(_58=="textarea"){ -var ta=this._textArea; -var _5b=ta.selectionStart; -var _5c=ta.value.substring(0,_5b); -var _5d=ta.value.substring(_5b,ta.value.length); -if(_5d.match(/^[^<]*>/)){ -var _5e=_5d.indexOf(">")+1; -ta.value=_5c+_5d.substring(0,_5e)+cc+_5d.substring(_5e,_5d.length); -}else{ -ta.value=_5c+cc+_5d; -} -ta.value=ta.value.replace(new RegExp("(&[^"+cc+";]*?)("+cc+")([^"+cc+"]*?;)"),"$1$3$2"); -ta.value=ta.value.replace(new RegExp("(]*>[^"+cc+"]*?)("+cc+")([^"+cc+"]*?)"),"$1$3$2"); -ta.value=ta.value.replace(new RegExp("^([^"+cc+"]*)("+cc+")([^"+cc+"]*]*>)(.*?)"),"$1$3$2$4"); -}else{ -var sel=this.getSelection(); -sel.getRangeAt(0).insertNode(this._doc.createTextNode(cc)); -} -} -catch(e){ -} -}; -Xinha.prototype.findCC=function(_60){ -var cc=Xinha.cc; -if(_60=="textarea"){ -var ta=this._textArea; -var pos=ta.value.indexOf(cc); -if(pos==-1){ -return; -} -var end=pos+cc.length; -var _65=ta.value.substring(0,pos); -var _66=ta.value.substring(end,ta.value.length); -ta.value=_65; -ta.scrollTop=ta.scrollHeight; -var _67=ta.scrollTop; -ta.value+=_66; -ta.setSelectionRange(pos,pos); -ta.focus(); -ta.scrollTop=_67; -}else{ -var _68=this; -try{ -var doc=this._doc; -doc.body.innerHTML=doc.body.innerHTML.replace(new RegExp(cc),""); -var _6a=doc.getElementById("XinhaEditingPostion"); -this.selectNodeContents(_6a); -this.scrollToElement(_6a); -_6a.parentNode.removeChild(_6a); -this._iframe.contentWindow.focus(); -} -catch(e){ -} -} -}; -Xinha.prototype._standardToggleBorders=Xinha.prototype._toggleBorders; -Xinha.prototype._toggleBorders=function(){ -var _6b=this._standardToggleBorders(); -var _6c=this._doc.getElementsByTagName("TABLE"); -for(var i=0;i<_6c.length;i++){ -_6c[i].style.display="none"; -_6c[i].style.display="table"; -} -return _6b; -}; -Xinha.getDoctype=function(doc){ -var d=""; -if(doc.doctype){ -d+=""; -} -return d; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/popups/popup.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/popups/popup.js deleted file mode 100644 index dd37c8d45a..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/popups/popup.js +++ /dev/null @@ -1,107 +0,0 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* The URL of the most recent version of this file is http://svn.xinha.org/trunk/popups/popup.js */ -if(typeof Xinha=="undefined"){ -Xinha=window.opener.Xinha; -} -HTMLArea=Xinha; -function getAbsolutePos(el){ -var r={x:el.offsetLeft,y:el.offsetTop}; -if(el.offsetParent){ -var _3=getAbsolutePos(el.offsetParent); -r.x+=_3.x; -r.y+=_3.y; -} -return r; -}; -function comboSelectValue(c,_5){ -var _6=c.getElementsByTagName("option"); -for(var i=_6.length;--i>=0;){ -var op=_6[i]; -op.selected=(op.value==_5); -} -c.value=_5; -}; -function __dlg_onclose(){ -opener.Dialog._return(null); -}; -function __dlg_init(_9,_a){ -__xinha_dlg_init(_a); -}; -function __xinha_dlg_init(_b){ -if(window.__dlg_init_done){ -return true; -} -if(window.opener._editor_skin){ -var _c=document.getElementsByTagName("head")[0]; -var _d=document.createElement("link"); -_d.type="text/css"; -_d.href=window.opener._editor_url+"skins/"+window.opener._editor_skin+"/skin.css"; -_d.rel="stylesheet"; -_c.appendChild(_d); -} -if(!window.dialogArguments&&opener.Dialog._arguments){ -window.dialogArguments=opener.Dialog._arguments; -} -var _e=Xinha.pageSize(window); -if(!_b){ -_b={width:_e.x,height:_e.y}; -} -window.resizeTo(_b.width,_b.height); -var _f=Xinha.viewportSize(window); -window.resizeBy(0,_e.y-_f.y); -if(_b.top&&_b.left){ -window.moveTo(_b.left,_b.top); -}else{ -if(!Xinha.is_ie){ -var x=opener.screenX+(opener.outerWidth-_b.width)/2; -var y=opener.screenY+(opener.outerHeight-_b.height)/2; -}else{ -var x=(self.screen.availWidth-_b.width)/2; -var y=(self.screen.availHeight-_b.height)/2; -} -window.moveTo(x,y); -} -Xinha.addDom0Event(document.body,"keypress",__dlg_close_on_esc); -window.__dlg_init_done=true; -}; -function __dlg_translate(_12){ -var _13=["input","select","legend","span","option","td","th","button","div","label","a","img"]; -for(var _14=0;_14<_13.length;++_14){ -var _15=document.getElementsByTagName(_13[_14]); -for(var i=_15.length;--i>=0;){ -var _17=_15[i]; -if(_17.firstChild&&_17.firstChild.data){ -var txt=Xinha._lc(_17.firstChild.data,_12); -if(txt){ -_17.firstChild.data=txt; -} -} -if(_17.title){ -var txt=Xinha._lc(_17.title,_12); -if(txt){ -_17.title=txt; -} -} -if(_17.tagName.toLowerCase()=="input"&&(/^(button|submit|reset)$/i.test(_17.type))){ -var txt=Xinha._lc(_17.value,_12); -if(txt){ -_17.value=txt; -} -} -} -} -document.title=Xinha._lc(document.title,_12); -}; -function __dlg_close(val){ -opener.Dialog._return(val); -window.close(); -}; -function __dlg_close_on_esc(ev){ -ev||(ev=window.event); -if(ev.keyCode==27){ -__dlg_close(null); -return false; -} -return true; -}; - diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/skins/blue-look/skin.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/skins/blue-look/skin.css deleted file mode 100644 index b0d478c3a8..0000000000 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/skins/blue-look/skin.css +++ /dev/null @@ -1,105 +0,0 @@ -.htmlarea .toolbar, .htmlarea .toolbar .button -{ - background-color:#f7f8fd; -} - -.htmlarea .toolbarRow -{ - margin-top:2px; - margin-bottom:2px; - border:1px dotted #DEDEDE; - padding:2px; - -moz-border-radius:3px; - margin:4px; - height:25px; -} - -.htmlarea .toolbar .button -{ - background-image: url(button-background.png); - width:20px; - height:20px; - padding:0px; - border:1px solid #f7f8fd; -} - -.buttonImageContainer -{ - position:relative; - left:1px; - top :1px; -} - -.htmlarea .toolbar .separator { - margin:0px; - background-image: url(separator.gif); - border:1px #f7f8fd; - width: 7px; - height: 20px; - padding: 0px; -} - -.htmlarea .toolbar a.button:hover -{ - border: 1px solid; - border-color: white #CCC #CCC white; -} - -.htmlarea .toolbar a.buttonDisabled:hover -{ - border-color: #f7f8fd; -} - -.htmlarea .toolbar .button.buttonActive, -.htmlarea .toolbar .button.buttonPressed -{ - border: 1px solid; - border-color: #CCC white white #CCC; -} - -.htmlarea .statusBar { - border-color: #CCC white white #CCC; - padding: 0px; - height:20px; - background-image: url(button-background.png); - background-repeat: repeat-x; - background-color: #f7f8fd; - color: ButtonText; - font: 11px helvetica,arial,sans-serif; -} - -.htmlarea .statusBar .statusBarWidgetContainer -{ - background-image: url(button-background.png); - background-repeat: repeat-x; - background-color: #f7f8fd; -} - -.htmlarea .statusBar .statusBarTree -{ - display:block; - margin: 3px; -} - -.htmlarea .statusBar .statusBarTree a -{ - padding: 2px 5px; - color: #00f; - text-decoration:none; -} - -.htmlarea .panel h1 -{ - background-image: url('button-background.png'); - background-repeat: repeat-x; - background-color: #f7f8fd; -} -.dialog { - background-color:#f7f8fd; -} -.dialog .title { - background-image: url(button-background.png); -} -.dialog button{ - background-image: url(button-background.png); -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/README_TRANSLATORS.TXT b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/README_TRANSLATORS.TXT new file mode 100644 index 0000000000..5a2bc719a7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/README_TRANSLATORS.TXT @@ -0,0 +1,166 @@ +Translating Xinha +################################################################################ + +Hello you multi-lingual person you, so you would like to help translate Xinha +or create your own special translation to use? + +It's really easy! + +In the Xinha distribution you will find some files under the following directory + + /lang/merged/*.js + +you can see that there is a file for every currently existing translation there +and also one called "__new__.js". You will also see there are other lang files +around the place, they are used only when not using a merged file, you don't need +to touch them, just work on /lang/merged/*.js ! + +If your language is there already, simply open that .js file in your favourite +UTF-8 compliant text editor. + +If your language is not there, copy the __new__.js file and create a new one called +[yourlanguagecode].js, for example if you are translating into Klingon, perhaps +"kl.js" and then open it in your favourite UTF-8 compliant text editor. + +Please note that all translation is in UTF-8 Encoding, do not try to use other +character encodings (character sets), it's not going to end well. + +To actually test or use your translation, in your code right before you load +Xinha specify the language and file like this... + + + + +that's it, try out Xinha and your language file should provide the translations. + +When you have made your translation file and would like to submit it +to Xinha for inclusion in a future distibution of Xinha, please just open a +ticket at http://trac.xinha.org/ and attach your new or improved language file, +be sure to let us know your details to add the the contributors list below! + +Tools +################################################################################ + +In the contrib directory there are a few scripts written in PHP to handle the +translation setup tasks. + +lc_parse_strings.php +-------------------------------------------------------------------------------- + +This script goes through all the Xinha files, javascript, php, html, and pulls +out the strings which should get translated. These are written into lc_base.js +translation files spread through the system, eg /lang/lc_base.js, +/modules/.../lang/lc_base.js, /plugins/.../lang/lc_base.js and so forth. + +lc_base.js files do not get committed to the Subversion repository they are +just temporary working files. + +lc_create_merged_file.php +-------------------------------------------------------------------------------- + +This script takes all the lc_base.js files and the existing lang files for a given +language and creates a merged language file, for example + + php contrib/lc_create_merged_file.php fr /tmp/fr.js + +creates the French translation merged file /tmp/fr.js + +Note that existing merged files are not consulted during this process. + +Translators can then work on the merged file to do their translation work. + +To make things easy the `lang/merged/` directory contains pre-generated merged +language files of each language of the release, again these are not committed +to the subversion repository. + +If you run this script without arguments it will give you some help showing how +you can generate all the merged language files at once, this is done as part of +the release process. + +lc_split_merged_file.php +-------------------------------------------------------------------------------- + +This script takes a merged file and splits it into the constituent lang files +these files are written into a temporary directory structure so that you can +use a diff/merge tool if you wish to compare them rather than actually copying +them into place. For example, + + php contrib/lc_split_merged_file.php /tmp/fr.js fr + +will create a directory structure (it will be printed at completion) in /tmp, + + /tmp/something-unique-here/lang/fr.js + /tmp/something-unique-here/modules/.../lang/fr.js + /tmp/something-unique-here/plugins/.../lang/fr.js + /tmp/something-unique-here/unsupported_plugins/.../lang/fr.js + +the directory and some instructions for easily "installing" the generated files +is printed. + +Contributors +################################################################################ + +The following people are thanked for providing and updating translations! + +ch: Samuel Stone, http://stonemicro.com/ +cz: Jiri Löw, +da: Bjarke M. Lauridsen, http://www.detailx.dk, detailx@gmail.com +da: rene, +da: Steen Sønderup, +de: Broxx, +de: Holger Hees, , http://www.systemconcept.de +de: Mihai Bazon, http://dynarch.com/mishoo +de: Raimund Meyer xinha@ray-of-light.org +de: sven schomacker, http://www.hilope.de, mail@hilope.de +de: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de +ee: Martin Raie, +el: Dimitris Glezos, dimitris@glezos.com +es: Derick Leony +es: michael Hauptmnn (mhauptma73) , http://www.azahost.com/, miguel@azalorea.com +eu: Unkown +fa: Unknown +fi: Unknown +fr: Kevin Huppert - Créabilis, http://www.creabilis.com, kevin.huppert@worldonline.fr +he: Liron Newman, http://www.eesh.net, +he: Mihai Bazon, http://dynarch.com/mishoo +hu: Miklós Somogyi, +it: Fabio Rotondo +it: Mattia Landoni, http://www.webpresident.org/ +it: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de +ja: Unknown +lt: Jaroslav Šatkevič, +lv: Mihai Bazon, http://dynarch.com/mishoo +nb: Kim Steinhaug, http://www.steinhaug.com/, http://www.easycms.no/, kim@easycms.no +nb: Mihai Bazon, +nb: Håvard Wigtil +nb: ses +nl: A.H van den Broek http://www.kontaktfm.nl, tonbroek@kontaktfm.nl +nl: Arthur Bogaart a.bogaart@onehippo.org +nl: Holger Hees, +nl: Maarten Molenschot, maarten@nrgmm.nl +nl: Michel Weegeerink (info@mmc-shop.nl), http://mmc-shop.nl +nl: Mihai Bazon, http://dynarch.com/mishoo +nl: Raimund Meyer xinha@ray-of-light.org +nl: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de +pl: Krzysztof Kotowicz, http://www.web.eskot.pl, http://www.eskot.krakow.pl/portfolio/, koto@webworkers.pl, koto1sa@o2.pl +pt_br: Cau guanabara (independent developer), caugb@ibest.com.br +pt_br: Marcio Barbosa, , http://www.mpg.com.br/ +ro: Mihai Bazon, http://dynarch.com/mishoo +ru: Andrei Blagorazumov, a@fnr.ru +ru: Helen Mitkina (zerok) +ru: Yulya Shtyryakova, +sh: Ljuba Ranković, http://www.rankovic.net/ljubar +si: Tomaz Kregar, x_tomo_x@email.si +sr: Ljuba Ranković, http://www.rankovic.net/ljubar +sv: Erik Dalén, +th: Suchin Prasongbundit, +tr: Serdar Domurcuk, , http://www.km.co.at/ +vn: Nguyễn Đình Nam, +zh_cn: Dave Lo, dlo@interactivetools.com +b5: Dave Lo, dlo@interactivetools.com \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/VERSION.TXT b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/VERSION.TXT new file mode 100644 index 0000000000..85cfd47de7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/VERSION.TXT @@ -0,0 +1 @@ +xinha-1.5.1 diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/Xinha.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/Xinha.css similarity index 85% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/Xinha.css rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/Xinha.css index d845cf386e..5f378dcacb 100644 --- a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/Xinha.css +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/Xinha.css @@ -1,5 +1,5 @@ .htmlarea { background: #fff; } -.htmlarea td { margin:0;padding:0; } +.htmlarea td { margin:0 !important;padding:0 !important; } .htmlarea .toolbarRow { width:1px; @@ -35,7 +35,7 @@ .htmlarea .toolbar .buttonActive, .htmlarea .toolbar .buttonPressed { - padding: 2px 0 0 2px; + /*padding: 2px 0 0 2px;*/ padding:0; border: 1px solid; border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; } @@ -94,6 +94,10 @@ font: 11px Tahoma,Verdana,sans-serif; height:16px; overflow: hidden; + + /* Fix #1601 Incorrect sized status statusBar*/ + box-sizing:border-box; + height:22px; /* 4px pad + 1x border additional to the 16px which was used above */ } .htmlarea .statusBar .statusBarTree a { @@ -348,7 +352,7 @@ form { margin: 0; border: none; } { font-family:sans-serif; position:absolute; - z-index:998; + z-index:1000; text-align:center; width:212px; padding: 55px 0 5px 0; @@ -386,92 +390,3 @@ display: none; { display: none; } - -.placesmanager -{ - width: 95%; - overflow: auto; -} - -.filemanager -{ - width: 95%; - height: 200px; - overflow: auto; - background-color: #fff; -} -.filemanager div.file -{ - min-width: 80px; - height: 100px; - position: relative; - float: left; - border: 1px outset #666; - margin: 4px; -} -.placesmanager div.file -{ - min-width: 60px; - height: 70px; - position: relative; - float: left; - border: 1px outset #666; - margin: 4px; -} -.filemanager div.file:hover, -.placesmanager div.file:hover -{ - border: 1px solid #333; - background: #fffff3; -} - -.filemanager div.selected, -.filemanager div.selected:hover, -.placesmanager div.selected, -.placesmanager div.selected:hover -{ - background: #ffffda; - border: 1px solid #000; -} -.filemanager .filename { - margin: 0.5em; - color: #222; -} -.filemanager div.selected .filename { - color: #000; -} -.filemanager img.thumb -{ - width: 50px; - height: 50px; - position: absolute; - top: 50%; - left: 50%; - margin: -25px 0 0 -25px; - border: 1px solid black; -} -.filemanager img.icon -{ - width: 32px; - height: 32px; - position: absolute; - top: 50%; - left: 50%; - margin: -16px 0 0 -16px; -} -.filemanager img.action -{ - width: 15px; - height: 15px; - position: absolute; -} -.filemanager img.delete -{ - bottom: 3px; - left: 20px; -} -.filemanager img.copy -{ - bottom: 3px; - left: 3px; -} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/XinhaCore.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/XinhaCore.js new file mode 100644 index 0000000000..af6ce902b3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/XinhaCore.js @@ -0,0 +1,9671 @@ + + /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:-- + -- Xinha (is not htmlArea) - http://xinha.org + -- + -- Use of Xinha is granted by the terms of the htmlArea License (based on + -- BSD license) please read license.txt in this package for details. + -- + -- Copyright (c) 2005-2008 Xinha Developer Team and contributors + -- + -- Xinha was originally based on work by Mihai Bazon which is: + -- Copyright (c) 2003-2004 dynarch.com. + -- Copyright (c) 2002-2003 interactivetools.com, inc. + -- This copyright notice MUST stay intact for use. + -- + -- Developers - Coding Style: + -- Before you are going to work on Xinha code, please see http://trac.xinha.org/wiki/Documentation/StyleGuide + -- + -- $HeadURL: http://svn.xinha.org/trunk/XinhaCore.js $ + -- $LastChangedDate: 2018-03-29 11:13:25 +1300 (Thu, 29 Mar 2018) $ + -- $LastChangedRevision: 1433 $ + -- $LastChangedBy: gogo $ + --------------------------------------------------------------------------*/ +/*jslint regexp: false, rhino: false, browser: true, bitwise: false, forin: true, adsafe: false, evil: true, nomen: false, +glovar: false, debug: false, eqeqeq: false, passfail: false, sidebar: false, laxbreak: false, on: false, cap: true, +white: false, widget: false, undef: true, plusplus: false*/ +/*global Dialog , _editor_css , _editor_icons, _editor_lang , _editor_skin , _editor_url, dumpValues, ActiveXObject, HTMLArea, _editor_lcbackend*/ + +/** Information about the Xinha version + * @type Object + */ +Xinha.version = +{ + 'Release' : 'Trunk', + 'Head' : '$HeadURL: http://svn.xinha.org/trunk/XinhaCore.js $'.replace(/^[^:]*:\s*(.*)\s*\$$/, '$1'), + 'Date' : '$LastChangedDate: 2018-03-29 11:13:25 +1300 (Thu, 29 Mar 2018) $'.replace(/^[^:]*:\s*([0-9\-]*) ([0-9:]*) ([+0-9]*) \((.*)\)\s*\$/, '$4 $2 $3'), + 'Revision' : '$LastChangedRevision: 1433 $'.replace(/^[^:]*:\s*(.*)\s*\$$/, '$1'), + 'RevisionBy': '$LastChangedBy: gogo $'.replace(/^[^:]*:\s*(.*)\s*\$$/, '$1') +}; + +//must be here. it is called while converting _editor_url to absolute +Xinha._resolveRelativeUrl = function( base, url ) +{ + if(url.match(/^([^:]+\:)?\/\//)) + { + return url; + } + else + { + var b = base.split("/"); + if(b[b.length - 1] === "") + { + b.pop(); + } + var p = url.split("/"); + if(p[0] == ".") + { + p.shift(); + } + while(p[0] == "..") + { + b.pop(); + p.shift(); + } + return b.join("/") + "/" + p.join("/"); + } +}; + +// Automatically determine editor_url from our script src if it is not supplied +if ( typeof _editor_url == 'undefined' || _editor_url == null) +{ + // Because of the way the DOM is loaded, this is guaranteed to always pull our script tag. + var scripts = document.getElementsByTagName('script'); + var this_script = scripts[scripts.length - 1]; + _editor_url = this_script.src.split('?')[0].split('/').slice(0, -1).join('/').replace(/\x2f*$/, '/'); +} + +if ( typeof _editor_url == "string" ) +{ + // Leave exactly one backslash at the end of _editor_url + _editor_url = _editor_url.replace(/\x2f*$/, '/'); + + // convert _editor_url to absolute + if(!_editor_url.match(/^([^:]+\:)?\//)) + { + (function() + { + var tmpPath = window.location.toString().replace(/\?.*$/,'').split("/"); + tmpPath.pop(); + _editor_url = Xinha._resolveRelativeUrl(tmpPath.join("/"), _editor_url); + })(); + } +} + +// make sure we have a language +if ( typeof _editor_lang == "string" ) +{ + _editor_lang = _editor_lang.toLowerCase(); +} +else +{ + _editor_lang = "en"; +} + +// skin stylesheet to load +if ( typeof _editor_skin !== "string" ) +{ + _editor_skin = ""; +} + +if ( typeof _editor_icons !== "string" ) +{ + _editor_icons = ""; +} +/** +* The list of Xinha editors on the page. May be multiple editors. +* You can access each editor object through this global variable. +* +* Example:
+* +* var html = __xinhas[0].getEditorContent(); // gives you the HTML of the first editor in the page +* +*/ +var __xinhas = []; + +// browser identification +/** Cache the user agent for the following checks + * @type String + * @private + */ +Xinha.agt = navigator.userAgent.toLowerCase(); +/** Browser is Microsoft Internet Explorer + * + * WARNING Starting with Internet Explorer 11, this no longer detects as IE, but instead + * detects as Gecko. Oddly enough, it seems to work pretty much fine under + * Xinha's Gecko Engine, so I don't think we should change this to match IE11 + * and continue to just pretend it is Gecko. + * + * https://blogs.msdn.microsoft.com/ieinternals/2013/09/21/internet-explorer-11s-many-user-agent-strings/ + * + * WARNING Starting with Microsoft Edge (what a silly name for a browser) this no longer + * detects as Gecko but instead detects as Webkit. I can't really see any obvious + * behavioural differences between using Gecko and using Webkit (you can force + * this by, after loading XinhaCore.js but before configuring/initialising setting + * Xinha.is_webkit = false; Xinha.is_gecko = true; + * + * Quoting from Wikipedia: + * EdgeHTML is meant to be fully compatible with the WebKit layout engine + * used by Safari, Chrome and other browsers. Microsoft has stated that + * "any Edge-WebKit differences are bugs that we’re interested in fixing."[24] + * + * So I think that we best have it detect as Webkit, seems that should in theory + * be closest to the mark (vs Gecko). Chrome also uses the Webkit Xinha module.. + * + * It should be noted that the old InternetExplorer engine absolutely does not work + * with edge (and probably not with IE11 I expect but I have not tried). + * + * @type Boolean + */ +Xinha.is_ie = ((Xinha.agt.indexOf("msie") != -1) && (Xinha.agt.indexOf("opera") == -1)); +/** Version Number, if browser is Microsoft Internet Explorer + * @type Float + */ +Xinha.ie_version= parseFloat(Xinha.agt.substring(Xinha.agt.indexOf("msie")+5)); +/** Browser is Opera + * @type Boolean + */ +Xinha.is_opera = (Xinha.agt.indexOf("opera") != -1); +/** Version Number, if browser is Opera + * @type Float + */ +if(Xinha.is_opera && Xinha.agt.match(/opera[\/ ]([0-9.]+)/)) +{ + Xinha.opera_version = parseFloat(RegExp.$1); +} +else +{ + Xinha.opera_version = 0; +} +/** Browserengine is KHTML (Konqueror, Safari) + * @type Boolean + */ +Xinha.is_khtml = (Xinha.agt.indexOf("khtml") != -1); +/** Browser is WebKit + * @type Boolean + */ +Xinha.is_webkit = (Xinha.agt.indexOf("applewebkit") != -1); +/** Webkit build number + * @type Integer + */ +Xinha.webkit_version = parseInt(navigator.appVersion.replace(/.*?AppleWebKit\/([\d]).*?/,'$1'), 10); + +/** Browser is Safari + * @type Boolean + */ +Xinha.is_safari = (Xinha.agt.indexOf("safari") != -1); + +/** Browser is Google Chrome + * @type Boolean + */ +Xinha.is_chrome = (Xinha.agt.indexOf("chrome") != -1); + +/** OS is MacOS + * @type Boolean + */ +Xinha.is_mac = (Xinha.agt.indexOf("mac") != -1); +Xinha.is_ios = (Xinha.agt.indexOf("iphone") != -1) || (Xinha.agt.indexOf("ipad") != -1) ; + +/** Browser is Microsoft Internet Explorer Mac + * @type Boolean + */ +Xinha.is_mac_ie = (Xinha.is_ie && Xinha.is_mac); +/** Browser is Microsoft Internet Explorer Windows + * @type Boolean + */ +Xinha.is_win_ie = (Xinha.is_ie && !Xinha.is_mac); +/** Browser engine is Gecko (Mozilla), applies also to Safari and Opera which work + * largely similar. + *@type Boolean + */ +Xinha.is_gecko = (navigator.product == "Gecko") || Xinha.is_opera; +/** Browser engine is really Gecko, i.e. Browser is Firefox (or Netscape, SeaMonkey, Flock, Songbird, Beonex, K-Meleon, Camino, Galeon, Kazehakase, Skipstone, or whatever derivate might exist out there...) + * @type Boolean + */ +Xinha.is_real_gecko = (navigator.product == "Gecko" && !Xinha.is_webkit); + +/** Gecko version lower than 1.9 + * @type Boolean + */ +// http://trac.xinha.org/ticket/1620 +Xinha.is_ff2 = Xinha.is_real_gecko && navigator.productSub && parseInt(navigator.productSub.substr(0,10), 10) < 20071210; + +/** File is opened locally opened ("file://" protocol) + * @type Boolean + * @private + */ +Xinha.isRunLocally = document.URL.toLowerCase().search(/^file:/) != -1; +/** Editing is enabled by document.designMode (Gecko, Opera), as opposed to contenteditable (IE) + * @type Boolean + * @private + */ +Xinha.is_designMode = (typeof document.designMode != 'undefined' && !Xinha.is_ie); // IE has designMode, but we're not using it + +/** Check if Xinha can run in the used browser, otherwise the textarea will be remain unchanged + * @type Boolean + * @private + */ +Xinha.checkSupportedBrowser = function() +{ + return Xinha.is_real_gecko || (Xinha.is_opera && Xinha.opera_version >= 9.2) || Xinha.ie_version >= 5.5 || Xinha.webkit_version >= 522; +}; +/** Cache result of checking for browser support + * @type Boolean + * @private + */ +Xinha.isSupportedBrowser = Xinha.checkSupportedBrowser(); + +if ( Xinha.isRunLocally && Xinha.isSupportedBrowser) +{ + alert('Xinha *must* be installed on a web server. Locally opened files (those that use the "file://" protocol) cannot properly function. Xinha will try to initialize but may not be correctly loaded.'); +} + +/** Creates a new Xinha object + * @version $Rev: 1433 $ $LastChangedDate: 2018-03-29 11:13:25 +1300 (Thu, 29 Mar 2018) $ + * @constructor + * @param {String|DomNode} textarea the textarea to replace; can be either only the id or the DOM object as returned by document.getElementById() + * @param {Xinha.Config} config optional if no Xinha.Config object is passed, the default config is used + */ +function Xinha(textarea, config) +{ + if ( !Xinha.isSupportedBrowser ) + { + return; + } + + if ( !textarea ) + { + throw new Error ("Tried to create Xinha without textarea specified."); + } + + if ( typeof config == "undefined" ) + { + /** The configuration used in the editor + * @type Xinha.Config + */ + this.config = new Xinha.Config(); + } + else + { + this.config = config; + } + + if ( typeof textarea != 'object' ) + { + textarea = Xinha.getElementById('textarea', textarea); + } + /** This property references the original textarea, which is at the same time the editor in text mode + * @type DomNode textarea + */ + this._textArea = textarea; + this._textArea.spellcheck = false; + Xinha.freeLater(this, '_textArea'); + + // + /** Before we modify anything, get the initial textarea size + * @private + * @type Object w,h + */ + this._initial_ta_size = + { + w: textarea.style.width ? textarea.style.width : ( textarea.offsetWidth ? ( textarea.offsetWidth + 'px' ) : ( textarea.cols + 'em') ), + h: textarea.style.height ? textarea.style.height : ( textarea.offsetHeight ? ( textarea.offsetHeight + 'px' ) : ( textarea.rows + 'em') ) + }; + + if ( document.getElementById("loading_" + textarea.id) || this.config.showLoading ) + { + if (!document.getElementById("loading_" + textarea.id)) + { + Xinha.createLoadingMessage(textarea); + } + this.setLoadingMessage(Xinha._lc("Constructing object")); + } + + /** the current editing mode + * @private + * @type string "wysiwyg"|"text" + */ + this._editMode = "wysiwyg"; + /** this object holds the plugins used in the editor + * @private + * @type Object + */ + this.plugins = {}; + /** periodically updates the toolbar + * @private + * @type timeout + */ + this._timerToolbar = null; + /** periodically takes a snapshot of the current editor content + * @private + * @type timeout + */ + this._timerUndo = null; + /** holds the undo snapshots + * @private + * @type Array + */ + this._undoQueue = [this.config.undoSteps]; + /** the current position in the undo queue + * @private + * @type integer + */ + this._undoPos = -1; + /** use our own undo implementation (true) or the browser's (false) + * @private + * @type Boolean + */ + this._customUndo = true; + /** the document object of the page Xinha is embedded in + * @private + * @type document + */ + this._mdoc = document; // cache the document, we need it in plugins + /** doctype of the edited document (fullpage mode) + * @private + * @type string + */ + this.doctype = ''; + /** running number that identifies the current editor + * @public + * @type integer + */ + this.__htmlarea_id_num = __xinhas.length; + __xinhas[this.__htmlarea_id_num] = this; + + /** holds the events for use with the notifyOn/notifyOf system + * @private + * @type Object + */ + this._notifyListeners = {}; + + // Panels + var panels = + { + right: + { + on: true, + container: document.createElement('td'), + panels: [] + }, + left: + { + on: true, + container: document.createElement('td'), + panels: [] + }, + top: + { + on: true, + container: document.createElement('td'), + panels: [] + }, + bottom: + { + on: true, + container: document.createElement('td'), + panels: [] + } + }; + + for ( var i in panels ) + { + if(!panels[i].container) { continue; } // prevent iterating over wrong type + panels[i].div = panels[i].container; // legacy + panels[i].container.className = 'panels panels_' + i; + Xinha.freeLater(panels[i], 'container'); + Xinha.freeLater(panels[i], 'div'); + } + /** holds the panels + * @private + * @type Array + */ + // finally store the variable + this._panels = panels; + + // Init some properties that are defined later + /** The statusbar container + * @type DomNode statusbar div + */ + this._statusBar = null; + /** The DOM path that is shown in the statusbar in wysiwyg mode + * @private + * @type DomNode + */ + this._statusBarTree = null; + /** The message that is shown in the statusbar in text mode + * @private + * @type DomNode + */ + this._statusBarTextMode = null; + /** Holds the items of the DOM path that is shown in the statusbar in wysiwyg mode + * @private + * @type Array tag names + */ + this._statusBarItems = []; + /** Holds the parts (table cells) of the UI (toolbar, panels, statusbar) + + * @type Object framework parts + */ + this._framework = {}; + /** Them whole thing (table) + * @private + * @type DomNode + */ + this._htmlArea = null; + /** This is the actual editable area.
+ * Technically it's an iframe that's made editable using window.designMode = 'on', respectively document.body.contentEditable = true (IE).
+ * Use this property to get a grip on the iframe's window features
+ * + * @type window + */ + this._iframe = null; + /** The document object of the iframe.
+ * Use this property to perform DOM operations on the edited document + * @type document + */ + this._doc = null; + /** The toolbar + * @private + * @type DomNode + */ + this._toolBar = this._toolbar = null; //._toolbar is for legacy, ._toolBar is better thanks. + /** Holds the botton objects + * @private + * @type Object + */ + this._toolbarObjects = {}; + + //hook in config.Events as as a "plugin" + this.plugins.Events = + { + name: 'Events', + developer : 'The Xinha Core Developer Team', + instance: config.Events + }; +}; +// ray: What is this for? Do we need it? +Xinha.onload = function() { }; +Xinha.init = function() { Xinha.onload(); }; + +// cache some regexps +/** Identifies HTML tag names +* @type RegExp +*/ +Xinha.RE_tagName = /(<\/|<)\s*([^ \t\n>]+)/ig; +/** Exracts DOCTYPE string from HTML +* @type RegExp +*/ +Xinha.RE_doctype = /()\n?/i; +/** Finds head section in HTML +* @type RegExp +*/ +Xinha.RE_head = /((.|\n)*?)<\/head>/i; +/** Finds body section in HTML +* @type RegExp +*/ +Xinha.RE_body = /]*>((.|\n|\r|\t)*?)<\/body>/i; +/** Special characters that need to be escaped when dynamically creating a RegExp from an arbtrary string +* @private +* @type RegExp +*/ +Xinha.RE_Specials = /([\/\^$*+?.()|{}\[\]])/g; +/** When dynamically creating a RegExp from an arbtrary string, some charactes that have special meanings in regular expressions have to be escaped. +* Run any string through this function to escape reserved characters. +* @param {string} string the string to be escaped +* @returns string +*/ +Xinha.escapeStringForRegExp = function (string) +{ + return string.replace(Xinha.RE_Specials, '\\$1'); +}; +/** Identifies email addresses +* @type RegExp +*/ +Xinha.RE_email = /^[_a-z\d\-\.]{3,}@[_a-z\d\-]{2,}(\.[_a-z\d\-]{2,})+$/i; +/** Identifies URLs +* @type RegExp +*/ +Xinha.RE_url = /(https?:\/\/)?(([a-z0-9_]+:[a-z0-9_]+@)?[a-z0-9_\-]{2,}(\.[a-z0-9_\-]{2,}){2,}(:[0-9]+)?(\/\S+)*)/i; + +/** This object records for known plugins where they can be found + * this is used by loadPlugin to avoid having to test multiple locations + * when we can reasonably know where the plugin is because it is + * part of the distribution. + * + * This becomes important because of CoRS and a problem with Amazon S3 + * in which it does not poroduce a necessary header to Chrome if Chrome + * first requests a script as part of loading a + * + * And it will convert all textareas on the page. + * + * See examples/Newbie.html for a complete configuration example + * + */ + +_editor_url = typeof _editor_url != 'undefined' ? _editor_url : null; +_editor_lang = typeof _editor_lang != 'undefined' ? _editor_lang : 'en'; +_editor_skin = typeof _editor_skin != 'undefined' ? _editor_skin : 'silva'; +_editor_icons = typeof _editor_icons != 'undefined' ? _editor_icons : null; +_editor_css = typeof _editor_css != 'undefined' ? _editor_css : null; + +xinha_init = null; +xinha_editors = null; +xinha_config = null; +xinha_toolbar = null; +xinha_plugins = null; + +// Auto detect _editor_url if it's not set. +(function() // wrap this in an ad-hoc function to avoid unecessary pollution of global namespace +{ + // Because of the way the DOM is loaded, this is guaranteed to always pull our script tag. + var scripts = document.getElementsByTagName('script'); + var this_script = scripts[scripts.length - 1]; + + var xinha_options = null; + + // We can grab the script innerHTML and execute that to cut down on script + // tags. Thanks John Resig! + // http://ejohn.org/blog/degrading-script-tags/ + if (this_script.innerHTML.replace(/\s+/, '')) + { + try // DEBUGGING: Comment out this line and the catch(e) below + { + eval(this_script.innerHTML); + + + // Because the setup options might reference _editor_url, we treat that first... + // Chop off any query string. Chop the filename off of the URL + // Leave exactly one backslash at the end of _editor_url + _editor_url = xinha_options._editor_url || this_script.src.split('?')[0].split('/').slice(0, -1).join('/').replace(/\x2f*$/, '/'); + + // then reload the options... + xinha_options = eval(this_script.innerHTML); + delete xinha_options.editor_url; + } + catch(e) // DEBUGGING: Comment out this line and the try below + { + if(typeof console != 'undefined' && typeof console.log == 'function') + { + var warn = typeof console.error == 'function' ? function(w){console.error(w);} : function(w){console.log(w);}; + warn(e); + warn("Xinha: There is a problem loading your configuration data."); + warn("Xinha: Check for common problems like a missing comma after a configuration section, or semicolons instead of commas after configuration sections."); + warn("Xinha: If you get really stuck, comment the try and catch lines around here and the native error might be more useful."); + warn("Xinha: Default configuration is being used."); + } + else + { + throw e; + } + xinha_options = null; + } + } + + if(_editor_url == null) + { + _editor_url = this_script.src.split('?')[0].split('/').slice(0, -1).join('/'); + } + + // Default values + if(xinha_options != null) + { + for(var i in xinha_options) + { + if(xinha_options[i] !== null) + { + window[i] = xinha_options[i]; + } + } + } +})() + +_editor_url = _editor_url.replace(/\x2f*$/, '/'); + +// It may be that we already have the XinhaCore.js loaded, if so, we don't need this stuff +// and setting it would override the proper stuff. +if(typeof Xinha == 'undefined') +{ + var Xinha = {}; + + Xinha.agt = navigator.userAgent.toLowerCase(); + Xinha.is_ie = ((Xinha.agt.indexOf("msie") != -1) && (Xinha.agt.indexOf("opera") == -1)); + Xinha.ie_version= parseFloat(Xinha.agt.substring(Xinha.agt.indexOf("msie")+5)); + Xinha.is_opera = (Xinha.agt.indexOf("opera") != -1); + Xinha.is_khtml = (Xinha.agt.indexOf("khtml") != -1); + Xinha.is_webkit = (Xinha.agt.indexOf("applewebkit") != -1); + Xinha.is_safari = (Xinha.agt.indexOf("safari") != -1); + Xinha.opera_version = navigator.appVersion.substring(0, navigator.appVersion.indexOf(" "))*1; + Xinha.is_mac = (Xinha.agt.indexOf("mac") != -1); + Xinha.is_mac_ie = (Xinha.is_ie && Xinha.is_mac); + Xinha.is_win_ie = (Xinha.is_ie && !Xinha.is_mac); + Xinha.is_gecko = (navigator.product == "Gecko" && !Xinha.is_safari); // Safari lies! + Xinha.isRunLocally = document.URL.toLowerCase().search(/^file:/) != -1; + Xinha.is_designMode = (typeof document.designMode != 'undefined' && !Xinha.is_ie); // IE has designMode, but we're not using it + Xinha.isSupportedBrowser = Xinha.is_gecko || (Xinha.is_opera && Xinha.opera_version >= 9.1) || Xinha.ie_version >= 5.5 || Xinha.is_safari; + + Xinha.loadPlugins = function(plugins, callbackIfNotReady) + { + if ( !Xinha.isSupportedBrowser ) return; + + Xinha.loadStyle(typeof _editor_css == "string" ? _editor_css : "Xinha.css","XinhaCoreDesign"); + Xinha.createLoadingMessages(xinha_editors); + var loadingMessages = Xinha.loadingMessages; + Xinha._loadback(_editor_url + "XinhaCore.js",function () { + // Xinha.removeLoadingMessages(xinha_editors); + // Xinha.createLoadingMessages(xinha_editors); + callbackIfNotReady() + }); + return false; + } + + Xinha._loadback = function(Url, Callback, Scope, Bonus) + { + var T = !Xinha.is_ie ? "onload" : 'onreadystatechange'; + var S = document.createElement("script"); + S.type = "text/javascript"; + S.src = Url; + if ( Callback ) + { + S[T] = function() + { + if ( Xinha.is_ie && ( ! ( /loaded|complete/.test(window.event.srcElement.readyState) ) ) ) + { + return; + } + + Callback.call(Scope ? Scope : this, Bonus); + S[T] = null; + }; + } + document.getElementsByTagName("head")[0].appendChild(S); + }; + + Xinha.getElementTopLeft = function(element) + { + var curleft = 0; + var curtop = 0; + if (element.offsetParent) + { + curleft = element.offsetLeft + curtop = element.offsetTop + while (element = element.offsetParent) + { + curleft += element.offsetLeft + curtop += element.offsetTop + } + } + return { top:curtop, left:curleft }; + } + + // find X position of an element + Xinha.findPosX = function(obj) + { + var curleft = 0; + if ( obj.offsetParent ) + { + return Xinha.getElementTopLeft(obj).left; + } + else if ( obj.x ) + { + curleft += obj.x; + } + return curleft; + }; + + // find Y position of an element + Xinha.findPosY = function(obj) + { + var curtop = 0; + if ( obj.offsetParent ) + { + return Xinha.getElementTopLeft(obj).top; + } + else if ( obj.y ) + { + curtop += obj.y; + } + return curtop; + }; + + Xinha.createLoadingMessages = function(xinha_editors) + { + if ( Xinha.loadingMessages || !Xinha.isSupportedBrowser ) + { + return; + } + Xinha.loadingMessages = []; + + for (var i=0;i= 0) + { + this.splice(idx, 1); + } + + return this; + }; + + PluginsArray.prototype.only = function(p) + { + // Enpty ourself + if(this.length) + { + this.splice(0,this.length); + } + + // Add them in + if(typeof p == 'string') + { + p = [ p ]; + } + + for(var i = 0; i < p.length; i++) + { + this.push(p[i]); + } + } + + for(var i in xinha_editors) + { + var specific_plugins = new PluginsArray(xinha_plugins); + var plugins_returned = xinha_plugins_specific(specific_plugins, xinha_editors[i]._textArea, xinha_editors[i]); + + // Note that if they don't return anything, it will probably still work + // due to references and such + if(typeof plugins_returned == 'object') + { + specific_plugins = plugins_returned; + } + xinha_editors[i].registerPlugins(parse_plugins(specific_plugins)); + } + } + else + { + xinha_editors = Xinha.makeEditors(xinha_editors, xinha_config, xinha_plugins); + } + + + /** STEP 5 *************************************************************** + * If you want to change the configuration variables of any of the + * editors, this is the place to do that, for example you might want to + * change the width and height of one of the editors, like this... + * + * xinha_editors.myTextArea.config.width = '640px'; + * xinha_editors.myTextArea.config.height = '480px'; + * + ************************************************************************/ + + if(typeof xinha_config_specific == 'function') + { + for(var i in xinha_editors) + { + var returned_config = xinha_config_specific(xinha_editors[i].config, xinha_editors[i]._textArea, xinha_editors[i]); + + // If the function doesn't return an object, it will stil work probably + // as xinha_config.XXX in the function will be working on a reference + if(typeof returned_config == 'object') + { + xinha_editors[i].config = returned_config; + } + } + } + + + /** STEP 6 *************************************************************** + * Finally we "start" the editors, this turns the textareas into + * Xinha editors. + ************************************************************************/ + + Xinha.startEditors(xinha_editors); +} + +Xinha.addOnloadHandler(xinha_init); // this executes the xinha_init function on page load + // and does not interfere with window.onload properties set by other scripts + + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/XinhaLoader.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/XinhaLoader.js new file mode 100755 index 0000000000..ac83ad7daf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/XinhaLoader.js @@ -0,0 +1,283 @@ +var Xinha = {}; + +// Auto detect _editor_url if it's not set. +if (!window._editor_url) +{ + (function() // wrap this in an ad-hoc function to avoid unecessary pollution of global namespace + { + // Because of the way the DOM is loaded, this is guaranteed to always pull our script tag. + var scripts = document.getElementsByTagName('script'); + var this_script = scripts[scripts.length - 1]; + + // We'll allow two ways to specify arguments. We'll accept them in the + // argument of the script, or we'll accept them embedded into our script tag. + var args = this_script.src.split('?'); + args = args.length == 2 ? args[1].split('&') : ''; + for (var index = 0; index < args.length; ++index) + { + var arg = args[index].split('='); + if (arg.length == 2) + { + switch (arg[0]) + { + case 'lang': + case 'icons': + case 'skin': + case 'url': + window['_editor_' + arg[0]] = arg[1]; + break; + } + } + } + + // We can grab the script innerHTML and execute that to cut down on script + // tags. Thanks John Resig! + // http://ejohn.org/blog/degrading-script-tags/ + if (this_script.innerHTML.replace(/\s+/, '')) + { + eval(this_script.innerHTML); + } + + // Default values + _editor_lang = window._editor_lang || 'en'; + + // Chop off any query string. Chop the filename off of the URL. + _editor_url = window._editor_url || this_script.src.split('?')[0].split('/').slice(0, -1).join('/'); + + })() +} +_editor_url = _editor_url.replace(/\x2f*$/, '/'); + +Xinha.agt = navigator.userAgent.toLowerCase(); +Xinha.is_ie = ((Xinha.agt.indexOf("msie") != -1) && (Xinha.agt.indexOf("opera") == -1)); +Xinha.ie_version= parseFloat(Xinha.agt.substring(Xinha.agt.indexOf("msie")+5)); +Xinha.is_opera = (Xinha.agt.indexOf("opera") != -1); +Xinha.is_khtml = (Xinha.agt.indexOf("khtml") != -1); +Xinha.is_webkit = (Xinha.agt.indexOf("applewebkit") != -1); +Xinha.is_safari = (Xinha.agt.indexOf("safari") != -1); +Xinha.opera_version = navigator.appVersion.substring(0, navigator.appVersion.indexOf(" "))*1; +Xinha.is_mac = (Xinha.agt.indexOf("mac") != -1); +Xinha.is_mac_ie = (Xinha.is_ie && Xinha.is_mac); +Xinha.is_win_ie = (Xinha.is_ie && !Xinha.is_mac); +Xinha.is_gecko = (navigator.product == "Gecko" && !Xinha.is_safari); // Safari lies! +Xinha.isRunLocally = document.URL.toLowerCase().search(/^file:/) != -1; +Xinha.is_designMode = (typeof document.designMode != 'undefined' && !Xinha.is_ie); // IE has designMode, but we're not using it +Xinha.isSupportedBrowser = Xinha.is_gecko || (Xinha.is_opera && Xinha.opera_version >= 9.1) || Xinha.ie_version >= 5.5 || Xinha.is_safari; + +Xinha.loadPlugins = function(plugins, callbackIfNotReady) +{ + if ( !Xinha.isSupportedBrowser ) return; + + Xinha.loadStyle(typeof _editor_css == "string" ? _editor_css : "Xinha.css","XinhaCoreDesign"); + Xinha.createLoadingMessages(xinha_editors); + var loadingMessages = Xinha.loadingMessages; + Xinha._loadback(_editor_url + "XinhaCore.js",function () { + Xinha.removeLoadingMessages(xinha_editors); + Xinha.createLoadingMessages(xinha_editors); + callbackIfNotReady() + }); + return false; +} + +Xinha._loadback = function(Url, Callback, Scope, Bonus) +{ + var T = !Xinha.is_ie ? "onload" : 'onreadystatechange'; + var S = document.createElement("script"); + S.type = "text/javascript"; + S.src = Url; + if ( Callback ) + { + S[T] = function() + { + if ( Xinha.is_ie && ( ! ( /loaded|complete/.test(window.event.srcElement.readyState) ) ) ) + { + return; + } + + Callback.call(Scope ? Scope : this, Bonus); + S[T] = null; + }; + } + document.getElementsByTagName("head")[0].appendChild(S); +}; + +Xinha.getElementTopLeft = function(element) +{ + var curleft = 0; + var curtop = 0; + if (element.offsetParent) + { + curleft = element.offsetLeft + curtop = element.offsetTop + while (element = element.offsetParent) + { + curleft += element.offsetLeft + curtop += element.offsetTop + } + } + return { top:curtop, left:curleft }; +} + +// find X position of an element +Xinha.findPosX = function(obj) +{ + var curleft = 0; + if ( obj.offsetParent ) + { + return Xinha.getElementTopLeft(obj).left; + } + else if ( obj.x ) + { + curleft += obj.x; + } + return curleft; +}; + +// find Y position of an element +Xinha.findPosY = function(obj) +{ + var curtop = 0; + if ( obj.offsetParent ) + { + return Xinha.getElementTopLeft(obj).top; + } + else if ( obj.y ) + { + curtop += obj.y; + } + return curtop; +}; + +Xinha.createLoadingMessages = function(xinha_editors) +{ + if ( Xinha.loadingMessages || !Xinha.isSupportedBrowser ) + { + return; + } + Xinha.loadingMessages = []; + + for (var i=0;i + + + + Custom Plugins Xinha Loading Example + + + + + + + +

Custom Plugins Newbie Guide Example

+

This example shows how you can load custom plugins which are outside of the Xinha standard plugins location.

+ +

You can do this even if you use Xinha from a CDN and have your custom plugins locally.

+ +

Click into the editor and look in the status bar, on the right you will see the message printed by this (silly) custom plugin which has been loaded from /examples/custom_plugins.

+ + +
+
+ + + + +
+
+ + +

You can see in the source of this page how we do this, simply by specifying...

+ +
+    xinha_plugins:  [ 'minimal', { from: '/examples/custom_plugins', load: 'StatusBarMessage' } ]
+  
+ +

... as an option to Xinha, which says, to load the standard 'minimal' plugins and also, from '/examples/custom_plugins' directory, load 'StatusBarMessage' plugin, you could of course load: ['StatusBarMessage', 'AnotherCustom' ] to load more than one thing from the same directory.

+ + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/ExtendedDemo.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/ExtendedDemo.html new file mode 100644 index 0000000000..0c30370b49 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/ExtendedDemo.html @@ -0,0 +1,16 @@ + +Xinha Extended Example + + + + + + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Newbie.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Newbie.html new file mode 100644 index 0000000000..eeb043e075 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Newbie.html @@ -0,0 +1,158 @@ + + + + + Standard Xinha Loading Example (Newbie Guide) + + + + + + + +

Newbie Guide Example

+

This example shows how a more complete usage of Xinha may look, view the source of this page and in the <head> section you will find all the code, mostly it's just comments!

+ +

We can see below that some Xinha areas have been created, with different sizes, different toolbars and different plugins.

+ +
+
+ + + + + +
+ +
+ +
+ +
+ +
+
+ + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Old_Newbie_Guide/Newbie.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Old_Newbie_Guide/Newbie.html new file mode 100644 index 0000000000..ed1b3779b5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Old_Newbie_Guide/Newbie.html @@ -0,0 +1,23 @@ + + + + Xinha Newbie Guide + + + + + + + + +
+
+ +
+
+ + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Old_Newbie_Guide/XinhaConfig.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Old_Newbie_Guide/XinhaConfig.js new file mode 100644 index 0000000000..4e76be0f12 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Old_Newbie_Guide/XinhaConfig.js @@ -0,0 +1,136 @@ +xinha_editors = null; +xinha_init = null; +xinha_config = null; +xinha_plugins = null; + +// This contains the names of textareas we will make into Xinha editors +xinha_init = xinha_init ? xinha_init : function() +{ + /** STEP 1 *************************************************************** + * First, specify the textareas that shall be turned into Xinhas. + * For each one add the respective id to the xinha_editors array. + * I you want add more than on textarea, keep in mind that these + * values are comma seperated BUT there is no comma after the last value. + * If you are going to use this configuration on several pages with different + * textarea ids, you can add them all. The ones that are not found on the + * current page will just be skipped. + ************************************************************************/ + + xinha_editors = xinha_editors ? xinha_editors : + [ + 'myTextArea', 'anotherOne' + ]; + + /** STEP 2 *************************************************************** + * Now, what are the plugins you will be using in the editors on this + * page. List all the plugins you will need, even if not all the editors + * will use all the plugins. + * + * The list of plugins below is a good starting point, but if you prefer + * a simpler editor to start with then you can use the following + * + * xinha_plugins = xinha_plugins ? xinha_plugins : [ ]; + * + * which will load no extra plugins at all. + ************************************************************************/ + + xinha_plugins = xinha_plugins ? xinha_plugins : + [ + 'CharacterMap', + 'ContextMenu', + 'FancySelects', + 'SmartReplace', + 'Stylist', + 'Linker', + 'SuperClean', + 'TableOperations', + 'ListOperations', + 'WebKitResize' + ]; + + // THIS BIT OF JAVASCRIPT LOADS THE PLUGINS, NO TOUCHING :) + if(!Xinha.loadPlugins(xinha_plugins, xinha_init)) return; + + + /** STEP 3 *************************************************************** + * We create a default configuration to be used by all the editors. + * If you wish to configure some of the editors differently this will be + * done in step 5. + * + * If you want to modify the default config you might do something like this. + * + * xinha_config = new Xinha.Config(); + * xinha_config.width = '640px'; + * xinha_config.height = '420px'; + * + * + * For a list of the available configuration options, see: + * http://trac.xinha.org/wiki/Documentation/ConfigVariablesList + * + *************************************************************************/ + + xinha_config = xinha_config ? xinha_config() : new Xinha.Config(); + + //this is the standard toolbar, feel free to remove buttons as you like + xinha_config.toolbar = + [ + ["popupeditor"], + ["separator","formatblock","fontname","fontsize","bold","italic","underline","strikethrough"], + ["separator","forecolor","hilitecolor","textindicator"], + ["separator","subscript","superscript"], + ["linebreak","separator","justifyleft","justifycenter","justifyright","justifyfull"], + ["separator","insertorderedlist","insertunorderedlist","outdent","indent"], + ["separator","inserthorizontalrule","createlink","insertimage","inserttable"], + ["linebreak","separator","undo","redo","selectall","print"], (Xinha.is_gecko ? [] : ["cut","copy","paste","overwrite","saveas"]), + ["separator","killword","clearfonts","removeformat","toggleborders","splitblock","lefttoright", "righttoleft"], + ["separator","htmlmode","showhelp","about"] + ]; + + // To adjust the styling inside the editor, we can load an external stylesheet like this + // NOTE : YOU MUST GIVE AN ABSOLUTE URL + xinha_config.pageStyleSheets = [ _editor_url + "examples/files/full_example.css" ]; + //if you're using Stylist, import a stylesheet like this + xinha_config.stylistLoadStylesheet(_editor_url + "examples/files/stylist.css"); + + + /** STEP 4 *************************************************************** + * We first create editors for the textareas. + * + * You can do this in two ways, either + * + * xinha_editors = Xinha.makeEditors(xinha_editors, xinha_config, xinha_plugins); + * + * if you want all the editor objects to use the same set of plugins, OR; + * + * xinha_editors = Xinha.makeEditors(xinha_editors, xinha_config); + * xinha_editors.myTextArea.registerPlugins(['Stylist']); + * xinha_editors.anotherOne.registerPlugins(['CSS','SuperClean']); + * + * if you want to use a different set of plugins for one or more of the + * editors. + ************************************************************************/ + + xinha_editors = Xinha.makeEditors(xinha_editors, xinha_config, xinha_plugins); + + /** STEP 5 *************************************************************** + * If you want to change the configuration variables of any of the + * editors, this is the place to do that, for example you might want to + * change the width and height of one of the editors, like this... + * + * xinha_editors.myTextArea.config.width = '640px'; + * xinha_editors.myTextArea.config.height = '480px'; + * + ************************************************************************/ + + + /** STEP 6 *************************************************************** + * Finally we "start" the editors, this turns the textareas into + * Xinha editors. + ************************************************************************/ + + Xinha.startEditors(xinha_editors); +} + +Xinha.addOnloadHandler(xinha_init); // this executes the xinha_init function on page load + // and does not interfere with window.onload properties set by other scripts + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Old_Newbie_Guide/simple_example.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Old_Newbie_Guide/simple_example.html new file mode 100644 index 0000000000..6126ba1402 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/Old_Newbie_Guide/simple_example.html @@ -0,0 +1,61 @@ + + + + +Simple example of Xinha + + + + + + + + +
+
+ + + +
+
+ + + + + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/OneLine.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/OneLine.html new file mode 100644 index 0000000000..c66c7fbf68 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/OneLine.html @@ -0,0 +1,40 @@ + + + + + Example of Easy Loading Xinha With No Configuration + + + + + + +

+ This demonstration shows how you only need to add one single line to your page to enable Xinha for the textareas on it, the only code added is... +

+ +
+  <script src="/path/to/xinha/XinhaEasy.js" type="text/javascript"></script>
+
+ +

and that will cause all the textareas to be converted into Xinha areas with default options and commonly useful plugins.

+ +
+
+ + + +
+
+ + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/UsingPhpPlugins.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/UsingPhpPlugins.php new file mode 100644 index 0000000000..28db596e81 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/UsingPhpPlugins.php @@ -0,0 +1,148 @@ + + + + + + + Example of Xinha + + + + + + + +

Demonstration of MootoolsFileManager and Linker with Xinha integration

+

MootoolsFileManager (for uploading Images and Files) and Linker (for browsing files on the server and making a link to them) plugins require PHP configuration to be passed in a secure way, this example shows you how to do this! View the source, all the code is in the head.

+ +
+
+ + +
+
+ + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/custom_plugins/StatusBarMessage/StatusBarMessage.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/custom_plugins/StatusBarMessage/StatusBarMessage.js new file mode 100644 index 0000000000..f386c17d72 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/custom_plugins/StatusBarMessage/StatusBarMessage.js @@ -0,0 +1,29 @@ +// A sily little demo plugin that puts a message in the status bar + +function StatusBarMessage(editor) { + this.editor = editor; +} + +StatusBarMessage._pluginInfo = { + name : "StatusBarMessage", + version : "0.1", + developer : "James Sleeman", + license : "htmlArea" +}; + +StatusBarMessage.prototype._lc = function(string) { + return Xinha._lc(string, "StatusBarMessage"); +}; + +StatusBarMessage.prototype.onGenerateOnce = function() { + var self = this; + if (this.message==null) { + var message = self.editor.registerStatusWidget('StatusBarMessage', ['wysiwyg']); + this.message = message; + } +}; + +StatusBarMessage.prototype.onUpdateToolbar = function() { + this.message.innerHTML = this._lc("Hello World, This Is The Custom Plugin Speaking"); +}; + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/Extended.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/Extended.html new file mode 100644 index 0000000000..f9c22ea9bf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/Extended.html @@ -0,0 +1,320 @@ + + + + Settings + + + + + + + + +
Settings
+
+
+ Xinha options + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +
+ CharacterMap options + + +
+ +
+ ListType options + + +
+ +
+ CharCounter options + +
+ +
+ +
+
+
+ +
+ + +
+
+ + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/custom.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/custom.css new file mode 100644 index 0000000000..48cbfe7603 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/custom.css @@ -0,0 +1,40 @@ + /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:-- + -- CSS plugin example CSS file. This file is used by full_example.js + -- when the CSS plugin is included in an auto-generated example. + -- @TODO Make this CSS more useful. + -- + -- $HeadURL:http://svn.xinha.webfactional.com/trunk/examples/files/custom.css $ + -- $LastChangedDate:2008-02-04 01:43:21 +0100 (Mo, 04 Feb 2008) $ + -- $LastChangedRevision:962 $ + -- $LastChangedBy:ray $ + --------------------------------------------------------------------------*/ + +body { background-color: #234; color: #dd8; font-family: tahoma; font-size: 12px; } + +a:link, a:visited { color: #8cf; } +a:hover { color: #ff8; } + +h1 { background-color: #456; color: #ff8; padding: 2px 5px; border: 1px solid; border-color: #678 #012 #012 #678; } + +/* syntax highlighting (used by the first combo defined for the CSS plugin) */ + +pre { margin: 0px 1em; padding: 5px 1em; background-color: #000; border: 1px dotted #02d; border-left: 2px solid #04f; } +.code { color: #f5deb3; } +.string { color: #00ffff; } +.comment { color: #8fbc8f; } +.variable-name { color: #fa8072; } +.type { color: #90ee90; font-weight: bold; } +.reference { color: #ee82ee; } +.preprocessor { color: #faf; } +.keyword { color: #ffffff; font-weight: bold; } +.function-name { color: #ace; } +.html-tag { font-weight: bold; } +.html-helper-italic { font-style: italic; } +.warning { color: #ffa500; font-weight: bold; } +.html-helper-bold { font-weight: bold; } + +/* info combo */ + +.quote { font-style: italic; color: #ee9; } +.highlight { background-color: yellow; color: #000; } +.deprecated { text-decoration: line-through; color: #aaa; } diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/dynamic.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/dynamic.css new file mode 100644 index 0000000000..497de629bb --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/dynamic.css @@ -0,0 +1,56 @@ + /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:-- + -- DynamicCSS plugin example CSS file. Used by full_example.js + -- when the DynamicCSS plugin is included in an auto-generated example. + -- @TODO Make this CSS more useful. + -- + -- $HeadURL:http://svn.xinha.webfactional.com/trunk/examples/files/dynamic.css $ + -- $LastChangedDate:2008-02-04 01:43:21 +0100 (Mo, 04 Feb 2008) $ + -- $LastChangedRevision:962 $ + -- $LastChangedBy:ray $ + --------------------------------------------------------------------------*/ + +p { + FONT-FAMILY: Arial, Helvetica; + FONT-SIZE: 9pt; + FONT-WEIGHT: normal; + COLOR: #000000; +} + +p.p1 { + FONT-FAMILY: Arial, Helvetica; + FONT-SIZE: 11pt; + FONT-WEIGHT: normal; + COLOR: #000000; +} + +p.p2 { + FONT-FAMILY: Arial, Helvetica; + FONT-SIZE: 13pt; + FONT-WEIGHT: normal; + COLOR: #000000; +} + +div { + FONT-FAMILY: Arial, Helvetica; + FONT-SIZE: 9pt; + FONT-WEIGHT: bold; + COLOR: #000000; +} + +div.div1 { + FONT-FAMILY: Arial, Helvetica; + FONT-SIZE: 11pt; + FONT-WEIGHT: bold; + COLOR: #000000; +} + +div.div2 { + FONT-FAMILY: Arial, Helvetica; + FONT-SIZE: 13pt; + FONT-WEIGHT: bold; + COLOR: #000000; +} + +.quote { font-style: italic; color: #ee9; } +.highlight { background-color: yellow; color: #000; } +.deprecated { text-decoration: line-through; color: #aaa; } diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/ext_example-body.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/ext_example-body.php new file mode 100644 index 0000000000..4cb6f8c085 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/ext_example-body.php @@ -0,0 +1,256 @@ +'; + break; + + case 'standards': + default: + echo ''; + break; + + } +?> + + + + + + + Example of Xinha + + + + + + + + + + + +
+
+ + +
+ + + + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/ext_example-dest.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/ext_example-dest.php new file mode 100644 index 0000000000..cbc1eed302 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/ext_example-dest.php @@ -0,0 +1,23 @@ + + + + Example of Xinha + + + +$value){ + if(substr($key,0,10) == 'myTextarea') { + echo '

'.$key.'(source):

'.$value.'
'; + echo '

'.$key.'(preview):

'.$value; + } + } +?> + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/ext_example-menu.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/ext_example-menu.php new file mode 100644 index 0000000000..54678e5fed --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/ext_example-menu.php @@ -0,0 +1,473 @@ + + + + + + + + Example of Xinha + + + + + + +
+

Xinha Example

+
+ Settings + + + + + +
+ +
+
+ Plugins +
+read())) //not a dot file or directory + { if(substr($entry,0,1) != '.') + { $dir_array[] = $entry; + } + } + $d->close(); + sort($dir_array); + foreach ($dir_array as $entry) + { echo ''."\n"; + } + +?> +
+
+
+ + + +
+ + + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/examples/full_example.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/full_example.css similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/examples/full_example.css rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/full_example.css diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/stylist.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/stylist.css new file mode 100644 index 0000000000..19fb621266 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/files/stylist.css @@ -0,0 +1,33 @@ + /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:-- + -- Stylist plugin example CSS file. Used by full_example.js + -- when the Stylist plugin is included in an auto-generated example. + -- + -- $HeadURL:http://svn.xinha.webfactional.com/trunk/examples/files/stylist.css $ + -- $LastChangedDate:2008-02-04 01:43:21 +0100 (Mo, 04 Feb 2008) $ + -- $LastChangedRevision:962 $ + -- $LastChangedBy:ray $ + --------------------------------------------------------------------------*/ + +.bluetext +{ + color:blue; +} + +p.blue_paragraph +{ + color:darkblue; +} + +li.green_list_item +{ + color:green; +} + +h1.webdings_lvl_1 +{ + font-family:webdings; +} + +img.polaroid { border:1px solid black; background-color:white; padding:10px; padding-bottom:30px; } + +li.light_blue_list_item { color:#97b0f4; } \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/index.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/index.html new file mode 100644 index 0000000000..e76dd4def9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/index.html @@ -0,0 +1,27 @@ + + +

Xinha Examples

+

These are the current examples for using Xinha, these demonstrate "the way" to use Xinha.

+ + +

Experimenting and Testing

+

These examples are mostly for testing out the plugins and used during development of Xinha, they don't necessarily follow "the way" to use Xinha in your own code.

+ + + +

Old Style Examples

+

These examples follow some older initialisation styles for Xinha, they still work fine and you can do it this way if you like (or have existing code that does), but it's probably easier to use the first three examples above to base your work on.

+ + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/render-mode-developer-help.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/render-mode-developer-help.js new file mode 100644 index 0000000000..1f63220b43 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/render-mode-developer-help.js @@ -0,0 +1,87 @@ +/** Load this javascript at the bottom of the page to output some information about what + * rendering mode is being used by the browser (based on doctype detection). + */ + +window.setTimeout(function(){ + if(typeof document.doctype == 'undefined' || document.doctype == null) return; + var doctypeHelp = '\ +
\ + Browser Rendering Mode\ +

Assuming that your browser is fairly modern, this page is being rendered in

\ +
\ +

'; + + doctypeHelp += '' + document.compatMode + ' - '; + if(document.compatMode == 'BackCompat') + { + doctypeHelp += ('Quirks Mode'); + } + else + { + function get_doctype() + { + var doctype = + ''; + return doctype; + } + + var doctypeString = get_doctype(); + + + switch(doctypeString) + { + case '': + case '': + case '': + case '': + case '': + case '': + case '': + case '': + case '': + case '': + case '': + doctypeHelp += ('Standards Mode
'+Xinha.htmlEncode(doctypeString)); + break; + + case '': + case '': + case '': + case '': + doctypeHelp += ('Almost Standards Mode
'+Xinha.htmlEncode(doctypeString)); + break; + + default: + doctypeHelp += ('Either Standards Mode, or Almost Standards Mode
'+Xinha.htmlEncode(doctypeString)); + break; + } + } + doctypeHelp += ('\ +

\ +
\ +

\ + To change the mode alter the doctype on this file, '+this.document.location.pathname+', to one of\ +

\ +
\ +
Standards
\ +
<!DOCTYPE html>
\ + \ +
Almost Standards
\ +
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
\ + \ +
Quirks
\ +
(No Doctype at all)
\ +
\ +

This information is provided by render-mode-developer-help.js, remove that script from your page to remove this help text.

\ +
'); + document.getElementById('doctypeHelpText').innerHTML = doctypeHelp; +}, 500); + +// Because adding the above to the document after it's loaded will quite possibly +// introduce a vertical scrollbar, of which Xinha won't be aware, we would have +// to issue a sizeEditors +document.write('
'); + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/require-password.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/require-password.php new file mode 100644 index 0000000000..e1c4f160a1 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/require-password.php @@ -0,0 +1,271 @@ + + + +

Demo Disabled

+

For security, to enable the demo you need to set a password, a simple 2 step process...

+

First, enter your choice of password:

+ +

And now, create a file as below:

+

Save As:

+ + +

Once you have created/uploaded the file, reload the page and you should be prompted for the password.

+ +

Password Required

+

Accessing this demo requires you specify your Xinha Demo Password.

+

If you have forgotten your password, then you can delete the file and refresh this page.

+
+

+ Password: + + +

+
+ \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/testbed.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/testbed.php new file mode 100644 index 0000000000..bbd44a464c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/examples/testbed.php @@ -0,0 +1,159 @@ + +'; + break; + + case 'standards': + default: + echo ''; + break; + + } +?> + + + + + Example of Xinha + + + + + + + + +
+
+ + +
+
+ + + + + + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/htmlarea.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/htmlarea.js new file mode 100644 index 0000000000..f1f7de8f19 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/htmlarea.js @@ -0,0 +1,23 @@ + + /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:-- + -- COMPATABILITY FILE + -- htmlarea.js is now XinhaCore.js + -- + -- $HeadURL:http://svn.xinha.webfactional.com/trunk/htmlarea.js $ + -- $LastChangedDate:2007-01-15 15:28:57 +0100 (Mo, 15 Jan 2007) $ + -- $LastChangedRevision:659 $ + -- $LastChangedBy:gogo $ + --------------------------------------------------------------------------*/ + +if ( typeof _editor_url == "string" ) +{ + // Leave exactly one backslash at the end of _editor_url + _editor_url = _editor_url.replace(/\x2f*$/, '/'); +} +else +{ + alert("WARNING: _editor_url is not set! You should set this variable to the editor files path; it should preferably be an absolute path, like in '/htmlarea/', but it can be relative if you prefer. Further we will try to load the editor files correctly but we'll probably fail."); + _editor_url = ''; +} + +document.write(''); \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/de/bold.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/de/bold.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/de/bold.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/de/bold.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/de/italic.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/de/italic.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/de/italic.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/de/italic.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/de/underline.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/de/underline.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/de/underline.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/de/underline.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_buttons_main.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/ed_buttons_main.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_buttons_main.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/ed_buttons_main.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_charmap.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/ed_charmap.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_charmap.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/ed_charmap.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_selectall.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/ed_selectall.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_selectall.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/ed_selectall.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/fr/bold.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/fr/bold.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/fr/bold.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/fr/bold.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/fr/strikethrough.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/fr/strikethrough.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/fr/strikethrough.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/fr/strikethrough.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/fr/underline.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/fr/underline.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/fr/underline.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/fr/underline.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/iconset.xml b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/iconset.xml new file mode 100644 index 0000000000..10b9b8ce5c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Classic/iconset.xml @@ -0,0 +1,263 @@ + + + + + + + iconsets/Classic/ed_buttons_main.gif + 3 + 2 + + + iconsets/Classic/de/bold.gif + + + iconsets/Classic/fr/bold.gif + + + + + iconsets/Classic/ed_buttons_main.gif + 2 + 2 + + + iconsets/Classic/de/italic.gif + + + + + iconsets/Classic/ed_buttons_main.gif + 2 + 0 + + + iconsets/Classic/fr/underline.gif + + + iconsets/Classic/de/underline.gif + + + + + iconsets/Classic/ed_buttons_main.gif + 3 + 0 + + + iconsets/Classic/fr/strikethrough.gif + + + + + iconsets/Classic/ed_buttons_main.gif + 3 + 1 + + + + + iconsets/Classic/ed_buttons_main.gif + 2 + 1 + + + + + iconsets/Classic/ed_buttons_main.gif + 4 + 2 + + + + + iconsets/Classic/ed_buttons_main.gif + 5 + 2 + + + + + iconsets/Classic/ed_buttons_main.gif + 5 + 0 + + + + + iconsets/Classic/ed_buttons_main.gif + 4 + 0 + + + + + iconsets/Classic/ed_buttons_main.gif + 4 + 1 + + + + + iconsets/Classic/ed_buttons_main.gif + 3 + 3 + + + + + iconsets/Classic/ed_buttons_main.gif + 2 + 3 + + + + + iconsets/Classic/ed_buttons_main.gif + 0 + 2 + + + + + iconsets/Classic/ed_buttons_main.gif + 1 + 2 + + + + + iconsets/Classic/ed_buttons_main.gif + 6 + 3 + + + + + iconsets/Classic/ed_buttons_main.gif + 0 + 3 + + + + + iconsets/Classic/ed_buttons_main.gif + 1 + 3 + + + + + iconsets/Classic/ed_buttons_main.gif + 0 + 0 + + + + + iconsets/Classic/ed_buttons_main.gif + 0 + 1 + + + + + iconsets/Classic/ed_buttons_main.gif + 1 + 1 + + + + + iconsets/Classic/ed_buttons_main.gif + 1 + 0 + + + + + iconsets/Classic/ed_buttons_main.gif + 6 + 1 + + + + + iconsets/Classic/ed_buttons_main.gif + 0 + 4 + + + + + iconsets/Classic/ed_buttons_main.gif + 1 + 4 + + + + + iconsets/Classic/ed_buttons_main.gif + 8 + 1 + + + + + iconsets/Classic/ed_buttons_main.gif + 9 + 1 + + + + + iconsets/Classic/ed_buttons_main.gif + 4 + 4 + + + + + iconsets/Classic/ed_buttons_main.gif + 8 + 2 + + + + + iconsets/Classic/ed_buttons_main.gif + 9 + 2 + + + + + iconsets/Classic/ed_buttons_main.gif + 8 + 0 + + + + + iconsets/Classic/ed_buttons_main.gif + 9 + 0 + + + + + iconsets/Classic/ed_selectall.gif + + + + + iconsets/Classic/ed_charmap.gif + + + + + plugins/SmartReplace/img.gif + + + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/LICENSE b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/LICENSE new file mode 100644 index 0000000000..ca2dca49ec --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/LICENSE @@ -0,0 +1,121 @@ +License + +The Crystal Project are released under LGPL. + +GNU General Public License. + + 0. + + This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. + + Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. + 1. + + You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. + + You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + 2. + + You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + 1. The modified work must itself be a software library. + 2. You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. + 3. You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. + 4. If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. + + (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) + + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. + + In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + 3. + + You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. + + Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of the Library into a program that is not a library. + 4. + + You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. + 5. + + A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. + However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. + 6. + + As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: + 1. Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) . + 2. Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. + 3. Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. + 4. If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. + 5. Verify that the user has already received a copy of these materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + + It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. + 7. + + You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: + 1. + + Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. + 2. + + Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. + 8. + + You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + 9. + + You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. + 10. + + Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. + 11. + + If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. + + If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. + + It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + 12. + + If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + 13. + + The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. + 14. + + If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +No Warranty + + 15. + + Because the library is licensed free of charge, there is no warranty for the library, to the extent permitted by applicable law. Except when otherwise stated in writing the copyright holders and/or other parties provide the library "as is" without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the library is with you. Should the library prove defective, you assume the cost of all necessary servicing, repair or correction. + 16. + + In no event unless required by applicable law or agreed to in writing will any copyright holder, or any other party who may modify and/or redistribute the library as permitted above, be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use or inability to use the library (including but not limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of the library to operate with any other software), even if such holder or other party has been advised of the possibility of such damages. + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/README b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/README new file mode 100644 index 0000000000..a55ebed47d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/README @@ -0,0 +1,3 @@ +These icons are from everaldo.com, in particular from the Open Office Crystal Icons set + +The Crystal Project are released under LGPL. \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/ed_buttons_main.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/ed_buttons_main.png new file mode 100644 index 0000000000..40bd054d03 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/ed_buttons_main.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/iconset.xml b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/iconset.xml new file mode 100644 index 0000000000..6833d326aa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Crystal/iconset.xml @@ -0,0 +1,234 @@ + + + + + + + iconsets/Crystal/ed_buttons_main.png + 3 + 2 + + + + + + iconsets/Crystal/ed_buttons_main.png + 2 + 2 + + + + + iconsets/Crystal/ed_buttons_main.png + 2 + 0 + + + + + iconsets/Crystal/ed_buttons_main.png + 3 + 0 + + + + + iconsets/Crystal/ed_buttons_main.png + 3 + 1 + + + + + iconsets/Crystal/ed_buttons_main.png + 2 + 1 + + + + + iconsets/Crystal/ed_buttons_main.png + 4 + 2 + + + + + iconsets/Crystal/ed_buttons_main.png + 5 + 2 + + + + + iconsets/Crystal/ed_buttons_main.png + 5 + 0 + + + + + iconsets/Crystal/ed_buttons_main.png + 4 + 0 + + + + + iconsets/Crystal/ed_buttons_main.png + 4 + 1 + + + + + iconsets/Crystal/ed_buttons_main.png + 3 + 3 + + + + + iconsets/Crystal/ed_buttons_main.png + 2 + 3 + + + + + iconsets/Crystal/ed_buttons_main.png + 0 + 2 + + + + + iconsets/Crystal/ed_buttons_main.png + 1 + 2 + + + + + iconsets/Crystal/ed_buttons_main.png + 6 + 3 + + + + + iconsets/Crystal/ed_buttons_main.png + 0 + 3 + + + + + iconsets/Crystal/ed_buttons_main.png + 1 + 3 + + + + + iconsets/Crystal/ed_buttons_main.png + 0 + 0 + + + + + iconsets/Crystal/ed_buttons_main.png + 0 + 1 + + + + + iconsets/Crystal/ed_buttons_main.png + 1 + 1 + + + + + iconsets/Crystal/ed_buttons_main.png + 1 + 0 + + + + + iconsets/Crystal/ed_buttons_main.png + 6 + 1 + + + + + iconsets/Crystal/ed_buttons_main.png + 0 + 4 + + + + + iconsets/Crystal/ed_buttons_main.png + 1 + 4 + + + + + iconsets/Crystal/ed_buttons_main.png + 8 + 1 + + + + + iconsets/Crystal/ed_buttons_main.png + 9 + 1 + + + + + iconsets/Crystal/ed_buttons_main.png + 4 + 4 + + + + + iconsets/Crystal/ed_buttons_main.png + 8 + 2 + + + + + iconsets/Crystal/ed_buttons_main.png + 9 + 2 + + + + + iconsets/Crystal/ed_buttons_main.png + 8 + 0 + + + + + iconsets/Crystal/ed_buttons_main.png + 9 + 0 + + + + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Tango/README b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Tango/README new file mode 100644 index 0000000000..a098e598bb --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Tango/README @@ -0,0 +1,3 @@ +These icons are from the Tango Desktop Project. The icons are released to the Public Domain. From http://tango.freedesktop.org: + +The Tango Desktop Project exists to help create a consistent graphical user interface experience for free and Open Source software. diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_buttons_main.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Tango/ed_buttons_main.png similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_buttons_main.png rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Tango/ed_buttons_main.png diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Tango/iconset.xml b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Tango/iconset.xml new file mode 100644 index 0000000000..cc4ee75ca3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/iconsets/Tango/iconset.xml @@ -0,0 +1,233 @@ + + + + + + + iconsets/Tango/ed_buttons_main.png + 3 + 2 + + + + + + iconsets/Tango/ed_buttons_main.png + 2 + 2 + + + + + iconsets/Tango/ed_buttons_main.png + 2 + 0 + + + + + iconsets/Tango/ed_buttons_main.png + 3 + 0 + + + + + iconsets/Tango/ed_buttons_main.png + 3 + 1 + + + + + iconsets/Tango/ed_buttons_main.png + 2 + 1 + + + + + iconsets/Tango/ed_buttons_main.png + 4 + 2 + + + + + iconsets/Tango/ed_buttons_main.png + 5 + 2 + + + + + iconsets/Tango/ed_buttons_main.png + 5 + 0 + + + + + iconsets/Tango/ed_buttons_main.png + 4 + 0 + + + + + iconsets/Tango/ed_buttons_main.png + 4 + 1 + + + + + iconsets/Tango/ed_buttons_main.png + 3 + 3 + + + + + iconsets/Tango/ed_buttons_main.png + 2 + 3 + + + + + iconsets/Tango/ed_buttons_main.png + 0 + 2 + + + + + iconsets/Tango/ed_buttons_main.png + 1 + 2 + + + + + iconsets/Tango/ed_buttons_main.png + 6 + 3 + + + + + iconsets/Tango/ed_buttons_main.png + 0 + 3 + + + + + iconsets/Tango/ed_buttons_main.png + 1 + 3 + + + + + iconsets/Tango/ed_buttons_main.png + 0 + 0 + + + + + iconsets/Tango/ed_buttons_main.png + 0 + 1 + + + + + iconsets/Tango/ed_buttons_main.png + 1 + 1 + + + + + iconsets/Tango/ed_buttons_main.png + 1 + 0 + + + + + iconsets/Tango/ed_buttons_main.png + 6 + 1 + + + + + iconsets/Tango/ed_buttons_main.png + 0 + 4 + + + + + iconsets/Tango/ed_buttons_main.png + 1 + 4 + + + + + iconsets/Tango/ed_buttons_main.png + 8 + 1 + + + + + iconsets/Tango/ed_buttons_main.png + 9 + 1 + + + + + iconsets/Tango/ed_buttons_main.png + 4 + 4 + + + + + iconsets/Tango/ed_buttons_main.png + 8 + 2 + + + + + iconsets/Tango/ed_buttons_main.png + 9 + 2 + + + + + iconsets/Tango/ed_buttons_main.png + 8 + 0 + + + + + iconsets/Tango/ed_buttons_main.png + 9 + 0 + + + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/de/bold.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/de/bold.gif new file mode 100644 index 0000000000..21d286fc43 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/de/bold.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/de/italic.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/de/italic.gif new file mode 100644 index 0000000000..0bf794722e Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/de/italic.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/de/underline.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/de/underline.gif new file mode 100644 index 0000000000..05454894af Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/de/underline.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_about.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_about.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_about.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_about.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_align.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_align.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_align.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_align.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_align_center.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_align_center.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_align_center.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_align_center.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_align_justify.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_align_justify.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_align_justify.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_align_justify.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_align_left.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_align_left.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_align_left.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_align_left.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_align_right.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_align_right.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_align_right.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_align_right.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_blank.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_blank.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_blank.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_blank.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_buttons_main.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_buttons_main.gif new file mode 100644 index 0000000000..bc1962ba1f Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_buttons_main.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_buttons_main.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_buttons_main.png new file mode 100644 index 0000000000..7f73f65a50 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_buttons_main.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_charmap.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_charmap.gif new file mode 100644 index 0000000000..289aa7cda5 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_charmap.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_clearfonts.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_clearfonts.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_clearfonts.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_clearfonts.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_color_bg.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_color_bg.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_color_bg.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_color_bg.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_color_fg.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_color_fg.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_color_fg.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_color_fg.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_copy.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_copy.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_copy.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_copy.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_custom.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_custom.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_custom.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_custom.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_cut.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_cut.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_cut.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_cut.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_delete.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_delete.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_delete.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_delete.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_bold.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_bold.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_bold.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_bold.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_italic.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_italic.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_italic.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_italic.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_strike.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_strike.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_strike.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_strike.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_sub.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_sub.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_sub.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_sub.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_sup.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_sup.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_sup.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_sup.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_underline.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_underline.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_format_underline.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_format_underline.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_help.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_help.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_help.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_help.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_hr.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_hr.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_hr.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_hr.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_html.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_html.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_html.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_html.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_image.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_image.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_image.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_image.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_indent_less.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_indent_less.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_indent_less.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_indent_less.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_indent_more.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_indent_more.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_indent_more.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_indent_more.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_killword.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_killword.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_killword.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_killword.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_left_to_right.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_left_to_right.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_left_to_right.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_left_to_right.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_link.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_link.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_link.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_link.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_list_bullet.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_list_bullet.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_list_bullet.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_list_bullet.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_list_num.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_list_num.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_list_num.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_list_num.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_overwrite.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_overwrite.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_overwrite.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_overwrite.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_paste.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_paste.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_paste.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_paste.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_print.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_print.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_print.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_print.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_redo.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_redo.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_redo.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_redo.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_right_to_left.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_right_to_left.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_right_to_left.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_right_to_left.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_rmformat.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_rmformat.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_rmformat.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_rmformat.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_save.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_save.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_save.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_save.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_save.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_save.png similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_save.png rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_save.png diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_saveas.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_saveas.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_saveas.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_saveas.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_selectall.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_selectall.gif new file mode 100644 index 0000000000..9acf0a0389 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_selectall.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_show_border.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_show_border.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_show_border.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_show_border.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_splitblock.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_splitblock.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_splitblock.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_splitblock.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_splitcel.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_splitcel.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_splitcel.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_splitcel.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_undo.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_undo.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_undo.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_undo.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_word_cleaner.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_word_cleaner.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/ed_word_cleaner.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/ed_word_cleaner.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fr/bold.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fr/bold.gif new file mode 100644 index 0000000000..8a0f6574f9 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fr/bold.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fr/strikethrough.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fr/strikethrough.gif new file mode 100644 index 0000000000..5707aefca4 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fr/strikethrough.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fr/underline.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fr/underline.gif new file mode 100644 index 0000000000..4ecaf22126 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fr/underline.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/fullscreen_maximize.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fullscreen_maximize.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/fullscreen_maximize.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fullscreen_maximize.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/fullscreen_minimize.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fullscreen_minimize.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/fullscreen_minimize.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/fullscreen_minimize.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/insert_table.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/insert_table.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/insert_table.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/insert_table.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/insertfilelink.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/insertfilelink.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/insertfilelink.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/insertfilelink.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/insertmacro.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/insertmacro.png similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/insertmacro.png rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/insertmacro.png diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-new.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-new.png new file mode 100644 index 0000000000..4c3efdd6fa Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-new.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-open.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-open.png new file mode 100644 index 0000000000..69dd8d4830 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-open.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-print.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-print.png new file mode 100644 index 0000000000..35c37bd73e Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-print.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-save.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-save.png new file mode 100644 index 0000000000..22ff495710 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/document-save.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-copy.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-copy.png new file mode 100644 index 0000000000..8dd48c4949 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-copy.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-redo.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-redo.png new file mode 100644 index 0000000000..c3b0df0396 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-redo.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-select-all.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-select-all.png new file mode 100644 index 0000000000..f4b0b19e09 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-select-all.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-undo.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-undo.png new file mode 100644 index 0000000000..8b0fef9a83 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/edit-undo.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/folder-new.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/folder-new.png new file mode 100644 index 0000000000..628f4d50ff Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/folder-new.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-direction-left-to-right.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-direction-left-to-right.png new file mode 100755 index 0000000000..a8808127db Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-direction-left-to-right.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-direction-right-to-left.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-direction-right-to-left.png new file mode 100755 index 0000000000..9a2b7b4bc6 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-direction-right-to-left.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-indent-less.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-indent-less.png new file mode 100644 index 0000000000..1787a7ff48 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-indent-less.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-indent-more.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-indent-more.png new file mode 100644 index 0000000000..6bad6bbacb Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-indent-more.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-center.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-center.png new file mode 100644 index 0000000000..207dc4cd84 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-center.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-fill.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-fill.png new file mode 100644 index 0000000000..663cbaddde Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-fill.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-left.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-left.png new file mode 100644 index 0000000000..d9b40a76f7 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-left.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-right.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-right.png new file mode 100644 index 0000000000..c3013073cf Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-justify-right.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-background-color.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-background-color.png new file mode 100644 index 0000000000..857b0475db Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-background-color.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-bold.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-bold.png new file mode 100644 index 0000000000..c9cb630343 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-bold.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-color.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-color.png new file mode 100644 index 0000000000..7362e3eb1a Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-color.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-italic.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-italic.png new file mode 100644 index 0000000000..977ea82176 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-italic.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-strikethrough.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-strikethrough.png new file mode 100644 index 0000000000..ccee76e29e Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-strikethrough.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-subscript.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-subscript.png new file mode 100644 index 0000000000..da1d9e1fe1 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-subscript.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-superscript.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-superscript.png new file mode 100644 index 0000000000..ea87557466 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-superscript.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-underline.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-underline.png new file mode 100644 index 0000000000..0c48721002 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/format-text-underline.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/go-up.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/go-up.png new file mode 100644 index 0000000000..fa9a7d71b5 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/go-up.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/insert-link.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/insert-link.png new file mode 100755 index 0000000000..d6b2ab8fa8 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/insert-link.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/insert-table.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/insert-table.png new file mode 100755 index 0000000000..80d24eb331 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/insert-table.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/toggle-borders.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/toggle-borders.png new file mode 100755 index 0000000000..a86679fcb4 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/toggle-borders.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/view-fullscreen.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/view-fullscreen.png new file mode 100644 index 0000000000..ffdabd4e97 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/view-fullscreen.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/view-restore.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/view-restore.png new file mode 100644 index 0000000000..1997ce2f47 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/actions/view-restore.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/apps/accessories-character-map.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/apps/accessories-character-map.png new file mode 100644 index 0000000000..5dd11246f2 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/apps/accessories-character-map.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/apps/help-browser.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/apps/help-browser.png new file mode 100644 index 0000000000..f25fc3fbf1 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/apps/help-browser.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/mimetypes/image-x-generic.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/mimetypes/image-x-generic.png new file mode 100644 index 0000000000..68da5027cf Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/mimetypes/image-x-generic.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/places/user-trash.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/places/user-trash.png new file mode 100644 index 0000000000..0e0953c73c Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/16x16/places/user-trash.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/apps/internet-web-browser.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/apps/internet-web-browser.png new file mode 100644 index 0000000000..10d2ed4f47 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/apps/internet-web-browser.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/mimetypes/text-html.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/mimetypes/text-html.png new file mode 100644 index 0000000000..a896697d78 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/mimetypes/text-html.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/mimetypes/text-x-generic.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/mimetypes/text-x-generic.png new file mode 100644 index 0000000000..928a67995e Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/mimetypes/text-x-generic.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/mimetypes/x-office-document.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/mimetypes/x-office-document.png new file mode 100644 index 0000000000..daf84b2860 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/mimetypes/x-office-document.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/places/folder.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/places/folder.png new file mode 100644 index 0000000000..0171b09fa2 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/places/folder.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/places/network-server.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/places/network-server.png new file mode 100644 index 0000000000..1d38e4f9c8 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/32x32/places/network-server.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/COPYING b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/COPYING new file mode 100644 index 0000000000..e709d0c050 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tango/COPYING @@ -0,0 +1,67 @@ +Creative Commons Attribution-ShareAlike 2.5 License Agreement + +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + 1. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License. + 2. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License. + 3. "Licensor" means the individual or entity that offers the Work under the terms of this License. + 4. "Original Author" means the individual or entity who created the Work. + 5. "Work" means the copyrightable work of authorship offered under the terms of this License. + 6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + 7. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. + +2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + 1. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works; + 2. to create and reproduce Derivative Works; + 3. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works; + 4. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works. + 5. + + For the avoidance of doubt, where the work is a musical composition: + 1. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work. + 2. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights society or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions). + 6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions). + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + 1. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by clause 4(c), as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by clause 4(c), as requested. + 2. You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, a later version of this License with the same License Elements as this License, or a Creative Commons iCommons license that contains the same License Elements as this License (e.g. Attribution-ShareAlike 2.5 Japan). You must include a copy of, or the Uniform Resource Identifier for, this License or other license specified in the previous sentence with every copy or phonorecord of each Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Derivative Works that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder, and You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Derivative Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Derivative Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Derivative Work itself to be made subject to the terms of this License. + 3. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the Original Author and/or Licensor designate another party or parties (e.g. a sponsor institute, publishing entity, journal) for attribution in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + 1. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + 2. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + +Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + +Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. + +Creative Commons may be contacted at http://creativecommons.org/. diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/tidy.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tidy.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/tidy.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/tidy.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/toggle_borders.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/toggle_borders.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/toggle_borders.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/toggle_borders.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/xinha-small-icon.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/xinha-small-icon.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/xinha-small-icon.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/xinha-small-icon.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/xinha_logo.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/xinha_logo.gif similarity index 100% rename from app/src/main/webapp/roller-ui/authoring/editors/xinha-0.96.1/images/xinha_logo.gif rename to app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/images/xinha_logo.gif diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/b5.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/b5.js new file mode 100644 index 0000000000..1ca7a13daf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/b5.js @@ -0,0 +1,39 @@ +// I18N constants +// LANG: "b5", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "關於 Xinha", + "Background Color": "背景顏色", + "Bold": "粗體", + "Bulleted List": "無序清單", + "Current style": "字體例子", + "Decrease Indent": "減小行前空白", + "Font Color": "文字顏色", + "Help using editor": "說明", + "Horizontal Rule": "水平線", + "Increase Indent": "加寬行前空白", + "Insert Table": "插入表格", + "Insert Web Link": "插入連結", + "Insert/Modify Image": "插入圖形", + "Italic": "斜體", + "Justify Center": "位置居中", + "Justify Full": "位置左右平等", + "Justify Left": "位置靠左", + "Justify Right": "位置靠右", + "Ordered List": "順序清單", + "Strikethrough": "刪除線", + "Subscript": "下標", + "Superscript": "上標", + "Toggle HTML Source": "切換HTML原始碼", + "Underline": "底線", + "__OBSOLETE__": { + "Enlarge Editor": "放大" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ch.js new file mode 100644 index 0000000000..e3c4e98cdc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ch.js @@ -0,0 +1,62 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "關於 Xinha", + "Background Color": "背景顏色", + "Bold": "粗體", + "Bulleted List": "無序清單", + "Copy selection": "复制选项", + "Current style": "字體例子", + "Cut selection": "剪制选项", + "Decrease Indent": "伸排", + "Direction left to right": "从左到右", + "Direction right to left": "从右到左", + "Font Color": "文字顏色", + "Help using editor": "說明", + "Horizontal Rule": "水平線", + "Increase Indent": "縮排", + "Insert Table": "插入表格", + "Insert Web Link": "插入連結", + "Insert/Modify Image": "插入圖像", + "Italic": "斜體", + "Justify Center": "居中", + "Justify Full": "整齊", + "Justify Left": "靠左", + "Justify Right": "靠右", + "Ordered List": "順序清單", + "Paste from clipboard": "贴上", + "Path": "途徑", + "Redoes your last action": "重来", + "Strikethrough": "刪線", + "Subscript": "下標", + "Superscript": "上標", + "Toggle HTML Source": "切換HTML原始碼", + "Underline": "底線", + "Undoes your last action": "回原", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "你在用純字編輯方式. 用 [<>] 按鈕轉回 所見即所得 編輯方式.", + "__OBSOLETE__": { + "Cancel": "取消", + "Enlarge Editor": "伸出編輯系統", + "Insert/Modify Link": "插入/改寫連結", + "New window (_blank)": "新窗户(_blank)", + "None (use implicit)": "無(use implicit)", + "OK": "好", + "Other": "其他", + "Same frame (_self)": "本匡 (_self)", + "Target:": "目標匡:", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.", + "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "整頁式在Internet Explorer 上常出問題, 因為這是 Internet Explorer 的無名問題,我們無法解決。你可能看見一些垃圾,或遇到其他問題。我們已警告了你. 如果要轉到 正頁式 請按 好.", + "Title (tooltip):": "主題 (tooltip):", + "Top frame (_top)": "上匡 (_top)", + "URL:": "網址:", + "You must enter the URL where this link points to": "你必須輸入你要连结的網址" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/cz.js new file mode 100644 index 0000000000..1f41feae0a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/cz.js @@ -0,0 +1,48 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "O této aplikaci", + "Background Color": "Barva pozadí", + "Bold": "Tučně", + "Bulleted List": "Odrážky", + "Copy selection": "Kopírovat", + "Current style": "Zvolený styl", + "Cut selection": "Vyjmout", + "Decrease Indent": "Předsadit", + "Font Color": "Barva písma", + "Help using editor": "Nápověda aplikace", + "Horizontal Rule": "Vodorovná čára", + "Increase Indent": "Odsadit", + "Insert Table": "Vložit tabulku", + "Insert Web Link": "Vložit odkaz", + "Insert/Modify Image": "Vložit obrázek", + "Italic": "Kurzíva", + "Justify Center": "Na střed", + "Justify Full": "Zarovnat do stran", + "Justify Left": "Zarovnat doleva", + "Justify Right": "Zarovnat doprava", + "Ordered List": "Seznam", + "Paste from clipboard": "Vložit", + "Path": "Cesta", + "Redoes your last action": "Opakuje poslední akci", + "Strikethrough": "Přeškrtnutí", + "Subscript": "Dolní index", + "Superscript": "Horní index", + "Toggle HTML Source": "Přepnout HTML", + "Underline": "Podtržení", + "Undoes your last action": "Vrátí poslední akci", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jste v TEXTOVÉM REŽIMU. Použijte tlačítko [<>] pro přepnutí do WYSIWIG.", + "__OBSOLETE__": { + "Cancel": "Zrušit", + "Enlarge Editor": "Nové okno editoru", + "OK": "OK" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/da.js new file mode 100644 index 0000000000..853e83f13a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/da.js @@ -0,0 +1,160 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Om Xinha", + "Address": "Adresse", + "Background Color": "Baggrundsfarve", + "Bold": "Fed", + "Bulleted List": "Punktliste", + "Clean content pasted from Word": "Rens indhold kopieret fra Word", + "Clear Inline Font Specifications": "Fjern skrift valg", + "Clear MSOffice tags": "MSOffice filter", + "Close": "Luk", + "Constructing object": "Objekt registreres", + "Copy selection": "Kopier", + "Create Statusbar": "Opretter statuslinje", + "Create Toolbar": "Opretter værktøjslinje", + "Current style": "Anvendt stil", + "Cut selection": "Klip", + "Decrease Indent": "Formindsk indrykning", + "Direction left to right": "Tekst venstre mod højre", + "Direction right to left": "Tekst højre mod venstre", + "Finishing": "Afslutter", + "Font Color": "Skriftfarve", + "Formatted": "Formateret", + "Generate Xinha framework": "Xinha Framework genereres", + "Heading 1": "Overskrift 1", + "Heading 2": "Overskrift 2", + "Heading 3": "Overskrift 3", + "Heading 4": "Overskrift 4", + "Heading 5": "Overskrift 5", + "Heading 6": "Overskrift 6", + "Headings": "Overskrift 1 til 6", + "Help using editor": "Hjælp", + "Horizontal Rule": "Vandret streg", + "Increase Indent": "Forøg indrykning", + "Init editor size": "Størrelsen beregnes", + "Insert Table": "Indsæt tabel", + "Insert Web Link": "Indsæt hyperlink", + "Insert/Modify Image": "Indsæt/udskift billede", + "Insert/Overwrite": "Indsæt/Overskriv", + "Italic": "Kursiv", + "Justify Center": "Centrer", + "Justify Full": "Lige margener", + "Justify Left": "Venstrejuster", + "Justify Right": "Højrejuster", + "Keyboard shortcuts": "Tastaturgenveje", + "Loading in progress. Please wait!": "Editoren hentes ind. Vent venligst.", + "Loading plugin $plugin": "Plugin $plugin hentes", + "Normal": "Normal", + "Ordered List": "Ordnet liste", + "Paste from clipboard": "Indsæt", + "Path": "STi", + "Print document": "Udskriv dokument", + "Redoes your last action": "Gentag sidste ændring", + "Register plugin $plugin": "Plugin $plugin registreres", + "Remove formatting": "Fjern formatering", + "Save as": "Gem som", + "Select all": "Vælg alt", + "Set format to paragraph": "Formater afsnit", + "Split Block": "Del blok", + "Strikethrough": "Gennemstregning", + "Subscript": "Sænket skrift", + "Superscript": "Hævet skrift", + "The editor provides the following key combinations:": "Editoren kender følgende kombinationer:", + "Toggle Borders": "Tabelkanter til/fra", + "Toggle HTML Source": "HTML visning", + "Underline": "Understregning", + "Undoes your last action": "Fortryd sidste ændring", + "Would you like to clear font colours?": "Vil du fjerne skriftfarve valg", + "Would you like to clear font sizes?": "Vil du fjerne skriftstørrelse valg", + "Would you like to clear font typefaces?": "Vil du fjern skriftsnit valg", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Du er i TEXT mode. Brug [<>] knappen til at skifte til visuel editering.", + "insert linebreak": "Indsæt linjeskift", + "new paragraph": "Nyt afsnit", + "__OBSOLETE__": { + "— format —": "— Format —", + "Absbottom": "Bund", + "Absmiddle": "Centreret", + "Alignment:": "Justering:", + "Alternate text:": "Alternativ text:", + "Baseline": "Grundlinje", + "Border thickness:": "Kantbredde:", + "Bottom": "Tekstbund", + "Cancel": "Fortryd", + "Cell padding:": "Cellefyld:", + "Cell spacing:": "Celleafstand:", + "Click a color...": "Vælg farve", + "Color: ": "Farve: ", + "Cols:": "Søjler:", + "Em": "Geviert (Em)", + "Enlarge Editor": "Vis editor i popup", + "Enter the image URL here": "Angiv billedets URL", + "Fixed width columns": "Fast-bredde søjler", + "For browsers that don't support images": "for browsere der ikke understøtter billeder", + "Horizontal padding": "Vandret fyld", + "Horizontal:": "vandret:", + "Image Preview:": "Billede smugkig:", + "Image URL:": "Billede URL:", + "Insert Image": "Indsæt billede", + "Insert/Modify Link": "Indsæt/rediger hyperlink", + "Layout": "Layout", + "Leave empty for no border": "Tom hvis ingen kant", + "Left": "Venstre", + "Middle": "Midt", + "New window (_blank)": "Nyt vindue (_blank)", + "None (use implicit)": "ingen (implicit)", + "Not set": "Ubestemt", + "Number of columns": "Antal søjler", + "Number of rows": "Antal rækker", + "OK": "OK", + "Other": "Andet", + "Percent": "Procent", + "Pixels": "Pixel", + "Positioning of this image": "Placering af billedet", + "Positioning of this table": "Placering af tabel", + "Preview": "Smugkig", + "Preview the image in a new window": "Smugkig af billedet i et nyt vindue", + "Register bottom panel": "Registrerer nederste panel", + "Register left panel": "Registrerer venstre panel", + "Register right panel": "Registrerer højre panel", + "Register top panel": "Registrerer øverste panel", + "Right": "Højre", + "Rows:": "Rækker:", + "Same frame (_self)": "Samme ramme (_self)", + "Sample": "Eksempel", + "Space between adjacent cells": "Afstand mellem celler", + "Space between content and border in cell": "Luft mellem indhold og kanter", + "Spacing": "Afstand", + "Target:": "Placering:", + "Texttop": "Teksttop", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Indsæt-knappen virker ikke i Mozilla-baserede browsere. Brug Ctrl-V på tastaturet for at indsætte.", + "Title (tooltip):": "Titel (Tooltip):", + "Top": "Top", + "Top frame (_top)": "Topramme (_top)", + "URL:": "URL:", + "Vertical padding": "Lodret fyld", + "Vertical:": "lodret:", + "Web Safe: ": "Web Safe: ", + "Width of the table": "Tabelbredde", + "Width unit": "Breddeenhed", + "Width:": "Bredde:", + "You must enter a number of columns": "Du skal skrive antallet af søjler", + "You must enter a number of rows": "Du skal skrive antallet af rækker", + "You must enter the URL": "Du skal angive en URL", + "You must enter the URL where this link points to": "Du skal angive en mål-URL for linket", + "You need to select some text before create a link": "Du skal markere noget tekst for at indsætte et hyperlink", + "Your Document is not well formed. Check JavaScript console for details.": "Dit dokument er ikke syntaktisk korrekt. Åbn Javascript konsollen for at få flere detaljer.", + "button_bold": "de/bold.gif", + "button_italic": "de/italic.gif", + "button_underline": "de/underline.gif" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/de.js new file mode 100644 index 0000000000..69c38431ea --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/de.js @@ -0,0 +1,157 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— format —": "— Format —", + "About this editor": "Über diesen Editor", + "Address": "Adresse", + "Background Color": "Hindergrundfarbe", + "Bold": "Fett", + "Bulleted List": "Aufzählungsliste", + "Clean content pasted from Word": "Von Word eingefügter Text bereinigen", + "Clear Inline Font Specifications": "Zeichensatz Formatierungen entfernen", + "Clear MSOffice tags": "MSOffice filter", + "Close": "Schließen", + "Constructing object": "Objekt wird generiert", + "Copy selection": "Kopieren", + "Create Statusbar": "Statusleiste wird generiert", + "Create Toolbar": "Werkzeugleiste wird generiert", + "Current style": "Derzeitiger Stil", + "Cut selection": "Ausschneiden", + "Decrease Indent": "Einzug verkleinern", + "Direction left to right": "Textrichtung von Links nach Rechts", + "Direction right to left": "Textrichtung von Rechts nach Links", + "Finishing": "Laden wird abgeschlossen", + "Font Color": "Schriftfarbe", + "Formatted": "Formatiert", + "Generate Xinha framework": "Xinha Framework wird generiert", + "Heading 1": "Überschrift 1", + "Heading 2": "Überschrift 2", + "Heading 3": "Überschrift 3", + "Heading 4": "Überschrift 4", + "Heading 5": "Überschrift 5", + "Heading 6": "Überschrift 6", + "Headings": "Überschrift Typ 1 bis 6", + "Help using editor": "Hilfe", + "Horizontal Rule": "Horizontale Linie", + "Increase Indent": "Einzug vergrößern", + "Init editor size": "Größe wird berechnet", + "Insert Table": "Tabelle einfügen", + "Insert Web Link": "Hyperlink einfügen", + "Insert/Modify Image": "Bild einfügen/verändern", + "Insert/Overwrite": "Einfügen/Überschreiben", + "Italic": "Kursiv", + "Justify Center": "Zentriert", + "Justify Full": "Blocksatz", + "Justify Left": "Linksbündig", + "Justify Right": "Rechtsbündig", + "Keyboard shortcuts": "Tastaturkürzel", + "Loading in progress. Please wait!": "Editor wird geladen. Bitte warten !", + "Loading plugin $plugin": "Plugin $plugin wird geladen", + "Normal": "Normal (Absatz)", + "Ordered List": "Nummerierte Liste", + "Paste from clipboard": "Einfügen aus der Zwischenablage", + "Path": "Pfad", + "Print document": "Dokument ausdrucken", + "Redoes your last action": "Wiederholen", + "Register plugin $plugin": "Plugin $plugin wird registriert", + "Remove formatting": "Formatierung entfernen", + "Save as": "speichern unter", + "Select all": "Alles markieren", + "Set format to paragraph": "Setze Formatierung auf Absatz", + "Split Block": "Block teilen", + "Strikethrough": "Durchgestrichen", + "Subscript": "Tiefgestellt", + "Superscript": "Hochgestellt", + "The editor provides the following key combinations:": "Der Editor unterstützt die folgenden kombinationen:", + "Toggle Borders": "Tabellenränder ein/ausblenden", + "Toggle HTML Source": "HTML Quelltext ein/ausschalten", + "Underline": "Unterstrichen", + "Undoes your last action": "Rückgängig", + "Would you like to clear font colours?": "Wollen sie Zeichensatzfarben entfernen", + "Would you like to clear font sizes?": "Wollen Sie Zeichensatzgrößen entfernen", + "Would you like to clear font typefaces?": "Wollen Sie Zeichensatztypen entfernen", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Sie sind im Text-Modus. Benutzen Sie den [<>] Button, um in den visuellen Modus (WYSIWIG) zu gelangen.", + "insert linebreak": "Harter Umbruch einfügen", + "new paragraph": "Neuer Absatz(Paragraph)", + "__OBSOLETE__": { + "Absbottom": "unten bündig", + "Absmiddle": "mittig", + "Alignment:": "Ausrichtung:", + "Alternate text:": "Alternativer Text:", + "Baseline": "Grundlinie", + "Border thickness:": "Randstärke:", + "Bottom": "unten", + "Cancel": "Abbrechen", + "Cell padding:": "Innenabstand:", + "Cell spacing:": "Zellenabstand:", + "Click a color...": "Farbe wählen", + "Color: ": "Farbe: ", + "Cols:": "Spalten:", + "Em": "Geviert", + "Enlarge Editor": "Editor vergrößern", + "Enter the image URL here": "Bitte geben sie hier die Bild URL ein", + "Fixed width columns": "Spalten mit fester Breite", + "For browsers that don't support images": "für Browser, die keine Bilder unterstützen", + "Horizontal padding": "horizontaler Inhaltsabstand", + "Horizontal:": "horizontal:", + "Image Preview:": "Bild Voransicht:", + "Image URL:": "Bild URL:", + "Insert Image": "Bild einfügen", + "Insert/Modify Link": "Verknüpfung hinzufügen/ändern", + "Layout": "Layout", + "Leave empty for no border": "leer lassen für keinen Rand", + "Left": "links", + "Middle": "zentriert", + "New window (_blank)": "Neues Fenster (_blank)", + "None (use implicit)": "k.A. (implizit)", + "Not set": "nicht eingestellt", + "Number of columns": "Spaltenanzahl", + "Number of rows": "Zeilenanzahl", + "OK": "OK", + "Other": "Anderes", + "Percent": "Prozent", + "Pixels": "Pixel", + "Positioning of this image": "Positionierung dieses Bildes", + "Positioning of this table": "Positionierung der Tabelle", + "Preview": "Voransicht", + "Preview the image in a new window": "Voransicht des Bildes in einem neuen Fenster", + "Register bottom panel": "Unteres Panel wird generiert", + "Register left panel": "Linkes Panel wird generiert", + "Register right panel": "Rechtes Panel wird generiert", + "Register top panel": "Oberes Panel wird generiert", + "Right": "rechts", + "Rows:": "Zeilen:", + "Same frame (_self)": "Selber Rahmen (_self)", + "Sample": "Beispiel", + "Space between adjacent cells": "Raum zwischen angrenzenden Zellen", + "Space between content and border in cell": "Raum zwischen Inhalt und Rand der Zelle", + "Spacing": "Abstand", + "Target:": "Ziel:", + "Texttop": "oben bündig", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Aus Sicherheitsgründen dürfen Skripte normalerweise nicht auf Ausschneiden/Kopieren/Einfügen zugreifen. Benutzen Sie bitte die entsprechenden Tastatur-Kommandos (Strg + x/c/v).", + "Title (tooltip):": "Titel (Tooltip):", + "Top": "oben", + "Top frame (_top)": "Oberster Rahmen (_top)", + "URL:": "URL:", + "Vertical padding": "vertikaler Inhaltsabstand", + "Vertical:": "vertikal:", + "Web Safe: ": "Web Safe: ", + "Width of the table": "Tabellenbreite", + "Width unit": "Größeneinheit", + "Width:": "Breite:", + "You must enter a number of columns": "Bitte geben Sie die Anzahl der Spalten an", + "You must enter a number of rows": "Bitte geben Sie die Anzahl der Zeilen an", + "You must enter the URL": "Bitte geben Sie die URL ein", + "You must enter the URL where this link points to": "Sie müssen eine Ziel-URL angeben für die Verknüpfung angeben", + "You need to select some text before create a link": "Sie müssen einen Text markieren, um einen Link zu erstellen", + "Your Document is not well formed. Check JavaScript console for details.": "Ihr Dokument ist in keinem sauberen Format. Benutzen Sie die Javascript Console für weitere Informationen." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ee.js new file mode 100644 index 0000000000..01874349bd --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ee.js @@ -0,0 +1,48 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Teave toimeti kohta", + "Background Color": "Tausta värv", + "Bold": "Paks", + "Bulleted List": "Täpploend", + "Copy selection": "Kopeeri", + "Current style": "Kirjastiil", + "Cut selection": "Lõika", + "Decrease Indent": "Vähenda taanet", + "Font Color": "Fondi värv", + "Help using editor": "Spikker", + "Horizontal Rule": "Horisontaaljoon", + "Increase Indent": "Suurenda taanet", + "Insert Table": "Lisa tabel", + "Insert Web Link": "Lisa viit", + "Insert/Modify Image": "Lisa pilt", + "Italic": "Kursiiv", + "Justify Center": "Joonda keskele", + "Justify Full": "Rööpjoonda", + "Justify Left": "Joonda vasakule", + "Justify Right": "Joonda paremale", + "Ordered List": "Nummerdus", + "Paste from clipboard": "Kleebi", + "Path": "Path", + "Redoes your last action": "Tee uuesti", + "Strikethrough": "Läbikriipsutatud", + "Subscript": "Allindeks", + "Superscript": "Ülaindeks", + "Toggle HTML Source": "HTML/tavaline vaade", + "Underline": "Allakriipsutatud", + "Undoes your last action": "Võta tagasi", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Sa oled tekstireziimis. Kasuta nuppu [<>] lülitamaks tagasi WYSIWIG reziimi.", + "__OBSOLETE__": { + "Cancel": "Loobu", + "Enlarge Editor": "Suurenda toimeti aken", + "OK": "OK" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/el.js new file mode 100644 index 0000000000..eb89b56c64 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/el.js @@ -0,0 +1,61 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Πληροφορίες", + "Background Color": "Χρώμα Φόντου", + "Bold": "Έντονα", + "Bulleted List": "Κουκκίδες", + "Copy selection": "Αντιγραφή", + "Current style": "Παρών στυλ", + "Cut selection": "Αποκοπή", + "Decrease Indent": "Μείωση Εσοχής", + "Direction left to right": "Κατεύθυνση αριστερά προς δεξιά", + "Direction right to left": "Κατεύθυνση από δεξιά προς τα αριστερά", + "Font Color": "Χρώμα Γραμματοσειράς", + "Help using editor": "Βοήθεια", + "Horizontal Rule": "Οριζόντια Γραμμή", + "Increase Indent": "Αύξηση Εσοχής", + "Insert Table": "Εισαγωγή Πίνακα", + "Insert Web Link": "Εισαγωγή Συνδέσμου", + "Insert/Modify Image": "Εισαγωγή/Τροποποίηση Εικόνας", + "Italic": "Πλάγια", + "Justify Center": "Στοίχιση Κέντρο", + "Justify Full": "Πλήρης Στοίχιση", + "Justify Left": "Στοίχιση Αριστερά", + "Justify Right": "Στοίχιση Δεξιά", + "Ordered List": "Αρίθμηση", + "Paste from clipboard": "Επικόλληση", + "Path": "Διαδρομή", + "Redoes your last action": "Επαναφορά από αναίρεση", + "Strikethrough": "Διαγραμμένα", + "Subscript": "Δείκτης", + "Superscript": "Δείκτης", + "Toggle HTML Source": "Εναλλαγή σε/από HTML", + "Underline": "Υπογραμμισμένα", + "Undoes your last action": "Αναίρεση τελευταίας ενέργειας", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Είστε σε TEXT MODE. Χρησιμοποιήστε το κουμπί [<>] για να επανέρθετε στο WYSIWIG.", + "__OBSOLETE__": { + "Cancel": "Ακύρωση", + "Enlarge Editor": "Μεγένθυνση επεξεργαστή", + "Insert/Modify Link": "Εισαγωγή/Τροποποίηση σύνδεσμου", + "New window (_blank)": "Νέο παράθυρο (_blank)", + "None (use implicit)": "Κανένα (χρήση απόλυτου)", + "OK": "Εντάξει", + "Other": "Αλλο", + "Same frame (_self)": "Ίδιο frame (_self)", + "Target:": "Target:", + "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "Η κατάσταση πλήρης οθόνης έχει προβλήματα με τον Internet Explorer, λόγω σφαλμάτων στον ίδιο τον browser. Αν το σύστημα σας είναι Windows 9x μπορεί και να χρειαστείτε reboot. Αν είστε σίγουροι, πατήστε ΟΚ.", + "Title (tooltip):": "Τίτλος (tooltip):", + "Top frame (_top)": "Πάνω frame (_top)", + "URL:": "URL:", + "You must enter the URL where this link points to": "Πρέπει να εισάγετε το URL που οδηγεί αυτός ο σύνδεσμος" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/es.js new file mode 100644 index 0000000000..96b235f4a5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/es.js @@ -0,0 +1,159 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— font —": "— fuente —", + "— format —": "— formato —", + "— size —": "— tamaño —", + "About this editor": "Sobre este Editor", + "Address": "Dirección", + "Background Color": "Color de fondo", + "Bold": "Negrita", + "Bulleted List": "Lista no numerada", + "Clean content pasted from Word": "Limpiar el contenido pegado desde Word", + "Clear Inline Font Specifications": "Borrar las etiquetas de fuente", + "Clear MSOffice tags": "Borrar etiquetas de MSOffice", + "Close": "Cerrar", + "Constructing object": "Construyendo objeto", + "Copy selection": "Copiar", + "Create Statusbar": "Crear barra de estado", + "Create Toolbar": "Crear barra de herramientas", + "Current style": "Estilo actual", + "Cut selection": "Cortar", + "Decrease Indent": "Reducir sangría", + "Direction left to right": "Dirección de izquierda a derecha", + "Direction right to left": "Dirección de derecha a izquierda", + "Finishing": "Finalizando", + "Font Color": "Color de la fuente", + "Formatted": "Formateado", + "Generate Xinha framework": "Generar Xinha framework", + "Heading 1": "Cabecera 1", + "Heading 2": "Cabecera 2", + "Heading 3": "Cabecera 3", + "Heading 4": "Cabecera 4", + "Heading 5": "Cabecera 5", + "Heading 6": "Cabecera 6", + "Headings": "Cabeceras", + "Help using editor": "Ayuda", + "Horizontal Rule": "Regla horizontal", + "Increase Indent": "Aumentar sangría", + "Init editor size": "Iniciar el tamaño del editor", + "Insert Table": "Añadir una tabla", + "Insert Web Link": "Insertar enlace web", + "Insert/Modify Image": "Insertar/modificar imagen", + "Insert/Overwrite": "Insertar/Sobreescribir", + "Italic": "Cursiva", + "Justify Center": "Alinear al centro", + "Justify Full": "Justificar", + "Justify Left": "Alinear a la izquierda", + "Justify Right": "Alinear a la derecha", + "Keyboard shortcuts": "Atajos de teclado", + "Loading in progress. Please wait!": "Carga en proceso. Por favor espere.", + "Loading plugin $plugin": "Cargando el plugin $plugin", + "Normal": "Normal", + "Ordered List": "Lista numerada", + "Paste from clipboard": "Pegar desde el portapapeles", + "Path": "Ruta", + "Print document": "Imprimir documento", + "Redoes your last action": "Rehacer", + "Register plugin $plugin": "Registro de plugin $plugin", + "Remove formatting": "Borrar formato", + "Save as": "Guardar como", + "Select all": "Seleccionar todo", + "Set format to paragraph": "EStablecer el formato a parrafo", + "Split Block": "Dividir el bloque", + "Strikethrough": "Tachado", + "Subscript": "Subíndice", + "Superscript": "Superíndice", + "The editor provides the following key combinations:": "El editor proporciona las siguientes combinaciones:", + "Toggle Borders": "Añadir/Quitar bordes", + "Toggle HTML Source": "Ver HTML", + "Underline": "Subrayado", + "Undoes your last action": "Deshacer", + "Would you like to clear font colours?": "¿Desea eliminar las definiciones de color de fuente?", + "Would you like to clear font sizes?": "¿Desea eliminar las definiciones de tamaño de fuente?", + "Would you like to clear font typefaces?": "¿Desea eliminar las definiciaones de tipo de fuente?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Se encuentra en MODO TEXTO. Use el botón [<>] para cambiar de nuevo al modo WYSIWYG", + "insert linebreak": "Insertar salto de línea", + "new paragraph": "Nuevo parrafo", + "__OBSOLETE__": { + "Absbottom": "Inferior absoluto", + "Absmiddle": "Medio Absoluto", + "Alignment:": "Alineación:", + "Alternate text:": "Texto alternativo:", + "Baseline": "Línea base", + "Border thickness:": "Tamaño del borde:", + "Bottom": "Inferior", + "Cancel": "Cancelar", + "Cell padding:": "Relleno de celdas:", + "Cell spacing:": "Espaciado entre celdas:", + "Click a color...": "Seleccione un color...", + "Color: ": "Color: ", + "Cols:": "Columnas:", + "Em": "Em", + "Enlarge Editor": "Editor a pantalla completa", + "Enter the image URL here": "", + "Fixed width columns": "Columnas de ancho fijo", + "For browsers that don't support images": "Para navegadores que no soportan imágenes", + "Horizontal padding": "Relleno horizontal", + "Horizontal:": "horizontal:", + "Image Preview:": "Previsualización de la imagen:", + "Image URL:": "Imagen URL:", + "Insert Image": "Insertar una imagen", + "Insert/Modify Link": "Insertar/Modificar un enlace", + "Layout": "Distribución", + "Leave empty for no border": "Vacío si no desea ningún borde", + "Left": "Izquierda", + "Middle": "Medio", + "New window (_blank)": "Nueva ventana (_blank)", + "None (use implicit)": "Vacío ( usar implícito )", + "Not set": "No definido", + "Number of columns": "Número de columnas", + "Number of rows": "Número de filas", + "OK": "Aceptar", + "Other": "Otro", + "Percent": "Porcentaje", + "Pixels": "Pixels", + "Positioning of this image": "Posición de la imagen", + "Positioning of this table": "Posición de esta tabla", + "Preview": "Previsualizar", + "Preview the image in a new window": "Previsualizar en una nueva ventana", + "Register bottom panel": "Registar panel inferior", + "Register left panel": "Registrar panel izquierdo", + "Register right panel": "Registrar panel derecho", + "Register top panel": "Registar panel superior", + "Right": "Derecha", + "Rows:": "Filas:", + "Same frame (_self)": "Mismo marco (_self)", + "Sample": "Muestra", + "Space between adjacent cells": "Espaciado entre celdas adyacentes", + "Space between content and border in cell": "Escapcio entre el contenido y el borde de la celda", + "Spacing": "Espaciado", + "Target:": "Destino:", + "Texttop": "Texto Superior", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "El botón de pegar no funciona en los navegadores de Mozilla por motivos de seguridad. Presione CTRL-V en su teclado para pegarlo directamente", + "Title (tooltip):": "Título (Tooltip):", + "Top": "Superior", + "Top frame (_top)": "Marco superior (_top)", + "URL:": "URL:", + "Vertical padding": "Relleno Vertical", + "Vertical:": "Vertical:", + "Web Safe: ": "Color web: ", + "Width of the table": "Ancho de la tabla", + "Width unit": "Unidad de anchura", + "Width:": "Ancho:", + "You must enter a number of columns": "Debe introducir un número de columnas", + "You must enter a number of rows": "Debe introducir un número de filas", + "You must enter the URL": "Debe introducir la URL", + "You must enter the URL where this link points to": "Debe introducir la URL a donde apunta este enlace", + "You need to select some text before create a link": "Necesita seleccionar algún texto antes de crear un link", + "Your Document is not well formed. Check JavaScript console for details.": "Su documento no está bien formado. Compruebe la consola de JavaScript para obtener más detalles" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/eu.js new file mode 100644 index 0000000000..3a962ae061 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/eu.js @@ -0,0 +1,160 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— format —": "— Formatua —", + "About this editor": "Editoreari buruz...", + "Address": "Helbidea", + "Background Color": "Atzeko kolorea", + "Bold": "Lodia", + "Bulleted List": "Zerrenda ez ordenatua", + "Clean content pasted from Word": "Word-etik itsatsitako edukia ezabatu", + "Clear Inline Font Specifications": "Ezabatu testuaren ezaugarriak", + "Clear MSOffice tags": "MSOffice etiketak ezabatu", + "Close": "Itxi", + "Constructing object": "Objektua eraikitzen", + "Copy selection": "Kopiatu hautaketa", + "Create Statusbar": "Egoera-barra sortu", + "Create Toolbar": "Tresna-barra sortu", + "Current style": "Uneko estiloa", + "Cut selection": "Ebaki hautaketa", + "Decrease Indent": "Koska handitu", + "Direction left to right": "Ezkerretik eskuinetarako norabidea", + "Direction right to left": "Eskuinetik ezkerretarako norabidea", + "Finishing": "Bukatzen", + "Font Color": "Testu-kolorea", + "Formatted": "Formateatua", + "Generate Xinha framework": "Xinha Framework sortzen", + "Heading 1": "Goiburua 1", + "Heading 2": "Goiburua 2", + "Heading 3": "Goiburua 3", + "Heading 4": "Goiburua 4", + "Heading 5": "Goiburua 5", + "Heading 6": "Goiburua 6", + "Headings": "Goiburuak", + "Help using editor": "Laguntza", + "Horizontal Rule": "Marra horizontala", + "Increase Indent": "Koska txikitu", + "Init editor size": "Editorearen hasierako neurria", + "Insert Table": "Taula txertatu", + "Insert Web Link": "Lotura txertatu", + "Insert/Modify Image": "Irudia txertatu", + "Insert/Overwrite": "Txertatu/Gainidatzi", + "Italic": "Etzana", + "Justify Center": "Zentratu", + "Justify Full": "Justifikatu", + "Justify Left": "Ezkerretara lerrokatu", + "Justify Right": "Eskuinetara lerrokatu", + "Keyboard shortcuts": "Laster-teklak", + "Loading in progress. Please wait!": "Kargatzen. Itxaron mesedez", + "Loading plugin $plugin": "$plugin plugina kargatzen", + "Normal": "Normala", + "Ordered List": "Zerrenda ordenatua", + "Paste from clipboard": "Itsatsi arbelean dagoena", + "Path": "Bidea", + "Print document": "Dokumentua inprimatu", + "Redoes your last action": "Berregin", + "Register plugin $plugin": "$plugin plugina erregistratu", + "Remove formatting": "Formatoa kendu", + "Save as": "Gorde honela:", + "Select all": "Dena aukeratu", + "Set format to paragraph": "Formatua ezarri paragrafoari", + "Split Block": "Blokea zatitu", + "Strikethrough": "Marratua", + "Subscript": "Azpindizea", + "Superscript": "Goi-indizea", + "The editor provides the following key combinations:": "Editoreak ondorengo tekla-konbinazioak eskaintzen ditu:", + "Toggle Borders": "Ertzak trukatu", + "Toggle HTML Source": "Ikusi dokumentua HTML-n", + "Underline": "Azpimarratua", + "Undoes your last action": "Desegin", + "Would you like to clear font colours?": "Letra-tipoen koloreak ezabatu nahi al dituzu?", + "Would you like to clear font sizes?": "Letra-tipoen neurriak ezabatu nahi al dituzu?", + "Would you like to clear font typefaces?": "Letra-tipoak ezabatu nahi al dituzu?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "TESTU eran ari zara. Erabil ezazu [<>] botoia WYSIWIG erara itzultzeko.", + "insert linebreak": "Lerro-jauzia txertatu", + "new paragraph": "Paragrafo berria", + "__OBSOLETE__": { + "Absbottom": "Irudiaren behekaldean", + "Absmiddle": "Irudiaren erdian", + "Alignment:": "Lerrokatzea:", + "Alternate text:": "Testu alternatiboa:", + "Baseline": "Irudiaren oinean", + "Border thickness:": "Ertzaren lodiera:", + "Bottom": "Behean", + "Cancel": "Utzi", + "Cell padding:": "Gelaxkaren betegarria:", + "Cell spacing:": "Gelaxka-tartea:", + "Click a color...": "Kolore bat aukeratu...", + "Color: ": "Kolorea: ", + "Cols:": "Zutabeak:", + "Em": "Em", + "Enlarge Editor": "Editorea handitu", + "Enter the image URL here": "Idatz ezazu irudiaren URL-a hemen", + "Fixed width columns": "Zabalera finkodun zutabeak", + "For browsers that don't support images": "Irudirik onartzen ez duten nabigatzaileentzat", + "Horizontal padding": "Betegarri horizontala", + "Horizontal:": "Horizontala:", + "Image Preview:": "Irudiaren aurrebista:", + "Image URL:": "Irudiaren URL-a:", + "Insert Image": "Irudia txertatu", + "Insert/Modify Link": "Lotura txertatu/aldatu", + "Layout": "Diseinua", + "Leave empty for no border": "Uztazu hutsik ertzik ez sortzeko", + "Left": "Ezkerretara", + "Middle": "Erdian", + "New window (_blank)": "Lehio berrian (_blank)", + "None (use implicit)": "Bat ere ez (implizituki erabili)", + "Not set": "Ez gaitua", + "Number of columns": "Zutabe-kopurua", + "Number of rows": "Lerro-kopurua", + "OK": "Ados", + "Other": "Beste bat", + "Percent": "Portzentaia", + "Pixels": "Pixelak", + "Positioning of this image": "Irudiaren kokapena", + "Positioning of this table": "Taula honen kokapena", + "Preview": "Aurrebista", + "Preview the image in a new window": "Aurreikusi irudia beste lehio batean", + "Register bottom panel": "Beheko panela erregistratu", + "Register left panel": "Ezker-panela erregistratu", + "Register right panel": "Eskuin-panela erregistratu", + "Register top panel": "Goiko panela erregistratu", + "Right": "Eskuinetara", + "Rows:": "Lerroak:", + "Same frame (_self)": "Frame berean (_self)", + "Sample": "Lagina", + "Space between adjacent cells": "Gelaxka auzokideen arteko tartea", + "Space between content and border in cell": "Gelaxkaren edukia eta ertzaren arteko tartea", + "Spacing": "Tartea", + "Target:": "Helburua:", + "Texttop": "Irudiaren goialdean", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Itsatsi botoia ez dabil Mozillan oinarritutako nabigatzaileetan (arrazoi teknikoengatik). Sacatu CTRL-V zure teklatuan, zuzenean itsasteko.", + "Title (tooltip):": "Izenburua (argibidea):", + "Top": "Goian", + "Top frame (_top)": "Goiko frame-an (_top)", + "URL:": "URL-a:", + "Vertical padding": "Betegarri bertikala", + "Vertical:": "Bertikala:", + "Web Safe: ": "Web Safe: ", + "Width of the table": "Taularen zabalera", + "Width unit": "Zabalera-unitatea", + "Width:": "Zabalera:", + "You must enter a number of columns": "Zutabe-kopurua idatzi behar duzu", + "You must enter a number of rows": "Lerro-kopurua idatzi behar duzu", + "You must enter the URL": "URL-a idatzi behar duzu", + "You must enter the URL where this link points to": "Loturaren helburu den URL-a idatzi behar duzu", + "You need to select some text before create a link": "Testu-atal bat aukeratu behar duzu lehendabizi, lotura bat sortzeko", + "Your Document is not well formed. Check JavaScript console for details.": "Zure dokumentuak ez du formatu zuzena. Begira ezazu JavaScript kontsola xehetasunetarako.", + "button_bold": "de/bold.gif", + "button_italic": "de/italic.gif", + "button_underline": "de/underline.gif" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/fa.js new file mode 100644 index 0000000000..2f9f3b4bf3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/fa.js @@ -0,0 +1,157 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— format —": "— قالب —", + "About this editor": "درباره این ویرایش گر", + "Address": "آدرس", + "Background Color": "رنگ پس زمینه", + "Bold": "ضخیم", + "Bulleted List": "فهرست گلوله ای", + "Clean content pasted from Word": "تمیز کردن محتوای چسبانده شده از Word", + "Clear Inline Font Specifications": "پاک کردن متن از مشخصات فونت", + "Clear MSOffice tags": "پاک کردن متن از برچسب های MSOffice", + "Close": "بستن", + "Constructing object": "ساختن شیء", + "Copy selection": "کپی انتخاب شده", + "Create Toolbar": "ساخت نوار ابزار", + "Current style": "شیوه کنونی", + "Cut selection": "بریدن انتخاب شده", + "Decrease Indent": "کاهش سر خط", + "Direction left to right": "جهت از چپ به راست", + "Direction right to left": "جهت از راست به چپ", + "ENTER": "ENTREE", + "Editor Help": "راهنمای ویرایشگر", + "Font Color": "رنگ فلم", + "Formatted": "قالب بندی شده", + "Heading 1": "تیتر 1", + "Heading 2": "تیتر 2", + "Heading 3": "تیتر 3", + "Heading 4": "تیتر 4", + "Heading 5": "تیتر 5", + "Heading 6": "تیتر 6", + "Headings": "عنوان گذاری", + "Help using editor": "راهنمای استفاده ویرایش گر", + "Horizontal Rule": "خط افقی", + "Increase Indent": "افزایش سر خط", + "Init editor size": "مقدار دهی اندازه ویرایشگر", + "Insert Table": "افزودن جدول", + "Insert Web Link": "افزودن لینک وب", + "Insert/Modify Image": "افزودن یا ویرایش تصویر", + "Insert/Overwrite": "افزودن/جانویسی", + "Italic": "مورب", + "Justify Center": "تراز در وسط", + "Justify Full": "تراز از چپ و راست", + "Justify Left": "تراز از چپ", + "Justify Right": "تراز در راست", + "Keyboard shortcuts": "میانبرهای صفحه کلید", + "Normal": "معمولی", + "Ordered List": "فهرست مرتب", + "Paste from clipboard": "چسباندن از تخته کار", + "Path": "مسیر", + "Print document": "چاپ سند", + "Redoes your last action": "انجام مجدد آخرین عمل", + "Register plugin $plugin": "ثبت پلاگین $plugin", + "Remove formatting": "حذف فرمت بندی", + "SHIFT-ENTER": "SHIFT+ENTREE", + "Save as": "ذخیره مانند...", + "Select all": "انتخاب همه", + "Set format to paragraph": "تغییر قالب به پاراگراف", + "Split Block": "بلاک جداسازی", + "Strikethrough": "رو خط", + "Subscript": "زیروند", + "Superscript": "بالاوند", + "The editor provides the following key combinations:": "ویرایشگر استفاده از کلید های گروهی زیر را مسیر می سازد :", + "Toggle Borders": "فعال/غیر فعال کردن لبه ها", + "Toggle HTML Source": "مشاهده یا عدم مشاهده متن در قالب HTML", + "Underline": "زیر خط", + "Undoes your last action": "برگرداندن آخرین عمل", + "Would you like to clear font colours?": "آیا تمایل دارید رنگ قلم را پاک کنید؟", + "Would you like to clear font sizes?": "آیا تمایل دارید اندازه قلم را پاک کنید", + "Would you like to clear font typefaces?": "آیا تمایل دارید ظاهر فلم را پاک کنید؟", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "در مد متنی هستید. از دکمه [<>] استفاده نمایید تا به مد WYSIWYG برگردید.", + "insert linebreak": "افزودن جدا کننده خط", + "new paragraph": "پاراگراف جدید", + "__OBSOLETE__": { + "Absbottom": "دقیقا پایین", + "Absmiddle": "دقیقا وسط", + "Alignment:": "تراز بندی", + "Alternate text:": "متن جایگزین", + "Baseline": "ابتدای خط", + "Border thickness:": "ضخامت لبه", + "Bottom": "پایین", + "Cancel": "انصراف", + "Cell padding:": "پر کننده سلول", + "Cell spacing:": "فاصله سلول ها", + "Cols:": "ستون ها", + "Constructing main object": "ساختن شیء اصلی", + "Create StatusBar": "ساخت نوار وضعیت", + "Em": "Em", + "Enlarge Editor": "بزرگ کردن ویرایش گر", + "Enter the image URL here": "URL تصویر را اینجا وارد کنید", + "Fixed width columns": "ستون های طول ثابت", + "For browsers that don't support images": "برای مرورگرهایی که از تصاویر پشتیبانی نمی کنند", + "Generate Xinha object": "تولید شیء Xinha", + "Horizontal padding": "پرکننده افقی", + "Horizontal:": "افقی", + "Image Preview:": "پیش نمایش تصویر", + "Image URL:": "URL تصویر", + "Init IFrame": "مقدار دهی IFrame", + "Insert Image": "افزودن تصویر", + "Insert/Modify Link": "افزودن / ویرایش لینک", + "Layout": "لایه", + "Leave empty for no border": "برای بدون لبه خالی رها کن", + "Left": "چپ", + "Loading in progress. Please wait !": "بارگذاری در حال انجام است. لطفا صبر کنید !", + "Middle": "وسط", + "New window (_blank)": "پنجره جدید (_blank)", + "None (use implicit)": "هیچکدام (استفاده از بدون شرط)", + "Not set": "تنظیم نشده", + "Number of columns": "تعداد ستون ها", + "Number of rows": "تعداد ردیف ها", + "OK": "بله", + "Other": "سایر", + "Percent": "درصد", + "Pixels": "پیکسل ها", + "Positioning of this image": "موقعیت یابی تصویر", + "Positioning of this table": "موقعیت یابی این جدول", + "Preview": "پیش نمایش", + "Preview the image in a new window": "پیش نمایش تصویر در پنجره ای جدید", + "Register panel bottom": "ثبت قاب پایین", + "Register panel left": "ثبت قاب چپ", + "Register panel right": "ثبت قاب راست", + "Register panel top": "ثبت قاب بالا", + "Right": "راست", + "Rows:": "ردیف ها", + "Same frame (_self)": "فریم یکسان (_self)", + "Space between adjacent cells": "فاصله بین سلول های همجوار", + "Space between content and border in cell": "فاصله بین محتوا و لبه در سلول", + "Spacing": "فاصله گذاری", + "Target:": "هدف", + "Texttop": "بالای متن", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "دکمه چسباندن در مرورگرهای سری Mozilla کار نمی کند (به دلایل فنی امنیتی).برای چسباندن مستقیم ، دکمه CTRL-V را در صفحه کلید بزنید.", + "Title (tooltip):": "عنوان (راهنمای یک خطی)", + "Top": "بالا", + "Top frame (_top)": "فریم بالایی (_top)", + "URL:": "URL:", + "Vertical padding": "پرکننده عمودی", + "Vertical:": "عمودی", + "Width of the table": "طول جدول", + "Width unit": "واحد طول", + "Width:": "طول", + "Xinha Help": "راهنمای Xinha", + "You must enter a number of columns": "باید تعداد ستون ها را وارد کنید", + "You must enter a number of rows": "باید تعداد ردیف ها را وارد کنید", + "You must enter the URL": "شما باید URL را وارد کنید", + "You must enter the URL where this link points to": "باید URLی که این لینک به آن اشاره دارد را وارد کنید", + "You need to select some text before creating a link": "باید قبل از ساخت لینک ، متنی را انتخاب نمایید", + "Your Document is not well formed. Check JavaScript console for details.": "سند شما بدرستی قالب بندی نشده است. برای اطلاعات بیشتر پایانه نمایش جاوااسکریپت را بررسی کنید." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/fi.js new file mode 100644 index 0000000000..77b29d355e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/fi.js @@ -0,0 +1,46 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Tietoja editorista", + "Background Color": "Taustaväri", + "Bold": "Lihavoitu", + "Bulleted List": "Luettelomerkit", + "Copy selection": "Kopioi maalattu", + "Current style": "Nykyinen tyyli", + "Cut selection": "Leikkaa maalattu", + "Decrease Indent": "Pienennä sisennystä", + "Font Color": "Fontin väri", + "Help using editor": "Näytä ohje", + "Horizontal Rule": "Vaakaviiva", + "Increase Indent": "Lisää sisennystä", + "Insert Table": "Lisää taulukko", + "Insert Web Link": "Lisää linkki", + "Insert/Modify Image": "Lisää kuva", + "Italic": "Kursivoitu", + "Justify Center": "Keskitä", + "Justify Full": "Tasaa molemmat reunat", + "Justify Left": "Tasaa vasemmat reunat", + "Justify Right": "Tasaa oikeat reunat", + "Ordered List": "Numerointi", + "Paste from clipboard": "Liitä leikepyödältä", + "Redoes your last action": "Palauta viimeinen toiminto", + "Strikethrough": "Yliviivattu", + "Subscript": "Alaindeksi", + "Superscript": "Yläindeksi", + "Toggle HTML Source": "HTML-lähdekoodi vs WYSIWYG", + "Underline": "Alleviivattu", + "Undoes your last action": "Peruuta viimeinen toiminto", + "__OBSOLETE__": { + "Cancel": "Peruuta", + "Enlarge Editor": "Suurenna editori", + "OK": "Hyväksy" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/fr.js new file mode 100644 index 0000000000..3ea48f5986 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/fr.js @@ -0,0 +1,158 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— format —": "— Format —", + "About this editor": "A propos", + "Address": "Adresse", + "Background Color": "Surlignage", + "Bold": "Gras", + "Bulleted List": "Liste à puces", + "Clean content pasted from Word": "Nettoyage du contenu copié depuis Word", + "Clear Inline Font Specifications": "Supprimer paramètres inline de la police", + "Clear MSOffice tags": "Supprimer tags MSOffice", + "Close": "Fermer", + "Constructing object": "Construction de l'objet", + "Copy selection": "Copier la sélection", + "Create Statusbar": "Construction de la barre de status", + "Create Toolbar": "Construction de la barre d'icones", + "Current style": "Style courant", + "Cut selection": "Couper la sélection", + "Decrease Indent": "Diminuer le retrait", + "Direction left to right": "Direction de gauche à droite", + "Direction right to left": "Direction de droite à gauche", + "ENTER": "ENTREE", + "Editor Help": "Aide de l'éditeur", + "Finishing": "Chargement bientôt terminé", + "Font Color": "Couleur de police", + "Formatted": "Formaté", + "Generate Xinha framework": "Génération de Xinha", + "Heading 1": "Titre 1", + "Heading 2": "Titre 2", + "Heading 3": "Titre 3", + "Heading 4": "Titre 4", + "Heading 5": "Titre 5", + "Heading 6": "Titre 6", + "Headings": "Titres", + "Help using editor": "Aide", + "Horizontal Rule": "Ligne horizontale", + "Increase Indent": "Augmenter le retrait", + "Init editor size": "Initialisation de la taille d'édition", + "Insert Table": "Insérer un tableau", + "Insert Web Link": "Insérer un lien", + "Insert/Modify Image": "Insérer / Modifier une image", + "Insert/Overwrite": "Insertion / Remplacement", + "Italic": "Italique", + "Justify Center": "Centrer", + "Justify Full": "Justifier", + "Justify Left": "Aligner à gauche", + "Justify Right": "Aligner à droite", + "Keyboard shortcuts": "Raccourcis clavier", + "Loading in progress. Please wait!": "Chargement en cours. Veuillez patienter!", + "Loading plugin $plugin": "Chargement du plugin $plugin", + "Normal": "Normal", + "Ordered List": "Liste numérotée", + "Paste from clipboard": "Coller depuis le presse-papier", + "Path": "Chemin", + "Print document": "Imprimer document", + "Redoes your last action": "Répéter la dernière action", + "Register plugin $plugin": "Enregistrement du plugin $plugin", + "Remove formatting": "Supprimer mise en forme", + "SHIFT-ENTER": "SHIFT+ENTREE", + "Save as": "Enregistrer sous", + "Select all": "Tout sélectionner", + "Set format to paragraph": "Applique le format paragraphe", + "Split Block": "Séparer les blocs", + "Strikethrough": "Barré", + "Subscript": "Indice", + "Superscript": "Exposant", + "The editor provides the following key combinations:": "L'éditeur fournit les combinaisons de touches suivantes :", + "Toggle Borders": "Afficher / Masquer les bordures", + "Toggle HTML Source": "Afficher / Masquer code source", + "Underline": "Souligné", + "Undoes your last action": "Annuler la dernière action", + "Would you like to clear font colours?": "Voulez-vous supprimer les couleurs ?", + "Would you like to clear font sizes?": "Voulez-vous supprimer les tailles ?", + "Would you like to clear font typefaces?": "Voulez-vous supprimer les types ?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Vous êtes en MODE TEXTE. Appuyez sur le bouton [<>] pour retourner au mode WYSIWYG.", + "insert linebreak": "Insère un saut de ligne", + "new paragraph": "Nouveau paragraphe", + "__OBSOLETE__": { + "Absbottom": "Absbottom", + "Absmiddle": "Absmiddle", + "Alignment:": "Alignement", + "Alternate text:": "Texte alternatif", + "Baseline": "Baseline", + "Border thickness:": "Epaisseur de bordure", + "Bottom": "Bas", + "Cancel": "Annuler", + "Cell padding:": "Marge interne", + "Cell spacing:": "Espacement", + "Cols:": "Colonnes", + "Em": "Em", + "Enlarge Editor": "Agrandir l'éditeur", + "Enter the image URL here": "Entrer l'URL de l'image ici", + "Fixed width columns": "Colonnes à taille fixe", + "For browsers that don't support images": "Pour les navigateurs qui ne supportent pas les images", + "Horizontal padding": "Marge horizontale interne", + "Horizontal:": "Horizontal", + "Image Preview:": "Prévisualisation", + "Image URL:": "URL image", + "Init IFrame": "Initialisation de l'iframe", + "Insert Image": "Insérer une image", + "Insert/Modify Link": "Insérer / Modifier un lien", + "Layout": "Mise en page", + "Leave empty for no border": "Laisser vide pour pas de bordure", + "Left": "Gauche", + "Middle": "Milieu", + "New window (_blank)": "Nouvelle fenêtre (_blank)", + "None (use implicit)": "Aucune (implicite)", + "Not set": "Indéfini", + "Number of columns": "Nombre de colonnes", + "Number of rows": "Nombre de lignes", + "OK": "OK", + "Other": "Autre", + "Percent": "Pourcent", + "Pixels": "Pixels", + "Positioning of this image": "Position de l'image", + "Positioning of this table": "Position du tableau", + "Preview": "Prévisualiser", + "Preview the image in a new window": "Prévisualiser l'image dans une nouvelle fenêtre", + "Register bottom panel": "Enregistrement du panneau supérieur", + "Register left panel": "Enregistrement du panneau gauche", + "Register right panel": "Enregistrement du panneau droit", + "Register top panel": "Enregistrement du panneau inférieur", + "Right": "Droite", + "Rows:": "Lignes", + "Same frame (_self)": "Même frame (_self)", + "Space between adjacent cells": "Espace entre les cellules adjacentes", + "Space between content and border in cell": "Espace entre le contenu et la bordure d'une cellule", + "Spacing": "Espacement", + "Target:": "Cible", + "Texttop": "Texttop", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Le bouton Coller ne fonctionne pas sur les navigateurs basés sur Mozilla (pour des raisons de sécurité). Pressez CTRL-V au clavier pour coller directement.", + "Title (tooltip):": "Texte alternatif", + "Top": "Haut", + "Top frame (_top)": "Frame principale (_top)", + "URL:": "URL:", + "Vertical padding": "Marge verticale interne", + "Vertical:": "Vertical", + "Width of the table": "Largeur du tableau", + "Width unit": "Unités de largeur", + "Width:": "Largeur", + "Xinha Help": "Aide Xinha", + "You must enter a number of columns": "Vous devez entrer le nombre de colonnes", + "You must enter a number of rows": "Vous devez entrer le nombre de lignes", + "You must enter the URL": "Vous devez entrer l'URL", + "You must enter the URL where this link points to": "Vous devez entrer l'URL de ce lien", + "You need to select some text before creating a link": "Vous devez sélectionner du texte avant de créer un lien", + "Your Document is not well formed. Check JavaScript console for details.": "Le document est mal formé. Vérifiez la console JavaScript pour plus de détails." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/he.js new file mode 100644 index 0000000000..855def6395 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/he.js @@ -0,0 +1,61 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "אודות עורך זה", + "Background Color": "צבע רקע", + "Bold": "מודגש", + "Bulleted List": "רשימה לא ממוספרת", + "Copy selection": "העתק בחירה", + "Current style": "סגנון נוכחי", + "Cut selection": "גזור בחירה", + "Decrease Indent": "הקטן כניסה", + "Direction left to right": "כיוון משמאל לימין", + "Direction right to left": "כיוון מימין לשמאל", + "Font Color": "צבע גופן", + "Help using editor": "עזרה לשימוש בעורך", + "Horizontal Rule": "קו אנכי", + "Increase Indent": "הגדל כניסה", + "Insert Table": "הכנס טבלה", + "Insert Web Link": "הכנס היפר-קישור", + "Insert/Modify Image": "הכנס/שנה תמונה", + "Italic": "נטוי", + "Justify Center": "ישור למרכז", + "Justify Full": "ישור לשורה מלאה", + "Justify Left": " ישור לשמאל", + "Justify Right": "ישור לימין", + "Ordered List": "רשימה ממוספרת", + "Paste from clipboard": "הדבק מהלוח", + "Path": "נתיב עיצוב", + "Redoes your last action": "מבצע מחדש את הפעולה האחרונה שביטלת", + "Strikethrough": "קו אמצע", + "Subscript": "כתב עילי", + "Superscript": "כתב תחתי", + "Toggle HTML Source": "שנה מצב קוד HTML", + "Underline": "קו תחתי", + "Undoes your last action": "מבטל את פעולתך האחרונה", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "אתה במצב טקסט נקי (קוד). השתמש בכפתור [<>] כדי לחזור למצב WYSIWYG (תצוגת עיצוב).", + "__OBSOLETE__": { + "Cancel": "ביטול", + "Enlarge Editor": "הגדל את העורך", + "Insert/Modify Link": "הוסף/שנה קישור", + "New window (_blank)": "חלון חדש (_blank)", + "None (use implicit)": "ללא (השתמש ב-frame הקיים)", + "OK": "אישור", + "Other": "אחר", + "Same frame (_self)": "אותו frame (_self)", + "Target:": "יעד:", + "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "מצב מסך מלא יוצר בעיות בדפדפן Internet Explorer, עקב באגים בדפדפן לא יכולנו לפתור את זה. את/ה עלול/ה לחוות תצוגת זבל, בעיות בתפקוד העורך ו/או קריסה של הדפדפן. אם המערכת שלך היא Windows 9x סביר להניח שתקבל/י ", + "Title (tooltip):": "כותרת (tooltip):", + "Top frame (_top)": "Frame עליון (_top)", + "URL:": "URL:", + "You must enter the URL where this link points to": "חובה לכתוב URL שאליו קישור זה מצביע" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/hu.js new file mode 100644 index 0000000000..a5bea8f322 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/hu.js @@ -0,0 +1,61 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Névjegy", + "Background Color": "Háttérszín", + "Bold": "Félkövér", + "Bulleted List": "Számozatlan lista", + "Copy selection": "Másolás", + "Current style": "Aktuális stílus", + "Cut selection": "Kivágás", + "Decrease Indent": "Behúzás csökkentése", + "Direction left to right": "Irány balról jobbra", + "Direction right to left": "Irány jobbról balra", + "Font Color": "Karakterszín", + "Help using editor": "Súgó", + "Horizontal Rule": "Elválasztó vonal", + "Increase Indent": "Behúzás növelése", + "Insert Table": "Táblázat beszúrása", + "Insert Web Link": "Hiperhivatkozás beszúrása", + "Insert/Modify Image": "Kép beszúrása", + "Italic": "Dőlt", + "Justify Center": "Középre zárt", + "Justify Full": "Sorkizárt", + "Justify Left": "Balra zárt", + "Justify Right": "Jobbra zárt", + "Ordered List": "Számozott lista", + "Paste from clipboard": "Beillesztés", + "Path": "Hierarchia", + "Redoes your last action": "Újra végrehajtás", + "Strikethrough": "Áthúzott", + "Subscript": "Alsó index", + "Superscript": "Felső index", + "Toggle HTML Source": "HTML forrás be/ki", + "Underline": "Aláhúzott", + "Undoes your last action": "Visszavonás", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Forrás mód. Visszaváltás [<>] gomb", + "__OBSOLETE__": { + "Cancel": "Mégsem", + "Enlarge Editor": "Szerkesztő külön ablakban", + "Insert/Modify Link": "Hivatkozás Beszúrása/Módosítása", + "New window (_blank)": "Új ablak (_blank)", + "None (use implicit)": "Nincs (use implicit)", + "OK": "Rendben", + "Other": "Más", + "Same frame (_self)": "Ugyanabba a keretbe (_self)", + "Target:": "Cél:", + "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "A teljesképrenyős szerkesztés hibát okozhat Internet Explorer használata esetén, ez a böngésző a hibája, amit nem tudunk kikerülni. Szemetet észlelhet a képrenyőn, illetve néhány funkció hiányozhat és/vagy véletlenszerűen lefagyhat a böngésző. Windows 9x operaciós futtatása esetén elég valószínű, hogy ", + "Title (tooltip):": "Cím (tooltip):", + "Top frame (_top)": "Felső keret (_top)", + "URL:": "URL:", + "You must enter the URL where this link points to": "Be kell írnia az URL-t, ahova a hivatkozás mutasson" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/it.js new file mode 100644 index 0000000000..f1cf15dc83 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/it.js @@ -0,0 +1,61 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Informazioni su Xinha", + "Background Color": "Colore sfondo", + "Bold": "Grassetto", + "Bulleted List": "Lista non numerata", + "Copy selection": "Copia", + "Current style": "Stile corrente", + "Cut selection": "Taglia", + "Decrease Indent": "Diminuisci indentazione", + "Direction left to right": "Testo da sx a dx", + "Direction right to left": "Testo da dx a sx", + "Font Color": "Colore font", + "Help using editor": "Aiuto", + "Horizontal Rule": "Righello orizzontale", + "Increase Indent": "Aumenta indentazione", + "Insert Table": "Inserisci tabella", + "Insert Web Link": "Inserisci link", + "Insert/Modify Image": "Inserisci/modifica Immagine", + "Italic": "Corsivo", + "Justify Center": "Centrato", + "Justify Full": "Giustificato", + "Justify Left": "Sinistra", + "Justify Right": "Destra", + "Ordered List": "Lista numerata", + "Paste from clipboard": "Incolla", + "Path": "Percorso", + "Redoes your last action": "Ripeti ultima azione", + "Strikethrough": "Barrato", + "Subscript": "Pedice", + "Superscript": "Apice", + "Toggle HTML Source": "Visualizza/nascondi sorgente HTML", + "Underline": "Sottolineato", + "Undoes your last action": "Annulla ultima azione", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Sei in MODALITA", + "__OBSOLETE__": { + "Cancel": "Annulla", + "Enlarge Editor": "Allarga editor", + "Insert/Modify Link": "Inserisci/modifica link", + "New window (_blank)": "Nuova finestra (_blank)", + "None (use implicit)": "Niente (usa implicito)", + "OK": "OK", + "Other": "Altro", + "Same frame (_self)": "Stessa frame (_self)", + "Target:": "Target:", + "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "E", + "Title (tooltip):": "Title (suggerimento):", + "Top frame (_top)": "Pagina intera (_top)", + "URL:": "URL:", + "You must enter the URL where this link points to": "Devi inserire l'indirizzo a cui punta il link" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ja.js new file mode 100644 index 0000000000..1692901b59 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ja.js @@ -0,0 +1,163 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— font —": "— フォント —", + "— format —": "— 書式 —", + "— size —": "— サイズ —", + "About this editor": "バージョン情報", + "Address": "アドレス", + "Background Color": "背景色", + "Bold": "太字", + "Bulleted List": "記号付き箇条書き", + "Clean content pasted from Word": "Wordから貼り付けられた内容の清書", + "Clear Inline Font Specifications": "インラインフォント指定をクリア", + "Clear MSOffice tags": "MSOfficeタグをクリア", + "Close": "閉じる", + "Constructing object": "オブジェクト構築中", + "Copy selection": "コピー", + "Create Statusbar": "ステータスバーの作成", + "Create Toolbar": "ツールバーの作成", + "Current style": "現在のスタイル", + "Cut selection": "切り取り", + "Decrease Indent": "インデント解除", + "Direction left to right": "左から右へ", + "Direction right to left": "右から左へ", + "ENTER": "ENTER", + "Editor Help": "エディタのヘルプ", + "Finishing": "完了", + "Font Color": "文字色", + "Formatted": "整形済み", + "Generate Xinha framework": "Xinhaフレームワーク生成中", + "Heading 1": "見出し1", + "Heading 2": "見出し2", + "Heading 3": "見出し3", + "Heading 4": "見出し4", + "Heading 5": "見出し5", + "Heading 6": "見出し6", + "Headings": "見出し", + "Help using editor": "ヘルプ", + "Horizontal Rule": "水平線", + "Increase Indent": "インデント設定", + "Init editor size": "エディタサイズの初期化", + "Insert Table": "テーブルの挿入", + "Insert Web Link": "リンクの挿入", + "Insert/Modify Image": "画像の挿入/修正", + "Insert/Overwrite": "挿入/上書き", + "Italic": "斜体", + "Justify Center": "中央寄せ", + "Justify Full": "均等割付", + "Justify Left": "左寄せ", + "Justify Right": "右寄せ", + "Keyboard shortcuts": "キーボードショートカット", + "Loading in progress. Please wait!": "ロード中です。しばらくお待ちください", + "Loading plugin $plugin": "ロード中プラグイン $plugin", + "Normal": "標準", + "Ordered List": "番号付き箇条書き", + "Paste from clipboard": "貼り付け", + "Path": "パス", + "Print document": "印刷", + "Redoes your last action": "やり直し", + "Register plugin $plugin": "登録中プラグイン $plugin", + "Remove formatting": "書式削除", + "SHIFT-ENTER": "SHIFT+ENTER", + "Save as": "名前をつけて保存", + "Select all": "すべて選択", + "Set format to paragraph": "段落書式の設定", + "Split Block": "領域分割", + "Strikethrough": "打ち消し線", + "Subscript": "下付き添え字", + "Superscript": "上付き添え字", + "The editor provides the following key combinations:": "エディタは以下のキー操作を提供しています:", + "Toggle Borders": "境界線の切替", + "Toggle HTML Source": "HTML編集モードを切替", + "Underline": "下線", + "Undoes your last action": "元に戻す", + "Would you like to clear font colours?": "色をクリアしますか?", + "Would you like to clear font sizes?": "サイズをクリアしますか?", + "Would you like to clear font typefaces?": "フォント名をクリアしますか?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "テキストモードで操作しています。WYSIWYG編集に戻るには[<>]ボタンを使ってください。", + "insert linebreak": "段落内改行の挿入", + "new paragraph": "新規段落", + "__OBSOLETE__": { + "Absbottom": "下(絶対的)", + "Absmiddle": "中央(絶対的)", + "Alignment:": "行揃え:", + "Alternate text:": "代替テキスト:", + "Baseline": "ベースライン", + "Border thickness:": "境界線の太さ:", + "Bottom": "下", + "Cancel": "中止", + "Cell padding:": "セル余白:", + "Cell spacing:": "セル間隔:", + "Click a color...": "色をクリック...", + "Color: ": "色: ", + "Cols:": "列:", + "Em": "相対値(em)", + "Enlarge Editor": "エディタを最大化", + "Enter the image URL here": "画像のURLをここに入力します", + "Fixed width columns": "列の幅を固定", + "For browsers that don't support images": "画像表示をサポートしないブラウザに必要です", + "Horizontal padding": "水平余白", + "Horizontal:": "水平:", + "Image Preview:": "画像表示:", + "Image URL:": "画像URL:", + "Insert Image": "画像の挿入", + "Insert/Modify Link": "リンクの挿入/修正", + "Layout": "レイアウト", + "Leave empty for no border": "境界線がない場合は空のままにする", + "Left": "左", + "Middle": "中央", + "New window (_blank)": "新しいウィンドウ (_blank)", + "None (use implicit)": "なし (デフォルトに任せる)", + "Not set": "なし", + "Number of columns": "列数", + "Number of rows": "行数", + "OK": "OK", + "Other": "その他", + "Percent": "パーセント(%)", + "Pixels": "ピクセル(px)", + "Positioning of this image": "画像の配置", + "Positioning of this table": "このテーブルの配置", + "Preview": "表示", + "Preview the image in a new window": "ウィンドウで画像を表示", + "Register bottom panel": "登録 下パネル", + "Register left panel": "登録 左パネル", + "Register right panel": "登録 右パネル", + "Register top panel": "登録 上パネル", + "Right": "右", + "Rows:": "行:", + "Same frame (_self)": "自己フレーム内 (_self)", + "Sample": "サンプル", + "Space between adjacent cells": "隣接するセル間の距離", + "Space between content and border in cell": "セル内における内容と境界線との距離", + "Spacing": "間隔", + "Target:": "ターゲット:", + "Texttop": "テキスト上部", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "MozillaベースのWebブラウザでは、貼り付けボタンは機能しません(技術的なセキュリティ上の理由で)。Ctrl+Vキーを押して直接貼り付けてください。", + "Title (tooltip):": "タイトル:", + "Top": "上", + "Top frame (_top)": "最上位フレーム (_top)", + "URL:": "URL:", + "Vertical padding": "垂直余白", + "Vertical:": "垂直:", + "Web Safe: ": "Webセーフ: ", + "Width of the table": "テーブルの幅", + "Width unit": "幅の単位", + "Width:": "幅:", + "Xinha Help": "ヘルプ", + "You must enter a number of columns": "列数を入力してください", + "You must enter a number of rows": "行数を入力してください", + "You must enter the URL": "URLを入力する必要があります", + "You must enter the URL where this link points to": "このリンクが指し示すURLを入力してください", + "You need to select some text before creating a link": "リンクを作成するにはテキストを選択する必要があります", + "Your Document is not well formed. Check JavaScript console for details.": "この文書には構文的な問題があります。詳細はJavaScriptコンソールを参照してください。" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/lc_base.js new file mode 100644 index 0000000000..ecc0386f1b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/lc_base.js @@ -0,0 +1,141 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "About this editor": "", + "Address": "", + "Arial": "", + "Background Color": "", + "Bold": "", + "Bulleted List": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Copy selection": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "Current style": "", + "Cut selection": "", + "Decrease Indent": "", + "Direction left to right": "", + "Direction right to left": "", + "ENTER": "", + "Editor Help": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Font Color": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Help using editor": "", + "Horizontal Rule": "", + "Impact": "", + "Increase Indent": "", + "Init editor size": "", + "Insert Table": "", + "Insert Web Link": "", + "Insert/Modify Image": "", + "Insert/Overwrite": "", + "Italic": "", + "Justify Center": "", + "Justify Full": "", + "Justify Left": "", + "Justify Right": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Normal": "", + "Ordered List": "", + "Paste from clipboard": "", + "Path": "", + "Print document": "", + "Redoes your last action": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "SHIFT-ENTER": "", + "Save as": "", + "Select Color": "", + "Select all": "", + "Set format to paragraph": "", + "Split Block": "", + "Strikethrough": "", + "Subscript": "", + "Superscript": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Toggle HTML Source": "", + "Touch here first to activate editor.": "", + "Underline": "", + "Undoes your last action": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "", + "insert linebreak": "", + "new paragraph": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/lt.js new file mode 100644 index 0000000000..ad1b99929e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/lt.js @@ -0,0 +1,59 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Apie redaktorių", + "Background Color": "Fono spalva", + "Bold": "Paryškinti", + "Bulleted List": "Suženklintas sąrašas", + "Copy selection": "Kopijuoti", + "Current style": "Dabartinis stilius", + "Cut selection": "Iškirpti", + "Decrease Indent": "Sumažinti paraštę", + "Font Color": "Šrifto spalva", + "Help using editor": "Pagalba naudojant redaktorių", + "Horizontal Rule": "Horizontali linija", + "Increase Indent": "Padidinti paraštę", + "Insert Table": "Įterpti lentelę", + "Insert Web Link": "Įterpti nuorodą", + "Insert/Modify Image": "Įterpti paveiksliuką", + "Italic": "Kursyvas", + "Justify Center": "Lygiavimas pagal centrą", + "Justify Full": "Lygiuoti pastraipą", + "Justify Left": "Lygiavimas pagal kairę", + "Justify Right": "Lygiavimas pagal dešinę", + "Ordered List": "Numeruotas sąrašas", + "Paste from clipboard": "Įterpti", + "Path": "Kelias", + "Redoes your last action": "Pakartoja paskutinį atšauktą jūsų veiksmą", + "Strikethrough": "Perbraukti", + "Subscript": "Apatinis indeksas", + "Superscript": "Viršutinis indeksas", + "Toggle HTML Source": "Perjungti į HTML/WYSIWYG", + "Underline": "Pabraukti", + "Undoes your last action": "Atšaukia paskutini jūsų veiksmą", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jūs esete teksto režime. Naudokite [<>] mygtuką grįžimui į WYSIWYG.", + "__OBSOLETE__": { + "Cancel": "Atšaukti", + "Enlarge Editor": "Išplėstas redagavimo ekranas/Enlarge Editor", + "Insert/Modify Link": "Idėti/Modifikuoti", + "New window (_blank)": "Naujas langas (_blank)", + "None (use implicit)": "None (use implicit)", + "OK": "OK", + "Other": "Kitas", + "Same frame (_self)": "Same frame (_self)", + "Target:": "Target:", + "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren", + "Title (tooltip):": "Pavadinimas (tooltip):", + "Top frame (_top)": "Top frame (_top)", + "URL:": "URL:", + "You must enter the URL where this link points to": "Jus privalote nurodyti URL į kuri rodo šitą nuoroda" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/lv.js new file mode 100644 index 0000000000..1a51ab80de --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/lv.js @@ -0,0 +1,48 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Par ðo rediìçtâju", + "Background Color": "Fona krâsa", + "Bold": "Trekniem burtiem", + "Bulleted List": "Saraksts", + "Copy selection": "Kopçt iezîmçto", + "Current style": "Patreizçjais stils", + "Cut selection": "Izgriezt iezîmçto", + "Decrease Indent": "Samazinât atkâpi", + "Font Color": "Burtu krâsa", + "Help using editor": "Rediìçtâja palîgs", + "Horizontal Rule": "Horizontâla atdalîtâjsvîtra", + "Increase Indent": "Palielinât atkâpi", + "Insert Table": "Ievietot tabulu", + "Insert Web Link": "Ievietot hipersaiti", + "Insert/Modify Image": "Ievietot attçlu", + "Italic": "Kursîvâ", + "Justify Center": "Izlîdzinât centrâ", + "Justify Full": "Izlîdzinât pa visu lapu", + "Justify Left": "Izlîdzinât pa kreisi", + "Justify Right": "Izlîdzinât pa labi", + "Ordered List": "Numurçts saraksts", + "Paste from clipboard": "Ievietot iezîmçto", + "Path": "Ceïð", + "Redoes your last action": "Atkârtot pçdçjo darbîbu", + "Strikethrough": "Pârsvîtrots", + "Subscript": "Novietot zem rindas", + "Superscript": "Novietot virs rindas", + "Toggle HTML Source": "Skatît HTML kodu", + "Underline": "Pasvîtrots", + "Undoes your last action": "Atcelt pçdçjo darbîbu", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jûs patlaban darbojaties TEKSTA REÞÎMÂ. Lai pârietu atpakaï uz GRAFISKO REÞÎMU (WYSIWIG), lietojiet [<>] pogu.", + "__OBSOLETE__": { + "Cancel": "Atcelt", + "Enlarge Editor": "Palielinât Rediìçtâju", + "OK": "Labi" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/__new__.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/__new__.js new file mode 100644 index 0000000000..f3673e9df9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/__new__.js @@ -0,0 +1,1503 @@ +// Xinha Language Combined Translation File +// +// LANG: "NEW", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/NEW.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'NEW'; +// _editor_lang_merged_file = '/xinha/lang/merged/NEW.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Cancel": "", + "Delete": "", + "Expansion:": "", + "OK": "" + }, + "AboutBox": { + "About this editor": "<>", + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>", + "OK": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "", + "Justify Center": "<>", + "Justify Full": "<>", + "Justify Left": "<>", + "Justify Right": "<>" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "", + "Cancel": "<>", + "OK": "<>" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "", + "Cancel": "<>", + "OK": "<>" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`hArr`": "", + "`harr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`larr`": "", + "`lArr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`Omega`": "", + "`omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`psi`": "", + "`Psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`theta`": "", + "`Theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`xi`": "", + "`Xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "lambda": "", + "Lambda": "", + "lArr": "", + "larr": "", + "lim_(x->oo)": "", + "mu": "", + "nn": "", + "NN": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "Sigma": "", + "sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "", + "Cancel": "<>", + "OK": "<>" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Cancel": "<>", + "OK": "<>", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "", + "Cancel": "<>", + "OK": "<>" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/Edit Horizontal Rule": "", + "Insert/edit horizontal rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "", + "Cancel": "<>", + "Horizontal Rule": "<>", + "OK": "<>" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Cancel": "<>", + "Delete": "<>", + "OK": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "OK": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "", + "Cancel": "<>" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "", + "Cancel": "<>" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "Cancel": "<>", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Insert Table": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "OK": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Cancel": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "OK": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "", + "Cancel": "<>", + "OK": "<>" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "", + "Cancel": "<>" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Cancel": "<>", + "Delete": "<>", + "OK": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "", + "OK": "<>" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "", + "Cancel": "<>", + "OK": "<>" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell Properties": "", + "Cell properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row Properties": "", + "Row properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Cancel": "<>", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "OK": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "About this editor": "", + "Address": "", + "Arial": "", + "Background Color": "", + "Bold": "", + "Bulleted List": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Copy selection": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Current style": "", + "Cut selection": "", + "Decrease Indent": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Font Color": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Help using editor": "", + "Horizontal Rule": "", + "Impact": "", + "Increase Indent": "", + "Init editor size": "", + "insert linebreak": "", + "Insert Table": "", + "Insert Web Link": "", + "Insert/Modify Image": "", + "Insert/Overwrite": "", + "Italic": "", + "Justify Center": "", + "Justify Full": "", + "Justify Left": "", + "Justify Right": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Ordered List": "", + "Paste from clipboard": "", + "Path": "", + "Print document": "", + "Redoes your last action": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Strikethrough": "", + "Subscript": "", + "Superscript": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Toggle HTML Source": "", + "Touch here first to activate editor.": "", + "Underline": "", + "Undoes your last action": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "", + "Cancel": "<>" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "OK": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top": "<>", + "Top frame (_top)": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "OK": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Cancel": "<>", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "OK": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "OK": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Cancel": "<>", + "Image Preview": "<>", + "OK": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "", + "Cancel": "<>" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Cancel": "<>", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Cancel": "<>", + "OK": "<>", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "", + "Cancel": "<>" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "", + "Cancel": "<>", + "OK": "<>" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/b5.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/b5.js new file mode 100644 index 0000000000..fb4d374453 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/b5.js @@ -0,0 +1,1513 @@ +// Xinha Language Combined Translation File +// +// LANG: "b5", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/b5.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'b5'; +// _editor_lang_merged_file = '/xinha/lang/merged/b5.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "AboutBox": { + "About this editor": "關於 Xinha" + }, + "ContextMenu": { + "Justify Center": "位置居中", + "Justify Full": "位置左右平等", + "Justify Left": "位置靠左", + "Justify Right": "位置靠右" + }, + "HorizontalRule": { + "Horizontal Rule": "水平線" + }, + "InsertTable": { + "Insert Table": "插入表格" + }, + "Xinha": { + "About this editor": "關於 Xinha", + "Background Color": "背景顏色", + "Bold": "粗體", + "Bulleted List": "無序清單", + "Current style": "字體例子", + "Decrease Indent": "減小行前空白", + "Font Color": "文字顏色", + "Help using editor": "說明", + "Horizontal Rule": "水平線", + "Increase Indent": "加寬行前空白", + "Insert Table": "插入表格", + "Insert Web Link": "插入連結", + "Insert/Modify Image": "插入圖形", + "Italic": "斜體", + "Justify Center": "位置居中", + "Justify Full": "位置左右平等", + "Justify Left": "位置靠左", + "Justify Right": "位置靠右", + "Ordered List": "順序清單", + "Strikethrough": "刪除線", + "Subscript": "下標", + "Superscript": "上標", + "Toggle HTML Source": "切換HTML原始碼", + "Underline": "底線" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Cancel": "", + "Delete": "", + "Expansion:": "", + "OK": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>", + "OK": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "", + "Cancel": "<>", + "OK": "<>" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "", + "Cancel": "<>", + "OK": "<>" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`hArr`": "", + "`harr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`larr`": "", + "`lArr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`Omega`": "", + "`omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`psi`": "", + "`Psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`theta`": "", + "`Theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`xi`": "", + "`Xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "lambda": "", + "Lambda": "", + "lArr": "", + "larr": "", + "lim_(x->oo)": "", + "mu": "", + "nn": "", + "NN": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "Sigma": "", + "sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "", + "Cancel": "<>", + "OK": "<>" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Cancel": "<>", + "OK": "<>", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "", + "Cancel": "<>", + "OK": "<>" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/Edit Horizontal Rule": "", + "Insert/edit horizontal rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "", + "Cancel": "<>", + "OK": "<>" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Cancel": "<>", + "Delete": "<>", + "OK": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "OK": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "", + "Cancel": "<>" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "", + "Cancel": "<>" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "Cancel": "<>", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "OK": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Cancel": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "OK": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "", + "Cancel": "<>", + "OK": "<>" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "", + "Cancel": "<>" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Cancel": "<>", + "Delete": "<>", + "OK": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "", + "OK": "<>" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "", + "Cancel": "<>", + "OK": "<>" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell Properties": "", + "Cell properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row Properties": "", + "Row properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Cancel": "<>", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "OK": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Copy selection": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Cut selection": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Paste from clipboard": "", + "Path": "", + "Print document": "", + "Redoes your last action": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Undoes your last action": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "", + "Cancel": "<>" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "OK": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top": "<>", + "Top frame (_top)": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "OK": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Cancel": "<>", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "OK": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "OK": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Cancel": "<>", + "Image Preview": "<>", + "OK": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "", + "Cancel": "<>" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Cancel": "<>", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Cancel": "<>", + "OK": "<>", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "", + "Cancel": "<>" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "", + "Cancel": "<>", + "OK": "<>" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ch.js new file mode 100644 index 0000000000..041e9b02ec --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ch.js @@ -0,0 +1,1575 @@ +// Xinha Language Combined Translation File +// +// LANG: "ch", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/ch.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'ch'; +// _editor_lang_merged_file = '/xinha/lang/merged/ch.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "取消", + "OK": "好" + }, + "AboutBox": { + "About this editor": "關於 Xinha" + }, + "BackgroundImage": { + "Cancel": "取消" + }, + "ColorPicker": { + "OK": "好" + }, + "ContextMenu": { + "Justify Center": "居中", + "Justify Full": "整齊", + "Justify Left": "靠左", + "Justify Right": "靠右" + }, + "CreateLink": { + "Cancel": "取消", + "Insert/Modify Link": "插入/改寫連結", + "New window (_blank)": "新窗户(_blank)", + "None (use implicit)": "無(use implicit)", + "OK": "好", + "Other": "其他", + "Same frame (_self)": "本匡 (_self)", + "Target:": "目標匡:", + "Title (tooltip):": "主題 (tooltip):", + "Top frame (_top)": "上匡 (_top)", + "URL:": "網址:" + }, + "EditTag": { + "Cancel": "取消", + "OK": "好" + }, + "Equation": { + "Cancel": "取消", + "OK": "好" + }, + "ExtendedFileManager": { + "Cancel": "取消", + "New window (_blank)": "新窗户(_blank)", + "None (use implicit)": "無(use implicit)", + "OK": "好", + "Same frame (_self)": "本匡 (_self)", + "Title (tooltip)": "主題 (tooltip):", + "Top frame (_top)": "上匡 (_top)" + }, + "Forms": { + "Cancel": "取消", + "OK": "好" + }, + "FullPage": { + "Cancel": "取消", + "OK": "好" + }, + "HorizontalRule": { + "Cancel": "取消", + "Horizontal Rule": "水平線", + "OK": "好" + }, + "ImageManager": { + "Cancel": "取消", + "OK": "好" + }, + "InsertAnchor": { + "Cancel": "取消", + "OK": "好" + }, + "InsertImage": { + "Cancel": "取消", + "OK": "好" + }, + "InsertMarquee": { + "Cancel": "取消", + "OK": "好" + }, + "InsertNote": { + "Cancel": "取消" + }, + "InsertPicture": { + "Cancel": "取消", + "OK": "好" + }, + "InsertSnippet": { + "Cancel": "取消" + }, + "InsertSnippet2": { + "Cancel": "取消" + }, + "InsertTable": { + "Cancel": "取消", + "Insert Table": "插入表格", + "OK": "好" + }, + "Linker": { + "Cancel": "取消", + "Insert/Modify Link": "插入/改寫連結", + "OK": "好", + "Target:": "目標匡:", + "URL:": "網址:" + }, + "NoteServer": { + "Cancel": "取消", + "OK": "好" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly." + }, + "PSLocal": { + "Cancel": "取消" + }, + "PasteText": { + "Cancel": "取消", + "OK": "好" + }, + "PersistentStorage": { + "Cancel": "取消" + }, + "QuickTag": { + "Cancel": "取消" + }, + "SetId": { + "Cancel": "取消", + "OK": "好" + }, + "SmartReplace": { + "OK": "好" + }, + "SpellChecker": { + "Cancel": "取消", + "OK": "好" + }, + "SuperClean": { + "Cancel": "取消", + "OK": "好" + }, + "TableOperations": { + "Cancel": "取消", + "OK": "好" + }, + "Template": { + "Cancel": "取消" + }, + "UnFormat": { + "Cancel": "取消", + "OK": "好" + }, + "Xinha": { + "About this editor": "關於 Xinha", + "Background Color": "背景顏色", + "Bold": "粗體", + "Bulleted List": "無序清單", + "Copy selection": "复制选项", + "Current style": "字體例子", + "Cut selection": "剪制选项", + "Decrease Indent": "伸排", + "Direction left to right": "从左到右", + "Direction right to left": "从右到左", + "Font Color": "文字顏色", + "Help using editor": "說明", + "Horizontal Rule": "水平線", + "Increase Indent": "縮排", + "Insert Table": "插入表格", + "Insert Web Link": "插入連結", + "Insert/Modify Image": "插入圖像", + "Italic": "斜體", + "Justify Center": "居中", + "Justify Full": "整齊", + "Justify Left": "靠左", + "Justify Right": "靠右", + "Ordered List": "順序清單", + "Paste from clipboard": "贴上", + "Path": "途徑", + "Redoes your last action": "重来", + "Strikethrough": "刪線", + "Subscript": "下標", + "Superscript": "上標", + "Toggle HTML Source": "切換HTML原始碼", + "Underline": "底線", + "Undoes your last action": "回原", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "你在用純字編輯方式. 用 [<>] 按鈕轉回 所見即所得 編輯方式." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "Not set": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Save": "<>", + "Texttop": "<>", + "Top": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + "Open file in new window": "", + " Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/cz.js new file mode 100644 index 0000000000..15307c8554 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/cz.js @@ -0,0 +1,1577 @@ +// Xinha Language Combined Translation File +// +// LANG: "cz", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/cz.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'cz'; +// _editor_lang_merged_file = '/xinha/lang/merged/cz.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "O této aplikaci" + }, + "BackgroundImage": { + "Cancel": "Zrušit" + }, + "ColorPicker": { + "Color: ": "Barva", + "OK": "OK" + }, + "ContextMenu": { + "Justify Center": "Na střed", + "Justify Full": "Zarovnat do stran", + "Justify Left": "Zarovnat doleva", + "Justify Right": "Zarovnat doprava" + }, + "CreateLink": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "EditTag": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "Equation": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "ExtendedFileManager": { + "Align": "Zarovnání", + "Baseline": "Základní linka", + "Border": "Obrys", + "Bottom": "Dolů", + "Cancel": "Zrušit", + "Color": "Barva", + "Height": "Výška", + "Height:": "Výška", + "Left": "Vlevo", + "Margin": "Okraj", + "Middle": "Na střed", + "OK": "OK", + "Padding": "Odsazování", + "Right": "Vpravo", + "Top": "Nahoru", + "Width": "Šířka", + "Width:": "Šířka" + }, + "FindReplace": { + "Replace with:": "Zaměnit za" + }, + "Forms": { + "Cancel": "Zrušit", + "Image URL:": "Adresa obrázku", + "OK": "OK" + }, + "FullPage": { + "Cancel": "Zrušit", + "Description:": "Popis", + "OK": "OK" + }, + "HorizontalRule": { + "Cancel": "Zrušit", + "Center": "Na střed", + "Color:": "Barva", + "Height:": "Výška", + "Horizontal Rule": "Vodorovná čára", + "Layout": "Rozložení", + "Left": "Vlevo", + "OK": "OK", + "Right": "Vpravo", + "Width:": "Šířka", + "percent": "procent", + "pixels": "pixelů" + }, + "ImageManager": { + "Baseline": "Základní linka", + "Bottom": "Dolů", + "Cancel": "Zrušit", + "Height:": "Výška", + "Left": "Vlevo", + "Middle": "Na střed", + "OK": "OK", + "Right": "Vpravo", + "Top": "Nahoru", + "Width:": "Šířka" + }, + "InlineStyler": { + "Background": "Pozadí", + "Baseline": "Základní linka", + "Border": "Obrys", + "Bottom": "Dolů", + "Center": "Na střed", + "Char": "Znak", + "Collapsed borders": "Stlačené okraje", + "FG Color": "Barva popředí", + "Float": "Obtékání", + "Height": "Výška", + "Image URL": "Adresa obrázku", + "Justify": "Do stran", + "Layout": "Rozložení", + "Left": "Vlevo", + "Margin": "Okraj", + "Middle": "Na střed", + "None": "Žádné", + "Padding": "Odsazování", + "Right": "Vpravo", + "Text align": "Zarovnání textu", + "Top": "Nahoru", + "Vertical align": "Svislé zarovnání", + "Width": "Šířka", + "percent": "procent", + "pixels": "pixelů" + }, + "InsertAnchor": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "InsertImage": { + "Baseline": "Základní linka", + "Bottom": "Dolů", + "Cancel": "Zrušit", + "Image URL:": "Adresa obrázku", + "Layout": "Rozložení", + "Left": "Vlevo", + "Middle": "Na střed", + "OK": "OK", + "Right": "Vpravo", + "Spacing": "Mezery", + "Top": "Nahoru" + }, + "InsertMarquee": { + "Cancel": "Zrušit", + "Height:": "Výška", + "Left": "Vlevo", + "OK": "OK", + "Right": "Vpravo", + "Width:": "Šířka" + }, + "InsertNote": { + "Cancel": "Zrušit" + }, + "InsertPicture": { + "Baseline": "Základní linka", + "Bottom": "Dolů", + "Cancel": "Zrušit", + "Height:": "Výška", + "Image URL:": "Adresa obrázku", + "Layout": "Rozložení", + "Left": "Vlevo", + "Middle": "Na střed", + "OK": "OK", + "Right": "Vpravo", + "Spacing": "Mezery", + "Top": "Nahoru", + "Width:": "Šířka" + }, + "InsertSnippet": { + "Cancel": "Zrušit" + }, + "InsertSnippet2": { + "Cancel": "Zrušit" + }, + "InsertTable": { + "Baseline": "Základní linka", + "Border": "Obrys", + "Bottom": "Dolů", + "Cancel": "Zrušit", + "Caption": "Titulek", + "Insert Table": "Vložit tabulku", + "Layout": "Rozložení", + "Left": "Vlevo", + "Middle": "Na střed", + "OK": "OK", + "Percent": "procent", + "Pixels": "pixelů", + "Right": "Vpravo", + "Spacing": "Mezery", + "Top": "Nahoru", + "Width:": "Šířka" + }, + "Linker": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "NoteServer": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "PSLocal": { + "Cancel": "Zrušit" + }, + "PasteText": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "PersistentStorage": { + "Cancel": "Zrušit" + }, + "QuickTag": { + "Cancel": "Zrušit" + }, + "SetId": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Zrušit", + "Dictionary": "Slovník", + "Finished list of mispelled words": "Dokončen seznam chybných slov", + "I will open it in a new page.": "Bude otevřen jej v nové stránce.", + "Ignore": "Ignorovat", + "Ignore all": "Ignorovat vše", + "No mispelled words found with the selected dictionary.": "Podle zvoleného slovníku nebyla nalezena žádná chybná slova.", + "OK": "OK", + "Original word": "Původní slovo", + "Please confirm that you want to open this link": "Prosím potvrďte otevření tohoto odkazu", + "Please wait. Calling spell checker.": "Prosím čekejte. Komunikuace s kontrolou správnosti slov.", + "Please wait: changing dictionary to": "Prosím čekejte: změna adresáře na", + "Re-check": "Překontrolovat", + "Replace": "Zaměnit", + "Replace all": "Zaměnit všechno", + "Replace with": "Zaměnit za", + "Spell-check": "Kontrola správnosti slov", + "Suggestions": "Doporučení", + "This will drop changes and quit spell checker. Please confirm.": "Změny budou zrušeny a kontrola správnosti slov ukončena. Prosím potvrďte." + }, + "SuperClean": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "TableOperations": { + "All four sides": "Všechny čtyři strany", + "Borders": "Obrysy", + "Cancel": "Zrušit", + "Caption": "Titulek", + "Cell Properties": "Vlastnosti buňky", + "Cell properties": "Vlastnosti buňky", + "Delete cell": "Smazat buňku", + "Delete column": "Smazat sloupec", + "Delete row": "Smazat řádek", + "Description": "Popis", + "Frames": "Rámečky", + "Insert cell after": "Vložit buňku za", + "Insert cell before": "Vložit buňku před", + "Insert column after": "Vložit sloupec za", + "Insert column before": "Vložit sloupec před", + "Insert row after": "Smazat řádek pod", + "Insert row before": "Smazat řádek nad", + "Merge cells": "Spojit buňky", + "No rules": "Žádné čáry", + "No sides": "Žádné strany", + "OK": "OK", + "Padding": "Odsazování", + "Please click into some cell": "Prosím klikněte do některé buňky", + "Row Properties": "Vlastnosti řádku", + "Row properties": "Vlastnosti řádku", + "Rules will appear between all rows and columns": "Čáry mezi všemi řádky i sloupci", + "Rules will appear between columns only": "Čáry pouze mezi sloupci", + "Rules will appear between rows only": "Čáry pouze mezi řádky", + "Spacing": "Mezery", + "Spacing and padding": "Mezery a odsazování", + "Split column": "Rozdělit sloupec", + "Split row": "Rozdělit řádek", + "Summary": "Shrnutí", + "Table Properties": "Vlastnosti tabulky", + "Table properties": "Vlastnosti tabulky", + "The bottom side only": "Pouze spodní strana", + "The left-hand side only": "Pouze levá strana", + "The right and left sides only": "Pouze levá a pravá strana", + "The right-hand side only": "Pouze pravá strana", + "The top and bottom sides only": "Pouze horní a dolní strana", + "The top side only": "Pouze horní strana", + "Xinha cowardly refuses to delete the last cell in row.": "Xinha zbaběle odmítá smazat poslední buňku v řádku.", + "Xinha cowardly refuses to delete the last column in table.": "Xinha zbaběle odmítá smazat poslední sloupec v tabulce.", + "Xinha cowardly refuses to delete the last row in table.": "Xinha zbaběle odmítá smazat poslední řádek v tabulce.", + "pixels": "pixelů" + }, + "Template": { + "Cancel": "Zrušit" + }, + "UnFormat": { + "Cancel": "Zrušit", + "OK": "OK" + }, + "Xinha": { + "About this editor": "O této aplikaci", + "Background Color": "Barva pozadí", + "Bold": "Tučně", + "Bulleted List": "Odrážky", + "Copy selection": "Kopírovat", + "Current style": "Zvolený styl", + "Cut selection": "Vyjmout", + "Decrease Indent": "Předsadit", + "Font Color": "Barva písma", + "Help using editor": "Nápověda aplikace", + "Horizontal Rule": "Vodorovná čára", + "Increase Indent": "Odsadit", + "Insert Table": "Vložit tabulku", + "Insert Web Link": "Vložit odkaz", + "Insert/Modify Image": "Vložit obrázek", + "Italic": "Kurzíva", + "Justify Center": "Na střed", + "Justify Full": "Zarovnat do stran", + "Justify Left": "Zarovnat doleva", + "Justify Right": "Zarovnat doprava", + "Ordered List": "Seznam", + "Paste from clipboard": "Vložit", + "Path": "Cesta", + "Redoes your last action": "Opakuje poslední akci", + "Strikethrough": "Přeškrtnutí", + "Subscript": "Dolní index", + "Superscript": "Horní index", + "Toggle HTML Source": "Přepnout HTML", + "Underline": "Podtržení", + "Undoes your last action": "Vrátí poslední akci", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jste v TEXTOVÉM REŽIMU. Použijte tlačítko [<>] pro přepnutí do WYSIWIG." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Preview": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Border thickness:": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Rows:": "<>", + "Texttop": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>", + "Rows": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Copy": "<>", + "Cut": "<>", + "Insert File Link": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top frame (_top)": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Border thickness:": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Insert Image": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Size": "<>", + "Texttop": "<>", + "Vertical padding": "<>", + "Vertical:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "HTMLArea Spell Checker": "", + "Info": "", + "Learn": "", + "pliz weit ;-)": "", + "Revert": "", + "Spell Checker": "" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/da.js new file mode 100644 index 0000000000..d0cf9bf550 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/da.js @@ -0,0 +1,1577 @@ +// Xinha Language Combined Translation File +// +// LANG: "da", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/da.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'da'; +// _editor_lang_merged_file = '/xinha/lang/merged/da.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Annuller", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "Om Xinha", + "Close": "Luk" + }, + "BackgroundImage": { + "Cancel": "Annuller" + }, + "ColorPicker": { + "Click a color...": "Vælg farve", + "Close": "Luk", + "Color: ": "Farve: ", + "OK": "OK", + "Sample": "Eksempel", + "Web Safe: ": "Web Safe: " + }, + "ContextMenu": { + "Copy": "Kopier", + "Cut": "Klip", + "Justify Center": "Centrer", + "Justify Full": "Lige margener", + "Justify Left": "Venstrejuster", + "Justify Right": "Højrejuster", + "Paste": "Sæt ind" + }, + "CreateLink": { + "Cancel": "Annuller", + "Insert/Modify Link": "Indsæt/rediger hyperlink", + "New window (_blank)": "Nyt vindue (_blank)", + "None (use implicit)": "ingen (implicit)", + "OK": "OK", + "Other": "Andet", + "Same frame (_self)": "Samme ramme (_self)", + "Target:": "Placering:", + "Title (tooltip):": "Titel (Tooltip):", + "Top frame (_top)": "Topramme (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "Annuller", + "OK": "OK" + }, + "Equation": { + "Cancel": "Annuller", + "OK": "OK", + "Preview": "Smugkig" + }, + "ExtendedFileManager": { + "Absbottom": "Bund", + "Absmiddle": "Centreret", + "Align": "Placering", + "Alt": "Alt", + "Baseline": "Grundlinje", + "Border": "Ramme", + "Border Color": "Rammefarve", + "Bottom": "Tekstbund", + "Cancel": "Annuller", + "Clear": "Fortryd", + "Color": "Farve", + "Constrain Proportions": "Korrekt størrelsesforhold", + "Copy": "Kopier", + "Crop": "Beskær", + "Cut": "Klip", + "Directory": "Mappe", + "Directory Up": "Mappe op", + "Edit": "Rediger", + "File Manager": "Fil Manager", + "Filename:": "Filnavn:", + "Filesize:": "Filstørrelse:", + "Flip Horizontal": "Vend vandret", + "Flip Image": "Vend billede", + "Flip Vertical": "Vend lodret", + "GIF format is not supported, image editing not supported.": "GIF-Format ikke understøttet - kan ikke redigeres.", + "Height": "Højde", + "Height:": "Højde:", + "Insert File Link": "Indsæt fil-link", + "Invalid base directory:": "Ugyldig base mappe:", + "JPEG High": "JPEG høj", + "JPEG Low": "JPEG lav", + "JPEG Medium": "JPEG mellem", + "Left": "Venstre", + "Loading": "Henter", + "Lock": "Lås", + "Margin": "Margen", + "Marker": "Markør", + "Measure": "Målebånd", + "Middle": "Midt", + "New Folder": "Ny mappe", + "New window (_blank)": "Nyt vindue (_blank)", + "No Files Found": "Ingen filer fundet", + "No Image Available": "Ingen billeder tilgængelig", + "None (use implicit)": "ingen (implicit)", + "Not set": "Ubestemt", + "OK": "OK", + "Padding": "Spaltefyld", + "Positioning of this image": "Billedets position", + "Preview": "Smugkig", + "Quality:": "Kvalitet", + "Refresh": "Opdater", + "Rename": "Omdøb", + "Resize": "Ændre størrelse", + "Right": "Højre", + "Rotate": "Rotere", + "Rotate Image": "Drej billede", + "Same frame (_self)": "Samme ramme (_self)", + "Save": "Gem", + "Start X:": "Start X", + "Start Y:": "Start Y", + "Target Window": "Mål", + "Texttop": "Teksttop", + "Title (tooltip)": "Titel (Tooltip)", + "Toggle marker color": "Skift markørfarve", + "Top": "Top", + "Top frame (_top)": "Topramme (_top)", + "Trash": "Papirkurv", + "Upload": "Upload", + "W:": "W:", + "Width": "Bredde", + "Width:": "Bredde:", + "You must select some text before making a new link.": "Vælg venligst noget tekst før du laver et nyt link." + }, + "FindReplace": { + "Clear": "Fortryd", + "Replace with:": "Erstat med" + }, + "Forms": { + "Cancel": "Annuller", + "Image URL:": "Billede URL:", + "Name": "Navn", + "OK": "OK", + "Rows:": "Rækker:", + "Size:": "Størrelse" + }, + "FullPage": { + "Cancel": "Annuller", + "Description:": "Beskrivelse:", + "OK": "OK" + }, + "HorizontalRule": { + "Alignment:": "Justering:", + "Cancel": "Annuller", + "Center": "Centrer", + "Color:": "Farve", + "Height:": "Højde:", + "Horizontal Rule": "Vandret streg", + "Layout": "Layout", + "Left": "Venstre", + "OK": "OK", + "Right": "Højre", + "Width:": "Bredde:", + "percent": "procent", + "pixels": "pixel" + }, + "HtmlTidy": { + "Tidy failed. Check your HTML for syntax errors.": "Tidy mislykkedes. Tjek din HTML for syntaksfejl." + }, + "ImageManager": { + "Absbottom": "Bund", + "Absmiddle": "Centreret", + "Angle:": "Vinkel:", + "Baseline": "Grundlinje", + "Bottom": "Tekstbund", + "Cancel": "Annuller", + "Clear": "Fortryd", + "Constrain Proportions": "Korrekt størrelsesforhold", + "Crop": "Beskær", + "Directory": "Mappe", + "Directory Up": "Mappe op", + "Edit": "Rediger", + "Filename:": "Filnavn:", + "Flip Horizontal": "Vend vandret", + "Flip Image": "Vend billede", + "Flip Vertical": "Vend lodret", + "Folder Name:": "Mappenavn", + "GIF format is not supported, image editing not supported.": "GIF-Format ikke understøttet - kan ikke redigeres.", + "Height:": "Højde:", + "Image Format": "Billedformat:", + "Insert Image": "Indsæt billede", + "Invalid base directory:": "Ugyldig base mappe:", + "JPEG High": "JPEG høj", + "JPEG Low": "JPEG lav", + "JPEG Medium": "JPEG mellem", + "Left": "Venstre", + "Lock": "Lås", + "Marker": "Markør", + "Measure": "Målebånd", + "Middle": "Midt", + "New Folder": "Ny mappe", + "No Image Available": "Ingen billeder tilgængelig", + "Not set": "Ubestemt", + "OK": "OK", + "Positioning of this image": "Billedets position", + "Quality:": "Kvalitet", + "Refresh": "Opdater", + "Resize": "Ændre størrelse", + "Right": "Højre", + "Rotate": "Rotere", + "Rotate Image": "Drej billede", + "Save": "Gem", + "Start X:": "Start X", + "Start Y:": "Start Y", + "Texttop": "Teksttop", + "Top": "Top", + "Trash": "Papirkurv", + "W:": "W:", + "Width:": "Bredde:" + }, + "InlineStyler": { + "Background": "Baggrund", + "Baseline": "Grundlinje", + "Border": "Ramme", + "Bottom": "Tekstbund", + "Center": "Centrer", + "Char": "Plads", + "Collapsed borders": "Sammensmelt rammer", + "FG Color": "Font farve", + "Float": "Justering", + "Height": "Højde", + "Image URL": "Billede URL", + "Justify": "Lige margener", + "Layout": "Layout", + "Left": "Venstre", + "Margin": "Margen", + "Middle": "Midt", + "None": "Ingen", + "Padding": "Margen", + "Right": "Højre", + "Text align": "Tekst", + "Top": "Top", + "Vertical align": "Vertikal placering", + "Width": "Bredde", + "percent": "procent", + "pixels": "pixel" + }, + "InsertAnchor": { + "Cancel": "Annuller", + "OK": "OK" + }, + "InsertImage": { + "Absbottom": "Bund", + "Absmiddle": "Centreret", + "Alignment:": "Justering:", + "Alternate text:": "Alternativ text:", + "Baseline": "Grundlinje", + "Border thickness:": "Kantbredde:", + "Bottom": "Tekstbund", + "Cancel": "Annuller", + "Enter the image URL here": "Angiv billedets URL", + "For browsers that don't support images": "for browsere der ikke understøtter billeder", + "Horizontal padding": "Vandret fyld", + "Horizontal:": "vandret:", + "Image Preview:": "Billede smugkig:", + "Image URL:": "Billede URL:", + "Insert Image": "Indsæt billede", + "Layout": "Layout", + "Leave empty for no border": "Tom hvis ingen kant", + "Left": "Venstre", + "Middle": "Midt", + "Not set": "Ubestemt", + "OK": "OK", + "Positioning of this image": "Billedets position", + "Preview": "Smugkig", + "Preview the image in a new window": "Smugkig af billedet i et nyt vindue", + "Right": "Højre", + "Spacing": "Afstand", + "Texttop": "Teksttop", + "Top": "Top", + "Vertical padding": "Lodret fyld", + "Vertical:": "lodret:", + "You must enter the URL": "Du skal angive en URL" + }, + "InsertMarquee": { + "Cancel": "Annuller", + "Height:": "Højde:", + "Left": "Venstre", + "Name": "Navn", + "OK": "OK", + "Right": "Højre", + "Width:": "Bredde:" + }, + "InsertNote": { + "Cancel": "Annuller" + }, + "InsertPicture": { + "Absbottom": "Bund", + "Absmiddle": "Centreret", + "Alignment:": "Justering:", + "Alternate text:": "Alternativ text:", + "Baseline": "Grundlinje", + "Border thickness:": "Kantbredde:", + "Bottom": "Tekstbund", + "Cancel": "Annuller", + "Enter the image URL here": "Angiv billedets URL", + "For browsers that don't support images": "for browsere der ikke understøtter billeder", + "Height:": "Højde:", + "Horizontal padding": "Vandret fyld", + "Horizontal:": "vandret:", + "Image Preview:": "Billede smugkig:", + "Image URL:": "Billede URL:", + "Insert Image": "Indsæt billede", + "Layout": "Layout", + "Leave empty for no border": "Tom hvis ingen kant", + "Left": "Venstre", + "Middle": "Midt", + "Not set": "Ubestemt", + "OK": "OK", + "Positioning of this image": "Billedets position", + "Preview": "Smugkig", + "Preview the image in a new window": "Smugkig af billedet i et nyt vindue", + "Right": "Højre", + "Size": "Størrelse", + "Spacing": "Afstand", + "Texttop": "Teksttop", + "Top": "Top", + "Vertical padding": "Lodret fyld", + "Vertical:": "lodret:", + "Width:": "Bredde:" + }, + "InsertSnippet": { + "Cancel": "Annuller" + }, + "InsertSnippet2": { + "Cancel": "Annuller" + }, + "InsertTable": { + "Absbottom": "Bund", + "Absmiddle": "Centreret", + "Alignment:": "Justering:", + "Baseline": "Grundlinje", + "Border": "Ramme", + "Border thickness:": "Kantbredde:", + "Bottom": "Tekstbund", + "Cancel": "Annuller", + "Caption": "Titel", + "Cell padding:": "Cellefyld:", + "Cell spacing:": "Celleafstand:", + "Cols:": "Søjler:", + "Em": "Geviert (Em)", + "Fixed width columns": "Fast-bredde søjler", + "Insert Table": "Indsæt tabel", + "Layout": "Layout", + "Leave empty for no border": "Tom hvis ingen kant", + "Left": "Venstre", + "Middle": "Midt", + "Not set": "Ubestemt", + "Number of columns": "Antal søjler", + "Number of rows": "Antal rækker", + "OK": "OK", + "Percent": "Procent", + "Pixels": "Pixel", + "Positioning of this table": "Placering af tabel", + "Right": "Højre", + "Rows:": "Rækker:", + "Space between adjacent cells": "Afstand mellem celler", + "Space between content and border in cell": "Luft mellem indhold og kanter", + "Spacing": "Afstand", + "Texttop": "Teksttop", + "Top": "Top", + "Width of the table": "Tabelbredde", + "Width unit": "Breddeenhed", + "Width:": "Bredde:", + "You must enter a number of columns": "Du skal skrive antallet af søjler", + "You must enter a number of rows": "Du skal skrive antallet af rækker" + }, + "Linker": { + "Cancel": "Annuller", + "Insert/Modify Link": "Indsæt/rediger hyperlink", + "Name:": "Navn", + "OK": "OK", + "Size:": "Størrelse", + "Target:": "Placering:", + "URL:": "URL:", + "You must select some text before making a new link.": "Vælg venligst noget tekst før du laver et nyt link." + }, + "MootoolsFileManager": { + "Insert File Link": "Indsæt fil-link", + "You must select some text before making a new link.": "Vælg venligst noget tekst før du laver et nyt link." + }, + "NoteServer": { + "Cancel": "Annuller", + "Image Preview": "Billede smugkig:", + "OK": "OK", + "Preview": "Smugkig", + "Preview the image in a new window": "Smugkig af billedet i et nyt vindue" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Indsæt-knappen virker ikke i Mozilla-baserede browsere. Brug Ctrl-V på tastaturet for at indsætte." + }, + "PSLocal": { + "Cancel": "Annuller" + }, + "PasteText": { + "Cancel": "Annuller", + "OK": "OK" + }, + "PersistentStorage": { + "Cancel": "Annuller", + "Copy": "Kopier", + "Directory Up": "Mappe op", + "File Manager": "Fil Manager", + "Filename": "Filnavn:", + "Insert Image": "Indsæt billede", + "New Folder": "Ny mappe", + "Save": "Gem", + "You must select some text before making a new link.": "Vælg venligst noget tekst før du laver et nyt link." + }, + "QuickTag": { + "Cancel": "Annuller" + }, + "SaveSubmit": { + "Save": "Gem" + }, + "SetId": { + "Cancel": "Annuller", + "OK": "OK" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Ann uler", + "Dictionary": "Ordbog", + "Finished list of mispelled words": "Listen med stavefejl er gennemgået", + "I will open it in a new page.": "Jeg vil åbne det i en ny side.", + "Ignore": "Ignorer", + "Ignore all": "Ignorer alle", + "No mispelled words found with the selected dictionary.": "Der blev ikke fundet nogle stavefejl med den valgte ordbog.", + "OK": "OK", + "Original word": "Oprindeligt ord", + "Please confirm that you want to open this link": "Vil du følge dette link?", + "Please wait. Calling spell checker.": "Vent venligst. Henter stavekontrol.", + "Please wait: changing dictionary to": "Vent venligst: skifter ordbog til", + "Re-check": "Tjek igen", + "Replace": "Erstat", + "Replace all": "Erstat alle", + "Replace with": "Erstat med", + "Spell-check": "Stavekontrol", + "Suggestions": "Forslag", + "This will drop changes and quit spell checker. Please confirm.": "Alle dine ændringer vil gå tabt, vil du fortsætte?" + }, + "SuperClean": { + "Cancel": "Annuller", + "Clean up HTML": "Rengør HTML", + "General tidy up and correction of some problems.": "Generel oprydning og rettelse af diverse problemer.", + "OK": "OK", + "Please select from the following cleaning options...": "Vælg et eller flere af følgende rengøringsværktøjer...", + "Remove custom font sizes.": "Slet skriftstørrelser.", + "Remove custom text colors.": "Slet tekstfarver.", + "Remove custom typefaces (font \"styles\").": "Slet skriftsnit (font \"styles\").", + "Remove lang attributes.": "Slet lang attributter.", + "Replace directional quote marks with non-directional quote marks.": "Erstat directional anførselstegn med ikke-directional anførselstegn" + }, + "TableOperations": { + "All four sides": "Alle fire sider", + "Borders": "Kanter", + "Cancel": "Fortryd", + "Caption": "Titel", + "Cell Properties": "Celle egenskaber", + "Cell properties": "Celle egenskaber", + "Delete cell": "Slet celle", + "Delete column": "Slet kollonne", + "Delete row": "Slet række", + "Description": "Beskrivelse", + "Frames": "Udvendig", + "Insert cell after": "Indsæt celle efter", + "Insert cell before": "Indsæt celle før", + "Insert column after": "Indsæt kolonne efter", + "Insert column before": "Indsæt kolonne før", + "Insert row after": "Indsæt række efter", + "Insert row before": "Indsæt række før", + "Merge cells": "Sammensæt celler", + "No rules": "Ingen rammer", + "No sides": "Ingen sider", + "OK": "OK", + "Padding": "Margen", + "Please click into some cell": "Klik på en celle", + "Row Properties": "Række egenskaber", + "Row properties": "Række egenskaber", + "Rows": "Rækker:", + "Rules will appear between all rows and columns": "Rammer mellem rækker og kolonner", + "Rules will appear between columns only": "Kun rammer mellem kolonner", + "Rules will appear between rows only": "Kun rammer mellem rækker", + "Spacing": "Afstand", + "Spacing and padding": "Afstand og margen", + "Split column": "Opdel kolonne", + "Split row": "Opdel række", + "Summary": "Beskrivelse", + "Table Properties": "Tabel egenskaber", + "Table properties": "Tabel egenskaber", + "The bottom side only": "Kun i bunden", + "The left-hand side only": "Kun i højre side", + "The right and left sides only": "Kun i siderne", + "The right-hand side only": "Kun i venstre side", + "The top and bottom sides only": "Kun i top og bund", + "The top side only": "Kun i toppen", + "Xinha cowardly refuses to delete the last cell in row.": "Du kan ikke slette den sidste celle i en række.", + "Xinha cowardly refuses to delete the last column in table.": "Du kan ikke slette den sidste kolonne i en tabel.", + "Xinha cowardly refuses to delete the last row in table.": "Du kan ikke slette den sidste række i en tabel.", + "pixels": "pixel" + }, + "Template": { + "Cancel": "Annuller" + }, + "UnFormat": { + "Cancel": "Annuller", + "OK": "OK" + }, + "Xinha": { + "About this editor": "Om Xinha", + "Address": "Adresse", + "Background Color": "Baggrundsfarve", + "Bold": "Fed", + "Bulleted List": "Punktliste", + "Clean content pasted from Word": "Rens indhold kopieret fra Word", + "Clear Inline Font Specifications": "Fjern skrift valg", + "Clear MSOffice tags": "MSOffice filter", + "Close": "Luk", + "Constructing object": "Objekt registreres", + "Copy selection": "Kopier", + "Create Statusbar": "Opretter statuslinje", + "Create Toolbar": "Opretter værktøjslinje", + "Current style": "Anvendt stil", + "Cut selection": "Klip", + "Decrease Indent": "Formindsk indrykning", + "Direction left to right": "Tekst venstre mod højre", + "Direction right to left": "Tekst højre mod venstre", + "Finishing": "Afslutter", + "Font Color": "Skriftfarve", + "Formatted": "Formateret", + "Generate Xinha framework": "Xinha Framework genereres", + "Heading 1": "Overskrift 1", + "Heading 2": "Overskrift 2", + "Heading 3": "Overskrift 3", + "Heading 4": "Overskrift 4", + "Heading 5": "Overskrift 5", + "Heading 6": "Overskrift 6", + "Headings": "Overskrift 1 til 6", + "Help using editor": "Hjælp", + "Horizontal Rule": "Vandret streg", + "Increase Indent": "Forøg indrykning", + "Init editor size": "Størrelsen beregnes", + "Insert Table": "Indsæt tabel", + "Insert Web Link": "Indsæt hyperlink", + "Insert/Modify Image": "Indsæt/udskift billede", + "Insert/Overwrite": "Indsæt/Overskriv", + "Italic": "Kursiv", + "Justify Center": "Centrer", + "Justify Full": "Lige margener", + "Justify Left": "Venstrejuster", + "Justify Right": "Højrejuster", + "Keyboard shortcuts": "Tastaturgenveje", + "Loading in progress. Please wait!": "Editoren hentes ind. Vent venligst.", + "Loading plugin $plugin": "Plugin $plugin hentes", + "Normal": "Normal", + "Ordered List": "Ordnet liste", + "Paste from clipboard": "Indsæt", + "Path": "STi", + "Print document": "Udskriv dokument", + "Redoes your last action": "Gentag sidste ændring", + "Register plugin $plugin": "Plugin $plugin registreres", + "Remove formatting": "Fjern formatering", + "Save as": "Gem som", + "Select all": "Vælg alt", + "Set format to paragraph": "Formater afsnit", + "Split Block": "Del blok", + "Strikethrough": "Gennemstregning", + "Subscript": "Sænket skrift", + "Superscript": "Hævet skrift", + "The editor provides the following key combinations:": "Editoren kender følgende kombinationer:", + "Toggle Borders": "Tabelkanter til/fra", + "Toggle HTML Source": "HTML visning", + "Underline": "Understregning", + "Undoes your last action": "Fortryd sidste ændring", + "Would you like to clear font colours?": "Vil du fjerne skriftfarve valg", + "Would you like to clear font sizes?": "Vil du fjerne skriftstørrelse valg", + "Would you like to clear font typefaces?": "Vil du fjern skriftsnit valg", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Du er i TEXT mode. Brug [<>] knappen til at skifte til visuel editering.", + "insert linebreak": "Indsæt linjeskift", + "new paragraph": "Nyt afsnit" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Create a link": "", + "Current URL is": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "Are you sure you wish to remove this link?": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Cleaning Scope": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove emphasis and annotations.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Courier New": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Georgia": "", + "Impact": "", + "Loading Core": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Select Color": "", + "SHIFT-ENTER": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "D:": "", + "File List": "", + "Folder": "", + "GIF": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "D:": "<>", + "GIF": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "PNG": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "Guido code": "", + "GUIDO Code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Options": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Delete": "<>", + "File List": "<>", + "Insert": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "HTMLArea Spell Checker": "", + "Info": "", + "Learn": "", + "pliz weit ;-)": "", + "Revert": "", + "Spell Checker": "" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/de.js new file mode 100644 index 0000000000..6c6b4d8476 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/de.js @@ -0,0 +1,1567 @@ +// Xinha Language Combined Translation File +// +// LANG: "de", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/de.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'de'; +// _editor_lang_merged_file = '/xinha/lang/merged/de.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Abbreviation": "Abkürzung", + "Cancel": "Abbrechen", + "Delete": "Löschen", + "Expansion:": "Erklärung:", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "Über diesen Editor", + "Close": "Schließen" + }, + "BackgroundImage": { + "Cancel": "Abbrechen", + "Remove Current Background": "Aktuellen Hintergrund entfernen", + "Set Page Background Image": "Seiten-Hintergrundbild setzen", + "Set page background image": "Seiten-Hintergrundbild setzen" + }, + "CharCounter": { + "... in progress": "... in Bearbeitung", + "Chars": "Zeichen", + "HTML": "HTML", + "Words": "Worte" + }, + "CharacterMap": { + "Insert special character": "Sonderzeichen einfügen" + }, + "ClientsideSpellcheck": { + "Spell Check using ieSpell": "Englische Rechtschreibkontrolle mit ieSpell" + }, + "ColorPicker": { + "Click a color...": "Farbe wählen", + "Close": "Schließen", + "Color: ": "Farbe: ", + "OK": "OK", + "Sample": "Beispiel", + "Web Safe: ": "Web Safe: " + }, + "ContextMenu": { + "C_ell Properties...": "Zellenoptionen", + "Chec_k Link...": "Link testen", + "Copy": "Kopieren", + "Create a link": "Link erstellen", + "Current URL is": "Aktuelle URL ist", + "Cut": "Ausschneiden", + "De_lete Column": "Spalte löschen", + "Delete the current column": "Spalte löschen", + "Delete the current row": "Zeile löschen", + "How did you get here? (Please report!)": "Wie sind Sie denn hier hin gekommen? (Please report!)", + "I_nsert Row Before": "Zeile einfügen vor Position", + "In_sert Row After": "Zeile einügen nach Position", + "Insert C_olumn After": "Spalte einfügen nach Position", + "Insert _Column Before": "Spalte einfügen vor Position", + "Insert a new column after the current one": "Spalte einfügen nach der aktuellen Position", + "Insert a new column before the current one": "Spalte einfügen vor der aktuellen Position", + "Insert a new row after the current one": "Zeile einfügen nach der aktuellen Position", + "Insert a new row before the current one": "Zeile einfügen vor der aktuellen Position", + "Insert a paragraph after the current node": "Absatz einfügen hinter der aktuellen Position", + "Insert a paragraph before the current node": "Absatz einfügen vor der aktuellen Position", + "Insert paragraph after": "Absatz einfügen hinter Position", + "Insert paragraph before": "Absatz einfügen vor Position", + "Justify Center": "Zentriert", + "Justify Full": "Blocksatz", + "Justify Left": "Linksbündig", + "Justify Right": "Rechtsbündig", + "Link points to:": "Link zeigt auf:", + "Make lin_k...": "Link erstellen", + "Opens this link in a new window": "Diesen Link in neuem Fenster öffnen", + "Paste": "Einfügen", + "Please confirm that you want to remove this element:": "Wollen sie dieses Element wirklich entfernen?", + "Please confirm that you want to unlink this element.": "Wollen sie diesen Link wirklich entfernen?", + "Remove the $elem Element...": "Element $elem entfernen...", + "Remove this node from the document": "Dieses Element aus dem Dokument entfernen", + "Ro_w Properties...": "Zeilenoptionen", + "Show the Table Cell Properties dialog": "Zellenoptionen anzeigen", + "Show the Table Properties dialog": "Tabellenoptionen anzeigen", + "Show the Table Row Properties dialog": "Zeilenoptionen anzeigen", + "Show the image properties dialog": "Fenster für die Bildoptionen anzeigen", + "Unlink the current element": "Link auf Element entfernen", + "_Delete Row": "Zeile löschen", + "_Image Properties...": "Eigenschaften", + "_Modify Link...": "Link ändern", + "_Remove Link...": "Link entfernen", + "_Table Properties...": "Tabellenoptionen" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "Wollen Sie diesen Link wirklich entfernen?", + "Cancel": "Abbrechen", + "Insert/Modify Link": "Verknüpfung hinzufügen/ändern", + "New window (_blank)": "Neues Fenster (_blank)", + "None (use implicit)": "k.A. (implizit)", + "OK": "OK", + "Other": "Anderes", + "Same frame (_self)": "Selber Rahmen (_self)", + "Target:": "Ziel:", + "Title (tooltip):": "Titel (Tooltip):", + "Top frame (_top)": "Oberster Rahmen (_top)", + "URL:": "URL:" + }, + "DynamicCSS": { + "Choose stylesheet": "Wählen Sie einen StyleSheet aus", + "Default": "Standard", + "Undefined": "Nicht definiert" + }, + "EditTag": { + "Cancel": "Abbrechen", + "Edit HTML for selected text": "HTML im ausgewählten Bereich bearbeiten", + "OK": "OK", + "Tag Editor": "HTML tag Editor" + }, + "Equation": { + "AsciiMath Formula Input": "AsciiMath Formeleditor", + "Cancel": "Abbrechen", + "Formula Editor": "Formeleditor", + "Input": "Eingabe", + "OK": "OK", + "Preview": "Vorschau" + }, + "ExtendedFileManager": { + "Absbottom": "unten bündig", + "Absmiddle": "mittig", + "Align": "Anordnung", + "Alt": "Alt", + "Baseline": "Grundlinie", + "Border": "Rahmen", + "Border Color": "Rahmenfarbe", + "Bottom": "unten", + "Cancel": "Abbrechen", + "Clear": "Löschen", + "Color": "Farbe", + "Constrain Proportions": "Proportionen beibehalten", + "Copy": "Kopieren", + "Crop": "Beschneiden", + "Cut": "Ausschneiden", + "Directory": "Verzeichnis", + "Directory Up": "Aufwärts", + "Edit": "Bearbeiten", + "File Manager": "Dateimanager", + "Filename:": "Dateiname:", + "Filesize:": "Dateigröße:", + "Flip Horizontal": "hor. spiegeln", + "Flip Image": "Bild spiegeln", + "Flip Vertical": "ver. spiegeln", + "GIF format is not supported, image editing not supported.": "GIF-Format nicht unterstützt, bearbeiten nicht möglich.", + "Height": "Höhe", + "Height:": "Höhe:", + "Insert File Link": "Dateilink einfügen", + "Invalid base directory:": "Ungültiges Basisverzeichnis:", + "JPEG High": "JPEG hoch", + "JPEG Low": "JPEG niedrig", + "JPEG Medium": "JPEG mittel", + "Left": "links", + "Loading": "Laden", + "Lock": "Feststellen", + "Margin": "Aussenabstand", + "Marker": "Rahmen", + "Measure": "Maße", + "Middle": "zentriert", + "New Folder": "Neues Verzeichnis erstellen", + "New window (_blank)": "Neues Fenster (_blank)", + "No Files Found": "Keine Dateien gefunden", + "No Image Available": "Kein Bild verfügbar", + "None (use implicit)": "k.A. (implizit)", + "Not set": "nicht eingestellt", + "OK": "OK", + "Padding": "Innenabstand", + "Positioning of this image": "Anordnung dieses Bildes", + "Preview": "Vorschau", + "Quality:": "Qualität", + "Refresh": "Aktualisieren", + "Rename": "Umbenennen", + "Resize": "Größe ändern", + "Right": "rechts", + "Rotate": "Drehen", + "Rotate Image": "Bild drehen", + "Same frame (_self)": "Selber Rahmen (_self)", + "Save": "Speichern", + "Start X:": "Start X", + "Start Y:": "Start Y", + "Target Window": "Zielfenster", + "Texttop": "oben bündig", + "Title (tooltip)": "Titel (Tooltip)", + "Toggle marker color": "Farbe der Markierung umschalten", + "Top": "oben", + "Top frame (_top)": "Oberster Rahmen (_top)", + "Trash": "Papierkorb", + "Upload": "Hochladen", + "W:": "W:", + "Width": "Breite", + "Width:": "Breite:", + "You must select some text before making a new link.": "Bitte zuerst Text markieren.", + "Zoom": "Zoom" + }, + "Filter": { + "Filter": "Filter" + }, + "FindReplace": { + "Case sensitive search": "Groß-/Kleinschreibung", + "Clear": "Nächstes ersetzen", + "Done": "Fertig", + "Enter the text you want to find": "Geben Sie einen Text ein den Sie finden möchten", + "Find and Replace": "Suchen und ersetzen", + "Highlight": "Hervorheben", + "Inform a replacement word": "Geben sie einen Text zum ersetzen ein", + "Next": "Nächster", + "Options": "Optionen", + "Replace with:": "Ersetzen durch:", + "Search for:": "Suchen nach:", + "Substitute all occurrences": "alle Treffer ersetzen", + "Substitute this occurrence?": "Treffer ersetzen?", + "Undo": "Rückgängig", + "Whole words only": "Ganze Wörter", + "found item": "Treffer", + "found items": "alle Treffer", + "not found": "kein Teffer", + "replaced item": "ersetzter Treffer", + "replaced items": "ersetzte Treffer" + }, + "FormOperations": { + "Insert a Form.": "Email Form einfügen.", + "Insert a check box.": "Häkchenfeld einfügen", + "Insert a multi-line text field.": "Mehrzeiliges Textfeld einfügen.", + "Insert a radio button.": "Optionsfeld einfügen", + "Insert a select field.": "Auswahlfeld einfügen.", + "Insert a submit/reset button.": "Senden/zurücksetzen Schaltfläche", + "Insert a text, password or hidden field.": "Passwort oder unsichtbares Feld einfügen." + }, + "Forms": { + "Cancel": "Abbrechen", + "Image URL:": "Bild URL:", + "Name": "Name", + "OK": "OK", + "Options": "Optionen", + "Rows:": "Zeilen:", + "Size:": "Größe:", + "Text:": "Text:" + }, + "FullPage": { + "Alternate style-sheet:": "Alternativer Stylesheet:", + "Background color:": "Hintergrundfarbe:", + "Cancel": "Abbrechen", + "Character set:": "Zeichensatz", + "DOCTYPE:": "DOCTYPE:", + "Description:": "Beschreibung", + "Document properties": "Dokumenteigenschaften", + "Document title:": "Dokumenttitel:", + "Keywords:": "Schlüsselworte", + "OK": "OK", + "Primary style-sheet:": "Stylesheet:", + "Text color:": "Textfarbe:", + "UTF-8 (recommended)": "UTF-8 (empfohlen)" + }, + "FullScreen": { + "Maximize/Minimize Editor": "Editor maximieren/verkleinern" + }, + "HorizontalRule": { + "Alignment:": "Ausrichtung:", + "Cancel": "Abbrechen", + "Center": "zentriert", + "Color:": "Farbe", + "Height:": "Höhe:", + "Horizontal Rule": "Horizontale Linie", + "Insert/edit horizontal rule": "horizontale Linie einfügen/bearbeiten", + "Layout": "Gestaltung", + "Left": "links", + "No shading": "keine Schattierung", + "OK": "OK", + "Right": "rechts", + "Style": "Stil", + "Width:": "Breite:", + "percent": "Prozent", + "pixels": "Pixel" + }, + "HtmlTidy": { + "HTML Tidy": "HTML Tidy", + "Tidy failed. Check your HTML for syntax errors.": "Tidy fehlgeschlagen. Prüfen Sie den HTML Code nach Syntax-Fehlern." + }, + "ImageManager": { + "Absbottom": "unten bündig", + "Absmiddle": "mittig", + "Angle:": "Winkel:", + "Baseline": "Grundlinie", + "Bottom": "unten", + "Cancel": "Abbrechen", + "Clear": "Entfernen", + "Constrain Proportions": "Proportional", + "Crop": "Beschneiden", + "Directory": "Ordner", + "Directory Up": "übergeordneter Ordner", + "Edit": "bearbeiten", + "Filename:": "Dateiname:", + "Flip Horizontal": "horizontal spiegeln", + "Flip Image": "Bild spiegeln", + "Flip Vertical": "vertikal spiegeln", + "Folder Name:": "Ordnername:", + "GIF format is not supported, image editing not supported.": "GIF Format wird nicht unterstützt, Bildbearbeitung wird nicht unterstützt.", + "Height:": "Höhe:", + "Image Format": "Bildformat:", + "Insert Image": "Bild einfügen", + "Invalid base directory:": "Ungültiges Startverzeichnis:", + "JPEG High": "JPEG hoch", + "JPEG Low": "JPEG niedrig", + "JPEG Medium": "JPEG mittel", + "Left": "links", + "Lock": "Sperren", + "Marker": "Marker", + "Measure": "Abmessungen", + "Middle": "zentriert", + "New Folder": "Neuer Ordner", + "No Image Available": "Kein Bild verfügbar", + "No Images Found": "Kein Bild gefunden", + "Not set": "nicht eingestellt", + "OK": "OK", + "Positioning of this image": "Anordnung dieses Bildes", + "Quality:": "Qualität", + "Refresh": "Aktualisieren", + "Resize": "Größe ändern", + "Right": "rechts", + "Rotate": "Drehen", + "Rotate Image": "Bild drehen", + "Save": "Speichern", + "Start X:": "Start X", + "Start Y:": "Start Y", + "Texttop": "oben bündig", + "Top": "oben", + "Trash": "Müll", + "W:": "B:", + "Width:": "Breite:" + }, + "InlineStyler": { + "Background": "Hintergrund", + "Baseline": "Grundlinie", + "Border": "Rahmen", + "Bottom": "unten", + "Center": "zentriert", + "Char": "Zeichen", + "Collapsed borders": "Rahmen fallen zusammen", + "FG Color": "Vordergrundfarbe", + "Float": "Float", + "Height": "Höhe", + "Image URL": "Bild-URL", + "Justify": "Blocksatz", + "Layout": "Gestaltung", + "Left": "links", + "Margin": "Aussenabstand", + "Middle": "zentriert", + "None": "Keine", + "Padding": "Innenabstand", + "Right": "rechts", + "Text align": "Textausrichtung", + "Top": "oben", + "Vertical align": "Vertikale Ausrichtung", + "Width": "Breite", + "percent": "Prozent", + "pixels": "Pixel" + }, + "InsertAnchor": { + "Anchor name": "Name (ID)", + "Cancel": "Abbrechen", + "Delete": "Löschen", + "Insert Anchor": "Anker einfügen", + "OK": "OK" + }, + "InsertImage": { + "Absbottom": "unten bündig", + "Absmiddle": "mittig", + "Alignment:": "Ausrichtung:", + "Alternate text:": "Alternativer Text:", + "Baseline": "Grundlinie", + "Border thickness:": "Randstärke:", + "Bottom": "unten", + "Cancel": "Abbrechen", + "Enter the image URL here": "Bitte geben sie hier die Bild URL ein", + "For browsers that don't support images": "für Browser, die keine Bilder unterstützen", + "Horizontal padding": "horizontaler Inhaltsabstand", + "Horizontal:": "horizontal:", + "Image Preview:": "Bild Voransicht:", + "Image URL:": "Bild URL:", + "Insert Image": "Bild einfügen", + "Layout": "Gestaltung", + "Leave empty for no border": "leer lassen für keinen Rand", + "Left": "links", + "Middle": "zentriert", + "Not set": "nicht eingestellt", + "OK": "OK", + "Positioning of this image": "Anordnung dieses Bildes", + "Preview": "Vorschau", + "Preview the image in a new window": "Voransicht des Bildes in einem neuen Fenster", + "Right": "rechts", + "Spacing": "Abstand", + "Texttop": "oben bündig", + "Top": "oben", + "Vertical padding": "vertikaler Inhaltsabstand", + "Vertical:": "vertikal:", + "You must enter the URL": "Bitte geben Sie die URL ein" + }, + "InsertMarquee": { + "Background-Color:": "Hintergrundfarbe:", + "Behavior:": "Bewegung:", + "Cancel": "Abbrechen", + "Direction:": "Ausrichtung:", + "Height:": "Höhe:", + "Insert scrolling marquee": "Marquee einfügen", + "Left": "links", + "Name": "Name", + "OK": "OK", + "Right": "rechts", + "Speed Control": "Geschwindigkeitseinstellungen", + "Text:": "Text:", + "Width:": "Breite:" + }, + "InsertNote": { + "Cancel": "Abbrechen" + }, + "InsertPagebreak": { + "Page break": "Neue Seite" + }, + "InsertPicture": { + "Absbottom": "unten bündig", + "Absmiddle": "mittig", + "Alignment:": "Ausrichtung:", + "Alternate text:": "Alternativer Text:", + "Baseline": "Grundlinie", + "Border thickness:": "Randstärke:", + "Bottom": "unten", + "Cancel": "Abbrechen", + "Enter the image URL here": "Bitte geben sie hier die Bild URL ein", + "For browsers that don't support images": "für Browser, die keine Bilder unterstützen", + "Height:": "Höhe", + "Horizontal padding": "horizontaler Inhaltsabstand", + "Horizontal:": "horizontal:", + "Image Preview:": "Bild Voransicht:", + "Image URL:": "Bild URL:", + "Insert Image": "Bild einfügen", + "Layout": "Gestaltung", + "Leave empty for no border": "leer lassen für keinen Rand", + "Left": "links", + "Middle": "zentriert", + "Not set": "nicht eingestellt", + "OK": "OK", + "Open file in new window": "Datei in neuen Fenster anzeigen", + "Positioning of this image": "Anordnung dieses Bildes", + "Preview": "Vorschau", + "Preview the image in a new window": "Voransicht des Bildes in einem neuen Fenster", + "Right": "rechts", + "Size": "Größe", + "Spacing": "Abstand", + "Texttop": "oben bündig", + "Top": "oben", + "Upload file": "Datei hochladen", + "Vertical padding": "vertikaler Inhaltsabstand", + "Vertical:": "vertikal:", + "Width:": "Breite" + }, + "InsertSmiley": { + "Insert Smiley": "Smiley einfügen" + }, + "InsertSnippet": { + "Cancel": "Abbrechen", + "Hide preview": "Vorschau verbergen", + "Insert Snippet": "Snippet einfügen", + "Insert as": "Einfügen als", + "Show preview": "Vorschau zeigen", + "Variable": "Variable" + }, + "InsertSnippet2": { + "All Categories": "Alle Kategorien", + "Cancel": "Abbrechen", + "Filter": "Filter", + "HTML": "HTML", + "Insert Snippet": "Snippet einfügen", + "Insert as HTML": "Als HTML einfügen", + "Insert as template variable": "Als Template-Variable einfügen", + "Only search word beginning": "Nur nach Wortanfang suchen", + "Variable": "Variable" + }, + "InsertTable": { + "Absbottom": "unten bündig", + "Absmiddle": "mittig", + "Alignment:": "Ausrichtung:", + "Baseline": "Grundlinie", + "Border": "Rahmen", + "Border thickness:": "Randstärke:", + "Bottom": "unten", + "Cancel": "Abbrechen", + "Caption": "Überschrift", + "Cell padding:": "Innenabstand:", + "Cell spacing:": "Zellenabstand:", + "Cols:": "Spalten:", + "Em": "Geviert", + "Fixed width columns": "Spalten mit fester Breite", + "Insert Table": "Tabelle einfügen", + "Layout": "Gestaltung", + "Leave empty for no border": "leer lassen für keinen Rand", + "Left": "links", + "Middle": "zentriert", + "Not set": "nicht eingestellt", + "Number of columns": "Spaltenanzahl", + "Number of rows": "Zeilenanzahl", + "OK": "OK", + "Percent": "Prozent", + "Pixels": "Pixel", + "Positioning of this table": "Positionierung der Tabelle", + "Right": "rechts", + "Rows:": "Zeilen:", + "Space between adjacent cells": "Raum zwischen angrenzenden Zellen", + "Space between content and border in cell": "Raum zwischen Inhalt und Rand der Zelle", + "Spacing": "Abstand", + "Texttop": "oben bündig", + "Top": "oben", + "Width of the table": "Tabellenbreite", + "Width unit": "Größeneinheit", + "Width:": "Breite:", + "You must enter a number of columns": "Bitte geben Sie die Anzahl der Spalten an", + "You must enter a number of rows": "Bitte geben Sie die Anzahl der Zeilen an" + }, + "LangMarks": { + "— language —": "— Sprache —", + "English": "englisch", + "French": "französisch", + "Greek": "griechisch", + "Latin": "lateinisch", + "language select": "Sprachauswahl" + }, + "Linker": { + "Are you sure you wish to remove this link?": "Wollen Sie diesen Link wirklich entfernen?", + "Cancel": "Abbrechen", + "Email Address:": "Email Adresse", + "Email Link": "Email Link", + "Insert/Modify Link": "Verknüpfung hinzufügen/ändern", + "Message Template:": "Nachrichten Vorlage:", + "Name:": "Name:", + "New Window": "Neues Fenster", + "OK": "OK", + "Ordinary Link": "Standard Link", + "Popup Window": "Pop-Up Fenster", + "Remove Link": "Link entfernen", + "Same Window (jump out of frames)": "Selbes Fenster (ganzer Bereich)", + "Size:": "Größe:", + "Subject:": "Betreff:", + "Target:": "Ziel:", + "URL Link": "URL Adresse", + "URL:": "URL:", + "You must select some text before making a new link.": "Sie müssen einen Text markieren um einen Link zu erstellen" + }, + "ListType": { + "Choose list style type (for ordered lists)": "Wählen Sie einen Typ für die Nummerierung aus", + "Decimal numbers": "Zahlen", + "Lower greek letters": "Griechisch", + "Lower latin letters": "Zeichen klein", + "Lower roman numbers": "Römisch klein", + "Upper latin letters": "Zeichen groß", + "Upper roman numbers": "Römisch groß" + }, + "MootoolsFileManager": { + "Insert File Link": "Dateilink einfügen", + "You must select some text before making a new link.": "Sie müssen einen Text markieren um einen Link zu erstellen" + }, + "NoteServer": { + "Add GUIDO Code in a textbox on the page": "GUIDO Code in einer Textbox auf der Seite anzeigen", + "Add MIDI link to allow students to hear the music": "MIDI-Link hinzufügen um Studenten das hören der Musik zu ermöglichen", + "Cancel": "Abbrechen", + "Format": "Format", + "Guido code": "Guido code", + "Image Preview": "Bild Voransicht", + "Image in applet": "Bild im Applet", + "Insert GUIDO Music Notation": "Einfügung einer GUIDO Musik-Tonfolge", + "MIDI File": "MIDI Datei", + "OK": "OK", + "Options": "Einstellungen", + "Preview": "Voransicht", + "Preview the image in a new window": "Voransicht des Bildes in einem neuen Fenster", + "Source Code": "Quell-Code", + "Zoom": "Zoom" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Aus Sicherheitsgründen dürfen Skripte normalerweise nicht auf Ausschneiden/Kopieren/Einfügen zugreifen. Benutzen Sie bitte die entsprechenden Tastatur-Kommandos (Strg + x/c/v)." + }, + "PSLocal": { + "Cancel": "Abbrechen" + }, + "PasteText": { + "Cancel": "Abbrechen", + "Insert text in new paragraph": "Neue Absätze eifügen", + "OK": "OK", + "Paste as Plain Text": "unformatierten Text einfügen" + }, + "PersistentStorage": { + "Cancel": "Abbrechen", + "Copy": "Kopieren", + "Delete": "Löschen", + "Directory Up": "übergeordneter Ordner", + "File Manager": "Dateimanager", + "Filename": "Dateiname:", + "Insert Image": "Bild einfügen", + "New Folder": "Neuer Ordner", + "Save": "Speichern", + "You must select some text before making a new link.": "Sie müssen einen Text markieren um einen Link zu erstellen" + }, + "QuickTag": { + "ATTRIBUTES": "ATTRIBUTES", + "Cancel": "Cancel", + "Colors": "Colors", + "Enter the TAG you want to insert": "Enter the TAG you want to insert", + "No CSS class avaiable": "No CSS classes avaiable", + "OPTIONS": "OPTIONS", + "Ok": "Ok", + "Quick Tag Editor": "Quick TAG Editor", + "TAGs": "TAGs", + "There are some unclosed quote": "There are some unclosed quote", + "This attribute already exists in the TAG": "This attribute already exists in the TAG", + "You have to select some text": "You have to select some text" + }, + "SaveSubmit": { + "Ready": "Fertig", + "Save": "Speichern", + "Saving...": "Speichern...", + "in progress": "in Arbeit" + }, + "SetId": { + "Cancel": "Abbrechen", + "Delete": "Löschen", + "OK": "OK", + "Set Id and Name": "Objekt ID und Name einfügen" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "“", + "ClosingSingleQuote": "‘", + "Convert all quotes and dashes in the current document": "Alle Anführungszeichen und Gedankenstriche umwandeln", + "Enable automatic replacements": "Automatische Ersetzung aktivieren", + "OK": "OK", + "OpeningDoubleQuotes": "„", + "OpeningSingleQuote": "‚", + "SmartReplace Settings": "SmartReplace Einstellungen" + }, + "SpellChecker": { + "Cancel": "Abbrechen", + "Dictionary": "Woerterbuch", + "Finished list of mispelled words": "Liste der nicht bekannten Woerter", + "I will open it in a new page.": "Wird auf neuer Seite geoeffnet", + "Ignore": "Ignorieren", + "Ignore all": "Alle ignorieren", + "No mispelled words found with the selected dictionary.": "Keine falschen Woerter mit gewaehlten Woerterbuch gefunden", + "OK": "OK", + "Original word": "Original Wort", + "Please confirm that you want to open this link": "Wollen Sie diesen Link oeffnen", + "Please wait. Calling spell checker.": "Bitte warten. Woerterbuch wird durchsucht.", + "Please wait: changing dictionary to": "Bitte warten: Woerterbuch wechseln zu", + "Re-check": "Neuueberpruefung", + "Replace": "Ersetzen", + "Replace all": "Alle ersetzen", + "Replace with": "Ersetzen mit", + "Spell-check": "Ueberpruefung", + "Suggestions": "Vorschlag", + "This will drop changes and quit spell checker. Please confirm.": "Aenderungen werden nicht uebernommen. Bitte bestaettigen." + }, + "Stylist": { + "Styles": "Stile" + }, + "SuperClean": { + "Cancel": "Abbrechen", + "Clean up HTML": "HTML säubern", + "General tidy up and correction of some problems.": "Allgemeines aufräumen und Korrektur einiger Probleme.", + "OK": "OK", + "Please select from the following cleaning options...": "Bitte Optionen auswählen...", + "Please stand by while cleaning in process...": "Bitte warten Sie, während die Säuberung läuft...", + "Remove custom font sizes.": "Schriftgrößen entfernen (font size).", + "Remove custom text colors.": "Schriftfarben entfernen (font color).", + "Remove custom typefaces (font \"styles\").": "Schriftarten entfernen (font face).", + "Remove lang attributes.": "Sprachattribute entfernen." + }, + "TableOperations": { + "All four sides": "Alle 4 Seiten", + "Borders": "Rahmen", + "Cancel": "Abbrechen", + "Caption": "Überschrift", + "Cell Properties": "Zellenoptionen", + "Cell properties": "Zellenoptionen", + "Delete cell": "Zelle löschen", + "Delete column": "Spalte löschen", + "Delete row": "Reihe loeschen", + "Description": "Beschreibung", + "Frames": "Rahmen", + "Insert cell after": "Zelle einfügen nach", + "Insert cell before": "Zelle einfügen vor", + "Insert column after": "Spalte einfügen nach", + "Insert column before": "Spalte einfügen vor", + "Insert row after": "Reihe einfügen nach", + "Insert row before": "Reihe einfügen vor", + "Merge cells": "Zellen zusammenfügen", + "No rules": "Keine Gitterlinien", + "No sides": "Keine Ränder", + "OK": "OK", + "Padding": "Innenabstand", + "Please click into some cell": "Bitte eine Zelle auswählen", + "Row Properties": "Zeilenoptionen", + "Row properties": "Reiheneinstellungen", + "Rows": "Zeilen:", + "Rules will appear between all rows and columns": "Linien zwischen Zeilen und Spalten", + "Rules will appear between columns only": "Linien zwischen Spalten", + "Rules will appear between rows only": "Linien zwischen Zeilen", + "Spacing": "Abstand", + "Spacing and padding": "Abstände", + "Split column": "Spalte teilen", + "Split row": "Reihen aufteilen", + "Summary": "Zusammenfassung", + "Table Properties": "Tabellenoptionen", + "Table properties": "Tabellenoptionen", + "The bottom side only": "Nur untere Seite", + "The left-hand side only": "Nur linke Seite", + "The right and left sides only": "Nur linke und rechte Seite", + "The right-hand side only": "Nur rechte Seite", + "The top and bottom sides only": "Nur obere und untere Seite", + "The top side only": "Nur obere Seite", + "Xinha cowardly refuses to delete the last cell in row.": "Letzte Zelle in dieser Zeile kann nicht gelöscht werden", + "Xinha cowardly refuses to delete the last column in table.": "Letzte Spalte in dieser Tabelle kann nicht gelöscht werden", + "Xinha cowardly refuses to delete the last row in table.": "Letzte Reihe in dieser Tabelle kann nicht gelöscht werden", + "pixels": "Pixel" + }, + "Template": { + "Cancel": "Abbrechen", + "Insert template": "Template einfügen" + }, + "UnFormat": { + "All": "Alles", + "All HTML:": "Ganzes HTML:", + "Cancel": "Abbrechen", + "Cleaning Area": "Reinigungsbereich", + "Cleaning options": "Reinigungsoptionen", + "Formatting:": "Formatierung:", + "OK": "OK", + "Page Cleaner": "Seite bereinigen", + "Select which types of formatting you would like to remove.": "Wählen Sie aus welche Formatierungen Sie entfernen wollen.", + "Selection": "Ausgewählter Bereich" + }, + "Xinha": { + "— format —": "— Format —", + "About this editor": "Über diesen Editor", + "Address": "Adresse", + "Background Color": "Hindergrundfarbe", + "Bold": "Fett", + "Bulleted List": "Aufzählungsliste", + "Clean content pasted from Word": "Von Word eingefügter Text bereinigen", + "Clear Inline Font Specifications": "Zeichensatz Formatierungen entfernen", + "Clear MSOffice tags": "MSOffice filter", + "Close": "Schließen", + "Constructing object": "Objekt wird generiert", + "Copy selection": "Kopieren", + "Create Statusbar": "Statusleiste wird generiert", + "Create Toolbar": "Werkzeugleiste wird generiert", + "Current style": "Derzeitiger Stil", + "Cut selection": "Ausschneiden", + "Decrease Indent": "Einzug verkleinern", + "Direction left to right": "Textrichtung von Links nach Rechts", + "Direction right to left": "Textrichtung von Rechts nach Links", + "Finishing": "Laden wird abgeschlossen", + "Font Color": "Schriftfarbe", + "Formatted": "Formatiert", + "Generate Xinha framework": "Xinha Framework wird generiert", + "Heading 1": "Überschrift 1", + "Heading 2": "Überschrift 2", + "Heading 3": "Überschrift 3", + "Heading 4": "Überschrift 4", + "Heading 5": "Überschrift 5", + "Heading 6": "Überschrift 6", + "Headings": "Überschrift Typ 1 bis 6", + "Help using editor": "Hilfe", + "Horizontal Rule": "Horizontale Linie", + "Increase Indent": "Einzug vergrößern", + "Init editor size": "Größe wird berechnet", + "Insert Table": "Tabelle einfügen", + "Insert Web Link": "Hyperlink einfügen", + "Insert/Modify Image": "Bild einfügen/verändern", + "Insert/Overwrite": "Einfügen/Überschreiben", + "Italic": "Kursiv", + "Justify Center": "Zentriert", + "Justify Full": "Blocksatz", + "Justify Left": "Linksbündig", + "Justify Right": "Rechtsbündig", + "Keyboard shortcuts": "Tastaturkürzel", + "Loading in progress. Please wait!": "Editor wird geladen. Bitte warten !", + "Loading plugin $plugin": "Plugin $plugin wird geladen", + "Normal": "Normal (Absatz)", + "Ordered List": "Nummerierte Liste", + "Paste from clipboard": "Einfügen aus der Zwischenablage", + "Path": "Pfad", + "Print document": "Dokument ausdrucken", + "Redoes your last action": "Wiederholen", + "Register plugin $plugin": "Plugin $plugin wird registriert", + "Remove formatting": "Formatierung entfernen", + "Save as": "speichern unter", + "Select all": "Alles markieren", + "Set format to paragraph": "Setze Formatierung auf Absatz", + "Split Block": "Block teilen", + "Strikethrough": "Durchgestrichen", + "Subscript": "Tiefgestellt", + "Superscript": "Hochgestellt", + "The editor provides the following key combinations:": "Der Editor unterstützt die folgenden kombinationen:", + "Toggle Borders": "Tabellenränder ein/ausblenden", + "Toggle HTML Source": "HTML Quelltext ein/ausschalten", + "Underline": "Unterstrichen", + "Undoes your last action": "Rückgängig", + "Would you like to clear font colours?": "Wollen sie Zeichensatzfarben entfernen", + "Would you like to clear font sizes?": "Wollen Sie Zeichensatzgrößen entfernen", + "Would you like to clear font typefaces?": "Wollen Sie Zeichensatztypen entfernen", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Sie sind im Text-Modus. Benutzen Sie den [<>] Button, um in den visuellen Modus (WYSIWIG) zu gelangen.", + "insert linebreak": "Harter Umbruch einfügen", + "new paragraph": "Neuer Absatz(Paragraph)" + }, + "__NEW_TRANSLATIONS__": { + "ContextMenu": { + "Delete Cell": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Merge Cells": "" + }, + "CreateLink": { + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "EditTag": { + "Edit Tag By Peg": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`delta`": "", + "`Delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`gamma`": "", + "`Gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`larr`": "", + "`lArr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`psi`": "", + "`Psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`theta`": "", + "`Theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "harr": "", + "hArr": "", + "hata": "", + "if": "", + "in": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "lArr": "", + "larr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "Pi": "", + "pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "Sigma": "", + "sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "theta": "", + "Theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "" + }, + "FullPage": { + "...": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "western (ISO-8859-1)": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/Edit Horizontal Rule": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page Break": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "This is an information about something": "" + }, + "InsertSnippet2": { + "InsertSnippet for Xinha": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "" + }, + "LangMarks": { + "', '": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Location Bar:": "", + "Menu Bar:": "", + "PopupWindow": "", + "Resizeable:": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Title:": "", + "Toolbar:": "" + }, + "Opera": { + "MARK": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id/Name": "", + "Set ID/Name": "" + }, + "SmartReplace": { + "SmartReplace": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Cleaning Scope": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove emphasis and annotations.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Courier New": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Georgia": "", + "Impact": "", + "Loading Core": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Select Color": "", + "SHIFT-ENTER": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Set Background": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "D:": "", + "File List": "", + "Folder": "", + "GIF": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Image List": "", + "Keyword": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "D:": "<>", + "GIF": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "PNG": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Continuous": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Name/ID:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "GUIDO Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "File List": "<>", + "Insert": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "HTMLArea Spell Checker": "", + "Info": "", + "Learn": "", + "pliz weit ;-)": "", + "Revert": "", + "Spell Checker": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ee.js new file mode 100644 index 0000000000..f9d0872eb7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ee.js @@ -0,0 +1,1573 @@ +// Xinha Language Combined Translation File +// +// LANG: "ee", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/ee.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'ee'; +// _editor_lang_merged_file = '/xinha/lang/merged/ee.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Loobu", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "Teave toimeti kohta" + }, + "BackgroundImage": { + "Cancel": "Loobu" + }, + "ColorPicker": { + "OK": "OK" + }, + "ContextMenu": { + "Justify Center": "Joonda keskele", + "Justify Full": "Rööpjoonda", + "Justify Left": "Joonda vasakule", + "Justify Right": "Joonda paremale" + }, + "CreateLink": { + "Cancel": "Loobu", + "OK": "OK" + }, + "EditTag": { + "Cancel": "Loobu", + "OK": "OK" + }, + "Equation": { + "Cancel": "Loobu", + "OK": "OK" + }, + "ExtendedFileManager": { + "Cancel": "Loobu", + "OK": "OK" + }, + "Forms": { + "Cancel": "Loobu", + "OK": "OK" + }, + "FullPage": { + "Cancel": "Loobu", + "OK": "OK" + }, + "HorizontalRule": { + "Cancel": "Loobu", + "Horizontal Rule": "Horisontaaljoon", + "OK": "OK" + }, + "ImageManager": { + "Cancel": "Loobu", + "OK": "OK" + }, + "InsertAnchor": { + "Cancel": "Loobu", + "OK": "OK" + }, + "InsertImage": { + "Cancel": "Loobu", + "OK": "OK" + }, + "InsertMarquee": { + "Cancel": "Loobu", + "OK": "OK" + }, + "InsertNote": { + "Cancel": "Loobu" + }, + "InsertPicture": { + "Cancel": "Loobu", + "OK": "OK" + }, + "InsertSnippet": { + "Cancel": "Loobu" + }, + "InsertSnippet2": { + "Cancel": "Loobu" + }, + "InsertTable": { + "Cancel": "Loobu", + "Insert Table": "Lisa tabel", + "OK": "OK" + }, + "Linker": { + "Cancel": "Loobu", + "OK": "OK" + }, + "NoteServer": { + "Cancel": "Loobu", + "OK": "OK" + }, + "PSLocal": { + "Cancel": "Loobu" + }, + "PasteText": { + "Cancel": "Loobu", + "OK": "OK" + }, + "PersistentStorage": { + "Cancel": "Loobu" + }, + "QuickTag": { + "Cancel": "Loobu" + }, + "SetId": { + "Cancel": "Loobu", + "OK": "OK" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Loobu", + "OK": "OK" + }, + "SuperClean": { + "Cancel": "Loobu", + "OK": "OK" + }, + "TableOperations": { + "Cancel": "Loobu", + "OK": "OK" + }, + "Template": { + "Cancel": "Loobu" + }, + "UnFormat": { + "Cancel": "Loobu", + "OK": "OK" + }, + "Xinha": { + "About this editor": "Teave toimeti kohta", + "Background Color": "Tausta värv", + "Bold": "Paks", + "Bulleted List": "Täpploend", + "Copy selection": "Kopeeri", + "Current style": "Kirjastiil", + "Cut selection": "Lõika", + "Decrease Indent": "Vähenda taanet", + "Font Color": "Fondi värv", + "Help using editor": "Spikker", + "Horizontal Rule": "Horisontaaljoon", + "Increase Indent": "Suurenda taanet", + "Insert Table": "Lisa tabel", + "Insert Web Link": "Lisa viit", + "Insert/Modify Image": "Lisa pilt", + "Italic": "Kursiiv", + "Justify Center": "Joonda keskele", + "Justify Full": "Rööpjoonda", + "Justify Left": "Joonda vasakule", + "Justify Right": "Joonda paremale", + "Ordered List": "Nummerdus", + "Paste from clipboard": "Kleebi", + "Path": "Path", + "Redoes your last action": "Tee uuesti", + "Strikethrough": "Läbikriipsutatud", + "Subscript": "Allindeks", + "Superscript": "Ülaindeks", + "Toggle HTML Source": "HTML/tavaline vaade", + "Underline": "Allakriipsutatud", + "Undoes your last action": "Võta tagasi", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Sa oled tekstireziimis. Kasuta nuppu [<>] lülitamaks tagasi WYSIWIG reziimi." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top": "<>", + "Top frame (_top)": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + "Open file in new window": "", + " Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/el.js new file mode 100644 index 0000000000..5ae6836cf7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/el.js @@ -0,0 +1,1575 @@ +// Xinha Language Combined Translation File +// +// LANG: "el", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/el.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'el'; +// _editor_lang_merged_file = '/xinha/lang/merged/el.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Ακύρωση", + "OK": "Εντάξει" + }, + "AboutBox": { + "About this editor": "Πληροφορίες" + }, + "BackgroundImage": { + "Cancel": "Ακύρωση" + }, + "ColorPicker": { + "Color: ": "Χρώμα", + "OK": "Εντάξει" + }, + "ContextMenu": { + "C_ell Properties...": "Ιδιότητες κελιού...", + "Chec_k Link...": "Έλεγχος συνδέσμων...", + "Copy": "Αντιγραφή", + "Create a link": "Δημιουργία συνδέσμου", + "Current URL is": "Το τρέχων URL είναι", + "Cut": "Αποκοπή", + "De_lete Column": "Διαγραφή στήλης", + "Delete the current column": "Διαγραφή επιλεγμένης στήλης", + "Delete the current row": "Διαγραφή επιλεγμένης γραμμής", + "How did you get here? (Please report!)": "Πώς ήρθατε μέχρι εδώ; (Παρακαλούμε αναφέρετε το!)", + "I_nsert Row Before": "Εισαγωγή γραμμής πριν", + "In_sert Row After": "Εισαγωγή γραμμής μετά", + "Insert C_olumn After": "Εισαγωγή στήλης μετά", + "Insert _Column Before": "Εισαγωγή στήλης πριν", + "Insert a new column after the current one": "Εισαγωγή νέας στήλης μετά την επιλεγμένη", + "Insert a new column before the current one": "Εισαγωγή νέας στήλης πριν την επιλεγμένη", + "Insert a new row after the current one": "Εισαγωγή μιας νέας γραμμής μετά την επιλεγμένη", + "Insert a new row before the current one": "Εισαγωγή μιας νέας γραμμής πριν την επιλεγμένη", + "Justify Center": "Στοίχηση Κέντρο", + "Justify Full": "Πλήρης Στοίχηση", + "Justify Left": "Στοίχηση Αριστερά", + "Justify Right": "Στοίχηση Δεξιά", + "Link points to:": "Το τρέχων URL είναι", + "Make lin_k...": "Δημιουργία συνδέσμου...", + "Opens this link in a new window": "Ανοίγει αυτό τον σύνδεσμο σε ένα νέο παράθυρο", + "Paste": "Επικόλληση", + "Please confirm that you want to unlink this element.": "Είστε βέβαιος πως θέλετε να αφαιρέσετε τον σύνδεσμο από αυτό το στοιχείο:", + "Ro_w Properties...": "Ιδιότητες γραμμής...", + "Show the Table Cell Properties dialog": "Ιδιότητες κελιού...", + "Show the Table Properties dialog": "Εμφάνιση διαλόγου με τις Ιδιότητες Πίνακα", + "Show the Table Row Properties dialog": "Ιδιότητες γραμμής...", + "Show the image properties dialog": "Ιδιότητες Εικόνας...", + "Unlink the current element": "Αφαίρεση συνδέσμου από το παρών στοιχείο", + "_Delete Row": "Διαγραφή γραμμής", + "_Image Properties...": "Ιδιότητες Εικόνας...", + "_Modify Link...": "Τροποποίηση συνδέσμου...", + "_Remove Link...": "Διαγραφή συνδέσμου...", + "_Table Properties...": "Ιδιότητες πίνακα..." + }, + "CreateLink": { + "Cancel": "Ακύρωση", + "Insert/Modify Link": "Εισαγωγή/Τροποποίηση σύνδεσμου", + "New window (_blank)": "Νέο παράθυρο (_blank)", + "None (use implicit)": "Κανένα (χρήση απόλυτου)", + "OK": "Εντάξει", + "Other": "Αλλο", + "Same frame (_self)": "Ίδιο frame (_self)", + "Target:": "Target:", + "Title (tooltip):": "Τίτλος (tooltip):", + "Top frame (_top)": "Πάνω frame (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "Ακύρωση", + "OK": "Εντάξει" + }, + "Equation": { + "Cancel": "Ακύρωση", + "OK": "Εντάξει" + }, + "ExtendedFileManager": { + "Align": "Στοίχηση", + "Baseline": "Baseline", + "Border": "Περίγραμμα", + "Bottom": "Κάτω μέρος", + "Cancel": "Ακύρωση", + "Color": "Χρώμα", + "Copy": "Αντιγραφή", + "Cut": "Αποκοπή", + "Height": "Ύψος", + "Height:": "Ύψος", + "Left": "Αριστερά", + "Margin": "Περιθώριο", + "Middle": "Κέντρο", + "New window (_blank)": "Νέο παράθυρο (_blank)", + "None (use implicit)": "Κανένα (χρήση απόλυτου)", + "OK": "Εντάξει", + "Padding": "Εσοχή", + "Right": "Δεξιά", + "Same frame (_self)": "Ίδιο frame (_self)", + "Title (tooltip)": "Τίτλος (tooltip):", + "Top": "Πάνω", + "Top frame (_top)": "Πάνω frame (_top)", + "Width": "Πλάτος", + "Width:": "Πλάτος" + }, + "Forms": { + "Cancel": "Ακύρωση", + "Image URL:": "URL εικόνας", + "OK": "Εντάξει" + }, + "FullPage": { + "Cancel": "Ακύρωση", + "Description:": "Περιγραφή", + "OK": "Εντάξει" + }, + "HorizontalRule": { + "Cancel": "Ακύρωση", + "Center": "Κέντρο", + "Color:": "Χρώμα", + "Height:": "Ύψος", + "Horizontal Rule": "Οριζόντια Γραμμή", + "Layout": "Διάταξη", + "Left": "Αριστερά", + "OK": "Εντάξει", + "Right": "Δεξιά", + "Width:": "Πλάτος", + "percent": "τοις εκατόν", + "pixels": "pixels" + }, + "ImageManager": { + "Baseline": "Baseline", + "Bottom": "Κάτω μέρος", + "Cancel": "Ακύρωση", + "Height:": "Ύψος", + "Left": "Αριστερά", + "Middle": "Κέντρο", + "OK": "Εντάξει", + "Right": "Δεξιά", + "Top": "Πάνω", + "Width:": "Πλάτος" + }, + "InlineStyler": { + "Background": "Φόντο", + "Baseline": "Baseline", + "Border": "Περίγραμμα", + "Bottom": "Κάτω μέρος", + "Center": "Κέντρο", + "Char": "Χαρακτήρας", + "Collapsed borders": "Συμπτυγμένα περιγράμματα", + "FG Color": "Χρώμα αντικειμένων", + "Float": "Float", + "Height": "Ύψος", + "Image URL": "URL εικόνας", + "Justify": "Πλήρης στοίχηση", + "Layout": "Διάταξη", + "Left": "Αριστερά", + "Margin": "Περιθώριο", + "Middle": "Κέντρο", + "None": "Τίποτα", + "Padding": "Εσοχή", + "Right": "Δεξιά", + "Text align": "Στοίχηση κειμένου", + "Top": "Πάνω", + "Vertical align": "Κατακόρυφη στοίχηση", + "Width": "Πλάτος", + "percent": "τοις εκατόν", + "pixels": "pixels" + }, + "InsertAnchor": { + "Cancel": "Ακύρωση", + "OK": "Εντάξει" + }, + "InsertImage": { + "Baseline": "Baseline", + "Bottom": "Κάτω μέρος", + "Cancel": "Ακύρωση", + "Image URL:": "URL εικόνας", + "Layout": "Διάταξη", + "Left": "Αριστερά", + "Middle": "Κέντρο", + "OK": "Εντάξει", + "Right": "Δεξιά", + "Spacing": "Αποστάσεις", + "Top": "Πάνω" + }, + "InsertMarquee": { + "Cancel": "Ακύρωση", + "Height:": "Ύψος", + "Left": "Αριστερά", + "OK": "Εντάξει", + "Right": "Δεξιά", + "Width:": "Πλάτος" + }, + "InsertNote": { + "Cancel": "Ακύρωση" + }, + "InsertPicture": { + "Baseline": "Baseline", + "Bottom": "Κάτω μέρος", + "Cancel": "Ακύρωση", + "Height:": "Ύψος", + "Image URL:": "URL εικόνας", + "Layout": "Διάταξη", + "Left": "Αριστερά", + "Middle": "Κέντρο", + "OK": "Εντάξει", + "Right": "Δεξιά", + "Spacing": "Αποστάσεις", + "Top": "Πάνω", + "Width:": "Πλάτος" + }, + "InsertSnippet": { + "Cancel": "Ακύρωση" + }, + "InsertSnippet2": { + "Cancel": "Ακύρωση" + }, + "InsertTable": { + "Baseline": "Baseline", + "Border": "Περίγραμμα", + "Bottom": "Κάτω μέρος", + "Cancel": "Ακύρωση", + "Caption": "Λεζάντα", + "Insert Table": "Εισαγωγή Πίνακα", + "Layout": "Διάταξη", + "Left": "Αριστερά", + "Middle": "Κέντρο", + "OK": "Εντάξει", + "Percent": "τοις εκατόν", + "Pixels": "pixels", + "Right": "Δεξιά", + "Spacing": "Αποστάσεις", + "Top": "Πάνω", + "Width:": "Πλάτος" + }, + "Linker": { + "Cancel": "Ακύρωση", + "Insert/Modify Link": "Εισαγωγή/Τροποποίηση σύνδεσμου", + "OK": "Εντάξει", + "Target:": "Target:", + "URL:": "URL:" + }, + "NoteServer": { + "Cancel": "Ακύρωση", + "OK": "Εντάξει" + }, + "PSLocal": { + "Cancel": "Ακύρωση" + }, + "PasteText": { + "Cancel": "Ακύρωση", + "OK": "Εντάξει" + }, + "PersistentStorage": { + "Cancel": "Ακύρωση", + "Copy": "Αντιγραφή" + }, + "QuickTag": { + "Cancel": "Ακύρωση" + }, + "SetId": { + "Cancel": "Ακύρωση", + "OK": "Εντάξει" + }, + "SmartReplace": { + "OK": "Εντάξει" + }, + "SpellChecker": { + "Cancel": "Ακύρωση", + "OK": "Εντάξει" + }, + "SuperClean": { + "Cancel": "Ακύρωση", + "OK": "Εντάξει" + }, + "TableOperations": { + "All four sides": "Και οι 4 πλευρές", + "Borders": "Περιγράμματα", + "Cancel": "Ακύρωση", + "Caption": "Λεζάντα", + "Cell Properties": "Ιδιότητες Κελιού", + "Cell properties": "Ιδιότητες κελιού", + "Delete cell": "Διαγραφή κελιού", + "Delete column": "Διαγραφή στήλης", + "Delete row": "Διαγραφή γραμμής", + "Description": "Περιγραφή", + "Frames": "Frames", + "Insert cell after": "Εισαγωγή κελιού μετά", + "Insert cell before": "Εισαγωγή κελιού πριν", + "Insert column after": "Εισαγωγή στήλης μετά", + "Insert column before": "Εισαγωγή στήλης πριν", + "Insert row after": "Εισαγωγή γραμμής πριν", + "Insert row before": "Εισαγωγή γραμμής μετά", + "Merge cells": "Συγχώνευση κελιών", + "No rules": "Χωρίς Γραμμές", + "No sides": "No sides", + "OK": "Εντάξει", + "Padding": "Εσοχή", + "Please click into some cell": "Κάντε κλικ μέσα σε κάποιο κελί", + "Row Properties": "Ιδιότητες Γραμμής", + "Row properties": "Ιδιότητες γραμμής", + "Rules will appear between all rows and columns": "Γραμμές θα εμφανίζονται μεταξύ όλων των γραμμών και στηλών", + "Rules will appear between columns only": "Γραμμές θα εμφανίζονται μόνο μεταξύ στηλών", + "Rules will appear between rows only": "Γραμμές θα εμφανίζονται μόνο μεταξύ γραμμών", + "Spacing": "Αποστάσεις", + "Spacing and padding": "Αποστάσεις και εσοχές", + "Split column": "Διαίρεση στήλης", + "Split row": "Διαίρεση γραμμής", + "Summary": "Σύνοψη", + "Table Properties": "Ιδιότητες πίνακα", + "Table properties": "Ιδιότητες πίνακα", + "The bottom side only": "Η κάτω πλευρά μόνο", + "The left-hand side only": "Η αριστερή πλευρά μόνο", + "The right and left sides only": "Οι δεξιές και αριστερές πλευρές μόνο", + "The right-hand side only": "Η δεξιά πλευρά μόνο", + "The top and bottom sides only": "Οι πάνω και κάτω πλευρές μόνο", + "The top side only": "Η πάνω πλευρά μόνο", + "Xinha cowardly refuses to delete the last cell in row.": "Δεν μπορεί να διαγραφεί το τελευταίο κελί σε μια γραμμή.", + "Xinha cowardly refuses to delete the last column in table.": "Δεν μπορεί να διαγραφεί η τελευταία στήλη σε ένα πίνακα.", + "Xinha cowardly refuses to delete the last row in table.": "Δεν μπορεί να διαγραφεί η τελευταία γραμμή σε ένα πίνακα.", + "pixels": "pixels" + }, + "Template": { + "Cancel": "Ακύρωση" + }, + "UnFormat": { + "Cancel": "Ακύρωση", + "OK": "Εντάξει" + }, + "Xinha": { + "About this editor": "Πληροφορίες", + "Background Color": "Χρώμα Φόντου", + "Bold": "Έντονα", + "Bulleted List": "Κουκκίδες", + "Copy selection": "Αντιγραφή", + "Current style": "Παρών στυλ", + "Cut selection": "Αποκοπή", + "Decrease Indent": "Μείωση Εσοχής", + "Direction left to right": "Κατεύθυνση αριστερά προς δεξιά", + "Direction right to left": "Κατεύθυνση από δεξιά προς τα αριστερά", + "Font Color": "Χρώμα Γραμματοσειράς", + "Help using editor": "Βοήθεια", + "Horizontal Rule": "Οριζόντια Γραμμή", + "Increase Indent": "Αύξηση Εσοχής", + "Insert Table": "Εισαγωγή Πίνακα", + "Insert Web Link": "Εισαγωγή Συνδέσμου", + "Insert/Modify Image": "Εισαγωγή/Τροποποίηση Εικόνας", + "Italic": "Πλάγια", + "Justify Center": "Στοίχιση Κέντρο", + "Justify Full": "Πλήρης Στοίχιση", + "Justify Left": "Στοίχιση Αριστερά", + "Justify Right": "Στοίχιση Δεξιά", + "Ordered List": "Αρίθμηση", + "Paste from clipboard": "Επικόλληση", + "Path": "Διαδρομή", + "Redoes your last action": "Επαναφορά από αναίρεση", + "Strikethrough": "Διαγραμμένα", + "Subscript": "Δείκτης", + "Superscript": "Δείκτης", + "Toggle HTML Source": "Εναλλαγή σε/από HTML", + "Underline": "Υπογραμμισμένα", + "Undoes your last action": "Αναίρεση τελευταίας ενέργειας", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Είστε σε TEXT MODE. Χρησιμοποιήστε το κουμπί [<>] για να επανέρθετε στο WYSIWIG." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "Delete Cell": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Merge Cells": "", + "Please confirm that you want to remove this element:": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Preview": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Border thickness:": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Rows:": "<>", + "Texttop": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge Cells": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Rows": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Insert File Link": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Save": "<>", + "Texttop": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Border thickness:": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Insert Image": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Size": "<>", + "Texttop": "<>", + "Vertical padding": "<>", + "Vertical:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/es.js new file mode 100644 index 0000000000..f9e65594af --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/es.js @@ -0,0 +1,1577 @@ +// Xinha Language Combined Translation File +// +// LANG: "es", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/es.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'es'; +// _editor_lang_merged_file = '/xinha/lang/merged/es.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Abbreviation": "Abreviatura", + "Cancel": "Cancelar", + "Delete": "Suprimir", + "Expansion:": "Explicación", + "OK": "Aceptar" + }, + "AboutBox": { + "About this editor": "Sobre este Editor", + "Close": "Cerrar" + }, + "BackgroundImage": { + "Cancel": "Cancelar" + }, + "ColorPicker": { + "Click a color...": "Seleccione un color...", + "Close": "Cerrar", + "Color: ": "Color: ", + "OK": "Aceptar", + "Sample": "Muestra", + "Web Safe: ": "Color web: " + }, + "ContextMenu": { + "C_ell Properties...": "P_ropiedades de celda...", + "Chec_k Link...": "_Verificar hipervínculo...", + "Copy": "Copiar", + "Create a link": "Crear un hipervínculo", + "Current URL is": "La URL actual es", + "Cut": "Cortar", + "De_lete Column": "_Suprimir columna", + "Delete the current column": "Suprimir la columna actual", + "Delete the current row": "Suprimir la fila actual", + "How did you get here? (Please report!)": "¿Cómo ha llegado aquí? (¡Por favor reporte el error!)", + "I_nsert Row Before": "_Insertar fila delante", + "In_sert Row After": "I_nsertar fila detrás", + "Insert C_olumn After": "Insertar _columna detrás", + "Insert _Column Before": "Insert_ar columna delante", + "Insert a new column after the current one": "Insertar una columna nueva después de la actual", + "Insert a new column before the current one": "Insertar una columna nueva antes de la actual", + "Insert a new row after the current one": "Insertar una fila nueva después de la actual", + "Insert a new row before the current one": "Insertar una fila nueva antes de la actual", + "Insert a paragraph after the current node": "Insertar un párrafo después del nodo actual", + "Insert a paragraph before the current node": "Insertar un párrafo antes del nodo actual", + "Insert paragraph after": "Insertar párrafo detrás", + "Insert paragraph before": "Insertar párrafo delante", + "Justify Center": "Centrar", + "Justify Full": "Justificar", + "Justify Left": "Alinear a la izquierda", + "Justify Right": "Alinear a la derecha", + "Link points to:": "El hipervínculo apunta a:", + "Make lin_k...": "Convertir en _hipervínculo...", + "Opens this link in a new window": "Abre este hipervínculo en una ventana nueva", + "Paste": "Pegar", + "Please confirm that you want to remove this element:": "Por favor, confirme que desea suprimir este elemento:", + "Please confirm that you want to unlink this element.": "Por favor, confirme que desea suprimir el hipervínculo de este elemento.", + "Remove the $elem Element...": "Suprimir el elemento $elem...", + "Remove this node from the document": "Suprimir este nodo del documento", + "Ro_w Properties...": "Pr_opiedades de la fila...", + "Show the Table Cell Properties dialog": "Mostrar el diálogo Propiedades de la Celda", + "Show the Table Properties dialog": "Mostrar el diálogo Propiedades de la Tabla", + "Show the Table Row Properties dialog": "Mostrar el diálogo Propiedades de la Fila", + "Show the image properties dialog": "Mostrar el diálogo de propiedades de imagen", + "Unlink the current element": "Suprimir el hipervínculo del elemento actual", + "_Delete Row": "S_uprimir fila", + "_Image Properties...": "_Propiedades de imagen...", + "_Modify Link...": "_Modificar hipervínculo...", + "_Remove Link...": "_Suprimir hipervínculo...", + "_Table Properties...": "Propi_edades de la tabla..." + }, + "CreateLink": { + "Cancel": "Cancelar", + "Insert/Modify Link": "Insertar/Modificar un enlace", + "New window (_blank)": "Nueva ventana (_blank)", + "None (use implicit)": "Vacío ( usar implícito )", + "OK": "Aceptar", + "Other": "Otro", + "Same frame (_self)": "Mismo marco (_self)", + "Target:": "Destino:", + "Title (tooltip):": "Título (Tooltip):", + "Top frame (_top)": "Marco superior (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "Cancelar", + "Edit HTML for selected text": "Editar código HTML del texto seleccionado", + "OK": "Aceptar", + "Tag Editor": "Editor de Etiquetas" + }, + "Equation": { + "Cancel": "Cancelar", + "OK": "Aceptar", + "Preview": "Previsualizar" + }, + "ExtendedFileManager": { + "Absbottom": "Inferior absoluto", + "Absmiddle": "Medio Absoluto", + "Align": "Alinear", + "Baseline": "Línea base", + "Border": "Borde", + "Bottom": "Inferior", + "Cancel": "Cancelar", + "Clear": "Eliminar", + "Color": "Color", + "Constrain Proportions": "Proporcional", + "Copy": "Copiar", + "Crop": "Recortar", + "Cut": "Cortar", + "Directory": "Directorio", + "Directory Up": "Directorio superior", + "Edit": "editar", + "Filename:": "Nombre del fichero:", + "Flip Horizontal": "invertir horizontalmente", + "Flip Image": "invertir imagen", + "Flip Vertical": "invertir verticalmente", + "GIF format is not supported, image editing not supported.": "No hay soporte para imágenes en formato GIF.", + "Height": "Alto", + "Height:": "Alto:", + "Invalid base directory:": "Directorio de inicio inválido:", + "JPEG High": "JPEG alto", + "JPEG Low": "JPEG bajo", + "JPEG Medium": "JPEG medio", + "Left": "Izquierda", + "Loading": "Cargar", + "Lock": "Bloquear", + "Margin": "Margen", + "Marker": "Marcador", + "Measure": "Dimensiones", + "Middle": "Medio", + "New Folder": "Crear directorio", + "New window (_blank)": "Nueva ventana (_blank)", + "No Image Available": "No hay imagen", + "None (use implicit)": "Vacío ( usar implícito )", + "Not set": "No definido", + "OK": "Aceptar", + "Padding": "Relleno (Padding)", + "Positioning of this image": "Posición de la imagen", + "Preview": "Previsualizar", + "Quality:": "Calidad", + "Refresh": "Actualizar", + "Resize": "Cambiar tamaño", + "Right": "Derecha", + "Rotate": "Girar", + "Rotate Image": "Girar imagen", + "Same frame (_self)": "Mismo marco (_self)", + "Save": "Guardar", + "Start X:": "Inicio X", + "Start Y:": "Inicio Y", + "Texttop": "Texto Superior", + "Title (tooltip)": "Título (Tooltip):", + "Top": "Superior", + "Top frame (_top)": "Marco superior (_top)", + "Trash": "Basura", + "Upload": "Subir", + "W:": "B:", + "Width": "Ancho", + "Width:": "Ancho:" + }, + "FindReplace": { + "Clear": "Eliminar" + }, + "Forms": { + "Cancel": "Cancelar", + "Image URL:": "Imagen URL:", + "OK": "Aceptar", + "Rows:": "Filas:" + }, + "FullPage": { + "Cancel": "Cancelar", + "Description:": "Descripción:", + "OK": "Aceptar" + }, + "FullScreen": { + "Maximize/Minimize Editor": "Maximizar/Minimizar Editor" + }, + "HorizontalRule": { + "Alignment:": "Alineación:", + "Cancel": "Cancelar", + "Center": "Centrar", + "Color:": "Color:", + "Height:": "Alto:", + "Horizontal Rule": "Regla horizontal", + "Layout": "Distribución", + "Left": "Izquierda", + "OK": "Aceptar", + "Right": "Derecha", + "Width:": "Ancho:", + "percent": "por ciento", + "pixels": "píxeles" + }, + "ImageManager": { + "Absbottom": "Inferior absoluto", + "Absmiddle": "Medio Absoluto", + "Angle:": "Ángulo:", + "Baseline": "Línea base", + "Bottom": "Inferior", + "Cancel": "Cancelar", + "Clear": "Eliminar", + "Constrain Proportions": "Proporcional", + "Crop": "Recortar", + "Directory": "Directorio", + "Directory Up": "Directorio superior", + "Edit": "editar", + "Filename:": "Nombre del fichero:", + "Flip Horizontal": "invertir horizontalmente", + "Flip Image": "invertir imagen", + "Flip Vertical": "invertir verticalmente", + "Folder Name:": "Nombre del directorio:", + "GIF format is not supported, image editing not supported.": "No hay soporte para imágenes en formato GIF.", + "Height:": "Alto:", + "Image Format": "Formato:", + "Insert Image": "insertar imagen", + "Invalid base directory:": "Directorio de inicio inválido:", + "JPEG High": "JPEG alto", + "JPEG Low": "JPEG bajo", + "JPEG Medium": "JPEG medio", + "Left": "Izquierda", + "Lock": "Bloquear", + "Marker": "Marcador", + "Measure": "Dimensiones", + "Middle": "Medio", + "New Folder": "Crear directorio", + "No Image Available": "No hay imagen", + "No Images Found": "No se ha encontrado imagen", + "Not set": "No definido", + "OK": "Aceptar", + "Positioning of this image": "Posición de la imagen", + "Quality:": "Calidad", + "Refresh": "Actualizar", + "Resize": "Cambiar tamaño", + "Right": "Derecha", + "Rotate": "Girar", + "Rotate Image": "Girar imagen", + "Save": "Guardar", + "Start X:": "Inicio X", + "Start Y:": "Inicio Y", + "Texttop": "Texto Superior", + "Top": "Superior", + "Trash": "Basura", + "W:": "B:", + "Width:": "Ancho:" + }, + "InlineStyler": { + "Background": "Fondo", + "Baseline": "Línea base", + "Border": "Borde", + "Bottom": "Inferior", + "Center": "Centrar", + "Char": "Carácter", + "Collapsed borders": "Bordes colapsados", + "FG Color": "Color Principal", + "Float": "Flotante", + "Height": "Alto", + "Image URL": "URL de la imágen", + "Justify": "Justificar", + "Layout": "Distribución", + "Left": "Izquierda", + "Margin": "Margen", + "Middle": "Medio", + "None": "Ninguno", + "Padding": "Relleno (Padding)", + "Right": "Derecha", + "Text align": "Alineación del texto", + "Top": "Superior", + "Vertical align": "Alineación vertical", + "Width": "Ancho", + "percent": "por ciento", + "pixels": "píxeles" + }, + "InsertAnchor": { + "Cancel": "Cancelar", + "Delete": "Suprimir", + "OK": "Aceptar" + }, + "InsertImage": { + "Absbottom": "Inferior absoluto", + "Absmiddle": "Medio Absoluto", + "Alignment:": "Alineación:", + "Alternate text:": "Texto alternativo:", + "Baseline": "Línea base", + "Border thickness:": "Tamaño del borde:", + "Bottom": "Inferior", + "Cancel": "Cancelar", + "For browsers that don't support images": "Para navegadores que no soportan imágenes", + "Horizontal padding": "Relleno horizontal", + "Horizontal:": "horizontal:", + "Image Preview:": "Previsualización de la imagen:", + "Image URL:": "Imagen URL:", + "Insert Image": "insertar imagen", + "Layout": "Distribución", + "Leave empty for no border": "Vacío si no desea ningún borde", + "Left": "Izquierda", + "Middle": "Medio", + "Not set": "No definido", + "OK": "Aceptar", + "Positioning of this image": "Posición de la imagen", + "Preview": "Previsualizar", + "Preview the image in a new window": "Previsualizar en una nueva ventana", + "Right": "Derecha", + "Spacing": "Espaciado", + "Texttop": "Texto Superior", + "Top": "Superior", + "Vertical padding": "Relleno Vertical", + "Vertical:": "Vertical:", + "You must enter the URL": "Debe introducir la URL" + }, + "InsertMarquee": { + "Cancel": "Cancelar", + "Height:": "Alto:", + "Left": "Izquierda", + "OK": "Aceptar", + "Right": "Derecha", + "Width:": "Ancho:" + }, + "InsertNote": { + "Cancel": "Cancelar" + }, + "InsertPicture": { + "Absbottom": "Inferior absoluto", + "Absmiddle": "Medio Absoluto", + "Alignment:": "Alineación:", + "Alternate text:": "Texto alternativo:", + "Baseline": "Línea base", + "Border thickness:": "Tamaño del borde:", + "Bottom": "Inferior", + "Cancel": "Cancelar", + "For browsers that don't support images": "Para navegadores que no soportan imágenes", + "Height:": "Alto:", + "Horizontal padding": "Relleno horizontal", + "Horizontal:": "horizontal:", + "Image Preview:": "Previsualización de la imagen:", + "Image URL:": "Imagen URL:", + "Insert Image": "insertar imagen", + "Layout": "Distribución", + "Leave empty for no border": "Vacío si no desea ningún borde", + "Left": "Izquierda", + "Middle": "Medio", + "Not set": "No definido", + "OK": "Aceptar", + "Positioning of this image": "Posición de la imagen", + "Preview": "Previsualizar", + "Preview the image in a new window": "Previsualizar en una nueva ventana", + "Right": "Derecha", + "Spacing": "Espaciado", + "Texttop": "Texto Superior", + "Top": "Superior", + "Vertical padding": "Relleno Vertical", + "Vertical:": "Vertical:", + "Width:": "Ancho:" + }, + "InsertSnippet": { + "Cancel": "Cancelar" + }, + "InsertSnippet2": { + "Cancel": "Cancelar" + }, + "InsertTable": { + "Absbottom": "Inferior absoluto", + "Absmiddle": "Medio Absoluto", + "Alignment:": "Alineación:", + "Baseline": "Línea base", + "Border": "Borde", + "Border thickness:": "Tamaño del borde:", + "Bottom": "Inferior", + "Cancel": "Cancelar", + "Caption": "Título", + "Cell padding:": "Relleno de celdas:", + "Cell spacing:": "Espaciado entre celdas:", + "Cols:": "Columnas:", + "Em": "Em", + "Fixed width columns": "Columnas de ancho fijo", + "Insert Table": "Añadir una tabla", + "Layout": "Distribución", + "Leave empty for no border": "Vacío si no desea ningún borde", + "Left": "Izquierda", + "Middle": "Medio", + "Not set": "No definido", + "Number of columns": "Número de columnas", + "Number of rows": "Número de filas", + "OK": "Aceptar", + "Percent": "Porcentaje", + "Pixels": "Pixels", + "Positioning of this table": "Posición de esta tabla", + "Right": "Derecha", + "Rows:": "Filas:", + "Space between adjacent cells": "Espaciado entre celdas adyacentes", + "Space between content and border in cell": "Escapcio entre el contenido y el borde de la celda", + "Spacing": "Espaciado", + "Texttop": "Texto Superior", + "Top": "Superior", + "Width of the table": "Ancho de la tabla", + "Width unit": "Unidad de anchura", + "Width:": "Ancho:", + "You must enter a number of columns": "Debe introducir un número de columnas", + "You must enter a number of rows": "Debe introducir un número de filas" + }, + "LangMarks": { + "— language —": "— idioma —", + "English": "Inglés", + "French": "Francés", + "Greek": "Griego", + "Latin": "Latín", + "language select": "seleccionar idioma" + }, + "Linker": { + "Cancel": "Cancelar", + "Insert/Modify Link": "Insertar/Modificar un enlace", + "OK": "Aceptar", + "Target:": "Destino:", + "URL:": "URL:" + }, + "ListType": { + "Choose list style type (for ordered lists)": "Seleccionar estilo de lista (para listas ordenadas)", + "Decimal numbers": "Números", + "Lower greek letters": "Letras griegas minúsculas", + "Lower latin letters": "Letras minúsculas", + "Lower roman numbers": "Números romanos en minúsculas", + "Upper latin letters": "Letras mayúsculas", + "Upper roman numbers": "Números romanos en mayúsculas" + }, + "NoteServer": { + "Cancel": "Cancelar", + "Image Preview": "Previsualización de la imagen:", + "OK": "Aceptar", + "Preview": "Previsualizar", + "Preview the image in a new window": "Previsualizar en una nueva ventana" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "El botón de pegar no funciona en los navegadores de Mozilla por motivos de seguridad. Presione CTRL-V en su teclado para pegarlo directamente" + }, + "PSLocal": { + "Cancel": "Cancelar" + }, + "PasteText": { + "Cancel": "Cancelar", + "OK": "Aceptar" + }, + "PersistentStorage": { + "Cancel": "Cancelar", + "Copy": "Copiar", + "Delete": "Suprimir", + "Directory Up": "Directorio superior", + "Filename": "Nombre del fichero:", + "Insert Image": "insertar imagen", + "New Folder": "Crear directorio", + "Save": "Guardar" + }, + "QuickTag": { + "Cancel": "Cancelar" + }, + "SaveSubmit": { + "Save": "Guardar" + }, + "SetId": { + "Cancel": "Cancelar", + "Delete": "Suprimir", + "OK": "Aceptar" + }, + "SmartReplace": { + "OK": "Aceptar" + }, + "SpellChecker": { + "Cancel": "Cancelar", + "OK": "Aceptar" + }, + "SuperClean": { + "Cancel": "Cancelar", + "OK": "Aceptar" + }, + "TableOperations": { + "All four sides": "Todos los cuatro lados", + "Borders": "Bordes", + "Cancel": "Cancelar", + "Caption": "Título", + "Cell Properties": "Propiedades de la Celda", + "Cell properties": "Propiedades de la celda", + "Delete cell": "Suprimir celda", + "Delete column": "Suprimir columna", + "Delete row": "Suprimir fila", + "Description": "Descripción", + "Frames": "Marcos", + "Insert cell after": "Insertar celda detrás", + "Insert cell before": "Insertar celda delante", + "Insert column after": "Insertar columna detrás", + "Insert column before": "Insertar columna delante", + "Insert row after": "Insertar fila detrás", + "Insert row before": "Insertar fila delante", + "Merge cells": "Unir celdas", + "No rules": "Ninguna regla", + "No sides": "Ningún lado", + "OK": "Aceptar", + "Padding": "Relleno (Padding)", + "Please click into some cell": "Por favor, haz clic en alguna celda", + "Row Properties": "Propiedades de la Fila", + "Row properties": "Propiedades de la fila", + "Rows": "Filas:", + "Rules will appear between all rows and columns": "Las líneas aparecerán entre todas las filas y columnas", + "Rules will appear between columns only": "Las líneas aparecerán solo entre las columnas", + "Rules will appear between rows only": "Las líneas aparecerán solo entre las filas", + "Spacing": "Espaciado", + "Spacing and padding": "Espaciado y Relleno", + "Split column": "Dividir columna", + "Split row": "Dividir fila", + "Summary": "Resumen", + "Table Properties": "Propiedades de la Tabla", + "Table properties": "Propiedades de la tabla", + "The bottom side only": "Solo el lado inferior", + "The left-hand side only": "Solo el lado izquierdo", + "The right and left sides only": "Solo los lados derecho e izquierdo", + "The right-hand side only": "Solo el lado derecho", + "The top and bottom sides only": "Solo los lados superior e inferior", + "The top side only": "Solo el lado superior", + "Xinha cowardly refuses to delete the last cell in row.": "Xinha se reusa cobardemente a eliminar la última celda en la fila.", + "Xinha cowardly refuses to delete the last column in table.": "Xinha se reusa cobardemente a eliminar la última columna en la tabla.", + "Xinha cowardly refuses to delete the last row in table.": "Xinha se reusa cobardemente a eliminar la última fila en la tabla.", + "pixels": "píxeles" + }, + "Template": { + "Cancel": "Cancelar" + }, + "UnFormat": { + "Cancel": "Cancelar", + "OK": "Aceptar" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "Usted no ha guardado sus modificaciones" + }, + "Xinha": { + "— font —": "— fuente —", + "— format —": "— formato —", + "— size —": "— tamaño —", + "About this editor": "Sobre este Editor", + "Address": "Dirección", + "Background Color": "Color de fondo", + "Bold": "Negrita", + "Bulleted List": "Lista no numerada", + "Clean content pasted from Word": "Limpiar el contenido pegado desde Word", + "Clear Inline Font Specifications": "Borrar las etiquetas de fuente", + "Clear MSOffice tags": "Borrar etiquetas de MSOffice", + "Close": "Cerrar", + "Constructing object": "Construyendo objeto", + "Copy selection": "Copiar", + "Create Statusbar": "Crear barra de estado", + "Create Toolbar": "Crear barra de herramientas", + "Current style": "Estilo actual", + "Cut selection": "Cortar", + "Decrease Indent": "Reducir sangría", + "Direction left to right": "Dirección de izquierda a derecha", + "Direction right to left": "Dirección de derecha a izquierda", + "Finishing": "Finalizando", + "Font Color": "Color de la fuente", + "Formatted": "Formateado", + "Generate Xinha framework": "Generar Xinha framework", + "Heading 1": "Cabecera 1", + "Heading 2": "Cabecera 2", + "Heading 3": "Cabecera 3", + "Heading 4": "Cabecera 4", + "Heading 5": "Cabecera 5", + "Heading 6": "Cabecera 6", + "Headings": "Cabeceras", + "Help using editor": "Ayuda", + "Horizontal Rule": "Regla horizontal", + "Increase Indent": "Aumentar sangría", + "Init editor size": "Iniciar el tamaño del editor", + "Insert Table": "Añadir una tabla", + "Insert Web Link": "Insertar enlace web", + "Insert/Modify Image": "Insertar/modificar imagen", + "Insert/Overwrite": "Insertar/Sobreescribir", + "Italic": "Cursiva", + "Justify Center": "Alinear al centro", + "Justify Full": "Justificar", + "Justify Left": "Alinear a la izquierda", + "Justify Right": "Alinear a la derecha", + "Keyboard shortcuts": "Atajos de teclado", + "Loading in progress. Please wait!": "Carga en proceso. Por favor espere.", + "Loading plugin $plugin": "Cargando el plugin $plugin", + "Normal": "Normal", + "Ordered List": "Lista numerada", + "Paste from clipboard": "Pegar desde el portapapeles", + "Path": "Ruta", + "Print document": "Imprimir documento", + "Redoes your last action": "Rehacer", + "Register plugin $plugin": "Registro de plugin $plugin", + "Remove formatting": "Borrar formato", + "Save as": "Guardar como", + "Select all": "Seleccionar todo", + "Set format to paragraph": "EStablecer el formato a parrafo", + "Split Block": "Dividir el bloque", + "Strikethrough": "Tachado", + "Subscript": "Subíndice", + "Superscript": "Superíndice", + "The editor provides the following key combinations:": "El editor proporciona las siguientes combinaciones:", + "Toggle Borders": "Añadir/Quitar bordes", + "Toggle HTML Source": "Ver HTML", + "Underline": "Subrayado", + "Undoes your last action": "Deshacer", + "Would you like to clear font colours?": "¿Desea eliminar las definiciones de color de fuente?", + "Would you like to clear font sizes?": "¿Desea eliminar las definiciones de tamaño de fuente?", + "Would you like to clear font typefaces?": "¿Desea eliminar las definiciaones de tipo de fuente?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Se encuentra en MODO TEXTO. Use el botón [<>] para cambiar de nuevo al modo WYSIWYG", + "insert linebreak": "Insertar salto de línea", + "new paragraph": "Nuevo parrafo" + }, + "__NEW_TRANSLATIONS__": { + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ContextMenu": { + "Delete Cell": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Merge Cells": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit Tag By Peg": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "" + }, + "InsertImage": { + "Enter the image URL here": "" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "" + }, + "LangMarks": { + "', '": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Courier New": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Georgia": "", + "Impact": "", + "Loading Core": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Select Color": "", + "SHIFT-ENTER": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Alt": "", + "Border Color": "", + "D:": "", + "File List": "", + "File Manager": "", + "Filesize:": "", + "Folder": "", + "GIF": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Maximum folder size limit reached. Upload disabled.": "", + "No Files Found": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Rename": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Target Window": "", + "Toggle marker color": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Insert File Link": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Image List": "", + "Keyword": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "D:": "<>", + "GIF": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "PNG": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Enter the image URL here": "", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Size": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "Guido code": "", + "GUIDO Code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Options": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "File List": "<>", + "File Manager": "<>", + "Insert": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/eu.js new file mode 100644 index 0000000000..f6295ff096 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/eu.js @@ -0,0 +1,1571 @@ +// Xinha Language Combined Translation File +// +// LANG: "eu", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/eu.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'eu'; +// _editor_lang_merged_file = '/xinha/lang/merged/eu.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Utzi", + "OK": "Ados" + }, + "AboutBox": { + "About this editor": "Editoreari buruz...", + "Close": "Itxi" + }, + "BackgroundImage": { + "Cancel": "Utzi" + }, + "ColorPicker": { + "Click a color...": "Kolore bat aukeratu...", + "Close": "Itxi", + "Color: ": "Kolorea: ", + "OK": "Ados", + "Sample": "Lagina", + "Web Safe: ": "Web Safe: " + }, + "ContextMenu": { + "Justify Center": "Zentratu", + "Justify Full": "Justifikatu", + "Justify Left": "Ezkerretara lerrokatu", + "Justify Right": "Eskuinetara lerrokatu" + }, + "CreateLink": { + "Cancel": "Utzi", + "Insert/Modify Link": "Lotura txertatu/aldatu", + "New window (_blank)": "Lehio berrian (_blank)", + "None (use implicit)": "Bat ere ez (implizituki erabili)", + "OK": "Ados", + "Other": "Beste bat", + "Same frame (_self)": "Frame berean (_self)", + "Target:": "Helburua:", + "Title (tooltip):": "Izenburua (argibidea):", + "Top frame (_top)": "Goiko frame-an (_top)", + "URL:": "URL-a:" + }, + "EditTag": { + "Cancel": "Utzi", + "OK": "Ados" + }, + "Equation": { + "Cancel": "Utzi", + "OK": "Ados", + "Preview": "Aurrebista" + }, + "ExtendedFileManager": { + "Absbottom": "Irudiaren behekaldean", + "Absmiddle": "Irudiaren erdian", + "Baseline": "Irudiaren oinean", + "Bottom": "Behean", + "Cancel": "Utzi", + "Left": "Ezkerretara", + "Middle": "Erdian", + "New window (_blank)": "Lehio berrian (_blank)", + "None (use implicit)": "Bat ere ez (implizituki erabili)", + "Not set": "Ez gaitua", + "OK": "Ados", + "Positioning of this image": "Irudiaren kokapena", + "Preview": "Aurrebista", + "Right": "Eskuinetara", + "Same frame (_self)": "Frame berean (_self)", + "Texttop": "Irudiaren goialdean", + "Title (tooltip)": "Izenburua (argibidea):", + "Top": "Goian", + "Top frame (_top)": "Goiko frame-an (_top)", + "Width": "Zabalera:", + "Width:": "Zabalera:" + }, + "Forms": { + "Cancel": "Utzi", + "Image URL:": "Irudiaren URL-a:", + "OK": "Ados", + "Rows:": "Lerroak:" + }, + "FullPage": { + "Cancel": "Utzi", + "OK": "Ados" + }, + "HorizontalRule": { + "Alignment:": "Lerrokatzea:", + "Cancel": "Utzi", + "Horizontal Rule": "Marra horizontala", + "Layout": "Diseinua", + "Left": "Ezkerretara", + "OK": "Ados", + "Right": "Eskuinetara", + "Width:": "Zabalera:" + }, + "ImageManager": { + "Absbottom": "Irudiaren behekaldean", + "Absmiddle": "Irudiaren erdian", + "Baseline": "Irudiaren oinean", + "Bottom": "Behean", + "Cancel": "Utzi", + "Insert Image": "Irudia txertatu", + "Left": "Ezkerretara", + "Middle": "Erdian", + "Not set": "Ez gaitua", + "OK": "Ados", + "Positioning of this image": "Irudiaren kokapena", + "Right": "Eskuinetara", + "Texttop": "Irudiaren goialdean", + "Top": "Goian", + "Width:": "Zabalera:" + }, + "InlineStyler": { + "Baseline": "Irudiaren oinean", + "Bottom": "Behean", + "Image URL": "Irudiaren URL-a:", + "Layout": "Diseinua", + "Left": "Ezkerretara", + "Middle": "Erdian", + "Right": "Eskuinetara", + "Top": "Goian", + "Width": "Zabalera:" + }, + "InsertAnchor": { + "Cancel": "Utzi", + "OK": "Ados" + }, + "InsertImage": { + "Absbottom": "Irudiaren behekaldean", + "Absmiddle": "Irudiaren erdian", + "Alignment:": "Lerrokatzea:", + "Alternate text:": "Testu alternatiboa:", + "Baseline": "Irudiaren oinean", + "Border thickness:": "Ertzaren lodiera:", + "Bottom": "Behean", + "Cancel": "Utzi", + "Enter the image URL here": "Idatz ezazu irudiaren URL-a hemen", + "For browsers that don't support images": "Irudirik onartzen ez duten nabigatzaileentzat", + "Horizontal padding": "Betegarri horizontala", + "Horizontal:": "Horizontala:", + "Image Preview:": "Irudiaren aurrebista:", + "Image URL:": "Irudiaren URL-a:", + "Insert Image": "Irudia txertatu", + "Layout": "Diseinua", + "Leave empty for no border": "Uztazu hutsik ertzik ez sortzeko", + "Left": "Ezkerretara", + "Middle": "Erdian", + "Not set": "Ez gaitua", + "OK": "Ados", + "Positioning of this image": "Irudiaren kokapena", + "Preview": "Aurrebista", + "Preview the image in a new window": "Aurreikusi irudia beste lehio batean", + "Right": "Eskuinetara", + "Spacing": "Tartea", + "Texttop": "Irudiaren goialdean", + "Top": "Goian", + "Vertical padding": "Betegarri bertikala", + "Vertical:": "Bertikala:", + "You must enter the URL": "URL-a idatzi behar duzu" + }, + "InsertMarquee": { + "Cancel": "Utzi", + "Left": "Ezkerretara", + "OK": "Ados", + "Right": "Eskuinetara", + "Width:": "Zabalera:" + }, + "InsertNote": { + "Cancel": "Utzi" + }, + "InsertPicture": { + "Absbottom": "Irudiaren behekaldean", + "Absmiddle": "Irudiaren erdian", + "Alignment:": "Lerrokatzea:", + "Alternate text:": "Testu alternatiboa:", + "Baseline": "Irudiaren oinean", + "Border thickness:": "Ertzaren lodiera:", + "Bottom": "Behean", + "Cancel": "Utzi", + "Enter the image URL here": "Idatz ezazu irudiaren URL-a hemen", + "For browsers that don't support images": "Irudirik onartzen ez duten nabigatzaileentzat", + "Horizontal padding": "Betegarri horizontala", + "Horizontal:": "Horizontala:", + "Image Preview:": "Irudiaren aurrebista:", + "Image URL:": "Irudiaren URL-a:", + "Insert Image": "Irudia txertatu", + "Layout": "Diseinua", + "Leave empty for no border": "Uztazu hutsik ertzik ez sortzeko", + "Left": "Ezkerretara", + "Middle": "Erdian", + "Not set": "Ez gaitua", + "OK": "Ados", + "Positioning of this image": "Irudiaren kokapena", + "Preview": "Aurrebista", + "Preview the image in a new window": "Aurreikusi irudia beste lehio batean", + "Right": "Eskuinetara", + "Spacing": "Tartea", + "Texttop": "Irudiaren goialdean", + "Top": "Goian", + "Vertical padding": "Betegarri bertikala", + "Vertical:": "Bertikala:", + "Width:": "Zabalera:" + }, + "InsertSnippet": { + "Cancel": "Utzi" + }, + "InsertSnippet2": { + "Cancel": "Utzi" + }, + "InsertTable": { + "Absbottom": "Irudiaren behekaldean", + "Absmiddle": "Irudiaren erdian", + "Alignment:": "Lerrokatzea:", + "Baseline": "Irudiaren oinean", + "Border thickness:": "Ertzaren lodiera:", + "Bottom": "Behean", + "Cancel": "Utzi", + "Cell padding:": "Gelaxkaren betegarria:", + "Cell spacing:": "Gelaxka-tartea:", + "Cols:": "Zutabeak:", + "Em": "Em", + "Fixed width columns": "Zabalera finkodun zutabeak", + "Insert Table": "Taula txertatu", + "Layout": "Diseinua", + "Leave empty for no border": "Uztazu hutsik ertzik ez sortzeko", + "Left": "Ezkerretara", + "Middle": "Erdian", + "Not set": "Ez gaitua", + "Number of columns": "Zutabe-kopurua", + "Number of rows": "Lerro-kopurua", + "OK": "Ados", + "Percent": "Portzentaia", + "Pixels": "Pixelak", + "Positioning of this table": "Taula honen kokapena", + "Right": "Eskuinetara", + "Rows:": "Lerroak:", + "Space between adjacent cells": "Gelaxka auzokideen arteko tartea", + "Space between content and border in cell": "Gelaxkaren edukia eta ertzaren arteko tartea", + "Spacing": "Tartea", + "Texttop": "Irudiaren goialdean", + "Top": "Goian", + "Width of the table": "Taularen zabalera", + "Width unit": "Zabalera-unitatea", + "Width:": "Zabalera:", + "You must enter a number of columns": "Zutabe-kopurua idatzi behar duzu", + "You must enter a number of rows": "Lerro-kopurua idatzi behar duzu" + }, + "Linker": { + "Cancel": "Utzi", + "Insert/Modify Link": "Lotura txertatu/aldatu", + "OK": "Ados", + "Target:": "Helburua:", + "URL:": "URL-a:" + }, + "NoteServer": { + "Cancel": "Utzi", + "Image Preview": "Irudiaren aurrebista:", + "OK": "Ados", + "Preview": "Aurrebista", + "Preview the image in a new window": "Aurreikusi irudia beste lehio batean" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Itsatsi botoia ez dabil Mozillan oinarritutako nabigatzaileetan (arrazoi teknikoengatik). Sacatu CTRL-V zure teklatuan, zuzenean itsasteko." + }, + "PSLocal": { + "Cancel": "Utzi" + }, + "PasteText": { + "Cancel": "Utzi", + "OK": "Ados" + }, + "PersistentStorage": { + "Cancel": "Utzi", + "Insert Image": "Irudia txertatu" + }, + "QuickTag": { + "Cancel": "Utzi" + }, + "SetId": { + "Cancel": "Utzi", + "OK": "Ados" + }, + "SmartReplace": { + "OK": "Ados" + }, + "SpellChecker": { + "Cancel": "Utzi", + "OK": "Ados" + }, + "SuperClean": { + "Cancel": "Utzi", + "OK": "Ados" + }, + "TableOperations": { + "Cancel": "Utzi", + "OK": "Ados", + "Rows": "Lerroak:", + "Spacing": "Tartea" + }, + "Template": { + "Cancel": "Utzi" + }, + "UnFormat": { + "Cancel": "Utzi", + "OK": "Ados" + }, + "Xinha": { + "— format —": "— Formatua —", + "About this editor": "Editoreari buruz...", + "Address": "Helbidea", + "Background Color": "Atzeko kolorea", + "Bold": "Lodia", + "Bulleted List": "Zerrenda ez ordenatua", + "Clean content pasted from Word": "Word-etik itsatsitako edukia ezabatu", + "Clear Inline Font Specifications": "Ezabatu testuaren ezaugarriak", + "Clear MSOffice tags": "MSOffice etiketak ezabatu", + "Close": "Itxi", + "Constructing object": "Objektua eraikitzen", + "Copy selection": "Kopiatu hautaketa", + "Create Statusbar": "Egoera-barra sortu", + "Create Toolbar": "Tresna-barra sortu", + "Current style": "Uneko estiloa", + "Cut selection": "Ebaki hautaketa", + "Decrease Indent": "Koska handitu", + "Direction left to right": "Ezkerretik eskuinetarako norabidea", + "Direction right to left": "Eskuinetik ezkerretarako norabidea", + "Finishing": "Bukatzen", + "Font Color": "Testu-kolorea", + "Formatted": "Formateatua", + "Generate Xinha framework": "Xinha Framework sortzen", + "Heading 1": "Goiburua 1", + "Heading 2": "Goiburua 2", + "Heading 3": "Goiburua 3", + "Heading 4": "Goiburua 4", + "Heading 5": "Goiburua 5", + "Heading 6": "Goiburua 6", + "Headings": "Goiburuak", + "Help using editor": "Laguntza", + "Horizontal Rule": "Marra horizontala", + "Increase Indent": "Koska txikitu", + "Init editor size": "Editorearen hasierako neurria", + "Insert Table": "Taula txertatu", + "Insert Web Link": "Lotura txertatu", + "Insert/Modify Image": "Irudia txertatu", + "Insert/Overwrite": "Txertatu/Gainidatzi", + "Italic": "Etzana", + "Justify Center": "Zentratu", + "Justify Full": "Justifikatu", + "Justify Left": "Ezkerretara lerrokatu", + "Justify Right": "Eskuinetara lerrokatu", + "Keyboard shortcuts": "Laster-teklak", + "Loading in progress. Please wait!": "Kargatzen. Itxaron mesedez", + "Loading plugin $plugin": "$plugin plugina kargatzen", + "Normal": "Normala", + "Ordered List": "Zerrenda ordenatua", + "Paste from clipboard": "Itsatsi arbelean dagoena", + "Path": "Bidea", + "Print document": "Dokumentua inprimatu", + "Redoes your last action": "Berregin", + "Register plugin $plugin": "$plugin plugina erregistratu", + "Remove formatting": "Formatoa kendu", + "Save as": "Gorde honela:", + "Select all": "Dena aukeratu", + "Set format to paragraph": "Formatua ezarri paragrafoari", + "Split Block": "Blokea zatitu", + "Strikethrough": "Marratua", + "Subscript": "Azpindizea", + "Superscript": "Goi-indizea", + "The editor provides the following key combinations:": "Editoreak ondorengo tekla-konbinazioak eskaintzen ditu:", + "Toggle Borders": "Ertzak trukatu", + "Toggle HTML Source": "Ikusi dokumentua HTML-n", + "Underline": "Azpimarratua", + "Undoes your last action": "Desegin", + "Would you like to clear font colours?": "Letra-tipoen koloreak ezabatu nahi al dituzu?", + "Would you like to clear font sizes?": "Letra-tipoen neurriak ezabatu nahi al dituzu?", + "Would you like to clear font typefaces?": "Letra-tipoak ezabatu nahi al dituzu?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "TESTU eran ari zara. Erabil ezazu [<>] botoia WYSIWIG erara itzultzeko.", + "insert linebreak": "Lerro-jauzia txertatu", + "new paragraph": "Paragrafo berria" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "percent": "", + "pixels": "", + "Style": "" + }, + "InlineStyler": { + "Background": "", + "Border": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "None": "", + "Padding": "", + "Text align": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "percent": "<>", + "pixels": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "", + "Border": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table Properties": "", + "Table properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Courier New": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Georgia": "", + "Impact": "", + "Loading Core": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Select Color": "", + "SHIFT-ENTER": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Border": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Margin": "<>", + "Padding": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "PNG": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Height:": "<>", + "Size": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "Guido code": "", + "GUIDO Code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Options": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fa.js new file mode 100644 index 0000000000..f882a77309 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fa.js @@ -0,0 +1,1573 @@ +// Xinha Language Combined Translation File +// +// LANG: "fa", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/fa.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'fa'; +// _editor_lang_merged_file = '/xinha/lang/merged/fa.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "انصراف", + "OK": "بله" + }, + "AboutBox": { + "About this editor": "درباره این ویرایش گر", + "Close": "بستن" + }, + "BackgroundImage": { + "Cancel": "انصراف" + }, + "ColorPicker": { + "Close": "بستن", + "OK": "بله" + }, + "ContextMenu": { + "Justify Center": "تراز در وسط", + "Justify Full": "تراز از چپ و راست", + "Justify Left": "تراز از چپ", + "Justify Right": "تراز در راست" + }, + "CreateLink": { + "Cancel": "انصراف", + "Insert/Modify Link": "افزودن / ویرایش لینک", + "New window (_blank)": "پنجره جدید (_blank)", + "None (use implicit)": "هیچکدام (استفاده از بدون شرط)", + "OK": "بله", + "Other": "سایر", + "Same frame (_self)": "فریم یکسان (_self)", + "Target:": "هدف", + "Title (tooltip):": "عنوان (راهنمای یک خطی)", + "Top frame (_top)": "فریم بالایی (_top)", + "URL:": "URL:", + "You need to select some text before creating a link": "باید قبل از ساخت لینک ، متنی را انتخاب نمایید" + }, + "EditTag": { + "Cancel": "انصراف", + "OK": "بله" + }, + "Equation": { + "Cancel": "انصراف", + "OK": "بله", + "Preview": "پیش نمایش" + }, + "ExtendedFileManager": { + "Absbottom": "دقیقا پایین", + "Absmiddle": "دقیقا وسط", + "Baseline": "ابتدای خط", + "Bottom": "پایین", + "Cancel": "انصراف", + "Left": "چپ", + "Middle": "وسط", + "New window (_blank)": "پنجره جدید (_blank)", + "None (use implicit)": "هیچکدام (استفاده از بدون شرط)", + "Not set": "تنظیم نشده", + "OK": "بله", + "Positioning of this image": "موقعیت یابی تصویر", + "Preview": "پیش نمایش", + "Right": "راست", + "Same frame (_self)": "فریم یکسان (_self)", + "Texttop": "بالای متن", + "Title (tooltip)": "عنوان (راهنمای یک خطی)", + "Top": "بالا", + "Top frame (_top)": "فریم بالایی (_top)", + "Width": "طول", + "Width:": "طول" + }, + "Forms": { + "Cancel": "انصراف", + "Image URL:": "URL تصویر", + "OK": "بله", + "Rows:": "ردیف ها" + }, + "FullPage": { + "Cancel": "انصراف", + "OK": "بله" + }, + "HorizontalRule": { + "Alignment:": "تراز بندی", + "Cancel": "انصراف", + "Horizontal Rule": "خط افقی", + "Layout": "لایه", + "Left": "چپ", + "OK": "بله", + "Right": "راست", + "Width:": "طول" + }, + "ImageManager": { + "Absbottom": "دقیقا پایین", + "Absmiddle": "دقیقا وسط", + "Baseline": "ابتدای خط", + "Bottom": "پایین", + "Cancel": "انصراف", + "Insert Image": "افزودن تصویر", + "Left": "چپ", + "Middle": "وسط", + "Not set": "تنظیم نشده", + "OK": "بله", + "Positioning of this image": "موقعیت یابی تصویر", + "Right": "راست", + "Texttop": "بالای متن", + "Top": "بالا", + "Width:": "طول" + }, + "InlineStyler": { + "Baseline": "ابتدای خط", + "Bottom": "پایین", + "Image URL": "URL تصویر", + "Layout": "لایه", + "Left": "چپ", + "Middle": "وسط", + "Right": "راست", + "Top": "بالا", + "Width": "طول" + }, + "InsertAnchor": { + "Cancel": "انصراف", + "OK": "بله" + }, + "InsertImage": { + "Absbottom": "دقیقا پایین", + "Absmiddle": "دقیقا وسط", + "Alignment:": "تراز بندی", + "Alternate text:": "متن جایگزین", + "Baseline": "ابتدای خط", + "Border thickness:": "ضخامت لبه", + "Bottom": "پایین", + "Cancel": "انصراف", + "Enter the image URL here": "URL تصویر را اینجا وارد کنید", + "For browsers that don't support images": "برای مرورگرهایی که از تصاویر پشتیبانی نمی کنند", + "Horizontal padding": "پرکننده افقی", + "Horizontal:": "افقی", + "Image Preview:": "پیش نمایش تصویر", + "Image URL:": "URL تصویر", + "Insert Image": "افزودن تصویر", + "Layout": "لایه", + "Leave empty for no border": "برای بدون لبه خالی رها کن", + "Left": "چپ", + "Middle": "وسط", + "Not set": "تنظیم نشده", + "OK": "بله", + "Positioning of this image": "موقعیت یابی تصویر", + "Preview": "پیش نمایش", + "Preview the image in a new window": "پیش نمایش تصویر در پنجره ای جدید", + "Right": "راست", + "Spacing": "فاصله گذاری", + "Texttop": "بالای متن", + "Top": "بالا", + "Vertical padding": "پرکننده عمودی", + "Vertical:": "عمودی", + "You must enter the URL": "شما باید URL را وارد کنید" + }, + "InsertMarquee": { + "Cancel": "انصراف", + "Left": "چپ", + "OK": "بله", + "Right": "راست", + "Width:": "طول" + }, + "InsertNote": { + "Cancel": "انصراف" + }, + "InsertPicture": { + "Absbottom": "دقیقا پایین", + "Absmiddle": "دقیقا وسط", + "Alignment:": "تراز بندی", + "Alternate text:": "متن جایگزین", + "Baseline": "ابتدای خط", + "Border thickness:": "ضخامت لبه", + "Bottom": "پایین", + "Cancel": "انصراف", + "Enter the image URL here": "URL تصویر را اینجا وارد کنید", + "For browsers that don't support images": "برای مرورگرهایی که از تصاویر پشتیبانی نمی کنند", + "Horizontal padding": "پرکننده افقی", + "Horizontal:": "افقی", + "Image Preview:": "پیش نمایش تصویر", + "Image URL:": "URL تصویر", + "Insert Image": "افزودن تصویر", + "Layout": "لایه", + "Leave empty for no border": "برای بدون لبه خالی رها کن", + "Left": "چپ", + "Middle": "وسط", + "Not set": "تنظیم نشده", + "OK": "بله", + "Positioning of this image": "موقعیت یابی تصویر", + "Preview": "پیش نمایش", + "Preview the image in a new window": "پیش نمایش تصویر در پنجره ای جدید", + "Right": "راست", + "Spacing": "فاصله گذاری", + "Texttop": "بالای متن", + "Top": "بالا", + "Vertical padding": "پرکننده عمودی", + "Vertical:": "عمودی", + "Width:": "طول" + }, + "InsertSnippet": { + "Cancel": "انصراف" + }, + "InsertSnippet2": { + "Cancel": "انصراف" + }, + "InsertTable": { + "Absbottom": "دقیقا پایین", + "Absmiddle": "دقیقا وسط", + "Alignment:": "تراز بندی", + "Baseline": "ابتدای خط", + "Border thickness:": "ضخامت لبه", + "Bottom": "پایین", + "Cancel": "انصراف", + "Cell padding:": "پر کننده سلول", + "Cell spacing:": "فاصله سلول ها", + "Cols:": "ستون ها", + "Em": "Em", + "Fixed width columns": "ستون های طول ثابت", + "Insert Table": "افزودن جدول", + "Layout": "لایه", + "Leave empty for no border": "برای بدون لبه خالی رها کن", + "Left": "چپ", + "Middle": "وسط", + "Not set": "تنظیم نشده", + "Number of columns": "تعداد ستون ها", + "Number of rows": "تعداد ردیف ها", + "OK": "بله", + "Percent": "درصد", + "Pixels": "پیکسل ها", + "Positioning of this table": "موقعیت یابی این جدول", + "Right": "راست", + "Rows:": "ردیف ها", + "Space between adjacent cells": "فاصله بین سلول های همجوار", + "Space between content and border in cell": "فاصله بین محتوا و لبه در سلول", + "Spacing": "فاصله گذاری", + "Texttop": "بالای متن", + "Top": "بالا", + "Width of the table": "طول جدول", + "Width unit": "واحد طول", + "Width:": "طول", + "You must enter a number of columns": "باید تعداد ستون ها را وارد کنید", + "You must enter a number of rows": "باید تعداد ردیف ها را وارد کنید" + }, + "Linker": { + "Cancel": "انصراف", + "Insert/Modify Link": "افزودن / ویرایش لینک", + "OK": "بله", + "Target:": "هدف", + "URL:": "URL:" + }, + "NoteServer": { + "Cancel": "انصراف", + "Image Preview": "پیش نمایش تصویر", + "OK": "بله", + "Preview": "پیش نمایش", + "Preview the image in a new window": "پیش نمایش تصویر در پنجره ای جدید" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "دکمه چسباندن در مرورگرهای سری Mozilla کار نمی کند (به دلایل فنی امنیتی).برای چسباندن مستقیم ، دکمه CTRL-V را در صفحه کلید بزنید." + }, + "PSLocal": { + "Cancel": "انصراف" + }, + "PasteText": { + "Cancel": "انصراف", + "OK": "بله" + }, + "PersistentStorage": { + "Cancel": "انصراف", + "Insert Image": "افزودن تصویر" + }, + "QuickTag": { + "Cancel": "انصراف" + }, + "SetId": { + "Cancel": "انصراف", + "OK": "بله" + }, + "SmartReplace": { + "OK": "بله" + }, + "SpellChecker": { + "Cancel": "انصراف", + "OK": "بله" + }, + "SuperClean": { + "Cancel": "انصراف", + "OK": "بله" + }, + "TableOperations": { + "Cancel": "انصراف", + "OK": "بله", + "Rows": "ردیف ها", + "Spacing": "فاصله گذاری" + }, + "Template": { + "Cancel": "انصراف" + }, + "UnFormat": { + "Cancel": "انصراف", + "OK": "بله" + }, + "Xinha": { + "— format —": "— قالب —", + "About this editor": "درباره این ویرایش گر", + "Address": "آدرس", + "Background Color": "رنگ پس زمینه", + "Bold": "ضخیم", + "Bulleted List": "فهرست گلوله ای", + "Clean content pasted from Word": "تمیز کردن محتوای چسبانده شده از Word", + "Clear Inline Font Specifications": "پاک کردن متن از مشخصات فونت", + "Clear MSOffice tags": "پاک کردن متن از برچسب های MSOffice", + "Close": "بستن", + "Constructing object": "ساختن شیء", + "Copy selection": "کپی انتخاب شده", + "Create Toolbar": "ساخت نوار ابزار", + "Current style": "شیوه کنونی", + "Cut selection": "بریدن انتخاب شده", + "Decrease Indent": "کاهش سر خط", + "Direction left to right": "جهت از چپ به راست", + "Direction right to left": "جهت از راست به چپ", + "ENTER": "ENTREE", + "Editor Help": "راهنمای ویرایشگر", + "Font Color": "رنگ فلم", + "Formatted": "قالب بندی شده", + "Heading 1": "تیتر 1", + "Heading 2": "تیتر 2", + "Heading 3": "تیتر 3", + "Heading 4": "تیتر 4", + "Heading 5": "تیتر 5", + "Heading 6": "تیتر 6", + "Headings": "عنوان گذاری", + "Help using editor": "راهنمای استفاده ویرایش گر", + "Horizontal Rule": "خط افقی", + "Increase Indent": "افزایش سر خط", + "Init editor size": "مقدار دهی اندازه ویرایشگر", + "Insert Table": "افزودن جدول", + "Insert Web Link": "افزودن لینک وب", + "Insert/Modify Image": "افزودن یا ویرایش تصویر", + "Insert/Overwrite": "افزودن/جانویسی", + "Italic": "مورب", + "Justify Center": "تراز در وسط", + "Justify Full": "تراز از چپ و راست", + "Justify Left": "تراز از چپ", + "Justify Right": "تراز در راست", + "Keyboard shortcuts": "میانبرهای صفحه کلید", + "Normal": "معمولی", + "Ordered List": "فهرست مرتب", + "Paste from clipboard": "چسباندن از تخته کار", + "Path": "مسیر", + "Print document": "چاپ سند", + "Redoes your last action": "انجام مجدد آخرین عمل", + "Register plugin $plugin": "ثبت پلاگین $plugin", + "Remove formatting": "حذف فرمت بندی", + "SHIFT-ENTER": "SHIFT+ENTREE", + "Save as": "ذخیره مانند...", + "Select all": "انتخاب همه", + "Set format to paragraph": "تغییر قالب به پاراگراف", + "Split Block": "بلاک جداسازی", + "Strikethrough": "رو خط", + "Subscript": "زیروند", + "Superscript": "بالاوند", + "The editor provides the following key combinations:": "ویرایشگر استفاده از کلید های گروهی زیر را مسیر می سازد :", + "Toggle Borders": "فعال/غیر فعال کردن لبه ها", + "Toggle HTML Source": "مشاهده یا عدم مشاهده متن در قالب HTML", + "Underline": "زیر خط", + "Undoes your last action": "برگرداندن آخرین عمل", + "Would you like to clear font colours?": "آیا تمایل دارید رنگ قلم را پاک کنید؟", + "Would you like to clear font sizes?": "آیا تمایل دارید اندازه قلم را پاک کنید", + "Would you like to clear font typefaces?": "آیا تمایل دارید ظاهر فلم را پاک کنید؟", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "در مد متنی هستید. از دکمه [<>] استفاده نمایید تا به مد WYSIWYG برگردید.", + "insert linebreak": "افزودن جدا کننده خط", + "new paragraph": "پاراگراف جدید" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "percent": "", + "pixels": "", + "Style": "" + }, + "InlineStyler": { + "Background": "", + "Border": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "None": "", + "Padding": "", + "Text align": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "percent": "<>", + "pixels": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "", + "Border": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table Properties": "", + "Table properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Courier New": "", + "Create Statusbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Generate Xinha framework": "", + "Georgia": "", + "Impact": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Select Color": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Border": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Margin": "<>", + "Padding": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "PNG": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Height:": "<>", + "Size": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "Guido code": "", + "GUIDO Code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Options": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fi.js new file mode 100644 index 0000000000..ca95eabb40 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fi.js @@ -0,0 +1,1575 @@ +// Xinha Language Combined Translation File +// +// LANG: "fi", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/fi.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'fi'; +// _editor_lang_merged_file = '/xinha/lang/merged/fi.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "AboutBox": { + "About this editor": "Tietoja editorista" + }, + "BackgroundImage": { + "Cancel": "Peruuta" + }, + "ColorPicker": { + "Color: ": "Väri", + "OK": "Hyväksy" + }, + "ContextMenu": { + "Justify Center": "Keskitä", + "Justify Full": "Tasaa molemmat reunat", + "Justify Left": "Tasaa vasemmat reunat", + "Justify Right": "Tasaa oikeat reunat" + }, + "CreateLink": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "EditTag": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "Equation": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "ExtendedFileManager": { + "Align": "Kohdistus", + "Baseline": "Takaraja", + "Border": "Reuna", + "Bottom": "Alle", + "Cancel": "Peruuta", + "Color": "Väri", + "Left": "Vasen", + "Margin": "Marginaali", + "Middle": "Keskelle", + "OK": "Hyväksy", + "Padding": "Palstantäyte", + "Right": "Oikea", + "Top": "Ylös", + "Width": "Leveys", + "Width:": "Leveys" + }, + "Forms": { + "Cancel": "Peruuta", + "Image URL:": "Kuvan osoite", + "OK": "Hyväksy" + }, + "FullPage": { + "Cancel": "Peruuta", + "Description:": "Kuvaus", + "OK": "Hyväksy" + }, + "HorizontalRule": { + "Cancel": "Peruuta", + "Center": "Keskelle", + "Color:": "Väri", + "Horizontal Rule": "Vaakaviiva", + "Layout": "Sommittelu", + "Left": "Vasen", + "OK": "Hyväksy", + "Right": "Oikea", + "Width:": "Leveys", + "percent": "prosenttia", + "pixels": "pikseliä" + }, + "ImageManager": { + "Baseline": "Takaraja", + "Bottom": "Alle", + "Cancel": "Peruuta", + "Left": "Vasen", + "Middle": "Keskelle", + "OK": "Hyväksy", + "Right": "Oikea", + "Top": "Ylös", + "Width:": "Leveys" + }, + "InlineStyler": { + "Background": "Tausta", + "Baseline": "Takaraja", + "Border": "Reuna", + "Bottom": "Alle", + "Center": "Keskelle", + "Char": "Merkki", + "Collapsed borders": "Luhistetut reunat", + "FG Color": "FG Väri", + "Image URL": "Kuvan osoite", + "Layout": "Sommittelu", + "Left": "Vasen", + "Margin": "Marginaali", + "Middle": "Keskelle", + "Padding": "Palstantäyte", + "Right": "Oikea", + "Top": "Ylös", + "Vertical align": "Vertikaali kohdistus", + "Width": "Leveys", + "percent": "prosenttia", + "pixels": "pikseliä" + }, + "InsertAnchor": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "InsertImage": { + "Baseline": "Takaraja", + "Bottom": "Alle", + "Cancel": "Peruuta", + "Image URL:": "Kuvan osoite", + "Layout": "Sommittelu", + "Left": "Vasen", + "Middle": "Keskelle", + "OK": "Hyväksy", + "Right": "Oikea", + "Spacing": "Palstatila", + "Top": "Ylös" + }, + "InsertMarquee": { + "Cancel": "Peruuta", + "Left": "Vasen", + "OK": "Hyväksy", + "Right": "Oikea", + "Width:": "Leveys" + }, + "InsertNote": { + "Cancel": "Peruuta" + }, + "InsertPicture": { + "Baseline": "Takaraja", + "Bottom": "Alle", + "Cancel": "Peruuta", + "Image URL:": "Kuvan osoite", + "Layout": "Sommittelu", + "Left": "Vasen", + "Middle": "Keskelle", + "OK": "Hyväksy", + "Right": "Oikea", + "Spacing": "Palstatila", + "Top": "Ylös", + "Width:": "Leveys" + }, + "InsertSnippet": { + "Cancel": "Peruuta" + }, + "InsertSnippet2": { + "Cancel": "Peruuta" + }, + "InsertTable": { + "Baseline": "Takaraja", + "Border": "Reuna", + "Bottom": "Alle", + "Cancel": "Peruuta", + "Caption": "Otsikko", + "Insert Table": "Lisää taulukko", + "Layout": "Sommittelu", + "Left": "Vasen", + "Middle": "Keskelle", + "OK": "Hyväksy", + "Percent": "prosenttia", + "Pixels": "pikseliä", + "Right": "Oikea", + "Spacing": "Palstatila", + "Top": "Ylös", + "Width:": "Leveys" + }, + "Linker": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "NoteServer": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "PSLocal": { + "Cancel": "Peruuta" + }, + "PasteText": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "PersistentStorage": { + "Cancel": "Peruuta" + }, + "QuickTag": { + "Cancel": "Peruuta" + }, + "SetId": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "SmartReplace": { + "OK": "Hyväksy" + }, + "SpellChecker": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "SuperClean": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "TableOperations": { + "All four sides": "Kaikki neljä sivua", + "Borders": "Reunat", + "Cancel": "Peruuta", + "Caption": "Otsikko", + "Cell Properties": "Solun asetukset", + "Cell properties": "Solun asetukset", + "Delete cell": "Poista solu", + "Delete column": "Poista sarake", + "Delete row": "Poista rivi", + "Description": "Kuvaus", + "Frames": "Kehykset", + "Insert cell after": "Lisää solu perään", + "Insert cell before": "Lisää solu ennen", + "Insert column after": "Lisää sarake perään", + "Insert column before": "Lisää sarake ennen", + "Insert row after": "Lisää rivi alapuolelle", + "Insert row before": "Lisää rivi yläpuolelle", + "Merge cells": "Yhdistä solut", + "No rules": "Ei viivoja", + "No sides": "Ei sivuja", + "OK": "Hyväksy", + "Padding": "Palstantäyte", + "Row Properties": "Rivin asetukset", + "Row properties": "Rivin asetukset", + "Rules will appear between all rows and columns": "Viivat jokaisen rivin ja sarakkeen välillä", + "Rules will appear between columns only": "Viivat ainoastaan sarakkeiden välillä", + "Rules will appear between rows only": "Viivat ainoastaan rivien välillä", + "Spacing": "Palstatila", + "Split column": "Jaa sarake", + "Split row": "Jaa rivi", + "Summary": "Yhteenveto", + "Table Properties": "Taulukon asetukset", + "Table properties": "Taulukon asetukset", + "The bottom side only": "Ainoastaan alapuolelle", + "The left-hand side only": "Ainoastaan vasenreuna", + "The right and left sides only": "Oikea- ja vasenreuna", + "The right-hand side only": "Ainoastaan oikeareuna", + "The top and bottom sides only": "Ylä- ja alapuoli.", + "The top side only": "Ainoastaan yläpuoli", + "Xinha cowardly refuses to delete the last cell in row.": "Ei voida poistaa viimeistä solua rivistä.", + "Xinha cowardly refuses to delete the last column in table.": "Ei voida poistaa viimeistä saraketta taulusta.", + "Xinha cowardly refuses to delete the last row in table.": "Ei voida poistaa viimeistä riviä taulusta.", + "pixels": "pikseliä" + }, + "Template": { + "Cancel": "Peruuta" + }, + "UnFormat": { + "Cancel": "Peruuta", + "OK": "Hyväksy" + }, + "Xinha": { + "About this editor": "Tietoja editorista", + "Background Color": "Taustaväri", + "Bold": "Lihavoitu", + "Bulleted List": "Luettelomerkit", + "Copy selection": "Kopioi maalattu", + "Current style": "Nykyinen tyyli", + "Cut selection": "Leikkaa maalattu", + "Decrease Indent": "Pienennä sisennystä", + "Font Color": "Fontin väri", + "Help using editor": "Näytä ohje", + "Horizontal Rule": "Vaakaviiva", + "Increase Indent": "Lisää sisennystä", + "Insert Table": "Lisää taulukko", + "Insert Web Link": "Lisää linkki", + "Insert/Modify Image": "Lisää kuva", + "Italic": "Kursivoitu", + "Justify Center": "Keskitä", + "Justify Full": "Tasaa molemmat reunat", + "Justify Left": "Tasaa vasemmat reunat", + "Justify Right": "Tasaa oikeat reunat", + "Ordered List": "Numerointi", + "Paste from clipboard": "Liitä leikepyödältä", + "Redoes your last action": "Palauta viimeinen toiminto", + "Strikethrough": "Yliviivattu", + "Subscript": "Alaindeksi", + "Superscript": "Yläindeksi", + "Toggle HTML Source": "HTML-lähdekoodi vs WYSIWYG", + "Underline": "Alleviivattu", + "Undoes your last action": "Peruuta viimeinen toiminto" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Height:": "", + "Insert/Edit Horizontal Rule": "", + "Insert/edit horizontal rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "Float": "", + "Justify": "", + "None": "", + "Text align": "", + "-": "<>", + "Height": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Preview": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Border thickness:": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Rows:": "<>", + "Texttop": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Please click into some cell": "", + "Spacing and padding": "", + "Columns": "<>", + "Merge Cells": "<>", + "Rows": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Path": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top frame (_top)": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + "Open file in new window": "", + " Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Border thickness:": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Insert Image": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Size": "<>", + "Texttop": "<>", + "Vertical padding": "<>", + "Vertical:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fr.js new file mode 100644 index 0000000000..99d978e424 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fr.js @@ -0,0 +1,1570 @@ +// Xinha Language Combined Translation File +// +// LANG: "fr", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/fr.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'fr'; +// _editor_lang_merged_file = '/xinha/lang/merged/fr.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Abbreviation": "Abréviation", + "Cancel": "Annuler", + "Delete": "Supprimer", + "Expansion:": "Explication", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "A propos", + "Close": "Fermer" + }, + "BackgroundImage": { + "Cancel": "Annuler", + "Remove Current Background": "Supprimer le fond actuel", + "Set Page Background Image": "Définir l'Image de Fond", + "Set page background image": "Définir l'image de fond" + }, + "CharCounter": { + "Chars": "Caractères", + "Words": "Mots" + }, + "CharacterMap": { + "Insert special character": "Insérer un caractère spécial" + }, + "ColorPicker": { + "Close": "Fermer", + "Color: ": "Couleur", + "OK": "OK" + }, + "ContextMenu": { + "C_ell Properties...": "P_ropriétés de la cellule...", + "Chec_k Link...": "_Vérifier le lien...", + "Copy": "Copier", + "Create a link": "Créer un lien", + "Current URL is": "L'URL courante est", + "Cut": "Couper", + "De_lete Column": "_Supprimer la colonne", + "Delete the current column": "Supprimer cette colonne", + "Delete the current row": "Supprimer la rangée courante", + "How did you get here? (Please report!)": "Comment êtes-vous arrivé ici ? (Reportez le bug SVP !)", + "I_nsert Row Before": "Insérer une rangée a_vant", + "In_sert Row After": "Insér_er une rangée après", + "Insert C_olumn After": "Insérer une colonne après", + "Insert _Column Before": "I_nsérer une colonne avant", + "Insert a new column after the current one": "Insérer une nouvelle colonne après celle-ci", + "Insert a new column before the current one": "Insérer une nouvelle rangée avant celle-ci", + "Insert a new row after the current one": "Insérer une nouvelle rangée après celle-ci", + "Insert a new row before the current one": "Insérer une nouvelle rangée avant celle-ci", + "Insert a paragraph after the current node": "Insérer un paragraphe après le noeud courant", + "Insert a paragraph before the current node": "Insérer un paragraphe avant le noeud courant", + "Insert paragraph after": "Insérer un paragraphe après", + "Insert paragraph before": "Insérer un paragraphe avant", + "Justify Center": "Aligner au centre", + "Justify Full": "Justifier", + "Justify Left": "Aligner à gauche", + "Justify Right": "Aligner à droite", + "Link points to:": "Le lien pointe sur:", + "Make lin_k...": "Convertir en lien...", + "Opens this link in a new window": "Ouvrir ce lien dans une nouvelle fenêtre", + "Paste": "Coller", + "Please confirm that you want to remove this element:": "Confirmer la suppression de cet élément:", + "Please confirm that you want to unlink this element.": "Voulez-vous vraiment enlever le lien présent sur cet élément.", + "Remove the $elem Element...": "Supprimer Élément $elem...", + "Remove this node from the document": "Supprimer ce noeud du document", + "Ro_w Properties...": "Pr_opriétés de la rangée...", + "Show the Table Cell Properties dialog": "Afficher la boite de propriété des cellules", + "Show the Table Properties dialog": "Afficher la boite de propriété de tableau", + "Show the Table Row Properties dialog": "Afficher la boite de propriété des rangées", + "Show the image properties dialog": "Afficher le dialogue des propriétés d'image", + "Unlink the current element": "Enlever le lien sur cet élément", + "_Delete Row": "Suppr_imer une rangée", + "_Image Properties...": "_Propriétés de l'image...", + "_Modify Link...": "_Modifier le lien...", + "_Remove Link...": "_Supprimer le lien...", + "_Table Properties...": "Proprié_tés de la table..." + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "Confirmez-vous la suppression de ce lien ?", + "Cancel": "Annuler", + "Insert/Modify Link": "Insérer / Modifier un lien", + "New window (_blank)": "Nouvelle fenêtre (_blank)", + "None (use implicit)": "Aucune (implicite)", + "OK": "OK", + "Other": "Autre", + "Same frame (_self)": "Même frame (_self)", + "Target:": "Cible", + "Title (tooltip):": "Texte alternatif", + "Top frame (_top)": "Frame principale (_top)", + "URL:": "URL:", + "You need to select some text before creating a link": "Vous devez sélectionner du texte avant de créer un lien" + }, + "DynamicCSS": { + "Choose stylesheet": "Choisir feuille de style", + "Default": "Défaut", + "Undefined": "Non défini" + }, + "EditTag": { + "Cancel": "Annuler", + "Edit HTML for selected text": "Editer le code HTML du texte sélectionné", + "OK": "OK", + "Tag Editor": "Editeur de tag HTML" + }, + "Equation": { + "Cancel": "Annuler", + "OK": "OK", + "Preview": "Aperçu " + }, + "ExtendedFileManager": { + "Absbottom": "Absbottom", + "Absmiddle": "Absmiddle", + "Align": "Alignement", + "Alt": "Alt", + "Baseline": "Baseline", + "Border": "Bordure", + "Border Color": "Couleur de la bordure", + "Bottom": "Bas", + "Cancel": "Annuler", + "Clear": "Effacer", + "Color": "Couleur", + "Constrain Proportions": "Maintenir les proportions", + "Copy": "Copier", + "Crop": "Recadrer", + "Cut": "Couper", + "Directory": "Répertoire", + "Directory Up": "Remonter", + "Edit": "Modifier", + "File Manager": "Gestionnaire de fichiers", + "Filename:": "Nom du fichier:", + "Filesize:": "Taille du fichier:", + "Flip Horizontal": "Symétrie hor.", + "Flip Image": "Symétrie", + "Flip Vertical": "Symétrie ver.", + "GIF format is not supported, image editing not supported.": "Le format GIF n'est pas supporté, édition d'image impossible.", + "Height": "Hauteur", + "Height:": "Hauteur:", + "Insert File Link": "Insérer un lien vers fichier", + "Invalid base directory:": "Dossier racine invalide:", + "JPEG High": "JPEG haut", + "JPEG Low": "JPEG bas", + "JPEG Medium": "JPEG moyen", + "Left": "Gauche", + "Loading": "Chargement", + "Lock": "Verrouiller", + "Margin": "Marge", + "Marker": "Marqueur", + "Measure": "Règle", + "Middle": "Milieu", + "New Folder": "Nouveau dossier", + "New window (_blank)": "Nouvelle fenêtre (_blank)", + "No Files Found": "Aucun fichier", + "No Image Available": "Aucune image disponible", + "None (use implicit)": "Aucune (implicite)", + "Not set": "Indéfini", + "OK": "OK", + "Padding": "Marge intérieure", + "Positioning of this image": "Position de cette image", + "Preview": "Aperçu ", + "Quality:": "Qualité:", + "Refresh": "Actualiser", + "Rename": "Renommer", + "Resize": "Redimen.", + "Right": "Droite", + "Rotate": "Pivoter", + "Rotate Image": "Pivoter l'image", + "Same frame (_self)": "Même frame (_self)", + "Save": "Enregistrer", + "Start X:": "Départ X", + "Start Y:": "Départ Y", + "Target Window": "Fenêtre cible", + "Texttop": "Texttop", + "Title (tooltip)": "Tooltip", + "Toggle marker color": "Changer la couleur du marqueur", + "Top": "Haut", + "Top frame (_top)": "Frame principale (_top)", + "Trash": "Corbeille", + "Upload": "Envoyer", + "W:": "W:", + "Width": "Largeur", + "Width:": "Largeur:", + "You must select some text before making a new link.": "Vous devez sélectionner du texte avant de faire un nouveau lien.", + "Zoom": "Zoom" + }, + "FindReplace": { + "Case sensitive search": "Recherche sensible à la casse", + "Clear": "Effacer", + "Done": "Fin", + "Enter the text you want to find": "Texte à trouver", + "Find and Replace": "Chercher et Remplacer", + "Highlight": "Surligner", + "Inform a replacement word": "Indiquez un mot de remplacement", + "Next": "Suivant", + "Options": "Options", + "Replace with:": "Remplacer par", + "Search for:": "Chercher", + "Substitute all occurrences": "Remplacer toutes les occurences", + "Substitute this occurrence?": "Remplacer cette occurrence ?", + "Undo": "Annuler", + "Whole words only": "Mots entiers seulement", + "found item": "élément trouvé", + "found items": "éléments trouvés", + "not found": "non trouvé", + "replaced item": "élément remplacé", + "replaced items": "éléments remplacés" + }, + "FormOperations": { + "Insert a Form.": "Insérer un formulaire", + "Insert a check box.": "Insérer une case à cocher", + "Insert a multi-line text field.": "Insérer un champ texte à lignes multiples", + "Insert a radio button.": "Insérer un bouton radio", + "Insert a select field.": "Insérer une boite de sélection", + "Insert a submit/reset button.": "Insérer un bouton de soumission/annulation", + "Insert a text, password or hidden field.": "Insérer un texte, un mot de passe ou un champ invisible" + }, + "Forms": { + "Cancel": "Annuler", + "Image URL:": "URL", + "Name": "Nom", + "Name/ID:": "Nom/ID", + "OK": "OK", + "Options": "Options", + "Rows:": "Lignes", + "Size:": "Taille", + "Text:": "Texte" + }, + "FullPage": { + "Alternate style-sheet:": "Feuille CSS alternative", + "Background color:": "Couleur d'arrière plan", + "Cancel": "Annuler", + "Character set:": "Jeu de caractères", + "DOCTYPE:": "DOCTYPE", + "Description:": "Description", + "Document properties": "Propriétés du document", + "Document title:": "Titre du document", + "Keywords:": "Mots clés", + "OK": "OK", + "Primary style-sheet:": "Feuille CSS primaire", + "Text color:": "Couleur de texte", + "UTF-8 (recommended)": "UTF-8 (recommandé)" + }, + "FullScreen": { + "Maximize/Minimize Editor": "Agrandir/Réduire l'éditeur" + }, + "HorizontalRule": { + "Alignment:": "Alignement", + "Cancel": "Annuler", + "Center": "Centre", + "Color:": "Couleur", + "Height:": "Hauteur", + "Horizontal Rule": "Règle horizontale", + "Insert/edit horizontal rule": "Insérer une règle horizontale", + "Layout": "Layout", + "Left": "Gauche", + "No shading": "Pas d'ombre", + "OK": "OK", + "Right": "Droite", + "Style": "Style", + "Width:": "Largeur", + "percent": "pourcent", + "pixels": "pixels" + }, + "HtmlTidy": { + "Auto-Tidy": "Tidy automatique", + "Don't Tidy": "Tidy non utilisé", + "HTML Tidy": "HTML Tidy", + "Tidy failed. Check your HTML for syntax errors.": "Tidy a échoué. Vérifiez votre HTML for des erreurs de syntaxe" + }, + "ImageManager": { + "Absbottom": "Absbottom", + "Absmiddle": "Absmiddle", + "Angle:": "Angle", + "Baseline": "Baseline", + "Bottom": "Bas", + "Cancel": "Annuler", + "Clear": "Effacer", + "Constrain Proportions": "Conserver les proportions", + "Crop": "Recadrer", + "Directory": "Répertoire", + "Directory Up": "Remonter", + "Edit": "Editer", + "Filename:": "Nom", + "Flip Horizontal": "Symétrie horizontale", + "Flip Image": "Symétrie", + "Flip Vertical": "Symétrie verticale", + "Folder Name:": "Nom du répertoire", + "GIF format is not supported, image editing not supported.": "Format GIF non supporté, édition d'image non supportée", + "Height:": "Hauteur", + "Image Format": "Format d'image", + "Insert Image": "Insérer une image", + "Invalid base directory:": "Répertoire de base invalide:", + "JPEG High": "JPEG haut", + "JPEG Low": "JPEG bas", + "JPEG Medium": "JPEG moyen", + "Left": "Gauche", + "Lock": "Cadenas", + "Marker": "Marqueur", + "Measure": "Mesure", + "Middle": "Milieu", + "New Folder": "Nouveau répertoire", + "No Image Available": "Aucune image disponible", + "No Images Found": "Aucune image trouvée", + "Not set": "Indéfini", + "OK": "OK", + "Positioning of this image": "Position de cette image", + "Quality:": "Qualité", + "Refresh": "Rafraîchir", + "Resize": "Retailler", + "Right": "Droite", + "Rotate": "Pivoter", + "Rotate Image": "Rotation", + "Save": "Sauver", + "Start X:": "Début X", + "Start Y:": "Début Y", + "Texttop": "Texttop", + "Top": "Haut", + "Trash": "Détruire", + "W:": "L:", + "Width:": "Largeur" + }, + "InlineStyler": { + "Background": "Arrière plan", + "Baseline": "Baseline", + "Border": "Bordure", + "Bottom": "Bas", + "Center": "Centre", + "Char": "Charactère", + "Collapsed borders": "Bordure effondrés", + "FG Color": "Couleur de face", + "Float": "Flotteur", + "Height": "Hauteur", + "Image URL": "URL pour l'image", + "Justify": "Justifié", + "Layout": "Layout", + "Left": "Gauche", + "Margin": "Marge", + "Middle": "Milieu", + "None": "Aucun", + "Padding": "Remplissage", + "Right": "Droite", + "Text align": "Alignement", + "Top": "Haut", + "Vertical align": "Vertical", + "Width": "Largeur", + "percent": "pourcent", + "pixels": "pixels" + }, + "InsertAnchor": { + "Anchor name": "Nom de l'ancre", + "Cancel": "Annuler", + "Delete": "Supprimer", + "Insert Anchor": "Insérer une ancre", + "OK": "OK" + }, + "InsertImage": { + "Absbottom": "Absbottom", + "Absmiddle": "Absmiddle", + "Alignment:": "Alignement", + "Alternate text:": "Texte alternatif", + "Baseline": "Baseline", + "Border thickness:": "Epaisseur bordure", + "Bottom": "Bas", + "Cancel": "Annuler", + "Enter the image URL here": "Entrer l'URL de l'image ici", + "For browsers that don't support images": "Pour les navigateurs qui ne supportent pas les images", + "Horizontal padding": "Marge horizontale interne", + "Horizontal:": "Horizontal", + "Image Preview:": "Prévisualisation", + "Image URL:": "URL", + "Insert Image": "Insérer une image", + "Layout": "Layout", + "Leave empty for no border": "Laisser vide pour pas de bordure", + "Left": "Gauche", + "Middle": "Milieu", + "Not set": "Indéfini", + "OK": "OK", + "Positioning of this image": "Position de cette image", + "Preview": "Aperçu ", + "Preview the image in a new window": "Prévisualiser l'image dans une nouvelle fenêtre", + "Right": "Droite", + "Spacing": "Espacement", + "Texttop": "Texttop", + "Top": "Haut", + "Vertical padding": "Marge verticale interne", + "Vertical:": "Vertical", + "You must enter the URL": "Vous devez entrer l'URL" + }, + "InsertMarquee": { + "Background-Color:": "Couleur de fond", + "Behavior:": "Comportement", + "Cancel": "Annuler", + "Direction:": "Direction", + "Height:": "Hauteur", + "Insert scrolling marquee": "Insérer marquee défilant", + "Left": "Gauche", + "Name": "Nom", + "Name/ID:": "Nom/ID", + "OK": "OK", + "Right": "Droite", + "Scroll Amount:": "Quantité de défilement", + "Scroll Delay:": "Délai du défilement", + "Speed Control": "Controle de vitesse", + "Text:": "Texte", + "Width:": "Largeur" + }, + "InsertNote": { + "Cancel": "Annuler" + }, + "InsertPagebreak": { + "Page break": "Séparateur de page" + }, + "InsertPicture": { + "Absbottom": "Absbottom", + "Absmiddle": "Absmiddle", + "Alignment:": "Alignement", + "Alternate text:": "Texte alternatif", + "Baseline": "Baseline", + "Border thickness:": "Epaisseur bordure", + "Bottom": "Bas", + "Cancel": "Annuler", + "Enter the image URL here": "Entrer l'URL de l'image ici", + "For browsers that don't support images": "Pour les navigateurs qui ne supportent pas les images", + "Height:": "Hauteur", + "Horizontal padding": "Marge horizontale interne", + "Horizontal:": "Horizontal", + "Image Preview:": "Prévisualisation", + "Image URL:": "URL", + "Insert Image": "Insérer une image", + "Layout": "Layout", + "Leave empty for no border": "Laisser vide pour pas de bordure", + "Left": "Gauche", + "Middle": "Milieu", + "Not set": "Indéfini", + "OK": "OK", + "Open file in new window": "Ouvrir le fichier dans une nouvelle fenêtre", + "Positioning of this image": "Position de cette image", + "Preview": "Prévisualisation", + "Preview the image in a new window": "Prévisualiser l'image dans une nouvelle fenêtre", + "Right": "Droite", + "Size": "Taille", + "Spacing": "Espacement", + "Texttop": "Texttop", + "Top": "Haut", + "Upload file": "Télécharger", + "Vertical padding": "Marge verticale interne", + "Vertical:": "Vertical", + "Width:": "Largeur" + }, + "InsertSmiley": { + "Insert Smiley": "Insérer un smiley" + }, + "InsertSnippet": { + "Cancel": "Annuler" + }, + "InsertSnippet2": { + "Cancel": "Annuler" + }, + "InsertTable": { + "Absbottom": "Absbottom", + "Absmiddle": "Absmiddle", + "Alignment:": "Alignement", + "Baseline": "Baseline", + "Border": "Bordure", + "Border thickness:": "Epaisseur bordure", + "Bottom": "Bas", + "Cancel": "Annuler", + "Caption": "Étiquette", + "Cell padding:": "Marge interne", + "Cell spacing:": "Espacement", + "Cols:": "Colonnes", + "Em": "Em", + "Fixed width columns": "Colonnes à taille fixe", + "Insert Table": "Insérer un tableau", + "Layout": "Layout", + "Leave empty for no border": "Laisser vide pour pas de bordure", + "Left": "Gauche", + "Middle": "Milieu", + "Not set": "Indéfini", + "Number of columns": "Nombre de colonnes", + "Number of rows": "Nombre de lignes", + "OK": "OK", + "Percent": "Pourcent", + "Pixels": "Pixels", + "Positioning of this table": "Position du tableau", + "Right": "Droite", + "Rows:": "Lignes", + "Space between adjacent cells": "Espace entre les cellules adjacentes", + "Space between content and border in cell": "Espace entre le contenu et la bordure d'une cellule", + "Spacing": "Espacement", + "Texttop": "Texttop", + "Top": "Haut", + "Width of the table": "Largeur du tableau", + "Width unit": "Unités de largeur", + "Width:": "Largeur", + "You must enter a number of columns": "Vous devez entrer le nombre de colonnes", + "You must enter a number of rows": "Vous devez entrer le nombre de lignes" + }, + "LangMarks": { + "— language —": "— Langue —", + "English": "anglais", + "French": "français", + "Greek": "grec", + "Latin": "latin", + "language select": "Sélection de la langue" + }, + "Linker": { + "Are you sure you wish to remove this link?": "Confirmez-vous la suppression de ce lien ?", + "Cancel": "Annuler", + "Email Address:": "Adresse email", + "Email Link": "Lien email", + "Insert/Modify Link": "Insérer / Modifier un lien", + "Message Template:": "Message", + "Name:": "Nom", + "New Window": "Nouvelle fenêtre", + "OK": "OK", + "Ordinary Link": "Lien standard", + "Popup Window": "Fenêtre popup", + "Remove Link": "Supprimer", + "Same Window (jump out of frames)": "Même fenêtre (sort des frames)", + "Size:": "Taille", + "Subject:": "Sujet", + "Target:": "Cible", + "URL Link": "Lien URL", + "URL:": "URL:", + "You must select some text before making a new link.": "Vous devez sélectionner un texte avant de créer un nouveau lien" + }, + "ListType": { + "Choose list style type (for ordered lists)": "Choisissez le style de liste (pour les listes ordonnées)", + "Decimal numbers": "Nombres décimaux", + "Lower greek letters": "Lettres grecques minuscule", + "Lower latin letters": "Lettres latines minuscule", + "Lower roman numbers": "Nombres romains minuscule", + "Upper latin letters": "Lettres latines majuscule", + "Upper roman numbers": "Nombres romains majuscule" + }, + "MootoolsFileManager": { + "Insert File Link": "Insérer un lien vers fichier", + "You must select some text before making a new link.": "Vous devez sélectionner un texte avant de créer un nouveau lien" + }, + "NoteServer": { + "Add GUIDO Code in a textbox on the page": "Ajouter le code source GUIDO dans un cadre", + "Add MIDI link to allow students to hear the music": "Ajouter un lien MIDI pour permettre aux étudiants d'écouter la partition", + "Cancel": "Annuler", + "Format": "Format", + "Guido code": "Code Guido", + "Image Preview": "Aperçu de l'image", + "Image in applet": "Image dans une applet", + "Insert GUIDO Music Notation": "Insérer une partition musicale GUIDO", + "MIDI File": "Fichier MIDI", + "OK": "OK", + "Options": "Options", + "Preview": "Aperçu ", + "Preview the image in a new window": "Prévisualiser l'image dans une nouvelle fenêtre", + "Source Code": "Code source", + "Zoom": "Zoom" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Le bouton Coller ne fonctionne pas sur les navigateurs basés sur Mozilla (pour des raisons de sécurité). Pressez CTRL-V au clavier pour coller directement." + }, + "PSLocal": { + "Cancel": "Annuler" + }, + "PasteText": { + "Cancel": "Annuler", + "OK": "OK", + "Paste as Plain Text": "Copier comme texte pur" + }, + "PersistentStorage": { + "Cancel": "Annuler", + "Copy": "Copier", + "Delete": "Supprimer", + "Directory Up": "Remonter", + "File Manager": "Gestionnaire de fichiers", + "Filename": "Nom", + "Insert Image": "Insérer une image", + "New Folder": "Nouveau répertoire", + "Save": "Enregistrer", + "You must select some text before making a new link.": "Vous devez sélectionner un texte avant de créer un nouveau lien" + }, + "QuickTag": { + "ATTRIBUTES": "ATTRIBUTS", + "Cancel": "Annuler", + "Colors": "Couleurs", + "Enter the TAG you want to insert": "Entrez la balise que vous voulez insérer", + "No CSS class avaiable": "Pas de classe CSS accessible", + "OPTIONS": "OPTIONS", + "Ok": "OK", + "Quick Tag Editor": "Editeur rapide de balise", + "TAGs": "Balises", + "There are some unclosed quote": "Il y a des apostrophes mal fermées", + "This attribute already exists in the TAG": "Cet attribute existe déjà sur cette balise", + "You have to select some text": "Vous devez sélectionner du texte" + }, + "SaveSubmit": { + "Ready": "Prêt", + "Save": "Enregistrer", + "Saving...": "Enregistrement...", + "in progress": "en cours" + }, + "SetId": { + "Cancel": "Annuler", + "Delete": "Supprimer", + "OK": "OK" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "«", + "Convert all quotes and dashes in the current document": "Convertir tous les guillemets et tirets dans le document actuel", + "Enable automatic replacements": "Activer le remplacement automatique", + "OK": "OK", + "OpeningDoubleQuotes": "»", + "SmartReplace Settings": "Paramètres SmartReplace" + }, + "SpellChecker": { + "Cancel": "Annuler", + "Dictionary": "Dictionnaire", + "Finished list of mispelled words": "Liste des mots mal orthographiés", + "I will open it in a new page.": "Ouverture dans une nouvelle fenêtre", + "Ignore": "Ignorer", + "Ignore all": "Tout ignorer", + "No mispelled words found with the selected dictionary.": "Aucune erreur orthographique avec le dictionnaire sélectionné.", + "OK": "OK", + "Original word": "Mot original", + "Please confirm that you want to open this link": "Veuillez confirmer l'ouverture de ce lien", + "Please wait. Calling spell checker.": "Veuillez patienter. Appel du correcteur.", + "Please wait: changing dictionary to": "Veuillez patienter. Changement du dictionnaire vers", + "Re-check": "Vérifier encore", + "Replace": "Remplacer", + "Replace all": "Tout remplacer", + "Replace with": "Remplacer par", + "Revert": "Annuler", + "Spell-check": "Correction", + "Suggestions": "Suggestions", + "This will drop changes and quit spell checker. Please confirm.": "Ceci fermera la fenêtre et annulera les modifications. Veuillez confirmer." + }, + "Stylist": { + "Styles": "Styles" + }, + "SuperClean": { + "Cancel": "Annuler", + "Clean up HTML": "Nettoyer le code HTML", + "General tidy up and correction of some problems.": "Nettoyage générique et correction des problèmes mineurs.", + "OK": "OK", + "Please select from the following cleaning options...": "Veuillez sélectionner une option de nettoyage.", + "Remove custom font sizes.": "Supprimer les tailles de polices personnalisées.", + "Remove custom text colors.": "Supprimer les couleurs de texte personalisées.", + "Remove custom typefaces (font \"styles\").": "Supprimer les polices personalisées (font \"styles\").", + "Remove lang attributes.": "Supprimer les attributs de langue." + }, + "TableOperations": { + "All four sides": "Quatre cotés", + "Borders": "Bordures", + "Cancel": "Annuler", + "Caption": "Étiquette", + "Cell Properties": "Propriétés de cellule", + "Cell properties": "Cell properties", + "Delete cell": "Supprimer une cellule", + "Delete column": "Supprimer la colonne", + "Delete row": "Supprimer une rangée", + "Description": "Description", + "Frames": "Vues", + "Insert cell after": "Insérer une cellule après", + "Insert cell before": "Insérer une cellule avant", + "Insert column after": "Insérer une colonne après", + "Insert column before": "Insérer une colonne avant", + "Insert row after": "Insérer une rangée après", + "Insert row before": "Insérer une rangée avant", + "Merge cells": "Fusionner les cellules", + "No rules": "Aucune règle", + "No sides": "Aucun côté", + "OK": "OK", + "Padding": "Remplissage", + "Please click into some cell": "Cliquer sur une cellule", + "Row Properties": "Propriétés de rangée", + "Row properties": "Propriétés de rangée", + "Rows": "Lignes", + "Rules will appear between all rows and columns": "Règles entre les rangées et les cellules", + "Rules will appear between columns only": "Règles entre les colonnes seulement", + "Rules will appear between rows only": "Règles entre les rangées seulement", + "Spacing": "Espacement", + "Spacing and padding": "Espacement et remplissage", + "Split column": "Diviser une colonne", + "Split row": "Diviser la rangée", + "Summary": "Sommaire", + "Table Properties": "Propriétés de table", + "Table properties": "Propriétés de table", + "The bottom side only": "Côté du bas seulement", + "The left-hand side only": "Côté gauche seulement", + "The right and left sides only": "Côté gauche et droit seulement", + "The right-hand side only": "Côté droit seulement", + "The top and bottom sides only": "Côté haut et bas seulement", + "The top side only": "Côté haut seulement", + "Xinha cowardly refuses to delete the last cell in row.": "Il est impossible de supprimer la dernière cellule de la rangée.", + "Xinha cowardly refuses to delete the last column in table.": "Il est impossible de supprimer la dernière colonne de la table.", + "Xinha cowardly refuses to delete the last row in table.": "Il est impossible de supprimer la dernière rangée de la table", + "pixels": "pixels" + }, + "Template": { + "Cancel": "Annulation", + "Insert template": "Insérer un template" + }, + "UnFormat": { + "All": "Tout", + "All HTML:": "Tout le HTML", + "Cancel": "Annuler", + "Cleaning Area": "Zone de nettoyage", + "Cleaning options": "Options de nettoyage", + "Formatting:": "Format", + "OK": "OK", + "Page Cleaner": "Nettoyeur de page", + "Select which types of formatting you would like to remove.": "Sélectionnez quel type de formatage vous voulez supprimer.", + "Selection": "Sélection" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "Vous n'avez pas enregistré vos modifications" + }, + "Xinha": { + "— format —": "— Format —", + "About this editor": "A propos", + "Address": "Adresse", + "Background Color": "Surlignage", + "Bold": "Gras", + "Bulleted List": "Liste à puces", + "Clean content pasted from Word": "Nettoyage du contenu copié depuis Word", + "Clear Inline Font Specifications": "Supprimer paramètres inline de la police", + "Clear MSOffice tags": "Supprimer tags MSOffice", + "Close": "Fermer", + "Constructing object": "Construction de l'objet", + "Copy selection": "Copier la sélection", + "Create Statusbar": "Construction de la barre de status", + "Create Toolbar": "Construction de la barre d'icones", + "Current style": "Style courant", + "Cut selection": "Couper la sélection", + "Decrease Indent": "Diminuer le retrait", + "Direction left to right": "Direction de gauche à droite", + "Direction right to left": "Direction de droite à gauche", + "ENTER": "ENTREE", + "Editor Help": "Aide de l'éditeur", + "Finishing": "Chargement bientôt terminé", + "Font Color": "Couleur de police", + "Formatted": "Formaté", + "Generate Xinha framework": "Génération de Xinha", + "Heading 1": "Titre 1", + "Heading 2": "Titre 2", + "Heading 3": "Titre 3", + "Heading 4": "Titre 4", + "Heading 5": "Titre 5", + "Heading 6": "Titre 6", + "Headings": "Titres", + "Help using editor": "Aide", + "Horizontal Rule": "Ligne horizontale", + "Increase Indent": "Augmenter le retrait", + "Init editor size": "Initialisation de la taille d'édition", + "Insert Table": "Insérer un tableau", + "Insert Web Link": "Insérer un lien", + "Insert/Modify Image": "Insérer / Modifier une image", + "Insert/Overwrite": "Insertion / Remplacement", + "Italic": "Italique", + "Justify Center": "Centrer", + "Justify Full": "Justifier", + "Justify Left": "Aligner à gauche", + "Justify Right": "Aligner à droite", + "Keyboard shortcuts": "Raccourcis clavier", + "Loading in progress. Please wait!": "Chargement en cours. Veuillez patienter!", + "Loading plugin $plugin": "Chargement du plugin $plugin", + "Normal": "Normal", + "Ordered List": "Liste numérotée", + "Paste from clipboard": "Coller depuis le presse-papier", + "Path": "Chemin", + "Print document": "Imprimer document", + "Redoes your last action": "Répéter la dernière action", + "Register plugin $plugin": "Enregistrement du plugin $plugin", + "Remove formatting": "Supprimer mise en forme", + "SHIFT-ENTER": "SHIFT+ENTREE", + "Save as": "Enregistrer sous", + "Select all": "Tout sélectionner", + "Set format to paragraph": "Applique le format paragraphe", + "Split Block": "Séparer les blocs", + "Strikethrough": "Barré", + "Subscript": "Indice", + "Superscript": "Exposant", + "The editor provides the following key combinations:": "L'éditeur fournit les combinaisons de touches suivantes :", + "Toggle Borders": "Afficher / Masquer les bordures", + "Toggle HTML Source": "Afficher / Masquer code source", + "Underline": "Souligné", + "Undoes your last action": "Annuler la dernière action", + "Would you like to clear font colours?": "Voulez-vous supprimer les couleurs ?", + "Would you like to clear font sizes?": "Voulez-vous supprimer les tailles ?", + "Would you like to clear font typefaces?": "Voulez-vous supprimer les types ?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Vous êtes en MODE TEXTE. Appuyez sur le bouton [<>] pour retourner au mode WYSIWYG.", + "insert linebreak": "Insère un saut de ligne", + "new paragraph": "Nouveau paragraphe" + }, + "__NEW_TRANSLATIONS__": { + "CharCounter": { + "... in progress": "", + "HTML": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "" + }, + "ContextMenu": { + "Delete Cell": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Merge Cells": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "EditTag": { + "Edit Tag By Peg": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "" + }, + "FullPage": { + "...": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "western (ISO-8859-1)": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/Edit Horizontal Rule": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page Break": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "" + }, + "LangMarks": { + "', '": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Location Bar:": "", + "Menu Bar:": "", + "PopupWindow": "", + "Resizeable:": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Title:": "", + "Toolbar:": "" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "" + }, + "SmartReplace": { + "ClosingSingleQuote": "", + "OpeningSingleQuote": "", + "SmartReplace": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Cleaning Scope": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove emphasis and annotations.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Courier New": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Georgia": "", + "Impact": "", + "Loading Core": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Select Color": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Set Background": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "D:": "", + "File List": "", + "Folder": "", + "GIF": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Image List": "", + "Keyword": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "D:": "<>", + "GIF": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "PNG": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Continuous": "", + "Marquee Editor": "", + "Slide": "" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "GUIDO Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "File List": "<>", + "Insert": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "HTMLArea Spell Checker": "", + "Info": "", + "Learn": "", + "pliz weit ;-)": "", + "Spell Checker": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fr_ca.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fr_ca.js new file mode 100644 index 0000000000..d05edc4216 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/fr_ca.js @@ -0,0 +1,1503 @@ +// Xinha Language Combined Translation File +// +// LANG: "fr_ca", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/fr_ca.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'fr_ca'; +// _editor_lang_merged_file = '/xinha/lang/merged/fr_ca.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "UnsavedChanges": { + "You have unsaved changes in the editor": "Tu n'as pas enregistré tes modifications" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Cancel": "", + "Delete": "", + "Expansion:": "", + "OK": "" + }, + "AboutBox": { + "About this editor": "<>", + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>", + "OK": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "", + "Justify Center": "<>", + "Justify Full": "<>", + "Justify Left": "<>", + "Justify Right": "<>" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "", + "Cancel": "<>", + "OK": "<>" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "", + "Cancel": "<>", + "OK": "<>" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`hArr`": "", + "`harr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`larr`": "", + "`lArr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`Omega`": "", + "`omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`psi`": "", + "`Psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`theta`": "", + "`Theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`xi`": "", + "`Xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "lambda": "", + "Lambda": "", + "lArr": "", + "larr": "", + "lim_(x->oo)": "", + "mu": "", + "nn": "", + "NN": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "Sigma": "", + "sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "", + "Cancel": "<>", + "OK": "<>" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Cancel": "<>", + "OK": "<>", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "", + "Cancel": "<>", + "OK": "<>" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/Edit Horizontal Rule": "", + "Insert/edit horizontal rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "", + "Cancel": "<>", + "Horizontal Rule": "<>", + "OK": "<>" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Cancel": "<>", + "Delete": "<>", + "OK": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "OK": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "", + "Cancel": "<>" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "", + "Cancel": "<>" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "Cancel": "<>", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Insert Table": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "OK": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Cancel": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "OK": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "", + "Cancel": "<>", + "OK": "<>" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "", + "Cancel": "<>" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Cancel": "<>", + "Delete": "<>", + "OK": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "", + "OK": "<>" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "", + "Cancel": "<>", + "OK": "<>" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell Properties": "", + "Cell properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row Properties": "", + "Row properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Cancel": "<>", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "OK": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "About this editor": "", + "Address": "", + "Arial": "", + "Background Color": "", + "Bold": "", + "Bulleted List": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Copy selection": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Current style": "", + "Cut selection": "", + "Decrease Indent": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Font Color": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Help using editor": "", + "Horizontal Rule": "", + "Impact": "", + "Increase Indent": "", + "Init editor size": "", + "insert linebreak": "", + "Insert Table": "", + "Insert Web Link": "", + "Insert/Modify Image": "", + "Insert/Overwrite": "", + "Italic": "", + "Justify Center": "", + "Justify Full": "", + "Justify Left": "", + "Justify Right": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Ordered List": "", + "Paste from clipboard": "", + "Path": "", + "Print document": "", + "Redoes your last action": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Strikethrough": "", + "Subscript": "", + "Superscript": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Toggle HTML Source": "", + "Touch here first to activate editor.": "", + "Underline": "", + "Undoes your last action": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "", + "Cancel": "<>" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "OK": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top": "<>", + "Top frame (_top)": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "OK": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Cancel": "<>", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "OK": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "OK": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Cancel": "<>", + "Image Preview": "<>", + "OK": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "", + "Cancel": "<>" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Cancel": "<>", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Cancel": "<>", + "OK": "<>", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "", + "Cancel": "<>" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "", + "Cancel": "<>", + "OK": "<>" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/gb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/gb.js new file mode 100644 index 0000000000..19686ece06 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/gb.js @@ -0,0 +1,1503 @@ +// Xinha Language Combined Translation File +// +// LANG: "gb", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/gb.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'gb'; +// _editor_lang_merged_file = '/xinha/lang/merged/gb.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Cancel": "", + "Delete": "", + "Expansion:": "", + "OK": "" + }, + "AboutBox": { + "About this editor": "<>", + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>", + "OK": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "", + "Justify Center": "<>", + "Justify Full": "<>", + "Justify Left": "<>", + "Justify Right": "<>" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "", + "Cancel": "<>", + "OK": "<>" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "", + "Cancel": "<>", + "OK": "<>" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`hArr`": "", + "`harr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`larr`": "", + "`lArr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`Omega`": "", + "`omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`psi`": "", + "`Psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`theta`": "", + "`Theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`xi`": "", + "`Xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "lambda": "", + "Lambda": "", + "lArr": "", + "larr": "", + "lim_(x->oo)": "", + "mu": "", + "nn": "", + "NN": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "Sigma": "", + "sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "", + "Cancel": "<>", + "OK": "<>" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Cancel": "<>", + "OK": "<>", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "", + "Cancel": "<>", + "OK": "<>" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/Edit Horizontal Rule": "", + "Insert/edit horizontal rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "", + "Cancel": "<>", + "Horizontal Rule": "<>", + "OK": "<>" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Cancel": "<>", + "Delete": "<>", + "OK": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "OK": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "", + "Cancel": "<>" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "", + "Cancel": "<>" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "Cancel": "<>", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Insert Table": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "OK": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Cancel": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "OK": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "", + "Cancel": "<>", + "OK": "<>" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "", + "Cancel": "<>" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Cancel": "<>", + "Delete": "<>", + "OK": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "", + "OK": "<>" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "", + "Cancel": "<>", + "OK": "<>" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell Properties": "", + "Cell properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row Properties": "", + "Row properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Cancel": "<>", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "OK": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "About this editor": "", + "Address": "", + "Arial": "", + "Background Color": "", + "Bold": "", + "Bulleted List": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Copy selection": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Current style": "", + "Cut selection": "", + "Decrease Indent": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Font Color": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Help using editor": "", + "Horizontal Rule": "", + "Impact": "", + "Increase Indent": "", + "Init editor size": "", + "insert linebreak": "", + "Insert Table": "", + "Insert Web Link": "", + "Insert/Modify Image": "", + "Insert/Overwrite": "", + "Italic": "", + "Justify Center": "", + "Justify Full": "", + "Justify Left": "", + "Justify Right": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Ordered List": "", + "Paste from clipboard": "", + "Path": "", + "Print document": "", + "Redoes your last action": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Strikethrough": "", + "Subscript": "", + "Superscript": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Toggle HTML Source": "", + "Touch here first to activate editor.": "", + "Underline": "", + "Undoes your last action": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "", + "Cancel": "<>" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "OK": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top": "<>", + "Top frame (_top)": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "OK": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Cancel": "<>", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "OK": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "OK": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Cancel": "<>", + "Image Preview": "<>", + "OK": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "", + "Cancel": "<>" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Cancel": "<>", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Cancel": "<>", + "OK": "<>", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "", + "Cancel": "<>" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "", + "Cancel": "<>", + "OK": "<>" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/he.js new file mode 100644 index 0000000000..e9f00e0de4 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/he.js @@ -0,0 +1,1577 @@ +// Xinha Language Combined Translation File +// +// LANG: "he", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/he.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'he'; +// _editor_lang_merged_file = '/xinha/lang/merged/he.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "ביטול", + "OK": "אישור" + }, + "AboutBox": { + "About this editor": "אודות עורך זה" + }, + "BackgroundImage": { + "Cancel": "ביטול" + }, + "ColorPicker": { + "Color: ": "צבע", + "OK": "אישור" + }, + "ContextMenu": { + "C_ell Properties...": "מאפייני ת_א...", + "Chec_k Link...": "בדו_ק קישור...", + "Copy": "העתק", + "Create a link": "יצירת קישור", + "Current URL is": "URL נוכחי הוא", + "Cut": "גזור", + "De_lete Column": "מח_ק טור", + "Delete the current column": "מחיקת את הטור הנוכחי", + "Delete the current row": "מחיקת את השורה הנוכחית", + "How did you get here? (Please report!)": "איך הגעת הנה? (אנא דווח!)", + "I_nsert Row Before": "ה_כנס שורה לפני", + "In_sert Row After": "הכנ_ס שורה אחרי", + "Insert C_olumn After": "הכנס ט_ור אחרי", + "Insert _Column Before": "הכנס _טור לפני", + "Insert a new column after the current one": "הוספת טור חדש אחרי הנוכחי", + "Insert a new column before the current one": "הוספת טור חדש לפני הנוכחי", + "Insert a new row after the current one": "הוספת שורה חדשה אחרי הנוכחית", + "Insert a new row before the current one": "הוספת שורה חדשה לפני הנוכחית", + "Justify Center": "ישור למרכז", + "Justify Full": "ישור לשורה מלאה", + "Justify Left": "ישור לשמאל", + "Justify Right": "ישור לימין", + "Link points to:": "הקישור מצביע אל:", + "Make lin_k...": "צור קי_שור...", + "Opens this link in a new window": "פתיחת קישור זה בחלון חדש", + "Paste": "הדבק", + "Please confirm that you want to remove this element:": "אנא אשר שברצונך להסיר את האלמנט הזה:", + "Please confirm that you want to unlink this element.": "אנא אשר שאתה רוצה לנתק את אלמנט זה.", + "Remove the $elem Element...": "הסר את אלמנט ה- $elem...", + "Remove this node from the document": "הסרה של node זה מהמסמך", + "Ro_w Properties...": "מאפייני _טור...", + "Show the Table Cell Properties dialog": "מציג את חלון הדו-שיח של מאפייני תא בטבלה", + "Show the Table Properties dialog": "מציג את חלון הדו-שיח של מאפייני טבלה", + "Show the Table Row Properties dialog": "מציג את חלון הדו-שיח של מאפייני שורה בטבלה", + "Show the image properties dialog": "מציג את חלון הדו-שיח של מאפייני תמונה", + "Unlink the current element": "ניתוק את האלמנט הנוכחי", + "_Delete Row": "_מחק שורה", + "_Image Properties...": "_מאפייני תמונה...", + "_Modify Link...": "_שנה קישור...", + "_Remove Link...": "_הסר קישור...", + "_Table Properties...": "מאפייני ט_בלה..." + }, + "CreateLink": { + "Cancel": "ביטול", + "Insert/Modify Link": "הוסף/שנה קישור", + "New window (_blank)": "חלון חדש (_blank)", + "None (use implicit)": "ללא (השתמש ב-frame הקיים)", + "OK": "אישור", + "Other": "אחר", + "Same frame (_self)": "אותו frame (_self)", + "Target:": "יעד:", + "Title (tooltip):": "כותרת (tooltip):", + "Top frame (_top)": "Frame עליון (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "ביטול", + "OK": "אישור" + }, + "Equation": { + "Cancel": "ביטול", + "OK": "אישור" + }, + "ExtendedFileManager": { + "Align": "ישור", + "Baseline": "קו בסיס", + "Border": "גבול", + "Bottom": "תחתון", + "Cancel": "ביטול", + "Color": "צבע", + "Copy": "העתק", + "Cut": "גזור", + "Height": "גובה", + "Height:": "גובה", + "Left": "שמאל", + "Margin": "שוליים", + "Middle": "אמצע", + "New window (_blank)": "חלון חדש (_blank)", + "None (use implicit)": "ללא (השתמש ב-frame הקיים)", + "OK": "אישור", + "Padding": "ריווח בשוליים", + "Right": "ימין", + "Same frame (_self)": "אותו frame (_self)", + "Title (tooltip)": "כותרת (tooltip):", + "Top": "עליון", + "Top frame (_top)": "Frame עליון (_top)", + "Width": "רוחב", + "Width:": "רוחב" + }, + "FindReplace": { + "Replace with:": "החלף ב-" + }, + "Forms": { + "Cancel": "ביטול", + "Image URL:": "URL התמונה", + "OK": "אישור" + }, + "FullPage": { + "Alternate style-sheet:": "גיליון סגנון אחר:", + "Background color:": "צבע רקע:", + "Cancel": "ביטול", + "DOCTYPE:": "DOCTYPE:", + "Description:": "תיאור", + "Document properties": "מאפייני מסמך", + "Document title:": "כותרת מסמך:", + "OK": "אישור", + "Primary style-sheet:": "גיליון סגנון ראשי:", + "Text color:": "צבע טקסט:" + }, + "HorizontalRule": { + "Cancel": "ביטול", + "Center": "מרכז", + "Color:": "צבע", + "Height:": "גובה", + "Horizontal Rule": "קו אנכי", + "Layout": "פריסה", + "Left": "שמאל", + "OK": "אישור", + "Right": "ימין", + "Width:": "רוחב", + "percent": "אחוז", + "pixels": "פיקסלים" + }, + "ImageManager": { + "Baseline": "קו בסיס", + "Bottom": "תחתון", + "Cancel": "ביטול", + "Height:": "גובה", + "Left": "שמאל", + "Middle": "אמצע", + "OK": "אישור", + "Right": "ימין", + "Top": "עליון", + "Width:": "רוחב" + }, + "InlineStyler": { + "Background": "רקע", + "Baseline": "קו בסיס", + "Border": "גבול", + "Bottom": "תחתון", + "Center": "מרכז", + "Char": "תו", + "Collapsed borders": "גבולות קורסים", + "FG Color": "צבע קידמה", + "Float": "מרחף", + "Height": "גובה", + "Image URL": "URL התמונה", + "Justify": "ישור", + "Layout": "פריסה", + "Left": "שמאל", + "Margin": "שוליים", + "Middle": "אמצע", + "None": "אין", + "Padding": "ריווח בשוליים", + "Right": "ימין", + "Text align": "ישור טקסט", + "Top": "עליון", + "Vertical align": "יישור אנכי", + "Width": "רוחב", + "percent": "אחוז", + "pixels": "פיקסלים" + }, + "InsertAnchor": { + "Cancel": "ביטול", + "OK": "אישור" + }, + "InsertImage": { + "Baseline": "קו בסיס", + "Bottom": "תחתון", + "Cancel": "ביטול", + "Image URL:": "URL התמונה", + "Layout": "פריסה", + "Left": "שמאל", + "Middle": "אמצע", + "OK": "אישור", + "Right": "ימין", + "Spacing": "ריווח", + "Top": "עליון" + }, + "InsertMarquee": { + "Cancel": "ביטול", + "Height:": "גובה", + "Left": "שמאל", + "OK": "אישור", + "Right": "ימין", + "Width:": "רוחב" + }, + "InsertNote": { + "Cancel": "ביטול" + }, + "InsertPicture": { + "Baseline": "קו בסיס", + "Bottom": "תחתון", + "Cancel": "ביטול", + "Height:": "גובה", + "Image URL:": "URL התמונה", + "Layout": "פריסה", + "Left": "שמאל", + "Middle": "אמצע", + "OK": "אישור", + "Right": "ימין", + "Spacing": "ריווח", + "Top": "עליון", + "Width:": "רוחב" + }, + "InsertSnippet": { + "Cancel": "ביטול" + }, + "InsertSnippet2": { + "Cancel": "ביטול" + }, + "InsertTable": { + "Baseline": "קו בסיס", + "Border": "גבול", + "Bottom": "תחתון", + "Cancel": "ביטול", + "Caption": "כותרת", + "Insert Table": "הכנס טבלה", + "Layout": "פריסה", + "Left": "שמאל", + "Middle": "אמצע", + "OK": "אישור", + "Percent": "אחוז", + "Pixels": "פיקסלים", + "Right": "ימין", + "Spacing": "ריווח", + "Top": "עליון", + "Width:": "רוחב" + }, + "Linker": { + "Cancel": "ביטול", + "Insert/Modify Link": "הוסף/שנה קישור", + "OK": "אישור", + "Target:": "יעד:", + "URL:": "URL:" + }, + "NoteServer": { + "Cancel": "ביטול", + "OK": "אישור" + }, + "PSLocal": { + "Cancel": "ביטול" + }, + "PasteText": { + "Cancel": "ביטול", + "OK": "אישור" + }, + "PersistentStorage": { + "Cancel": "ביטול", + "Copy": "העתק" + }, + "QuickTag": { + "Cancel": "ביטול" + }, + "SetId": { + "Cancel": "ביטול", + "OK": "אישור" + }, + "SmartReplace": { + "OK": "אישור" + }, + "SpellChecker": { + "Cancel": "ביטול", + "Dictionary": "מילון", + "Finished list of mispelled words": "הסתיימה רשימת המילים המאויתות באופן שגוי", + "I will open it in a new page.": "אני אפתח את זה בחלון חדש.", + "Ignore": "התעלם", + "Ignore all": "התעלם מהכל", + "No mispelled words found with the selected dictionary.": "לא נמצאו מילים מאויתות באופן שגוי עם המילון הנבחר.", + "OK": "אישור", + "Original word": "המילה המקורית", + "Please confirm that you want to open this link": "אנא אשר שברצונך לפתוח קישור זה", + "Please wait. Calling spell checker.": "אנא המתן. קורא לבודק איות.", + "Please wait: changing dictionary to": "אנא המתן: מחליף מילון ל-", + "Re-check": "בדוק מחדש", + "Replace": "החלף", + "Replace all": "החלף הכל", + "Replace with": "החלף ב-", + "Revert": "החזר שינויים", + "Spell-check": "בדיקת איות", + "Suggestions": "הצעות", + "This will drop changes and quit spell checker. Please confirm.": "זה יבטל את השינויים ויצא מבודק האיות. אנא אשר." + }, + "SuperClean": { + "Cancel": "ביטול", + "OK": "אישור" + }, + "TableOperations": { + "All four sides": "כל ארבעת הצדדים", + "Borders": "גבולות", + "Cancel": "ביטול", + "Caption": "כותרת", + "Cell Properties": "מאפייני תא", + "Cell properties": "מאפייני תא", + "Delete cell": "מחק תא", + "Delete column": "מחק טור", + "Delete row": "מחק שורה", + "Description": "תיאור", + "Frames": "מסגרות", + "Insert cell after": "הכנס תא אחרי", + "Insert cell before": "הכנס תא לפני", + "Insert column after": "הכנס טור אחרי", + "Insert column before": "הכנס טור לפני", + "Insert row after": "הכנס שורה אחרי", + "Insert row before": "הכנס שורה לפני", + "Merge cells": "מזג תאים", + "No rules": "ללא קווים", + "No sides": "ללא צדדים", + "OK": "אישור", + "Padding": "ריווח בשוליים", + "Please click into some cell": "אנא לחץ על תא כלשהו", + "Row Properties": "מאפייני שורה", + "Row properties": "מאפייני שורה", + "Rules will appear between all rows and columns": "קווים יופיעו בין כל השורות והטורים", + "Rules will appear between columns only": "קווים יופיעו בין טורים בלבד", + "Rules will appear between rows only": "קווים יופיעו בין שורות בלבד", + "Spacing": "ריווח", + "Spacing and padding": "ריווח ושוליים", + "Split column": "פצל טור", + "Split row": "פצל שורה", + "Summary": "סיכום", + "Table Properties": "מאפייני טבלה", + "Table properties": "מאפייני טבלה", + "The bottom side only": "הצד התחתון בלבד", + "The left-hand side only": "הצד השמאלי בלבד", + "The right and left sides only": "הצדדים הימני והשמאלי בלבד", + "The right-hand side only": "הצד הימני בלבד", + "The top and bottom sides only": "הצדדים העליון והתחתון בלבד", + "The top side only": "הצד העליון בלבד", + "Xinha cowardly refuses to delete the last cell in row.": "Xinha מסרב בפחדנות למחוק את התא האחרון בשורה.", + "Xinha cowardly refuses to delete the last column in table.": "Xinha מסרב בפחדנות למחוק את הטור האחרון בטבלה.", + "Xinha cowardly refuses to delete the last row in table.": "Xinha מסרב בפחדנות למחוק את השורה האחרונה בטבלה.", + "pixels": "פיקסלים" + }, + "Template": { + "Cancel": "ביטול" + }, + "UnFormat": { + "Cancel": "ביטול", + "OK": "אישור" + }, + "Xinha": { + "About this editor": "אודות עורך זה", + "Background Color": "צבע רקע", + "Bold": "מודגש", + "Bulleted List": "רשימה לא ממוספרת", + "Copy selection": "העתק בחירה", + "Current style": "סגנון נוכחי", + "Cut selection": "גזור בחירה", + "Decrease Indent": "הקטן כניסה", + "Direction left to right": "כיוון משמאל לימין", + "Direction right to left": "כיוון מימין לשמאל", + "Font Color": "צבע גופן", + "Help using editor": "עזרה לשימוש בעורך", + "Horizontal Rule": "קו אנכי", + "Increase Indent": "הגדל כניסה", + "Insert Table": "הכנס טבלה", + "Insert Web Link": "הכנס היפר-קישור", + "Insert/Modify Image": "הכנס/שנה תמונה", + "Italic": "נטוי", + "Justify Center": "ישור למרכז", + "Justify Full": "ישור לשורה מלאה", + "Justify Left": " ישור לשמאל", + "Justify Right": "ישור לימין", + "Ordered List": "רשימה ממוספרת", + "Paste from clipboard": "הדבק מהלוח", + "Path": "נתיב עיצוב", + "Redoes your last action": "מבצע מחדש את הפעולה האחרונה שביטלת", + "Strikethrough": "קו אמצע", + "Subscript": "כתב עילי", + "Superscript": "כתב תחתי", + "Toggle HTML Source": "שנה מצב קוד HTML", + "Underline": "קו תחתי", + "Undoes your last action": "מבטל את פעולתך האחרונה", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "אתה במצב טקסט נקי (קוד). השתמש בכפתור [<>] כדי לחזור למצב WYSIWYG (תצוגת עיצוב)." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "Delete Cell": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Merge Cells": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Keywords:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Preview": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Border thickness:": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Rows:": "<>", + "Texttop": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>", + "Rows": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Insert File Link": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Save": "<>", + "Texttop": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Border thickness:": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Insert Image": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Size": "<>", + "Texttop": "<>", + "Vertical padding": "<>", + "Vertical:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "HTMLArea Spell Checker": "", + "Info": "", + "Learn": "", + "pliz weit ;-)": "", + "Spell Checker": "" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/hu.js new file mode 100644 index 0000000000..6d78edda6c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/hu.js @@ -0,0 +1,1575 @@ +// Xinha Language Combined Translation File +// +// LANG: "hu", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/hu.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'hu'; +// _editor_lang_merged_file = '/xinha/lang/merged/hu.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "AboutBox": { + "About this editor": "Névjegy" + }, + "BackgroundImage": { + "Cancel": "Mégsem" + }, + "ColorPicker": { + "OK": "Rendben" + }, + "ContextMenu": { + "Justify Center": "Középre zárt", + "Justify Full": "Sorkizárt", + "Justify Left": "Balra zárt", + "Justify Right": "Jobbra zárt" + }, + "CreateLink": { + "Cancel": "Mégsem", + "Insert/Modify Link": "Hivatkozás Beszúrása/Módosítása", + "New window (_blank)": "Új ablak (_blank)", + "None (use implicit)": "Nincs (use implicit)", + "OK": "Rendben", + "Other": "Más", + "Same frame (_self)": "Ugyanabba a keretbe (_self)", + "Target:": "Cél:", + "Title (tooltip):": "Cím (tooltip):", + "Top frame (_top)": "Felső keret (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "Equation": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "ExtendedFileManager": { + "Cancel": "Mégsem", + "New window (_blank)": "Új ablak (_blank)", + "None (use implicit)": "Nincs (use implicit)", + "OK": "Rendben", + "Same frame (_self)": "Ugyanabba a keretbe (_self)", + "Title (tooltip)": "Cím (tooltip):", + "Top frame (_top)": "Felső keret (_top)" + }, + "FindReplace": { + "Replace with:": "Csere a következőre:" + }, + "Forms": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "FullPage": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "HorizontalRule": { + "Cancel": "Mégsem", + "Horizontal Rule": "Elválasztó vonal", + "OK": "Rendben" + }, + "ImageManager": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "InsertAnchor": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "InsertImage": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "InsertMarquee": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "InsertNote": { + "Cancel": "Mégsem" + }, + "InsertPicture": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "InsertSnippet": { + "Cancel": "Mégsem" + }, + "InsertSnippet2": { + "Cancel": "Mégsem" + }, + "InsertTable": { + "Cancel": "Mégsem", + "Insert Table": "Táblázat beszúrása", + "OK": "Rendben" + }, + "Linker": { + "Cancel": "Mégsem", + "Insert/Modify Link": "Hivatkozás Beszúrása/Módosítása", + "OK": "Rendben", + "Target:": "Cél:", + "URL:": "URL:" + }, + "NoteServer": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "PSLocal": { + "Cancel": "Mégsem" + }, + "PasteText": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "PersistentStorage": { + "Cancel": "Mégsem" + }, + "QuickTag": { + "Cancel": "Mégsem" + }, + "SetId": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "SmartReplace": { + "OK": "Rendben" + }, + "SpellChecker": { + "Cancel": "Mégsem", + "Dictionary": "Szótár", + "Finished list of mispelled words": "A tévesztett szavak listájának vége", + "I will open it in a new page.": "Megnyitás új lapon", + "Ignore": "Elvetés", + "Ignore all": "Minden elvetése", + "No mispelled words found with the selected dictionary.": "A választott szótár szerint nincs tévesztett szó.", + "OK": "Rendben", + "Original word": "Eredeti szó", + "Please confirm that you want to open this link": "Megerősítés", + "Please wait. Calling spell checker.": "Kis türelmet, a helyesírásellenőrző hívása folyamatban.", + "Please wait: changing dictionary to": "Kis türelmet, szótár cseréje", + "Re-check": "Újraellenőrzés", + "Replace": "Csere", + "Replace all": "Mind cseréje", + "Replace with": "Csere a következőre:", + "Spell-check": "Helyesírásellenőrzés", + "Suggestions": "Tippek", + "This will drop changes and quit spell checker. Please confirm.": "Kilépés a változások eldobásával. Jóváhagyja?" + }, + "SuperClean": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "TableOperations": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "Template": { + "Cancel": "Mégsem" + }, + "UnFormat": { + "Cancel": "Mégsem", + "OK": "Rendben" + }, + "Xinha": { + "About this editor": "Névjegy", + "Background Color": "Háttérszín", + "Bold": "Félkövér", + "Bulleted List": "Számozatlan lista", + "Copy selection": "Másolás", + "Current style": "Aktuális stílus", + "Cut selection": "Kivágás", + "Decrease Indent": "Behúzás csökkentése", + "Direction left to right": "Irány balról jobbra", + "Direction right to left": "Irány jobbról balra", + "Font Color": "Karakterszín", + "Help using editor": "Súgó", + "Horizontal Rule": "Elválasztó vonal", + "Increase Indent": "Behúzás növelése", + "Insert Table": "Táblázat beszúrása", + "Insert Web Link": "Hiperhivatkozás beszúrása", + "Insert/Modify Image": "Kép beszúrása", + "Italic": "Dőlt", + "Justify Center": "Középre zárt", + "Justify Full": "Sorkizárt", + "Justify Left": "Balra zárt", + "Justify Right": "Jobbra zárt", + "Ordered List": "Számozott lista", + "Paste from clipboard": "Beillesztés", + "Path": "Hierarchia", + "Redoes your last action": "Újra végrehajtás", + "Strikethrough": "Áthúzott", + "Subscript": "Alsó index", + "Superscript": "Felső index", + "Toggle HTML Source": "HTML forrás be/ki", + "Underline": "Aláhúzott", + "Undoes your last action": "Visszavonás", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Forrás mód. Visszaváltás [<>] gomb" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "Not set": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Save": "<>", + "Texttop": "<>", + "Top": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + "Open file in new window": "", + " Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "HTMLArea Spell Checker": "", + "Info": "", + "Learn": "", + "pliz weit ;-)": "", + "Revert": "", + "Spell Checker": "" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/it.js new file mode 100644 index 0000000000..0bc14b285b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/it.js @@ -0,0 +1,1572 @@ +// Xinha Language Combined Translation File +// +// LANG: "it", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/it.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'it'; +// _editor_lang_merged_file = '/xinha/lang/merged/it.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Annullamento", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "Informazioni su Xinha" + }, + "BackgroundImage": { + "Cancel": "Annullamento" + }, + "CharacterMap": { + "Insert special character": "Inserisca il carattere speciale" + }, + "ColorPicker": { + "Color: ": "Colore", + "OK": "OK" + }, + "ContextMenu": { + "Justify Center": "Centrato", + "Justify Full": "Giustificato", + "Justify Left": "Sinistra", + "Justify Right": "Destra" + }, + "CreateLink": { + "Cancel": "Annullamento", + "Insert/Modify Link": "Inserisci/modifica link", + "New window (_blank)": "Nuova finestra (_blank)", + "None (use implicit)": "Niente (usa implicito)", + "OK": "OK", + "Other": "Altro", + "Same frame (_self)": "Stessa frame (_self)", + "Target:": "Target:", + "Title (tooltip):": "Title (suggerimento):", + "Top frame (_top)": "Pagina intera (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "Annullamento", + "OK": "OK" + }, + "Equation": { + "Cancel": "Annullamento", + "OK": "OK" + }, + "ExtendedFileManager": { + "Align": "Allinea", + "Baseline": "Allineamento", + "Border": "Bordo", + "Bottom": "Basso", + "Cancel": "Annullamento", + "Color": "Colore", + "Height": "Altezza", + "Height:": "Altezza", + "Left": "Sinistra", + "Margin": "Margine", + "Middle": "Centrale", + "New window (_blank)": "Nuova finestra (_blank)", + "None (use implicit)": "Niente (usa implicito)", + "OK": "OK", + "Padding": "Padding", + "Right": "Destra", + "Same frame (_self)": "Stessa frame (_self)", + "Title (tooltip)": "Title (suggerimento):", + "Top": "Alto", + "Top frame (_top)": "Pagina intera (_top)", + "Width": "Larghezza", + "Width:": "Larghezza" + }, + "Forms": { + "Cancel": "Annullamento", + "Image URL:": "URL dell'Immagine", + "OK": "OK" + }, + "FullPage": { + "Cancel": "Annullamento", + "Description:": "Descrizione", + "OK": "OK" + }, + "HorizontalRule": { + "Cancel": "Annullamento", + "Center": "Centra", + "Color:": "Colore", + "Height:": "Altezza", + "Horizontal Rule": "Righello orizzontale", + "Layout": "Layout", + "Left": "Sinistra", + "OK": "OK", + "Right": "Destra", + "Width:": "Larghezza", + "percent": "percento", + "pixels": "pixels" + }, + "ImageManager": { + "Baseline": "Allineamento", + "Bottom": "Basso", + "Cancel": "Annullamento", + "Height:": "Altezza", + "Left": "Sinistra", + "Middle": "Centrale", + "OK": "OK", + "Right": "Destra", + "Top": "Alto", + "Width:": "Larghezza" + }, + "InlineStyler": { + "Background": "Sfondo", + "Baseline": "Allineamento", + "Border": "Bordo", + "Bottom": "Basso", + "Center": "Centra", + "Char": "Carattere", + "Collapsed borders": "Bordi chiusi", + "FG Color": "Colore Principale", + "Float": "Fluttuante", + "Height": "Altezza", + "Image URL": "URL dell'Immagine", + "Justify": "Justifica", + "Layout": "Layout", + "Left": "Sinistra", + "Margin": "Margine", + "Middle": "Centrale", + "None": "Nulla", + "Padding": "Padding", + "Right": "Destra", + "Text align": "Allineamento del Testo", + "Top": "Alto", + "Vertical align": "Allineamento verticale", + "Width": "Larghezza", + "percent": "percento", + "pixels": "pixels" + }, + "InsertAnchor": { + "Cancel": "Annullamento", + "OK": "OK" + }, + "InsertImage": { + "Baseline": "Allineamento", + "Bottom": "Basso", + "Cancel": "Annullamento", + "Image URL:": "URL dell'Immagine", + "Layout": "Layout", + "Left": "Sinistra", + "Middle": "Centrale", + "OK": "OK", + "Right": "Destra", + "Spacing": "Spaziatura", + "Top": "Alto" + }, + "InsertMarquee": { + "Cancel": "Annullamento", + "Height:": "Altezza", + "Insert scrolling marquee": "Inserisca marquee", + "Left": "Sinistra", + "OK": "OK", + "Right": "Destra", + "Width:": "Larghezza" + }, + "InsertNote": { + "Cancel": "Annullamento" + }, + "InsertPicture": { + "Baseline": "Allineamento", + "Bottom": "Basso", + "Cancel": "Annullamento", + "Height:": "Altezza", + "Image URL:": "URL dell'Immagine", + "Layout": "Layout", + "Left": "Sinistra", + "Middle": "Centrale", + "OK": "OK", + "Right": "Destra", + "Spacing": "Spaziatura", + "Top": "Alto", + "Width:": "Larghezza" + }, + "InsertSnippet": { + "Cancel": "Annullamento" + }, + "InsertSnippet2": { + "Cancel": "Annullamento" + }, + "InsertTable": { + "Baseline": "Allineamento", + "Border": "Bordo", + "Bottom": "Basso", + "Cancel": "Annullamento", + "Caption": "Titolo", + "Insert Table": "Inserisci tabella", + "Layout": "Layout", + "Left": "Sinistra", + "Middle": "Centrale", + "OK": "OK", + "Percent": "percento", + "Pixels": "pixels", + "Right": "Destra", + "Spacing": "Spaziatura", + "Top": "Alto", + "Width:": "Larghezza" + }, + "Linker": { + "Cancel": "Annullamento", + "Insert/Modify Link": "Inserisci/modifica link", + "OK": "OK", + "Target:": "Target:", + "URL:": "URL:" + }, + "NoteServer": { + "Cancel": "Annullamento", + "OK": "OK" + }, + "PSLocal": { + "Cancel": "Annullamento" + }, + "PasteText": { + "Cancel": "Annullamento", + "OK": "OK" + }, + "PersistentStorage": { + "Cancel": "Annullamento" + }, + "QuickTag": { + "Cancel": "Annullamento" + }, + "SetId": { + "Cancel": "Annullamento", + "OK": "OK" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Annullamento", + "OK": "OK" + }, + "SuperClean": { + "Cancel": "Annullamento", + "OK": "OK" + }, + "TableOperations": { + "All four sides": "Tutti e quattro i lati", + "Borders": "Bordi", + "Cancel": "Annullamento", + "Caption": "Titolo", + "Cell Properties": "Proprietà della Cella", + "Cell properties": "Proprietà della cella", + "Delete cell": "Cancella cella", + "Delete column": "Cancella colonna", + "Delete row": "Cancella riga", + "Description": "Descrizione", + "Frames": "Frames", + "Insert cell after": "Inserisci cella dopo", + "Insert cell before": "Inserisci cella prima", + "Insert column after": "Inserisci colonna dopo", + "Insert column before": "Inserisci colonna prima", + "Insert row after": "Inserisci riga dopo", + "Insert row before": "Inserisci riga prima", + "Merge cells": "Unisci celle", + "No rules": "Nessun righello", + "No sides": "Nessun lato", + "OK": "OK", + "Padding": "Padding", + "Please click into some cell": "Per favore, clicca in una cella", + "Row Properties": "Proprietà della Riga", + "Row properties": "Proprietà della riga", + "Rules will appear between all rows and columns": "Le linee appariranno tra tutte le righe e colonne", + "Rules will appear between columns only": "Le linee appariranno solo tra le colonne", + "Rules will appear between rows only": "Le linee appariranno solo tra le righe", + "Spacing": "Spaziatura", + "Spacing and padding": "Spaziatura e Padding", + "Split column": "Dividi colonna", + "Split row": "Dividi riga", + "Summary": "Sommario", + "Table Properties": "Proprietà della Tabella", + "Table properties": "Proprietà della Tabella", + "The bottom side only": "Solo la parte inferiore", + "The left-hand side only": "Solo la parte sinistra", + "The right and left sides only": "Solo destra e sinistra", + "The right-hand side only": "Solo la parte destra", + "The top and bottom sides only": "Solo sopra e sotto", + "The top side only": "Solo la parte sopra", + "Xinha cowardly refuses to delete the last cell in row.": "Xinha si rifiuta codardamente di cancellare l'ultima cella nella riga.", + "Xinha cowardly refuses to delete the last column in table.": "Xinha si rifiuta codardamente di cancellare l'ultima colonna nella tabella.", + "Xinha cowardly refuses to delete the last row in table.": "Xinha si rifiuta codardamente di cancellare l'ultima riga nella tabella.", + "pixels": "pixels" + }, + "Template": { + "Cancel": "Annullamento", + "Insert template": "Inserisca il template" + }, + "UnFormat": { + "Cancel": "Annullamento", + "OK": "OK" + }, + "Xinha": { + "About this editor": "Informazioni su Xinha", + "Background Color": "Colore sfondo", + "Bold": "Grassetto", + "Bulleted List": "Lista non numerata", + "Copy selection": "Copia", + "Current style": "Stile corrente", + "Cut selection": "Taglia", + "Decrease Indent": "Diminuisci indentazione", + "Direction left to right": "Testo da sx a dx", + "Direction right to left": "Testo da dx a sx", + "Font Color": "Colore font", + "Help using editor": "Aiuto", + "Horizontal Rule": "Righello orizzontale", + "Increase Indent": "Aumenta indentazione", + "Insert Table": "Inserisci tabella", + "Insert Web Link": "Inserisci link", + "Insert/Modify Image": "Inserisci/modifica Immagine", + "Italic": "Corsivo", + "Justify Center": "Centrato", + "Justify Full": "Giustificato", + "Justify Left": "Sinistra", + "Justify Right": "Destra", + "Ordered List": "Lista numerata", + "Paste from clipboard": "Incolla", + "Path": "Percorso", + "Redoes your last action": "Ripeti ultima azione", + "Strikethrough": "Barrato", + "Subscript": "Pedice", + "Superscript": "Apice", + "Toggle HTML Source": "Visualizza/nascondi sorgente HTML", + "Underline": "Sottolineato", + "Undoes your last action": "Annulla ultima azione", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Sei in MODALITA" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Preview": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Border thickness:": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Rows:": "<>", + "Texttop": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>", + "Rows": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Copy": "<>", + "Cut": "<>", + "Insert File Link": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Save": "<>", + "Texttop": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Border thickness:": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Insert Image": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Size": "<>", + "Texttop": "<>", + "Vertical padding": "<>", + "Vertical:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ja.js new file mode 100644 index 0000000000..5112015248 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ja.js @@ -0,0 +1,1561 @@ +// Xinha Language Combined Translation File +// +// LANG: "ja", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/ja.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'ja'; +// _editor_lang_merged_file = '/xinha/lang/merged/ja.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Abbreviation": "略語", + "Cancel": "中止", + "Delete": "削除", + "Expansion:": "展開される語:", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "バージョン情報", + "Close": "閉じる" + }, + "BackgroundImage": { + "Cancel": "中止", + "Remove Current Background": "現在の背景画像を除去", + "Set Page Background Image": "ページの背景画像を設定", + "Set page background image": "ページの背景画像を設定" + }, + "CharCounter": { + "... in progress": "... 処理中", + "Chars": "文字数", + "Words": "単語数" + }, + "CharacterMap": { + "Insert special character": "特殊文字を挿入" + }, + "ClientsideSpellcheck": { + "Spell Check using ieSpell": "スペルチェックに ieSpell を使う" + }, + "ColorPicker": { + "Click a color...": "色をクリック...", + "Close": "閉じる", + "Color: ": "色: ", + "OK": "OK", + "Sample": "サンプル", + "Web Safe: ": "Webセーフ: " + }, + "ContextMenu": { + "C_ell Properties...": "セルのプロパティ(_E)...", + "Chec_k Link...": "リンクを確認(_K)...", + "Copy": "コピー", + "Create a link": "新たなリンクを作成します", + "Current URL is": "現在のURL", + "Cut": "切り取り", + "De_lete Column": "列の削除(_L)", + "Delete Cell": "セルの削除", + "Delete the current column": "選択中の列を削除します", + "Delete the current row": "選択中の行を削除します", + "How did you get here? (Please report!)": "どうやってここに来ましたか?(どうか報告を!)", + "I_nsert Row Before": "上に行を挿入(_N)", + "In_sert Row After": "下に行を挿入(_S)", + "Insert C_olumn After": "右に列を挿入(_O)", + "Insert Cell After": "後にセルを挿入", + "Insert Cell Before": "前にセルを挿入", + "Insert _Column Before": "左に列を挿入(_C)", + "Insert a new column after the current one": "選択中の列の右に一列挿入します", + "Insert a new column before the current one": "選択中の列の左に一列挿入します", + "Insert a new row after the current one": "選択中の行の下に一行挿入します", + "Insert a new row before the current one": "選択中の行の上に一行挿入します", + "Insert a paragraph after the current node": "選択中のノードの後に段落を挿入します", + "Insert a paragraph before the current node": "選択中のノードの手前に段落を挿入します", + "Insert paragraph after": "後に段落を挿入", + "Insert paragraph before": "前に段落を挿入", + "Justify Center": "中央寄せ", + "Justify Full": "均等割付", + "Justify Left": "左寄せ", + "Justify Right": "右寄せ", + "Link points to:": "リンク先:", + "Make lin_k...": "リンクの作成(_K)...", + "Merge Cells": "セルの結合", + "Opens this link in a new window": "このリンクを新しいウィンドウで開きます", + "Paste": "貼り付け", + "Please confirm that you want to remove this element:": "この要素を削除します。よろしいですか。:", + "Please confirm that you want to unlink this element.": "この要素のリンクを削除します。よろしいですか。", + "Remove the $elem Element...": "$elem 要素を削除 ...", + "Remove this node from the document": "ドキュメントからこのノードを削除します", + "Ro_w Properties...": "行のプロパティ(_W)...", + "Show the Table Cell Properties dialog": "テーブルセルのプロパティダイアログを表示します", + "Show the Table Properties dialog": "テーブルのプロパティダイアログを表示します", + "Show the Table Row Properties dialog": "テーブル行のプロパティダイアログを表示します", + "Show the image properties dialog": "この画像のプロパティダイアログを表示します", + "Unlink the current element": "この要素のリンクを解除", + "_Delete Row": "行の削除(_D)", + "_Image Properties...": "画像のプロパティ(_I)...", + "_Modify Link...": "リンクの修正(_M)...", + "_Remove Link...": "リンクの削除(_R)", + "_Table Properties...": "テーブルのプロパティ(_T)..." + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "本当にこのリンクを削除しますか?", + "Cancel": "中止", + "Insert/Modify Link": "リンクの挿入/修正", + "New window (_blank)": "新しいウィンドウ (_blank)", + "None (use implicit)": "なし (デフォルトに任せる)", + "OK": "OK", + "Other": "その他", + "Same frame (_self)": "自己フレーム内 (_self)", + "Target:": "ターゲット:", + "Title (tooltip):": "タイトル:", + "Top frame (_top)": "最上位フレーム (_top)", + "URL:": "URL:", + "You need to select some text before creating a link": "リンクを作成するにはテキストを選択する必要があります" + }, + "DefinitionList": { + "definition description": "定義の説明", + "definition list": "定義リスト", + "definition term": "定義語" + }, + "DynamicCSS": { + "Choose stylesheet": "スタイルシートの選択", + "Default": "なし", + "Undefined": "未定義" + }, + "EditTag": { + "Cancel": "中止", + "Edit HTML for selected text": "選択中テキストのHTMLを編集します", + "OK": "OK", + "Tag Editor": "タグエディタ" + }, + "Equation": { + "AsciiMath Formula Input": "AsciiMath 数式入力", + "Cancel": "中止", + "Formula Editor": "数式エディタ", + "Input": "入力", + "OK": "OK", + "Preview": "表示" + }, + "ExtendedFileManager": { + "Absbottom": "下(絶対的)", + "Absmiddle": "中央(絶対的)", + "Align": "行揃え", + "Alt": "Alt", + "Baseline": "ベースライン", + "Border": "ボーダー", + "Border Color": "境界色:", + "Bottom": "下", + "Cancel": "中止", + "Clear": "クリア", + "Color": "色", + "Constrain Proportions": "縦横比を固定", + "Copy": "コピー", + "Crop": "切り抜き", + "Cut": "切り取り", + "Directory": "ディレクトリ", + "Directory Up": "親ディレクトリへ", + "Edit": "編集", + "File Manager": "ファイルマネージャ", + "Filename:": "ファイル名:", + "Flip Horizontal": "左右反転", + "Flip Image": "画像を反転", + "Flip Vertical": "上下反転", + "GIF format is not supported, image editing not supported.": "GIF形式はサポートされていないため、画像編集できません。", + "Height": "高さ", + "Height:": "高さ:", + "Insert File Link": "ファイルへのリンクを挿入", + "Invalid base directory:": "無効なディレクトリ:", + "JPEG High": "JPEG 高画質", + "JPEG Low": "JPEG 低画質", + "JPEG Medium": "JPEG 標準", + "Left": "左", + "Loading": "ロード中", + "Lock": "ロック", + "Margin": "間隔", + "Marker": "マーカー", + "Measure": "計測", + "Middle": "中央", + "New Folder": "新規フォルダ", + "New window (_blank)": "新しいウィンドウ (_blank)", + "No Files Found": "ファイルがありません", + "No Image Available": "画像がありません", + "None (use implicit)": "なし (デフォルトに任せる)", + "Not set": "なし", + "OK": "OK", + "Padding": "余白", + "Positioning of this image": "この画像の配置", + "Preview": "表示", + "Quality:": "画質:", + "Refresh": "更新", + "Rename": "名前の変更", + "Resize": "サイズ変更", + "Right": "右", + "Rotate": "回転", + "Rotate Image": "画像を回転", + "Same frame (_self)": "自己フレーム内 (_self)", + "Save": "保存", + "Start X:": "開始 X", + "Start Y:": "開始 Y", + "Target Window": "ターゲット", + "Texttop": "テキスト上部", + "Title (tooltip)": "タイトル", + "Top": "上", + "Top frame (_top)": "最上位フレーム (_top)", + "Trash": "削除", + "Upload": "アップロード", + "W:": "W:", + "Width": "幅", + "Width:": "幅:", + "You must select some text before making a new link.": "リンクを作成するにはテキストを選択する必要があります。", + "Zoom": "拡大率:" + }, + "Filter": { + "Filter": "フィルター" + }, + "FindReplace": { + "Case sensitive search": "大文字/小文字区別", + "Clear": "通常表示", + "Done": "終了", + "Enter the text you want to find": "検索したいテキストを入力します", + "Find and Replace": "検索/置換", + "Highlight": "強調表示", + "Inform a replacement word": "単語の置換を知らせる", + "Next": "次を検索", + "Options": "設定", + "Replace with:": "置換:", + "Search for:": "検索:", + "Substitute all occurrences": "すべて置換", + "Substitute this occurrence?": "置換しますか?", + "Undo": "元に戻す", + "Whole words only": "完全一致のみ", + "found item": "件が検索されました", + "found items": "件が検索されました", + "not found": "はありません", + "replaced item": "件が置換されました", + "replaced items": "件が置換されました" + }, + "FormOperations": { + "Enter the name for new option.": "新しい選択肢に名前をつけてください。", + "Form Editor": "フォームエディタ", + "Insert a Form.": "フォームを挿入", + "Insert a check box.": "チェックボックスを挿入", + "Insert a multi-line text field.": "複数行テキストフィールドを挿入", + "Insert a radio button.": "ラジオボタンを挿入", + "Insert a select field.": "選択リストを挿入", + "Insert a submit/reset button.": "送信/リセットボタンを挿入", + "Insert a text, password or hidden field.": "テキスト/パスワード/非表示フィールドを挿入" + }, + "Forms": { + "'onClick'=": "'onClick'=", + "Access Key:": "アクセスキー:", + "Action URL:": "アクションURL:", + "Button Script": "ボタンスクリプト", + "Cancel": "中止", + "Checked": "チェック済み", + "Columns:": "列数:", + "Default text (optional)": "テキスト初期値(オプション)", + "Dimensions": "大きさ", + "Disabled": "無効", + "Encoding:": "エンコード:", + "For Control:": "制御対象:", + "Form": "フォーム", + "Form Element: FIELDSET": "フォーム要素: FIELDSET", + "Form Element: INPUT": "フォーム要素: INPUT", + "Form Element: LABEL": "フォーム要素: LABEL", + "Form Element: SELECT": "フォーム要素: SELECT", + "Form Element: TEXTAREA": "フォーム要素: TEXTAREA", + "Form Name:": "フォーム名:", + "Form handler script": "フォーム処理スクリプト", + "Get": "GET", + "HTML-Form to CGI (default)": "HTMLフォームからCGIへ(デフォルト)", + "Hard": "ハード", + "Height in number of rows": "行数による高さ", + "Image URL:": "画像URL:", + "Image source": "画像ソース", + "Initial Text:": "初期テキスト:", + "Javascript for button click": "ボタンクリック時のJavaScritp", + "Label:": "ラベル:", + "Legend:": "グループ名:", + "Max length:": "最大長:", + "Maximum number of characters accepted": "入力可能な最大文字数", + "Method:": "メソッド:", + "Name": "名前", + "Name of the form input": "フォーム入力の名前", + "Name/ID:": "名前/ID:", + "OK": "OK", + "Off": "オフ", + "Options": "選択肢", + "Physical": "物理的", + "Please enter a Label": "ラベルを入力してください", + "Post": "POST", + "Read Only": "読み取り専用", + "Rows:": "行数:", + "Size of text box in characters": "文字数によるテキストボックスの大きさ", + "Size:": "サイズ:", + "Soft": "ソフト", + "Tab Index:": "タブ順序:", + "Target Frame:": "ターゲット:", + "Text:": "テキスト:", + "URL of image": "画像のURL", + "Value of the form input": "フォーム入力の値", + "Value:": "値:", + "Virtual": "仮想", + "Width in number of characters": "文字数による幅", + "Wrap Mode:": "折り返し:", + "You must enter a Name": "名前が必要です", + "multipart Form Data (File-Upload)": "マルチパート(ファイルアップロード用)", + "name of the textarea": "テキストエリアの名前", + "normal": "標準", + "nowrap": "折り返しなし", + "pre": "フォーマット済み" + }, + "FullPage": { + "Alternate style-sheet:": "代替スタイルシート:", + "Background color:": "背景色:", + "Cancel": "中止", + "Character set:": "文字セット:", + "DOCTYPE:": "DOCTYPE:", + "Description:": "説明:", + "Document properties": "文書のプロパティ", + "Document title:": "文書の表題:", + "Keywords:": "キーワード:", + "OK": "OK", + "Primary style-sheet:": "優先スタイルシート:", + "Text color:": "文字色:", + "UTF-8 (recommended)": "UTF-8 (推奨)" + }, + "FullScreen": { + "Maximize/Minimize Editor": "エディタの最大化/最小化" + }, + "HorizontalRule": { + "Alignment:": "行揃え:", + "Cancel": "中止", + "Center": "中央", + "Color:": "色:", + "Height:": "高さ:", + "Horizontal Rule": "水平線", + "Insert/edit horizontal rule": "水平線の挿入/修正", + "Layout": "レイアウト", + "Left": "左", + "No shading": "影付けなし", + "OK": "OK", + "Right": "右", + "Style": "スタイル", + "Width:": "幅:", + "percent": "パーセント", + "pixels": "ピクセル" + }, + "HtmlTidy": { + "Auto-Tidy": "自動適正化", + "Don't Tidy": "適正化しない", + "HTML Tidy": "HTML Tidy", + "Tidy failed. Check your HTML for syntax errors.": "適正化に失敗しました。HTMLの文法エラーを確認してください。" + }, + "ImageManager": { + "Absbottom": "下(絶対的)", + "Absmiddle": "中央(絶対的)", + "Angle:": "角度:", + "Baseline": "ベースライン", + "Bottom": "下", + "Cancel": "中止", + "Clear": "クリア", + "Constrain Proportions": "縦横比を固定", + "Crop": "切り抜き", + "Directory": "ディレクトリ", + "Directory Up": "親ディレクトリへ", + "Edit": "編集", + "Filename:": "ファイル名:", + "Flip Horizontal": "左右反転", + "Flip Image": "画像を反転", + "Flip Vertical": "上下反転", + "Folder Name:": "フォルダ名:", + "GIF format is not supported, image editing not supported.": "GIF形式はサポートされていないため、画像編集できません。", + "Height:": "高さ:", + "Image Format": "画像形式", + "Insert Image": "画像の挿入", + "Invalid base directory:": "無効なディレクトリ:", + "JPEG High": "JPEG 高画質", + "JPEG Low": "JPEG 低画質", + "JPEG Medium": "JPEG 標準", + "Left": "左", + "Lock": "ロック", + "Marker": "マーカー", + "Measure": "計測", + "Middle": "中央", + "New Folder": "新規フォルダ", + "No Image Available": "画像がありません", + "Not set": "なし", + "OK": "OK", + "Positioning of this image": "この画像の配置", + "Quality:": "画質:", + "Refresh": "更新", + "Resize": "サイズ変更", + "Right": "右", + "Rotate": "回転", + "Rotate Image": "画像を回転", + "Save": "保存", + "Start X:": "開始 X", + "Start Y:": "開始 Y", + "Texttop": "テキスト上部", + "Top": "上", + "Trash": "削除", + "W:": "W:", + "Width:": "幅:" + }, + "InlineStyler": { + "Background": "背景", + "Baseline": "ベースライン", + "Border": "ボーダー", + "Bottom": "下", + "CSS Style": "CSSスタイル", + "Center": "中央", + "Char": "文字", + "Collapsed borders": "隣接境界線を重ねる", + "FG Color": "前景色", + "Float": "フロート", + "Height": "高さ", + "Image URL": "画像URL", + "Justify": "両端揃え", + "Layout": "レイアウト", + "Left": "左", + "Margin": "間隔", + "Middle": "中央", + "None": "なし", + "Padding": "余白", + "Right": "右", + "Text align": "水平位置", + "Top": "上", + "Vertical align": "垂直位置", + "Width": "幅", + "percent": "パーセント", + "pixels": "ピクセル" + }, + "InsertAnchor": { + "Anchor name": "アンカーの名前", + "Cancel": "中止", + "Delete": "削除", + "Insert Anchor": "アンカーの挿入", + "OK": "OK" + }, + "InsertImage": { + "Absbottom": "下(絶対的)", + "Absmiddle": "中央(絶対的)", + "Alignment:": "行揃え:", + "Alternate text:": "代替テキスト:", + "Baseline": "ベースライン", + "Border thickness:": "境界線の幅:", + "Bottom": "下", + "Cancel": "中止", + "Enter the image URL here": "画像のURLをここに入力します", + "For browsers that don't support images": "画像表示をサポートしないブラウザに必要です", + "Horizontal padding": "水平余白", + "Horizontal:": "水平:", + "Image Preview:": "画像プレビュー:", + "Image URL:": "画像URL:", + "Insert Image": "画像の挿入", + "Layout": "レイアウト", + "Leave empty for no border": "境界線がない場合は空のままにする", + "Left": "左", + "Middle": "中央", + "Not set": "なし", + "OK": "OK", + "Positioning of this image": "この画像の配置", + "Preview": "表示", + "Preview the image in a new window": "ウィンドウで画像を表示", + "Right": "右", + "Spacing": "間隔", + "Texttop": "テキスト上部", + "Top": "上", + "Vertical padding": "垂直余白", + "Vertical:": "垂直:", + "You must enter the URL": "URLを入力する必要があります" + }, + "InsertMarquee": { + "Alternate": "折り返し", + "Background-Color:": "背景色:", + "Behavior:": "動作:", + "Cancel": "中止", + "Continuous": "左右連続", + "Direction:": "方向:", + "Height:": "高さ:", + "Insert scrolling marquee": "スクロールマーキーの挿入", + "Left": "左", + "Marquee Editor": "マーキーエディタ", + "Name": "名前", + "Name/ID:": "名前/ID", + "OK": "OK", + "Right": "右", + "Scroll Amount:": "スクロール量:", + "Scroll Delay:": "スクロール遅延:", + "Slide": "スライド", + "Speed Control": "速度調整", + "Text:": "テキスト:", + "Width:": "幅:" + }, + "InsertNote": { + "Cancel": "中止" + }, + "InsertPagebreak": { + "Page break": "改ページ" + }, + "InsertPicture": { + "Absbottom": "下(絶対的)", + "Absmiddle": "中央(絶対的)", + "Alignment:": "行揃え:", + "Alternate text:": "代替テキスト:", + "Baseline": "ベースライン", + "Border thickness:": "境界線の幅:", + "Bottom": "下", + "Cancel": "中止", + "Enter the image URL here": "画像のURLをここに入力します", + "For browsers that don't support images": "画像表示をサポートしないブラウザに必要です", + "Height:": "高さ:", + "Horizontal padding": "水平余白", + "Horizontal:": "水平:", + "Image Preview:": "画像プレビュー:", + "Image URL:": "画像URL:", + "Insert Image": "画像の挿入", + "Layout": "レイアウト", + "Leave empty for no border": "境界線がない場合は空のままにする", + "Left": "左", + "Middle": "中央", + "Not set": "なし", + "OK": "OK", + "Open file in new window": "新しいウィンドウでファイルを開く", + "Positioning of this image": "この画像の配置", + "Preview": "表示", + "Preview the image in a new window": "ウィンドウで画像を表示", + "Right": "右", + "Size": "サイズ", + "Spacing": "間隔", + "Texttop": "テキスト上部", + "Top": "上", + "Upload file": "UPLOAD FILE", + "Vertical padding": "垂直余白", + "Vertical:": "垂直:", + "Width:": "幅:" + }, + "InsertSmiley": { + "Insert Smiley": "スマイリーの挿入" + }, + "InsertSnippet": { + "Cancel": "中止", + "Hide preview": "プレビュー非表示", + "Insert Snippet": "スニペットの挿入", + "Insert as": "形式を選んで挿入", + "Show preview": "プレビュー表示", + "Variable": "変数" + }, + "InsertSnippet2": { + "Cancel": "中止", + "Filter": "フィルター", + "Insert Snippet": "スニペットの挿入", + "Variable": "変数" + }, + "InsertTable": { + "Absbottom": "下(絶対的)", + "Absmiddle": "中央(絶対的)", + "Alignment:": "行揃え:", + "Baseline": "ベースライン", + "Border": "ボーダー", + "Border thickness:": "境界線の幅:", + "Bottom": "下", + "Cancel": "中止", + "Caption": "キャプション", + "Cell padding:": "セル余白:", + "Cell spacing:": "セル間隔:", + "Cols:": "列:", + "Em": "相対値(em)", + "Fixed width columns": "列の幅を固定", + "Insert Table": "テーブルの挿入", + "Layout": "レイアウト", + "Leave empty for no border": "境界線がない場合は空のままにする", + "Left": "左", + "Middle": "中央", + "Not set": "なし", + "Number of columns": "列数", + "Number of rows": "行数", + "OK": "OK", + "Percent": "パーセント(%)", + "Pixels": "ピクセル(px)", + "Positioning of this table": "このテーブルの配置", + "Right": "右", + "Rows:": "行数:", + "Space between adjacent cells": "隣接するセル間の距離", + "Space between content and border in cell": "セル内における内容と境界線との距離", + "Spacing": "間隔", + "Texttop": "テキスト上部", + "Top": "上", + "Width of the table": "テーブルの幅", + "Width unit": "幅の単位", + "Width:": "幅:", + "You must enter a number of columns": "列数を入力してください", + "You must enter a number of rows": "行数を入力してください" + }, + "LangMarks": { + "— language —": "— 言語 —", + "English": "英語", + "French": "フランス語", + "Greek": "ギリシャ語", + "Latin": "ラテン語", + "language select": "言語の選択" + }, + "Linker": { + "Are you sure you wish to remove this link?": "本当にこのリンクを削除しますか?", + "Cancel": "中止", + "Email Address:": "アドレス:", + "Email Link": "Eメールリンク", + "Insert/Modify Link": "リンクの挿入/修正", + "Location Bar:": "アドレスバー", + "Menu Bar:": "メニュー", + "Message Template:": "本文雛形:", + "Name:": "名前:", + "New Window": "新しいウィンドウ", + "OK": "OK", + "Ordinary Link": "標準リンク", + "Popup Window": "ポップアップウィンドウ", + "Remove Link": "リンク削除", + "Resizeable:": "リサイズ", + "Same Window (jump out of frames)": "同一ウィンドウ (フレーム最上位)", + "Scrollbars:": "スクロール", + "Size:": "サイズ:", + "Status Bar:": "ステータスバー", + "Subject:": "件名:", + "Target:": "ターゲット:", + "Toolbar:": "ツールバー", + "URL Link": "URLリンク", + "URL:": "URL:", + "You must select some text before making a new link.": "リンクを作成するにはテキストを選択する必要があります" + }, + "ListType": { + "Choose list style type (for ordered lists)": "リスト形式の選択(順序付けリスト用)", + "Decimal numbers": "10進数", + "Lower greek letters": "ギリシャ文字(小文字)", + "Lower latin letters": "アルファベット(小文字)", + "Lower roman numbers": "ローマ数字(小文字)", + "Upper latin letters": "アルファベット(大文字)", + "Upper roman numbers": "ローマ数字(大文字)" + }, + "MootoolsFileManager": { + "Insert File Link": "ファイルへのリンクを挿入", + "You must select some text before making a new link.": "リンクを作成するにはテキストを選択する必要があります" + }, + "NoteServer": { + "Add GUIDO Code in a textbox on the page": "ページ内のテキストボックスにGUIDOコードを追加", + "Add MIDI link to allow students to hear the music": "MIDIへのリンクを追加し、楽曲を聴かせてもよい", + "Cancel": "中止", + "Format": "フォーマット", + "Guido code": "GUIDOコード", + "Image Preview": "画像プレビュー", + "Image in applet": "アプレット画像", + "Insert GUIDO Music Notation": "GUIDO Music Notationの挿入", + "MIDI File": "MIDIファイル", + "OK": "OK", + "Options": "オプション", + "Preview": "表示", + "Preview the image in a new window": "ウィンドウで画像を表示", + "Source Code": "ソースコード", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "Mozillaではエディタ内にアプレットは表示されませんが、送信後のWebページ内では有効です。", + "Zoom": "拡大率:" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "MozillaベースのWebブラウザでは、貼り付けボタンは機能しません(技術的なセキュリティ上の理由で)。Ctrl+Vキーを押して直接貼り付けてください。" + }, + "PSLocal": { + "Cancel": "中止" + }, + "PasteText": { + "Cancel": "中止", + "OK": "OK", + "Paste as Plain Text": "プレーンテキストとして貼り付け" + }, + "PersistentStorage": { + "Cancel": "中止", + "Copy": "コピー", + "Delete": "削除", + "Directory Up": "親ディレクトリへ", + "File Manager": "ファイルマネージャ", + "Filename": "ファイル名:", + "Insert Image": "画像の挿入", + "New Folder": "新規フォルダ", + "Save": "保存", + "You must select some text before making a new link.": "リンクを作成するにはテキストを選択する必要があります" + }, + "QuickTag": { + "ATTRIBUTES": "属性", + "Cancel": "中止", + "Colors": "色", + "Enter the TAG you want to insert": "挿入したいタグを入力", + "No CSS class avaiable": "CSSクラスがありません", + "OPTIONS": "選択肢", + "Ok": "OK", + "Quick Tag Editor": "クイックタグエディタ", + "TAGs": "タグ", + "There are some unclosed quote": "閉じていない引用符があります", + "This attribute already exists in the TAG": "タグにはすでに同じ属性があります", + "You have to select some text": "テキストを選択しなければなりません" + }, + "SaveSubmit": { + "Ready": "レディ", + "Save": "保存", + "Saving...": "保存中...", + "in progress": "処理中" + }, + "SetId": { + "Cancel": "中止", + "Delete": "削除", + "ID/Name:": "ID/名前:", + "OK": "OK", + "Set ID/Name": "IDと名前の設定", + "Set Id and Name": "IDと名前の設定" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "“", + "ClosingSingleQuote": "‘", + "Convert all quotes and dashes in the current document": "文書内の引用符とダッシュをすべて変換", + "Enable automatic replacements": "自動置換の有効化", + "OK": "OK", + "OpeningDoubleQuotes": "„", + "OpeningSingleQuote": "‚", + "SmartReplace Settings": "SmartReplace設定" + }, + "SpellChecker": { + "Cancel": "中止", + "Dictionary": "辞書", + "Finished list of mispelled words": "つづり間違単語の一覧", + "I will open it in a new page.": "新しいページで開きます。", + "Ignore": "無視", + "Ignore all": "すべて無視", + "Info": "情報", + "Learn": "学習", + "No mispelled words found with the selected dictionary.": "選択された辞書にはつづり間違い単語がありません。", + "OK": "OK", + "Original word": "元の単語", + "Please confirm that you want to open this link": "本当にこのリンクを開きますか", + "Please wait. Calling spell checker.": "しばらくお待ちください。スペルチェッカーを呼び出しています。", + "Please wait: changing dictionary to": "しばらくお待ちください: 辞書を切り替えています", + "Re-check": "再チェック", + "Replace": "置換", + "Replace all": "すべて置換", + "Replace with": "これに置換", + "Revert": "戻す", + "Spell-check": "スペルチェック", + "Suggestions": "候補", + "This will drop changes and quit spell checker. Please confirm.": "変更を破棄してスペルチェッカーを終了します。よろしいいですか。" + }, + "Stylist": { + "Styles": "スタイル" + }, + "SuperClean": { + "Cancel": "中止", + "Clean up HTML": "HTMLのクリーンナップ", + "General tidy up and correction of some problems.": "一般的な適正化といくつかの問題を修正します。", + "OK": "OK", + "Please select from the following cleaning options...": "以下のクリーンナップオプションを選択してください...", + "Remove custom font sizes.": "独自フォントサイズ設定の除去。", + "Remove custom text colors.": "独自文字色設定の除去。", + "Remove custom typefaces (font \"styles\").": "独自フォント名設定の除去 (font face)。", + "Remove lang attributes.": "言語属性の除去。", + "Replace directional quote marks with non-directional quote marks.": "方向つき引用符を方向なし引用符に置換。" + }, + "TableOperations": { + "All four sides": "四辺すべて", + "Borders": "境界線", + "Cancel": "中止", + "Caption": "キャプション", + "Cell Properties": "セルプロパティ", + "Cell properties": "セルのプロパティ", + "Columns": "列数:", + "Delete cell": "セルの削除", + "Delete column": "列の削除", + "Delete row": "行の削除", + "Description": "説明", + "Frame and borders": "外枠と境界線", + "Frames": "外枠", + "Insert cell after": "次にセルを挿入", + "Insert cell before": "前にセルを挿入", + "Insert column after": "右に列を挿入", + "Insert column before": "左に列を挿入", + "Insert row after": "下に行を挿入", + "Insert row before": "上に行を挿入", + "Merge Cells": "セルの結合", + "Merge cells": "セルの結合", + "No rules": "区切りなし", + "No sides": "外枠なし", + "OK": "OK", + "Padding": "余白", + "Please click into some cell": "いずれかのセル内をクリックしてください", + "Row Properties": "行プロパティ", + "Row properties": "行のプロパティ", + "Rows": "行数:", + "Rules will appear between all rows and columns": "すべての行間と列間に線を引く", + "Rules will appear between columns only": "列の間にのみ線を引く", + "Rules will appear between rows only": "行の間にのみ線を引く", + "Spacing": "間隔", + "Spacing and padding": "間隔と余白", + "Split column": "列の分割", + "Split row": "行の分割", + "Summary": "要約", + "Table Properties": "テーブルのプロパティ", + "Table properties": "テーブルのプロパティ", + "The bottom side only": "下辺のみ", + "The left-hand side only": "左辺のみ", + "The right and left sides only": "左右辺のみ", + "The right-hand side only": "右辺のみ", + "The top and bottom sides only": "上下辺のみ", + "The top side only": "上辺のみ", + "Xinha cowardly refuses to delete the last cell in row.": "安全のために、行にひとつだけ残っている列の削除は拒否されます。", + "Xinha cowardly refuses to delete the last column in table.": "安全のために、テーブルにひとつだけ残っている列の削除は拒否されます。", + "Xinha cowardly refuses to delete the last row in table.": "安全のために、テーブルにひとつだけ残っている行の削除は拒否されます。", + "pixels": "ピクセル" + }, + "Template": { + "Cancel": "中止", + "Insert template": "テンプレートの挿入" + }, + "UnFormat": { + "All": "すべて", + "All HTML:": "全HTMLタグ:", + "Cancel": "中止", + "Cleaning Area": "クリーニング領域", + "Cleaning options": "クリーニングオプション", + "Formatting:": "書式指定タグ:", + "OK": "OK", + "Page Cleaner": "ページクリーナー", + "Select which types of formatting you would like to remove.": "削除する書式を選択してください。", + "Selection": "選択部分" + }, + "Xinha": { + "— font —": "— フォント —", + "— format —": "— 書式 —", + "— size —": "— サイズ —", + "About this editor": "バージョン情報", + "Address": "アドレス", + "Background Color": "背景色", + "Bold": "太字", + "Bulleted List": "記号付き箇条書き", + "Clean content pasted from Word": "Wordから貼り付けられた内容の清書", + "Clear Inline Font Specifications": "インラインフォント指定をクリア", + "Clear MSOffice tags": "MSOfficeタグをクリア", + "Close": "閉じる", + "Constructing object": "オブジェクト構築中", + "Copy selection": "コピー", + "Create Statusbar": "ステータスバーの作成", + "Create Toolbar": "ツールバーの作成", + "Current style": "現在のスタイル", + "Cut selection": "切り取り", + "Decrease Indent": "インデント解除", + "Direction left to right": "左から右へ", + "Direction right to left": "右から左へ", + "ENTER": "ENTER", + "Editor Help": "エディタのヘルプ", + "Finishing": "完了", + "Font Color": "文字色", + "Formatted": "整形済み", + "Generate Xinha framework": "Xinhaフレームワーク生成中", + "Heading 1": "見出し1", + "Heading 2": "見出し2", + "Heading 3": "見出し3", + "Heading 4": "見出し4", + "Heading 5": "見出し5", + "Heading 6": "見出し6", + "Headings": "見出し", + "Help using editor": "ヘルプ", + "Horizontal Rule": "水平線", + "Increase Indent": "インデント設定", + "Init editor size": "エディタサイズの初期化", + "Insert Table": "テーブルの挿入", + "Insert Web Link": "リンクの挿入", + "Insert/Modify Image": "画像の挿入/修正", + "Insert/Overwrite": "挿入/上書き", + "Italic": "斜体", + "Justify Center": "中央寄せ", + "Justify Full": "均等割付", + "Justify Left": "左寄せ", + "Justify Right": "右寄せ", + "Keyboard shortcuts": "キーボードショートカット", + "Loading in progress. Please wait!": "ロード中です。しばらくお待ちください", + "Loading plugin $plugin": "ロード中プラグイン $plugin", + "Normal": "標準", + "Ordered List": "番号付き箇条書き", + "Paste from clipboard": "貼り付け", + "Path": "パス", + "Print document": "印刷", + "Redoes your last action": "やり直し", + "Register plugin $plugin": "登録中プラグイン $plugin", + "Remove formatting": "書式削除", + "SHIFT-ENTER": "SHIFT+ENTER", + "Save as": "名前をつけて保存", + "Select all": "すべて選択", + "Set format to paragraph": "段落書式の設定", + "Split Block": "領域分割", + "Strikethrough": "打ち消し線", + "Subscript": "下付き添え字", + "Superscript": "上付き添え字", + "The editor provides the following key combinations:": "エディタは以下のキー操作を提供しています:", + "Toggle Borders": "境界線の切替", + "Toggle HTML Source": "HTML編集モードを切替", + "Underline": "下線", + "Undoes your last action": "元に戻す", + "Would you like to clear font colours?": "色をクリアしますか?", + "Would you like to clear font sizes?": "サイズをクリアしますか?", + "Would you like to clear font typefaces?": "フォント名をクリアしますか?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "テキストモードで操作しています。WYSIWYG編集に戻るには[<>]ボタンを使ってください。", + "insert linebreak": "段落内改行の挿入", + "new paragraph": "新規段落" + }, + "__NEW_TRANSLATIONS__": { + "CharCounter": { + "HTML": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "EditTag": { + "Edit Tag By Peg": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`delta`": "", + "`Delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`gamma`": "", + "`Gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`larr`": "", + "`lArr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`psi`": "", + "`Psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`theta`": "", + "`Theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "harr": "", + "hArr": "", + "hata": "", + "if": "", + "in": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "lArr": "", + "larr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "Pi": "", + "pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "Sigma": "", + "sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "theta": "", + "Theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "" + }, + "FormOperations": { + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Name of the form select": "" + }, + "FullPage": { + "...": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "western (ISO-8859-1)": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/Edit Horizontal Rule": "" + }, + "InlineStyler": { + "-": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page Break": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "This is an information about something": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "InsertSnippet for Xinha": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "" + }, + "LangMarks": { + "', '": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "PopupWindow": "", + "Shows On Hover": "", + "Title:": "" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "" + }, + "SetId": { + "Set Id/Name": "" + }, + "SmartReplace": { + "SmartReplace": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Cleaning Scope": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove emphasis and annotations.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Courier New": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Georgia": "", + "Impact": "", + "Loading Core": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Select Color": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Set Background": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "D:": "", + "File List": "", + "Filesize:": "", + "Folder": "", + "GIF": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Toggle marker color": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "D:": "<>", + "GIF": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "PNG": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "GUIDO Code": "", + "Zoom :": "", + "100%": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "File List": "<>", + "Insert": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "HTMLArea Spell Checker": "", + "pliz weit ;-)": "", + "Spell Checker": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/lt.js new file mode 100644 index 0000000000..69d76d348c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/lt.js @@ -0,0 +1,1573 @@ +// Xinha Language Combined Translation File +// +// LANG: "lt", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/lt.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'lt'; +// _editor_lang_merged_file = '/xinha/lang/merged/lt.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "Apie redaktorių" + }, + "BackgroundImage": { + "Cancel": "Atšaukti" + }, + "ColorPicker": { + "OK": "OK" + }, + "ContextMenu": { + "Justify Center": "Lygiavimas pagal centrą", + "Justify Full": "Lygiuoti pastraipą", + "Justify Left": "Lygiavimas pagal kairę", + "Justify Right": "Lygiavimas pagal dešinę" + }, + "CreateLink": { + "Cancel": "Atšaukti", + "Insert/Modify Link": "Idėti/Modifikuoti", + "New window (_blank)": "Naujas langas (_blank)", + "None (use implicit)": "None (use implicit)", + "OK": "OK", + "Other": "Kitas", + "Same frame (_self)": "Same frame (_self)", + "Target:": "Target:", + "Title (tooltip):": "Pavadinimas (tooltip):", + "Top frame (_top)": "Top frame (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "Equation": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "ExtendedFileManager": { + "Cancel": "Atšaukti", + "New window (_blank)": "Naujas langas (_blank)", + "None (use implicit)": "None (use implicit)", + "OK": "OK", + "Same frame (_self)": "Same frame (_self)", + "Title (tooltip)": "Pavadinimas (tooltip):", + "Top frame (_top)": "Top frame (_top)" + }, + "Forms": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "FullPage": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "HorizontalRule": { + "Cancel": "Atšaukti", + "Horizontal Rule": "Horizontali linija", + "OK": "OK" + }, + "ImageManager": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "InsertAnchor": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "InsertImage": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "InsertMarquee": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "InsertNote": { + "Cancel": "Atšaukti" + }, + "InsertPicture": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "InsertSnippet": { + "Cancel": "Atšaukti" + }, + "InsertSnippet2": { + "Cancel": "Atšaukti" + }, + "InsertTable": { + "Cancel": "Atšaukti", + "Insert Table": "Įterpti lentelę", + "OK": "OK" + }, + "Linker": { + "Cancel": "Atšaukti", + "Insert/Modify Link": "Idėti/Modifikuoti", + "OK": "OK", + "Target:": "Target:", + "URL:": "URL:" + }, + "NoteServer": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "PSLocal": { + "Cancel": "Atšaukti" + }, + "PasteText": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "PersistentStorage": { + "Cancel": "Atšaukti" + }, + "QuickTag": { + "Cancel": "Atšaukti" + }, + "SetId": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "SuperClean": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "TableOperations": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "Template": { + "Cancel": "Atšaukti" + }, + "UnFormat": { + "Cancel": "Atšaukti", + "OK": "OK" + }, + "Xinha": { + "About this editor": "Apie redaktorių", + "Background Color": "Fono spalva", + "Bold": "Paryškinti", + "Bulleted List": "Suženklintas sąrašas", + "Copy selection": "Kopijuoti", + "Current style": "Dabartinis stilius", + "Cut selection": "Iškirpti", + "Decrease Indent": "Sumažinti paraštę", + "Font Color": "Šrifto spalva", + "Help using editor": "Pagalba naudojant redaktorių", + "Horizontal Rule": "Horizontali linija", + "Increase Indent": "Padidinti paraštę", + "Insert Table": "Įterpti lentelę", + "Insert Web Link": "Įterpti nuorodą", + "Insert/Modify Image": "Įterpti paveiksliuką", + "Italic": "Kursyvas", + "Justify Center": "Lygiavimas pagal centrą", + "Justify Full": "Lygiuoti pastraipą", + "Justify Left": "Lygiavimas pagal kairę", + "Justify Right": "Lygiavimas pagal dešinę", + "Ordered List": "Numeruotas sąrašas", + "Paste from clipboard": "Įterpti", + "Path": "Kelias", + "Redoes your last action": "Pakartoja paskutinį atšauktą jūsų veiksmą", + "Strikethrough": "Perbraukti", + "Subscript": "Apatinis indeksas", + "Superscript": "Viršutinis indeksas", + "Toggle HTML Source": "Perjungti į HTML/WYSIWYG", + "Underline": "Pabraukti", + "Undoes your last action": "Atšaukia paskutini jūsų veiksmą", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jūs esete teksto režime. Naudokite [<>] mygtuką grįžimui į WYSIWYG." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "Not set": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Save": "<>", + "Texttop": "<>", + "Top": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + "Open file in new window": "", + " Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/lv.js new file mode 100644 index 0000000000..7666d42dc0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/lv.js @@ -0,0 +1,1573 @@ +// Xinha Language Combined Translation File +// +// LANG: "lv", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/lv.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'lv'; +// _editor_lang_merged_file = '/xinha/lang/merged/lv.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "AboutBox": { + "About this editor": "Par ðo rediìçtâju" + }, + "BackgroundImage": { + "Cancel": "Atcelt" + }, + "ColorPicker": { + "OK": "Labi" + }, + "ContextMenu": { + "Justify Center": "Izlîdzinât centrâ", + "Justify Full": "Izlîdzinât pa visu lapu", + "Justify Left": "Izlîdzinât pa kreisi", + "Justify Right": "Izlîdzinât pa labi" + }, + "CreateLink": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "EditTag": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "Equation": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "ExtendedFileManager": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "Forms": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "FullPage": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "HorizontalRule": { + "Cancel": "Atcelt", + "Horizontal Rule": "Horizontâla atdalîtâjsvîtra", + "OK": "Labi" + }, + "ImageManager": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "InsertAnchor": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "InsertImage": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "InsertMarquee": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "InsertNote": { + "Cancel": "Atcelt" + }, + "InsertPicture": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "InsertSnippet": { + "Cancel": "Atcelt" + }, + "InsertSnippet2": { + "Cancel": "Atcelt" + }, + "InsertTable": { + "Cancel": "Atcelt", + "Insert Table": "Ievietot tabulu", + "OK": "Labi" + }, + "Linker": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "NoteServer": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "PSLocal": { + "Cancel": "Atcelt" + }, + "PasteText": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "PersistentStorage": { + "Cancel": "Atcelt" + }, + "QuickTag": { + "Cancel": "Atcelt" + }, + "SetId": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "SmartReplace": { + "OK": "Labi" + }, + "SpellChecker": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "SuperClean": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "TableOperations": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "Template": { + "Cancel": "Atcelt" + }, + "UnFormat": { + "Cancel": "Atcelt", + "OK": "Labi" + }, + "Xinha": { + "About this editor": "Par ðo rediìçtâju", + "Background Color": "Fona krâsa", + "Bold": "Trekniem burtiem", + "Bulleted List": "Saraksts", + "Copy selection": "Kopçt iezîmçto", + "Current style": "Patreizçjais stils", + "Cut selection": "Izgriezt iezîmçto", + "Decrease Indent": "Samazinât atkâpi", + "Font Color": "Burtu krâsa", + "Help using editor": "Rediìçtâja palîgs", + "Horizontal Rule": "Horizontâla atdalîtâjsvîtra", + "Increase Indent": "Palielinât atkâpi", + "Insert Table": "Ievietot tabulu", + "Insert Web Link": "Ievietot hipersaiti", + "Insert/Modify Image": "Ievietot attçlu", + "Italic": "Kursîvâ", + "Justify Center": "Izlîdzinât centrâ", + "Justify Full": "Izlîdzinât pa visu lapu", + "Justify Left": "Izlîdzinât pa kreisi", + "Justify Right": "Izlîdzinât pa labi", + "Ordered List": "Numurçts saraksts", + "Paste from clipboard": "Ievietot iezîmçto", + "Path": "Ceïð", + "Redoes your last action": "Atkârtot pçdçjo darbîbu", + "Strikethrough": "Pârsvîtrots", + "Subscript": "Novietot zem rindas", + "Superscript": "Novietot virs rindas", + "Toggle HTML Source": "Skatît HTML kodu", + "Underline": "Pasvîtrots", + "Undoes your last action": "Atcelt pçdçjo darbîbu", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jûs patlaban darbojaties TEKSTA REÞÎMÂ. Lai pârietu atpakaï uz GRAFISKO REÞÎMU (WYSIWIG), lietojiet [<>] pogu." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top": "<>", + "Top frame (_top)": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + "Open file in new window": "", + " Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/nb.js new file mode 100644 index 0000000000..81f925de96 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/nb.js @@ -0,0 +1,1579 @@ +// Xinha Language Combined Translation File +// +// LANG: "nb", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/nb.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'nb'; +// _editor_lang_merged_file = '/xinha/lang/merged/nb.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Abbreviation": "Beskrive forkortelse", + "Cancel": "Avbryt", + "Delete": "Fjerne", + "Expansion:": "Betydning:", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "Om denne editor" + }, + "BackgroundImage": { + "Cancel": "Avbryt", + "Remove Current Background": "Fjern gjeldende bakgrunn", + "Set Page Background Image": "Velg bakgrunnsbilde på Siden", + "Set page background image": "Velg bakgrunnsbilde på siden" + }, + "CharCounter": { + "Chars": "Tegn" + }, + "CharacterMap": { + "Insert special character": "Sett inn tegn" + }, + "ColorPicker": { + "Color: ": "Farge", + "OK": "OK" + }, + "ContextMenu": { + "C_ell Properties...": "C_elleegenskaper...", + "Chec_k Link...": "Sje_kk Link...", + "Copy": "Kopier", + "Create a link": "Lag ny link", + "Current URL is": "Gjeldende URL er", + "Cut": "Klipp ut", + "De_lete Column": "S_lett kolonne", + "Delete the current column": "Slett gjeldende kolonne", + "Delete the current row": "Slett gjeldende rad", + "How did you get here? (Please report!)": "Hva skjedde? (Vennligst beskriv)", + "I_nsert Row Before": "Sett I_nn rad før", + "In_sert Row After": "_Sett inn rad etter", + "Insert C_olumn After": "Sett inn k_olonne etter", + "Insert _Column Before": "Sett inn kolonne etter (_c)", + "Insert a new column after the current one": "Sett inn kolonne etter gjeldende", + "Insert a new column before the current one": "Sett inn kolonne før gjeldende", + "Insert a new row after the current one": "Sett inn ny rad etter gjeldende", + "Insert a new row before the current one": "Sett inn ny rad før gjeldende", + "Insert a paragraph after the current node": "Sett inn paragraf etter gjeldende node", + "Insert a paragraph before the current node": "Sett inn paragraf før gjeldende node", + "Insert paragraph after": "Sett inn paragraf etter", + "Insert paragraph before": "Sett inn paragraf før", + "Justify Center": "_Midtjuster", + "Justify Full": "Blokk_juster", + "Justify Left": "_Venstrejuster", + "Justify Right": "_Høyrejuster", + "Link points to:": "Link peker til:", + "Make lin_k...": "Lag len_ke...", + "Opens this link in a new window": "Åpner denne link i nytt vindu", + "Paste": "Lim inn", + "Please confirm that you want to remove this element:": "Vennligst bekreft at du ønsker å fjerne elementet:", + "Please confirm that you want to unlink this element.": "Vennligst bekreft at du ønsker å fjerne link på elementet", + "Remove the $elem Element...": "Fjerne $elem elementet...", + "Remove this node from the document": "Fjerne denne node fra dokumentet", + "Ro_w Properties...": "Rad Egenskaper... (_w)", + "Show the Table Cell Properties dialog": "Vis egenskaper for celle", + "Show the Table Properties dialog": "Vis egenskaper for tabellen", + "Show the Table Row Properties dialog": "Vis egenskaper for rad", + "Show the image properties dialog": "Vis bildeegenskaper", + "Unlink the current element": "Fjerne link på gjeldende element", + "_Delete Row": "Slett rad (_d)", + "_Image Properties...": "_Bildeegenskaper...", + "_Modify Link...": "_Rediger Link...", + "_Remove Link...": "_Fjerne Link...", + "_Table Properties...": "_Tabellegenskaper..." + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "Er du sikker på at du vil fjerne lenken?", + "Cancel": "Avbryt", + "Insert/Modify Link": "Rediger lenke", + "New window (_blank)": "Eget vindu (_blank)", + "None (use implicit)": "Ingen (bruk standardinnstilling)", + "OK": "OK", + "Other": "Annen", + "Same frame (_self)": "Samme ramme (_self)", + "Target:": "Mål:", + "Title (tooltip):": "Tittel (tooltip):", + "Top frame (_top)": "Toppramme (_top)", + "URL:": "Adresse:" + }, + "DynamicCSS": { + "Choose stylesheet": "Velg stilsett", + "Default": "Standard", + "Undefined": "Udefinert" + }, + "EditTag": { + "Cancel": "Avbryt", + "Edit HTML for selected text": "Rediger HTML for den valgte teksten", + "OK": "OK" + }, + "Equation": { + "Cancel": "Avbryt", + "OK": "OK", + "Preview": "Forhåndsvisning" + }, + "ExtendedFileManager": { + "Align": "Juster", + "Alt": "Alt", + "Baseline": "Grunnlinje", + "Border": "Ramme", + "Border Color": "Ramme farge:", + "Bottom": "Bunn", + "Cancel": "Avbryt", + "Clear": "Tøm", + "Color": "Farge", + "Constrain Proportions": "Beholde proposjoner", + "Copy": "Copy", + "Crop": "Beskjær", + "Cut": "Cut", + "Directory": "Mappe", + "Directory Up": "Opp et nivå", + "Edit": "Rediger", + "File Manager": "Filbehandler", + "Filename:": "Filnavn:", + "Flip Horizontal": "Vend horisontal", + "Flip Image": "Vend bilde", + "Flip Vertical": "Vend vertikal", + "GIF format is not supported, image editing not supported.": "GIF format er ikke støttet og bilderedigering er derfor ikke tilgjengelig.", + "Height": "Høyde", + "Height:": "Høyde:", + "Insert File Link": "Sett inn lenke til fil", + "Invalid base directory:": "Ugyldig sti til mappe:", + "JPEG High": "JPEG høy", + "JPEG Low": "JPEG lav", + "JPEG Medium": "JPEG middels", + "Left": "Venstre", + "Loading": "Laster", + "Lock": "Lås", + "Margin": "Marg", + "Marker": "Markør", + "Measure": "Mål", + "Middle": "Midten", + "New Folder": "Ny mappe", + "New window (_blank)": "Eget vindu (_blank)", + "No Files Found": "Ingen filer funnet", + "No Image Available": "Inget bilde tilgjengelig.", + "None (use implicit)": "Ingen (bruk standardinnstilling)", + "OK": "OK", + "Padding": "Innvendig marg", + "Positioning of this image": "Bildepossisjon", + "Preview": "Forhåndsvisning", + "Quality:": "Kvalitet", + "Refresh": "Oppfrisk side", + "Rename": "Nytt navn", + "Resize": "Endre størrelse", + "Right": "Høyre", + "Rotate": "Roter", + "Rotate Image": "Roter bilde", + "Same frame (_self)": "Samme ramme (_self)", + "Save": "Lagre", + "Start X:": "Start X", + "Start Y:": "Start Y", + "Target Window": "Mål", + "Title (tooltip)": "Tittel (tooltip)", + "Top": "Overkant", + "Top frame (_top)": "Toppramme (_top)", + "Trash": "Søppel", + "Upload": "Last opp", + "W:": "L:", + "Width": "Bredde", + "Width:": "Bredde:", + "You must select some text before making a new link.": "Du må velge noe tekst før du kan lage en ny lenke.", + "Zoom": "Forstørr" + }, + "FindReplace": { + "Case sensitive search": "Skille mellom store og små bokstaver", + "Clear": "Tøm", + "Done": "Ferdig", + "Enter the text you want to find": "Skriv inn teksten du ønsker å finne", + "Find and Replace": "Søk og erstatt", + "Highlight": "Uthev", + "Inform a replacement word": "Vennligst skriv inn et erstatningsord / setning", + "Next": "Neste", + "Options": "Valg", + "Replace with:": "Erstatt med:", + "Search for:": "Søk etter:", + "Substitute all occurrences": "Erstatt alle treff", + "Substitute this occurrence?": "Vennligst bekreft at du vil erstatte?", + "Undo": "Tilbake", + "Whole words only": "Bare hele ord", + "found item": "Treff", + "found items": "forekomster funnet i søket", + "not found": "ikke funnet", + "replaced item": "erstattet treff", + "replaced items": "forekomster erstattet" + }, + "FormOperations": { + "Insert a Form.": "Sett inn skjema", + "Insert a check box.": "Hakeboks", + "Insert a multi-line text field.": "Sett inn tekstfelt med flere linjer", + "Insert a radio button.": "Sett inn en radioknapp", + "Insert a select field.": "Sett inn valgboks/ netrekksboks", + "Insert a submit/reset button.": "Sett inn send-/nullstill knapp for skjemaet", + "Insert a text, password or hidden field.": "Sett inn formfelt" + }, + "Forms": { + "Cancel": "Avbryt", + "Image URL:": "Bildets URL:", + "Name": "Navn", + "Name/ID:": "Navn/ID:", + "OK": "OK", + "Options": "Valg", + "Size:": "Størrelse", + "Text:": "Tekst:" + }, + "FullPage": { + "Alternate style-sheet:": "Alternativt stilsett:", + "Background color:": "Bakgrunnsfarge:", + "Cancel": "Avbryt", + "Character set:": "Tegnsett", + "DOCTYPE:": "DOCTYPE:", + "Description:": "Beskrivelse", + "Document properties": "Egenskaper for dokument", + "Document title:": "Tittel på dokument:", + "Keywords:": "Nøkkelord", + "OK": "OK", + "Primary style-sheet:": "Stilsett:", + "Text color:": "Tekstfarge:" + }, + "FullScreen": { + "Maximize/Minimize Editor": "Maksimer/Minimer WYSIWYG vindu" + }, + "HorizontalRule": { + "Alignment:": "Justering:", + "Cancel": "Avbryt", + "Center": "Sentrert", + "Color:": "Farge", + "Height:": "Høyde:", + "Horizontal Rule": "Horisontal linje", + "Insert/edit horizontal rule": "Sett inn/ rediger horisontal linje", + "Layout": "Oppsett", + "Left": "Venstre", + "No shading": "Ingen skygge", + "OK": "OK", + "Right": "Høyre", + "Style": "Stil", + "Width:": "Bredde:", + "percent": "prosent", + "pixels": "Piksel" + }, + "HtmlTidy": { + "HTML Tidy": "HTML Tidy", + "Tidy failed. Check your HTML for syntax errors.": "Tidy feilet. Sjekk HTML koden for syntaksfeil." + }, + "ImageManager": { + "Angle:": "Vinkel:", + "Baseline": "Grunnlinje", + "Bottom": "Bunn", + "Cancel": "Avbryt", + "Clear": "Fjern", + "Constrain Proportions": "Behold proposjoner", + "Crop": "Beskjær", + "Directory": "Mappe", + "Directory Up": "Opp en mappe", + "Edit": "Rediger", + "Filename:": "Filnavn:", + "Flip Horizontal": "Vend horisontal", + "Flip Image": "Vend bilde", + "Flip Vertical": "Vend vertikal", + "Folder Name:": "Mappenavn:", + "GIF format is not supported, image editing not supported.": "Bildeformatet GIF er ikke støttet.", + "Height:": "Høyde:", + "Image Format": "Bildeformat:", + "Insert Image": "Sett inn bilde", + "Invalid base directory:": "Feil rot-mappe:", + "JPEG High": "JPEG høy", + "JPEG Low": "JPEG lav", + "JPEG Medium": "JPEG middelse", + "Left": "Venstre", + "Lock": "Sperre", + "Marker": "Marker", + "Measure": "Mål", + "Middle": "Midten", + "New Folder": "Ny mappe", + "No Image Available": "Inget bilde er tilgjengelig", + "No Images Found": "Ingen bilder funnet", + "OK": "OK", + "Positioning of this image": "Bildepossisjon", + "Quality:": "Kvalitet", + "Refresh": "Oppfrisk", + "Resize": "Endre størrelse", + "Right": "Høyre", + "Rotate": "Roter", + "Rotate Image": "Roter bilde", + "Save": "Lagre", + "Start X:": "Start X", + "Start Y:": "Start Y", + "Top": "Overkant", + "Trash": "Søppelkurv", + "W:": "B:", + "Width:": "Bredde:" + }, + "InlineStyler": { + "Background": "Bakgrund", + "Baseline": "Grunnlinje", + "Border": "Ramme", + "Bottom": "Bunn", + "Center": "Sentrert", + "Char": "Tegn", + "Collapsed borders": "Fjern kantlinjer", + "FG Color": "FG farge", + "Float": "Flytende", + "Height": "Høyde", + "Image URL": "Bildets URL", + "Justify": "Juster", + "Layout": "Oppsett", + "Left": "Venstre", + "Margin": "Marg", + "Middle": "Midten", + "None": "Ingen", + "Padding": "Luft", + "Right": "Høyre", + "Text align": "Juster tekst", + "Top": "Overkant", + "Vertical align": "Vertikal justering", + "Width": "Bredde", + "percent": "prosent", + "pixels": "Piksel" + }, + "InsertAnchor": { + "Anchor name": "Ankernavn (ID)", + "Cancel": "Avbryt", + "Delete": "Fjerne", + "Insert Anchor": "Sett inn anker", + "OK": "OK" + }, + "InsertImage": { + "Alignment:": "Justering:", + "Alternate text:": "Alternativ tekst", + "Baseline": "Grunnlinje", + "Border thickness:": "Rammetykkelse:", + "Bottom": "Bunn", + "Cancel": "Avbryt", + "Horizontal:": "Horisontal:", + "Image Preview:": "Forhåndsvisning:", + "Image URL:": "Bildets URL:", + "Insert Image": "Sett inn bilde", + "Layout": "Oppsett", + "Left": "Venstre", + "Middle": "Midten", + "OK": "OK", + "Positioning of this image": "Bildepossisjon", + "Preview": "Forhåndsvisning", + "Right": "Høyre", + "Spacing": "Luft", + "Top": "Overkant", + "Vertical:": "Vertikal:" + }, + "InsertMarquee": { + "Background-Color:": "Bakgrunnsfarge:", + "Behavior:": "Oppførsel:", + "Cancel": "Avbryt", + "Direction:": "Rettning:", + "Height:": "Høyde:", + "Insert scrolling marquee": "Sett inn rulletekst", + "Left": "Venstre", + "Name": "Navn", + "Name/ID:": "Navn/ID:", + "OK": "OK", + "Right": "Høyre", + "Scroll Amount:": "Hastighet:", + "Scroll Delay:": "Forsinkelse:", + "Speed Control": "Egenskaper for hastigheten til rulleteksten", + "Text:": "Tekst:", + "Width:": "Bredde:" + }, + "InsertNote": { + "Cancel": "Avbryt" + }, + "InsertPagebreak": { + "Page break": "Sett inn sideskift" + }, + "InsertPicture": { + "Alignment:": "Plassering", + "Alternate text:": "Alternativ tekst", + "Baseline": "Grunnlinje", + "Border thickness:": "Rammetykkelse:", + "Bottom": "Bunn", + "Cancel": "Avbryt", + "Height:": "Høyde:", + "Horizontal:": "Horisontal:", + "Image Preview:": "Forhåndsvisning:", + "Image URL:": "Bildets URL:", + "Insert Image": "Sett inn bilde", + "Layout": "Oppsett", + "Left": "Venstre", + "Middle": "Midten", + "OK": "OK", + "Open file in new window": "Åpne bilde i nytt vindu", + "Positioning of this image": "Bildepossisjon", + "Preview": "Forhåndsvisning", + "Right": "Høyre", + "Size": "Størrelse", + "Spacing": "Luft rundt bildet", + "Top": "Overkant", + "Upload file": "Last opp bilde", + "Vertical:": "Vertikal:", + "Width:": "Bredde:" + }, + "InsertSmiley": { + "Insert Smiley": "Sett inn smiley" + }, + "InsertSnippet": { + "Cancel": "Avbryt", + "Hide preview": "Skjul forhåndsvisning", + "Insert Snippet": "Sett inn snutt", + "Insert as": "Sett inn som", + "Show preview": "Vis forhåndsvisning", + "Variable": "Variabel" + }, + "InsertSnippet2": { + "Cancel": "Avbryt", + "Insert Snippet": "Sett inn snutt", + "Variable": "Variabel" + }, + "InsertTable": { + "Alignment:": "Justering:", + "Baseline": "Grunnlinje", + "Border": "Ramme", + "Border thickness:": "Rammetykkelse:", + "Bottom": "Bunn", + "Cancel": "Avbryt", + "Caption": "Overskrift", + "Insert Table": "Sett inn tabell", + "Layout": "Oppsett", + "Left": "Venstre", + "Middle": "Midten", + "OK": "OK", + "Percent": "prosent", + "Pixels": "Piksel", + "Right": "Høyre", + "Spacing": "Luft", + "Top": "Overkant", + "Width:": "Bredde:" + }, + "LangMarks": { + "— language —": "— Språk —", + "English": "engelsk", + "French": "fransk", + "Greek": "grekisk", + "Latin": "latin", + "language select": "Språkvalg" + }, + "Linker": { + "Are you sure you wish to remove this link?": "Er du sikker på at du vil fjerne lenken?", + "Cancel": "Avbryt", + "Insert/Modify Link": "Rediger lenke", + "Name:": "Navn", + "OK": "OK", + "Size:": "Størrelse", + "Target:": "Mål:", + "URL:": "Adresse:", + "You must select some text before making a new link.": "Du må markere tekst eller et bilde før du kan lage en lenke." + }, + "ListType": { + "Choose list style type (for ordered lists)": "Velg listetype (for nummererte lister)", + "Decimal numbers": "Desimaltall", + "Lower greek letters": "Lower greek letters", + "Lower latin letters": "Lower latin letters", + "Lower roman numbers": "Lower roman numbers", + "Upper latin letters": "Upper latin letters", + "Upper roman numbers": "Upper roman numbers" + }, + "MootoolsFileManager": { + "Insert File Link": "Sett inn lenke til fil", + "You must select some text before making a new link.": "Du må markere tekst eller et bilde før du kan lage en lenke." + }, + "NoteServer": { + "Add GUIDO Code in a textbox on the page": "Sett inn GUIDO-kode i et tekstfelt på siden", + "Add MIDI link to allow students to hear the music": "Legg til MIDI-link for at studenter kan høre musikken", + "Cancel": "Avbryt", + "Format": "Format", + "Guido code": "GUIDO-kode", + "Image Preview": "Bilde forhåndsvisning", + "Image in applet": "Bilde i applet", + "Insert GUIDO Music Notation": "Sett inn GUIDO-noter", + "MIDI File": "MIDIfil", + "OK": "OK", + "Options": "Muligheter", + "Preview": "Preview", + "Source Code": "Kildekode", + "Zoom": "Forstørr" + }, + "PSLocal": { + "Cancel": "Avbryt" + }, + "PasteText": { + "Cancel": "Avbryt", + "OK": "OK", + "Paste as Plain Text": "Lim inn som ren tekst" + }, + "PersistentStorage": { + "Cancel": "Avbryt", + "Copy": "Kopier", + "Delete": "Fjerne", + "Directory Up": "Opp et nivå", + "File Manager": "Filbehandler", + "Filename": "Filnavn:", + "Insert Image": "Sett inn bilde", + "New Folder": "Ny mappe", + "Save": "Lagre", + "You must select some text before making a new link.": "Du må markere tekst eller et bilde før du kan lage en lenke." + }, + "QuickTag": { + "ATTRIBUTES": "ATTRIBUTTER", + "Cancel": "Avbryt", + "Colors": "Farger", + "Enter the TAG you want to insert": "Skriv inn taggen du vil ønsker å sette inn", + "No CSS class avaiable": "Ingen CSS klasse tilgjengelig", + "OPTIONS": "EGENSKAPER", + "Ok": "OK", + "Quick Tag Editor": "Kjapp TAGG-Editor", + "TAGs": "TAGGer", + "There are some unclosed quote": "Det mangler et hermetegn", + "This attribute already exists in the TAG": "Denne attributten eksisterer allerede i taggen", + "You have to select some text": "Du må velge noe tekst" + }, + "SaveSubmit": { + "Save": "Lagre" + }, + "SetId": { + "Cancel": "Avbryt", + "Delete": "Slett", + "OK": "OK", + "Set Id and Name": "Sett ID og navn" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Avbryt", + "Dictionary": "Ordliste", + "Finished list of mispelled words": "Ferdig med liste over feilstavede ord", + "I will open it in a new page.": "Åpnes i ny side", + "Ignore": "Ignorer", + "Ignore all": "Ignorer alle", + "No mispelled words found with the selected dictionary.": "Ingen feilstavede ord funnet med den valgte ordlisten", + "OK": "OK", + "Original word": "Opprinnelig ord", + "Please confirm that you want to open this link": "Ønsker du å åpne denne lenken", + "Please wait. Calling spell checker.": "Vennligst vent, kaller opp stavekontrollprogrammet", + "Please wait: changing dictionary to": "Vennligst vent, endrer ordliste til", + "Re-check": "Kjør stavekontroll på nytt", + "Replace": "Erstatt", + "Replace all": "Erstatt alle", + "Replace with": "Erstatt med", + "Spell-check": "Stavekontroll", + "Suggestions": "Forslag", + "This will drop changes and quit spell checker. Please confirm.": "Dette vil droppe endringene og avbryte stavekontrollen, vennligst bekreft." + }, + "Stylist": { + "Styles": "Stiler" + }, + "SuperClean": { + "Cancel": "Avbryt", + "Clean up HTML": "Vask HTML kode", + "General tidy up and correction of some problems.": "Generell opprydding i HTML koden samt korrigering av typiske feil", + "OK": "OK", + "Please select from the following cleaning options...": "Vennligst velg blandt de forskjellige mulighetene å vaske/ rydde i HTML koden", + "Remove custom font sizes.": "Fjerne egendefinerte skriftstørrelser (font size)", + "Remove custom text colors.": "Fjerne egendefinerte skriftfarger (font color)", + "Remove custom typefaces (font \"styles\").": "Fjerne egendefinerte skrifttyper (font face)", + "Remove lang attributes.": "Fjerne lang-attributter." + }, + "TableOperations": { + "All four sides": "Alle fire sider", + "Borders": "Kantlinjer", + "Cancel": "Avbryt", + "Caption": "Overskrift", + "Cell Properties": "Celleegenskaper", + "Cell properties": "Egenskaper for celle", + "Delete cell": "Slett celle", + "Delete column": "Slett kolonne", + "Delete row": "Slett rad", + "Description": "Beskrivelse", + "Frames": "rammer", + "Insert cell after": "Sett inn celle etter", + "Insert cell before": "Sett inn celle foran", + "Insert column after": "Skyt inn kolonne etter", + "Insert column before": "Skyt inn kolonne før", + "Insert row after": "Skyt inn rad etter", + "Insert row before": "Skyt inn rad foran", + "Merge cells": "Slå sammen celler", + "No rules": "Ingen linjal", + "No sides": "Ingen sider", + "OK": "OK", + "Padding": "Luft", + "Please click into some cell": "Klikk i en eller annen celle", + "Row Properties": "Egenskaper for rad", + "Row properties": "Egenskaper for rad", + "Rules will appear between all rows and columns": "Linjer vil synes mellom alle rader og kolonner", + "Rules will appear between columns only": "Linjer vil synes kun mellom kolonner", + "Rules will appear between rows only": "Linjer vil synes kun mellom rader", + "Spacing": "Luft", + "Spacing and padding": "Luft", + "Split column": "Del kolonne", + "Split row": "Del rad", + "Summary": "Sammendrag", + "Table Properties": "Tabellegenskaper", + "Table properties": "Tabellegenskaper", + "The bottom side only": "Bunnen kun", + "The left-hand side only": "Venstresiden kun", + "The right and left sides only": "Høyre- og venstresiden kun", + "The right-hand side only": "Høyresiden kun", + "The top and bottom sides only": "The top and bottom sides only", + "The top side only": "Overkanten kun", + "Xinha cowardly refuses to delete the last cell in row.": "Xinha nekter å slette siste cellen i tabellen.", + "Xinha cowardly refuses to delete the last column in table.": "Xinha nekter å slette siste kolonnen i tabellen.", + "Xinha cowardly refuses to delete the last row in table.": "Xinha nekter å slette siste raden i tabellen.", + "pixels": "billedpunkter" + }, + "Template": { + "Cancel": "Avbryt", + "Insert template": "Sett inn template" + }, + "UnFormat": { + "All": "Hele dokumentet", + "All HTML:": "All HTML-kode:", + "Cancel": "Avbryt", + "Cleaning Area": "Vaskeområde", + "Cleaning options": "Vaskemetoder", + "Formatting:": "Formattering:", + "OK": "OK", + "Page Cleaner": "Dokumentvasker", + "Select which types of formatting you would like to remove.": "Velg hva slags formattering du ønsker å fjerne.", + "Selection": "Markert område" + }, + "Xinha": { + "About this editor": "Om denne editor", + "Background Color": "Bakgrundsfarge", + "Bold": "Fet", + "Bulleted List": "Punktliste", + "Clear Inline Font Specifications": "Fjerne inline font spesifikasjoner", + "Copy selection": "Kopier område", + "Create Toolbar": "Lag verktøylinje", + "Current style": "Nåværende stil", + "Cut selection": "Klipp ut område", + "Decrease Indent": "Reduser innrykk", + "Direction left to right": "Fra venstre mot høyre", + "Direction right to left": "Fra høyre mot venstre", + "Font Color": "Tekstfarge", + "Help using editor": "Hjelp", + "Horizontal Rule": "Vannrett linje", + "Increase Indent": "Øke innrykk", + "Insert Table": "Sett inn tabell", + "Insert Web Link": "Lag lenke", + "Insert/Modify Image": "Sett inn bilde", + "Insert/Overwrite": "Sett inn/Overskriv", + "Italic": "Kursiv", + "Justify Center": "Midtjuster", + "Justify Full": "Blokkjuster", + "Justify Left": "Venstrejuster", + "Justify Right": "Høyrejuster", + "Ordered List": "Nummerert liste", + "Paste from clipboard": "Lim inn", + "Path": "Tekstvelger", + "Print document": "Skriv ut dokumentet", + "Redoes your last action": "Gjør om siste angring", + "Remove formatting": "Fjern formattering", + "Save as": "Lagre som", + "Select all": "Merk alt", + "Split Block": "Seperasjonsblokk", + "Strikethrough": "Gjennomstreket", + "Subscript": "Nedsenket", + "Superscript": "Opphøyet", + "Toggle Borders": "Skru av/på hjelpelinjer på tabeller", + "Toggle HTML Source": "Vis kildekode", + "Underline": "Understreket", + "Undoes your last action": "Angrer siste redigering", + "Would you like to clear font colours?": "Ønsker du å fjerne farger på skriften", + "Would you like to clear font sizes?": "Ønsker du å fjerne skrift størrelser", + "Would you like to clear font typefaces?": "Ønsker du å fjerne skrifttyper", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Du er i tekstmodus Klikk på [<>] for å gå tilbake til WYSIWIG." + }, + "__NEW_TRANSLATIONS__": { + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "HTML": "", + "Words": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "Delete Cell": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Merge Cells": "" + }, + "CreateLink": { + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "EditTag": { + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "" + }, + "FullPage": { + "...": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/Edit Horizontal Rule": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Leave empty for no border": "", + "Not set": "", + "Preview the image in a new window": "", + "Texttop": "", + "Vertical padding": "", + "You must enter the URL": "" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page Break": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "This is an information about something": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "InsertSnippet for Xinha": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Rows:": "<>", + "Texttop": "<>" + }, + "LangMarks": { + "', '": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id/Name": "", + "Set ID/Name": "" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Cleaning Scope": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove emphasis and annotations.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>", + "Rows": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Register plugin $plugin": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Set Background": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "D:": "", + "File List": "", + "Filesize:": "", + "Folder": "", + "GIF": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Toggle marker color": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Not set": "<>", + "Texttop": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Image List": "", + "Keyword": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "D:": "<>", + "GIF": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Not set": "<>", + "PNG": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Texttop": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Continuous": "", + "Marquee Editor": "", + "Slide": "" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Horizontal padding": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Preview the image in a new window": "<>", + "Texttop": "<>", + "Vertical padding": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "GUIDO Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Preview the image in a new window": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "File List": "<>", + "Insert": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "HTMLArea Spell Checker": "", + "Info": "", + "Learn": "", + "pliz weit ;-)": "", + "Revert": "", + "Spell Checker": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/nl.js new file mode 100644 index 0000000000..8f7931b22c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/nl.js @@ -0,0 +1,1575 @@ +// Xinha Language Combined Translation File +// +// LANG: "nl", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/nl.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'nl'; +// _editor_lang_merged_file = '/xinha/lang/merged/nl.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Abbreviation": "Afkorting", + "Cancel": "Annuleren", + "Delete": "Verwijderen", + "Expansion:": "Uitbreiding:", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "Over deze editor" + }, + "BackgroundImage": { + "Cancel": "Annuleren", + "Remove Current Background": "Huidige Achtergrond Afbeelding Verwijderen", + "Set Page Background Image": "Pagina Achtergrond Afbeelding Instellen", + "Set page background image": "Pagina achtergrond afbeelding instellen" + }, + "CharCounter": { + "... in progress": "... wordt verwerkt", + "Chars": "Tekens", + "Words": "Woorden" + }, + "CharacterMap": { + "Insert special character": "Speciaal character invoegen" + }, + "ClientsideSpellcheck": { + "Spell Check using ieSpell": "Engelse spellingscontrole met ieSpell" + }, + "ColorPicker": { + "Color: ": "Kleur", + "OK": "OK" + }, + "ContextMenu": { + "C_ell Properties...": "C_eleigenschappen...", + "Chec_k Link...": "Controleer hyperlin_k...", + "Copy": "Kopiëren", + "Create a link": "Maak een hyperlink", + "Current URL is": "Huidig URL is", + "Cut": "Knippen", + "De_lete Column": "Kolom verwijderen", + "Delete the current column": "Verwijder de huidige kolom", + "Delete the current row": "Verwijder de huidige rij", + "How did you get here? (Please report!)": "Hoe kwam je hier? (A.U.B. doorgeven!)", + "I_nsert Row Before": "Rij invoegen boven", + "In_sert Row After": "Rij invoegen onder", + "Insert C_olumn After": "Kolom invoegen na", + "Insert _Column Before": "Kolom invoegen voor", + "Insert a new column after the current one": "Voeg een nieuwe kolom in na de huidige", + "Insert a new column before the current one": "Voeg een nieuwe kolom in voor de huidige", + "Insert a new row after the current one": "Voeg een nieuwe rij in onder de huidige", + "Insert a new row before the current one": "Voeg een nieuwe rij in boven de huidige", + "Justify Center": "Centreren", + "Justify Full": "Uitvullen", + "Justify Left": "Links uitlijnen", + "Justify Right": "Rechts uitlijnen", + "Link points to:": "Hyperlink verwijst naar:", + "Make lin_k...": "Maak hyperlin_k...", + "Opens this link in a new window": "Opend deze hyperlink in een nieuw venster", + "Paste": "Plakken", + "Please confirm that you want to remove this element:": "Is het werkelijk de bedoeling dit element te verwijderen:", + "Please confirm that you want to unlink this element.": "Is het werkelijk de bedoeling dit element te unlinken.", + "Remove the $elem Element...": "Verwijder het $elem element...", + "Remove this node from the document": "Verwijder dit punt van het document", + "Ro_w Properties...": "Rijeigenscha_ppen...", + "Show the Table Cell Properties dialog": "Laat de tabel celeigenschappen dialog zien", + "Show the Table Properties dialog": "Laat de tabel eigenschappen dialog zien", + "Show the Table Row Properties dialog": "Laat de tabel rijeigenschappen dialog zien", + "Show the image properties dialog": "Laat het afbeeldingseigenschappen dialog zien", + "Unlink the current element": "Unlink het huidige element", + "_Delete Row": "Rij _verwijderen", + "_Image Properties...": "Eigenschappen afbeelding...", + "_Modify Link...": "Hyperlin_k aanpassen...", + "_Remove Link...": "Ve_rwijder hyperlink...", + "_Table Properties...": "_Tabeleigenschappen..." + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "Wilt u deze link werkelijk verwijderen?", + "Cancel": "Annuleren", + "Insert/Modify Link": "Hyperlink invoegen/aanpassen", + "New window (_blank)": "Nieuw venster (_blank)", + "None (use implicit)": "Geen", + "OK": "OK", + "Other": "Ander", + "Same frame (_self)": "Zelfde frame (_self)", + "Target:": "Doel:", + "Title (tooltip):": "Titel (tooltip):", + "Top frame (_top)": "Bovenste frame (_top)", + "URL:": "URL:" + }, + "DefinitionList": { + "definition description": "definitie omschrijving", + "definition list": "definitie lijst", + "definition term": "definitie term" + }, + "DynamicCSS": { + "Choose stylesheet": "Kies stylesheet", + "Default": "Default", + "Undefined": "Ungedefinieerd" + }, + "EditTag": { + "Cancel": "Annuleren", + "Edit HTML for selected text": "HTML bewerken voor geselecteerde tekst", + "OK": "OK", + "Tag Editor": "HTML tag Editor" + }, + "Equation": { + "AsciiMath Formula Input": "AsciiMath Formule Invoeren", + "Cancel": "Annuleren", + "Formula Editor": "Formule Invoeren", + "Input": "Invoer", + "OK": "OK", + "Preview": "Voorbeeld" + }, + "ExtendedFileManager": { + "Align": "Uitlijnen", + "Alt": "Alt", + "Baseline": "Basis", + "Border": "Kader", + "Border Color": "Kaderkleur:", + "Bottom": "Onder", + "Cancel": "Annuleren", + "Clear": "Wissen", + "Color": "Kleur", + "Constrain Proportions": "Proportie behouden", + "Copy": "Kopiëren", + "Crop": "Uitsneden", + "Cut": "Knippen", + "Directory": "Map", + "Directory Up": "Bovenliggende map", + "Edit": "Bewerken", + "File Manager": "Bestandsbeheer", + "Filename:": "Bestandsnaam:", + "Flip Horizontal": "hor. spiegelen", + "Flip Image": "Beeld spiegelen", + "Flip Vertical": "ver. spiegelen", + "GIF format is not supported, image editing not supported.": "GIF-format niet ondersteund, beeldbewerking niet ondersteund.", + "Height": "Hoog", + "Height:": "Hoogte:", + "Insert File Link": "Hypelink van bestandinvoegen", + "Invalid base directory:": "Ongeldig pad:", + "JPEG High": "JPEG hoog", + "JPEG Low": "JPEG laag", + "JPEG Medium": "JPEG midden", + "Left": "Links", + "Loading": "Laden", + "Lock": "Op-slot", + "Margin": "Inspringen", + "Marker": "Markeren", + "Measure": "Opmeten", + "Middle": "Midden", + "New Folder": "Nieuw map", + "New window (_blank)": "Nieuw venster (_blank)", + "No Files Found": "Geen bestaand gevonden", + "No Image Available": "Geen beeld beschikbaar", + "None (use implicit)": "Geen", + "OK": "OK", + "Padding": "Uitvullen", + "Positioning of this image": "Uitlijnen van dit beeld", + "Preview": "Voorbeeld", + "Quality:": "Kwaliteit", + "Refresh": "Vernieuwen", + "Rename": "Naam wijzigen", + "Resize": "Formaat wijzigen", + "Right": "Rechts", + "Rotate": "Draaien", + "Rotate Image": "Beeld draaien", + "Same frame (_self)": "Zelfde frame (_self)", + "Save": "Opslaan", + "Start X:": "Start X", + "Start Y:": "Start Y", + "Target Window": "Doel venster", + "Title (tooltip)": "Titel (tooltip)", + "Top": "Boven", + "Top frame (_top)": "Bovenste frame (_top)", + "Trash": "Prullenbak", + "Upload": "Upload", + "W:": "W:", + "Width": "Breed", + "Width:": "Breedte:", + "You must select some text before making a new link.": "Eerst tekst selecteren.", + "Zoom": "Vergroot/verklein" + }, + "Filter": { + "Filter": "Filter" + }, + "FindReplace": { + "Case sensitive search": "Exact zoeken", + "Clear": "Leeg", + "Done": "Voltooien", + "Enter the text you want to find": "Voer tekst in waar je op wilt zoeken", + "Find and Replace": "Zoek en vervang", + "Highlight": "Markeren", + "Inform a replacement word": "Voer een vervang woord of zin in", + "Next": "Volgende", + "Options": "Opties", + "Replace with:": "Vervang met:", + "Search for:": "Zoek naar:", + "Substitute all occurrences": "Vervang alle overeenkomsten", + "Substitute this occurrence?": "Deze overeenkomst vervangen?", + "Undo": "Ongedaan maken", + "Whole words only": "Alleen hele woorden", + "found item": "gevonden overeenkomst", + "found items": "gevonden overeenkomsten", + "not found": "niet gevonden", + "replaced item": "vervangen item", + "replaced items": "vervangen items" + }, + "FormOperations": { + "Insert a Form.": "Formulier invoegen", + "Insert a check box.": "Een checkbox invoegen", + "Insert a multi-line text field.": "Een tekstveld met meerdere lijnen invoegen", + "Insert a radio button.": "Een radio knop invoegen", + "Insert a select field.": "Een selectielijst invoegen", + "Insert a submit/reset button.": "Een verzend/wis knop invoegen", + "Insert a text, password or hidden field.": "Tekst, wachtwoord of verborgen veld invoegen" + }, + "Forms": { + "'onClick'=": "'onClick'=", + "Access Key:": "Toegangs toets:", + "Action URL:": "Actie URL:", + "Button Script": "Knop script", + "Cancel": "Annuleren", + "Checked": "Checked", + "Columns:": "Kolommen:", + "Default text (optional)": "Standaard tekst (optioneel)", + "Dimensions": "Dimenties", + "Disabled": "Uitgeschakeld", + "Encoding:": "Encodering:", + "For Control:": "Voor controle:", + "Form": "Formulier", + "Form Element: FIELDSET": "Formulier element: FIELDSET", + "Form Element: INPUT": "Formulier element: INPUT", + "Form Element: LABEL": "Formulier element: LABEL", + "Form Element: SELECT": "Formulier element: SELECT", + "Form Element: TEXTAREA": "Formulier element: TEXTAREA", + "Form Name:": "Formulier naame:", + "Form handler script": "Formulier script", + "Get": "GET", + "HTML-Form to CGI (default)": "HTML formulier naar CGI (standaard)", + "Hard": "Hard", + "Height in number of rows": "Hoogte in aantal tekens", + "Image URL:": "Afbeelding URL:", + "Image source": "Afbeelding bron", + "Initial Text:": "Start tekst:", + "Javascript for button click": "Knop klik met JavaScript", + "Label:": "Label", + "Legend:": "Legend:", + "Max length:": "Maximale lengte:", + "Maximum number of characters accepted": "Maximaal aantal tekens toegestaan", + "Method:": "Methode:", + "Name": "Naame", + "Name of the form input": "Naam van formulier invoer", + "Name of the form select": "Naam van formulier select", + "Name/ID:": "Naam/ID:", + "OK": "OK", + "Off": "Uit", + "Options": "Opties", + "Physical": "Fysiek", + "Please enter a Label": "Voer een Label in", + "Post": "POST", + "Read Only": "Alleen lezen", + "Rows:": "Rijen:", + "Size of text box in characters": "Grootte van tekstveld in tekens", + "Size:": "Grootte:", + "Soft": "Zacht", + "Tab Index:": "Tab volgorde:", + "Target Frame:": "Doel venster:", + "Text:": "Tekst:", + "URL of image": "Afbeelding URL", + "Value of the form input": "Waarde van formulier invoer", + "Value:": "Waarde:", + "Virtual": "Virtueel", + "Width in number of characters": "Breedte in aantal tekens", + "Wrap Mode:": "Terugloop:", + "You must enter a Name": "Voer een Naam in", + "multipart Form Data (File-Upload)": "Multipart formulier data(Bestands upload)", + "name of the textarea": "Naam van tekst gebied", + "normal": "normaal", + "nowrap": "geen terugloop", + "pre": "pre" + }, + "FullPage": { + "Alternate style-sheet:": "Wisselen van style-sheet:", + "Background color:": "Achtergrondkleur:", + "Cancel": "Annuleren", + "DOCTYPE:": "DOCTYPE:", + "Description:": "Beschrijving:", + "Document properties": "Documenteigenschappen", + "Document title:": "Documenttitel:", + "OK": "OK", + "Primary style-sheet:": "Primaire style-sheet:", + "Text color:": "Tekstkleur:" + }, + "FullScreen": { + "Maximize/Minimize Editor": "Editor maximaliseren/verkleinen" + }, + "HorizontalRule": { + "Alignment:": "Uitvulling:", + "Cancel": "Annuleren", + "Center": "Midden", + "Color:": "kleur", + "Height:": "Hoogte:", + "Horizontal Rule": "Horizontale lijn", + "Insert/edit horizontal rule": "Horizontale lijn invoegen/bewerken", + "Layout": "Weergave", + "Left": "Links", + "No shading": "Geen schaduw", + "OK": "OK", + "Right": "Rechts", + "Style": "Style", + "Width:": "Breedte:", + "percent": "procent", + "pixels": "pixels" + }, + "HtmlTidy": { + "Tidy failed. Check your HTML for syntax errors.": "Tidy mislukt. Controleer HTML op fouten." + }, + "ImageManager": { + "Angle:": "Hoek:", + "Baseline": "Basis", + "Bottom": "Onder", + "Cancel": "Annuleren", + "Clear": "Leeg", + "Constrain Proportions": "Proportie behouden", + "Crop": "Passend maken", + "Directory": "Map", + "Directory Up": "Bovenliggende map", + "Edit": "Bewerken", + "Filename:": "Bestandsnaam:", + "Flip Horizontal": "hor. spiegelen", + "Flip Image": "Beeld spiegelen", + "Flip Vertical": "ver. spiegelen", + "Folder Name:": "Map naam", + "GIF format is not supported, image editing not supported.": "GIF-format niet ondersteund, beeldbewerking niet ondersteund.", + "Height:": "Hoogte:", + "Image Format": "Beeldformaat:", + "Insert Image": "Afbeelding invoegen", + "Invalid base directory:": "Ongeldig pad:", + "JPEG High": "JPEG hoog", + "JPEG Low": "JPEG laag", + "JPEG Medium": "JPEG midden", + "Left": "Links", + "Lock": "Op-slot", + "Marker": "Markeren", + "Measure": "Opmeten", + "Middle": "Midden", + "New Folder": "Nieuw map", + "No Image Available": "Geen beeld beschikbaar", + "OK": "OK", + "Positioning of this image": "Uitlijnen van dit beeld", + "Quality:": "Kwaliteit", + "Refresh": "Vernieuwen", + "Resize": "Formaat wijzigen", + "Right": "Rechts", + "Rotate": "Draaien", + "Rotate Image": "Beeld draaien", + "Save": "Opslaan", + "Start X:": "Start X", + "Start Y:": "Start Y", + "Top": "Boven", + "Trash": "Prullenbak", + "W:": "W:", + "Width:": "Breedte:" + }, + "InlineStyler": { + "Background": "Achtergrond", + "Baseline": "Basis", + "Border": "Kader", + "Bottom": "Onder", + "Center": "Midden", + "Char": "Karakter", + "Collapsed borders": "Geen randen", + "FG Color": "Voorgrond", + "Float": "Zwevend", + "Height": "Hoog", + "Image URL": "Afbeelding URL", + "Justify": "Uitvullen", + "Layout": "Weergave", + "Left": "Links", + "Margin": "Inspringen", + "Middle": "Midden", + "None": "Geen", + "Padding": "Celmarge", + "Right": "Rechts", + "Text align": "Text uitlijning", + "Top": "Boven", + "Vertical align": "Vertikale uitlijning", + "Width": "Breed", + "percent": "procent", + "pixels": "pixels" + }, + "InsertAnchor": { + "Anchor name": "Naam (ID)", + "Cancel": "Annuleren", + "Delete": "Verwijderen", + "Insert Anchor": "Anker invoegen", + "OK": "OK" + }, + "InsertImage": { + "Alignment:": "Uitvulling:", + "Alternate text:": "Alternatieve tekst:", + "Baseline": "Basis", + "Border thickness:": "Rand dikte:", + "Bottom": "Onder", + "Cancel": "Annuleren", + "Enter the image URL here": "Afbeeldingslocatie (URL)", + "For browsers that don't support images": "Voor browsers welke geen afbeeldingen ondersteunen", + "Horizontal padding": "Horizontale ruimte", + "Horizontal:": "Horizontaal:", + "Image Preview:": "Afbeeldingsvoorbeeld:", + "Image URL:": "Afbeelding URL:", + "Insert Image": "Afbeelding invoegen", + "Layout": "Weergave", + "Leave empty for no border": "Leeg voor geen rand", + "Left": "Links", + "Middle": "Midden", + "OK": "OK", + "Positioning of this image": "Uitlijnen van dit beeld", + "Preview": "Voorbeeld", + "Preview the image in a new window": "Afbeelding bekijken in nieuw venster", + "Right": "Rechts", + "Spacing": "marge", + "Top": "Boven", + "Vertical padding": "Verticale ruimte", + "Vertical:": "Verticaal:" + }, + "InsertMarquee": { + "Background-Color:": "Achtergrondkleur:", + "Behavior:": "Gedrag:", + "Cancel": "Annuleren", + "Direction:": "Richting:", + "Height:": "Hoogte:", + "Insert scrolling marquee": "Scrollende tekst invoegen", + "Left": "Links", + "Name": "Naame", + "Name/ID:": "Naam/ID:", + "OK": "OK", + "Right": "Rechts", + "Scroll Amount:": "Snelheid:", + "Scroll Delay:": "Vertraging:", + "Speed Control": "Snelheidscontrole", + "Text:": "Tekst:", + "Width:": "Breedte:" + }, + "InsertNote": { + "Cancel": "Annuleren" + }, + "InsertPagebreak": { + "Page break": "Pagina einde" + }, + "InsertPicture": { + "Alignment:": "Positie:", + "Alternate text:": "Alternatieve tekst:", + "Baseline": "Basis", + "Border thickness:": "Rand dikte:", + "Bottom": "Onder", + "Cancel": "Annuleren", + "Enter the image URL here": "Afbeeldingslocatie (URL)", + "For browsers that don't support images": "Voor browsers welke geen afbeeldingen ondersteunen", + "Height:": "Hoogte:", + "Horizontal padding": "Horizontale ruimte", + "Horizontal:": "Horizontaal:", + "Image Preview:": "Afbeeldingsvoorbeeld:", + "Image URL:": "Afbeelding URL:", + "Insert Image": "Afbeelding invoegen", + "Layout": "Weergave", + "Leave empty for no border": "Leeg voor geen rand", + "Leave empty for not defined": "Leeg voor niet gedefinieerd", + "Left": "Links", + "Middle": "Midden", + "OK": "OK", + "Positioning of this image": "Positie van de afbeelding", + "Preview": "Voorbeeld", + "Preview the image in a new window": "Afbeelding bekijken in nieuw venster", + "Right": "Rechts", + "Size": "Grootte", + "Spacing": "Marge", + "Top": "Boven", + "Upload file": "Upload bestand", + "Vertical padding": "Verticale ruimte", + "Vertical:": "Verticaal:", + "Width:": "Breedte:" + }, + "InsertSmiley": { + "Insert Smiley": "Smiley invoegen" + }, + "InsertSnippet": { + "Cancel": "Annuleren", + "Hide preview": "Verberg voorbeeld", + "Insert Snippet": "Snippet invoegen", + "Insert as": "Invoegen als", + "Show preview": "Laat voorbeeld zien", + "Variable": "Variabele" + }, + "InsertSnippet2": { + "Cancel": "Annuleren", + "Filter": "Filter", + "Insert Snippet": "Snippet invoegen", + "Variable": "Variabele" + }, + "InsertTable": { + "Alignment:": "Uitvulling:", + "Baseline": "Basis", + "Border": "Kader", + "Border thickness:": "Rand dikte:", + "Bottom": "Onder", + "Cancel": "Annuleren", + "Caption": "Opmerking", + "Insert Table": "Tabel invoegen", + "Layout": "Weergave", + "Leave empty for no border": "Leeg voor geen rand", + "Left": "Links", + "Middle": "Midden", + "OK": "OK", + "Percent": "procent", + "Pixels": "pixels", + "Right": "Rechts", + "Rows:": "Rijen:", + "Spacing": "marge", + "Top": "Boven", + "Width:": "Breedte:" + }, + "LangMarks": { + "— language —": "— taal —", + "English": "Engels", + "French": "Frans", + "Greek": "Grieks", + "Latin": "Latijn", + "language select": "Taalkeuze" + }, + "Linker": { + "Are you sure you wish to remove this link?": "Wilt u deze link werkelijk verwijderen?", + "Cancel": "Annuleren", + "Insert/Modify Link": "Hyperlink invoegen/aanpassen", + "Name:": "Naame", + "OK": "OK", + "Size:": "Grootte:", + "Target:": "Doel:", + "URL:": "URL:", + "You must select some text before making a new link.": "Selecteer de tekst welke gelinkt moet worden." + }, + "ListType": { + "Choose list style type (for ordered lists)": "Kies stijl type (voor ordered lists)", + "Decimal numbers": "Decimale nummers", + "Lower greek letters": "Griekse letters", + "Lower latin letters": "Latijnse letters klein", + "Lower roman numbers": "Romeinse nummers klein", + "Upper latin letters": "Latijnse letters groot", + "Upper roman numbers": "Romeinse nummers groot" + }, + "MootoolsFileManager": { + "Insert File Link": "Hypelink van bestandinvoegen", + "You must select some text before making a new link.": "Selecteer de tekst welke gelinkt moet worden." + }, + "NoteServer": { + "Add GUIDO Code in a textbox on the page": "GUIDO code in een tekstgebied op de pagina invoegen", + "Add MIDI link to allow students to hear the music": "MIDI link invoegen om de muziek te beluisteren", + "Cancel": "Annuleren", + "Format": "Indeling", + "Guido code": "GUIDO-code", + "Image Preview": "Afbeeldingsvoorbeeld", + "Image in applet": "Afbeelding in applet", + "Insert GUIDO Music Notation": "GUIDO muziek notatie invoegen", + "MIDI File": "MIDI bestand", + "OK": "OK", + "Options": "Opties", + "Preview": "Voorbeeld", + "Preview the image in a new window": "Afbeelding bekijken in nieuw venster", + "Source Code": "Broncode", + "Zoom": "Vergroot/verklein" + }, + "PSLocal": { + "Cancel": "Annuleren" + }, + "PasteText": { + "Cancel": "Annuleren", + "OK": "OK", + "Paste as Plain Text": "Kopieer als platte tekst (geen opmaak)" + }, + "PersistentStorage": { + "Cancel": "Annuleren", + "Copy": "Kopiëren", + "Delete": "Verwijderen", + "Directory Up": "Bovenliggende map", + "File Manager": "Bestandsbeheer", + "Filename": "Bestandsnaam:", + "Insert Image": "Afbeelding invoegen", + "New Folder": "Nieuw map", + "Save": "Opslaan", + "You must select some text before making a new link.": "Selecteer de tekst welke gelinkt moet worden." + }, + "QuickTag": { + "ATTRIBUTES": "ATTRIBUTEN", + "Cancel": "Annuleren", + "Colors": "Kleuren", + "Enter the TAG you want to insert": "Voer de Tag naam in", + "No CSS class avaiable": "Geen CSS class beschikbaar", + "OPTIONS": "OPTIES", + "Ok": "Ok", + "Quick Tag Editor": "Quick Tag Editor", + "TAGs": "TAGs", + "There are some unclosed quote": "Er zijn niet gesloten quotes", + "This attribute already exists in the TAG": "Dit attribuut bestaat al in de tag", + "You have to select some text": "Selecteer tekst" + }, + "SaveSubmit": { + "Ready": "Klaar", + "Save": "Opslaan", + "Saving...": "Bezig met opslaan...", + "in progress": "bezig met opslaan..." + }, + "SetId": { + "Cancel": "Annuleren", + "Delete": "Verwijderen", + "ID/Name:": "ID/Naam:", + "OK": "OK", + "Set ID/Name": "ID/Naam instellen", + "Set Id and Name": "ID en Naam instellen" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "“", + "ClosingSingleQuote": "‘", + "Convert all quotes and dashes in the current document": "Converteer alle quotes en schuine strepen", + "Enable automatic replacements": "Automatisch vervangen inschakelen", + "OK": "OK", + "OpeningDoubleQuotes": "„", + "OpeningSingleQuote": "‚", + "SmartReplace Settings": "SmartReplace Instellingen" + }, + "SpellChecker": { + "Cancel": "Annuleer", + "Dictionary": "Woordenboek", + "Finished list of mispelled words": "klaar met de lijst van fouten woorden", + "I will open it in a new page.": "Ik zal het in een nieuwe pagina openen.", + "Ignore": "Overslaan", + "Ignore all": "alles overslaan", + "No mispelled words found with the selected dictionary.": "Geen fouten gevonden met dit woordenboek.", + "OK": "OK", + "Original word": "Originele woord", + "Please confirm that you want to open this link": "Weet u zeker dat u deze link wilt openen?", + "Please wait. Calling spell checker.": "Even wachten. spell checker wordt geladen.", + "Please wait: changing dictionary to": "even wachten: woordenboek wordt veranderd naar", + "Re-check": "Opnieuw", + "Replace": "Vervangen", + "Replace all": "Alles vervangen", + "Replace with": "Vervangen met", + "Revert": "Omkeren", + "Spell-check": "Spell-check", + "Suggestions": "Suggestie", + "This will drop changes and quit spell checker. Please confirm.": "Dit zal alle veranderingen annuleren en de spell checker sluiten. Weet u het zeker?" + }, + "Stylist": { + "Styles": "Style" + }, + "SuperClean": { + "Cancel": "Annuleren", + "Clean up HTML": "HTML opschonen", + "General tidy up and correction of some problems.": "Algemeen opschonen en correctie", + "OK": "OK", + "Please select from the following cleaning options...": "Selecteer de gewenste opschoon opties...", + "Remove custom font sizes.": "Verwijder aangepaste lettergroottes (font size)", + "Remove custom text colors.": "Verwijder aangepaste tekstkleuren (font color)", + "Remove custom typefaces (font \"styles\").": "Verwijder aangepaste lettertypes (font face)", + "Remove lang attributes.": "Verwijder alle taal (lang) attributen." + }, + "TableOperations": { + "All four sides": "Alle 4 zijden", + "Borders": "Randen", + "Cancel": "Annuleren", + "Caption": "Opmerking", + "Cell Properties": "Celeigenschappen", + "Cell properties": "Celeigenschappen", + "Columns": "Kolommen:", + "Delete cell": "Cel verwijderen", + "Delete column": "Kolom verwijderen", + "Delete row": "Rij verwijderen", + "Description": "Omschrijving", + "Frames": "Frames", + "Insert cell after": "Voeg cel toe achter", + "Insert cell before": "Voeg cel toe voor", + "Insert column after": "Kolom invoegen achter", + "Insert column before": "Kolom invoegen voor", + "Insert row after": "Rij invoegen onder", + "Insert row before": "Rij invoegen boven", + "Merge cells": "Cellen samenvoegen", + "No rules": "Geen regels", + "No sides": "Geen zijlijnen", + "OK": "OK", + "Padding": "Celmarge", + "Please click into some cell": "Klik in een cel a.u.b.", + "Row Properties": "Rijeigenschappen", + "Row properties": "Rij eigenschappen", + "Rows": "Rijen:", + "Rules will appear between all rows and columns": "Regels verschijnen tussen alle rijen en kolommen", + "Rules will appear between columns only": "Regels verschijnen enkel tussen de kolommen", + "Rules will appear between rows only": "Regels verschijnen enkel tussen de rijen", + "Spacing": "marge", + "Spacing and padding": "Celmarge en afstand tussen cellen", + "Split column": "Kolom splitsen", + "Split row": "Rij splitsen", + "Summary": "Overzicht", + "Table Properties": "Tabel eigenschappen", + "Table properties": "Tabel eigenschappen", + "The bottom side only": "Enkel aan de onderkant", + "The left-hand side only": "Enkel aan de linkerkant", + "The right and left sides only": "Enkel aan de linker en rechterkant", + "The right-hand side only": "Enkel aan de rechterkant", + "The top and bottom sides only": "Enkel aan de bovenen onderkant", + "The top side only": "Enkel aan de bovenkant", + "Xinha cowardly refuses to delete the last cell in row.": "Xinha kan de laatste cel in deze tabel niet verwijderen.", + "Xinha cowardly refuses to delete the last column in table.": "Xinha kan de laatste kolom in deze tabel niet verwijderen.", + "Xinha cowardly refuses to delete the last row in table.": "Xinha kan de laatste rij in deze tabel niet verwijderen.", + "pixels": "pixels" + }, + "Template": { + "Cancel": "Annuleren", + "Insert template": "Template invoegen" + }, + "UnFormat": { + "All": "Alles", + "All HTML:": "Alle html", + "Cancel": "Annuleren", + "Cleaning Area": "Schoonmaak gebied", + "Cleaning options": "Schoonmaak opties", + "Formatting:": "Format", + "OK": "OK", + "Page Cleaner": "Pagina Schoonmaker", + "Select which types of formatting you would like to remove.": "Selecteer welke types van Formatteren je wilt verwijderen", + "Selection": "Geselecteerde tekst" + }, + "Xinha": { + "About this editor": "Over deze editor", + "Background Color": "Achtergrondkleur", + "Bold": "Vet", + "Bulleted List": "Opsommingstekens", + "Copy selection": "Kopi?ren", + "Current style": "Huidige stijl", + "Cut selection": "Knippen", + "Decrease Indent": "Inspringing verkleinen", + "Direction left to right": "Tekstrichting links naar rechts", + "Direction right to left": "Tekstrichting rechts naar links", + "Font Color": "Tekstkleur", + "Help using editor": "Xinha help", + "Horizontal Rule": "Horizontale lijn", + "Increase Indent": "Inspringing vergroten", + "Insert Table": "Tabel invoegen", + "Insert Web Link": "Hyperlink invoegen/aanpassen", + "Insert/Modify Image": "Afbeelding invoegen/aanpassen", + "Italic": "Cursief", + "Justify Center": "Centreren", + "Justify Full": "Uitvullen", + "Justify Left": "Links uitlijnen", + "Justify Right": "Rechts uitlijnen", + "Normal": "normaal", + "Ordered List": "Nummering", + "Paste from clipboard": "Plakken", + "Path": "Pad", + "Redoes your last action": "Herhalen", + "Strikethrough": "Doorhalen", + "Subscript": "Subscript", + "Superscript": "Superscript", + "Toggle HTML Source": "HTML broncode", + "Underline": "Onderstrepen", + "Undoes your last action": "Ongedaan maken", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Je bent in TEKST-mode. Gebruik de [<>] knop om terug te keren naar WYSIWYG-mode." + }, + "__NEW_TRANSLATIONS__": { + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "HTML": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "Delete Cell": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Merge Cells": "" + }, + "CreateLink": { + "You need to select some text before creating a link": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "EditTag": { + "Edit Tag By Peg": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`delta`": "", + "`Delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`gamma`": "", + "`Gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`larr`": "", + "`lArr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`psi`": "", + "`Psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`theta`": "", + "`Theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "harr": "", + "hArr": "", + "hata": "", + "if": "", + "in": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "lArr": "", + "larr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "Pi": "", + "pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "Sigma": "", + "sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "theta": "", + "Theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "" + }, + "FullPage": { + "...": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Keywords:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/Edit Horizontal Rule": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Not set": "", + "Texttop": "", + "You must enter the URL": "" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page Break": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "This is an information about something": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "InsertSnippet for Xinha": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Not set": "<>", + "Texttop": "<>" + }, + "LangMarks": { + "', '": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "" + }, + "SetId": { + "Set Id/Name": "" + }, + "SmartReplace": { + "SmartReplace": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Cleaning Scope": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove emphasis and annotations.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Merge Cells": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Set Background": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "D:": "", + "File List": "", + "Filesize:": "", + "Folder": "", + "GIF": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Toggle marker color": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Not set": "<>", + "Texttop": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "D:": "<>", + "GIF": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Not set": "<>", + "PNG": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Texttop": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Continuous": "", + "Marquee Editor": "", + "Slide": "" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + " Open file in new window": "", + "Open file in new window": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Not set": "<>", + "Texttop": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "GUIDO Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "File List": "<>", + "Insert": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "HTMLArea Spell Checker": "", + "Info": "", + "Learn": "", + "pliz weit ;-)": "", + "Spell Checker": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/pl.js new file mode 100644 index 0000000000..6e83f763c7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/pl.js @@ -0,0 +1,1579 @@ +// Xinha Language Combined Translation File +// +// LANG: "pl", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/pl.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'pl'; +// _editor_lang_merged_file = '/xinha/lang/merged/pl.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Anuluj", + "Delete": "Usuń", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "Informacje o tym edytorze" + }, + "BackgroundImage": { + "Cancel": "Anuluj" + }, + "ColorPicker": { + "Color: ": "Kolor", + "OK": "OK" + }, + "ContextMenu": { + "C_ell Properties...": "Właściwości komórki", + "Chec_k Link...": "Sprawdź odnośnik", + "Copy": "Kopiuj", + "Create a link": "Utwórz odnośnik", + "Current URL is": "Bieżący URL odnośnika", + "Cut": "Wytnij", + "De_lete Column": "Usuń kolumnę", + "Delete the current column": "Usuwa bieżącą kolumnę", + "Delete the current row": "Usuń bieżący wiersz", + "How did you get here? (Please report!)": "Jak tu trafiłeś (Proszę, podaj okoliczności!)", + "I_nsert Row Before": "Wstaw wiersz przed", + "In_sert Row After": "Wstaw wiersz po", + "Insert C_olumn After": "Wstaw kolumnę po", + "Insert _Column Before": "Wstaw kolumnę przed", + "Insert a new column after the current one": "Wstaw nową kolumnę po bieżącej", + "Insert a new column before the current one": "Wstaw nową kolumnę przed bieżącą", + "Insert a new row after the current one": "Wstaw nowy wiersz po bieżącym", + "Insert a new row before the current one": "Wstaw nowy wiersz przed bieżącym", + "Insert a paragraph after the current node": "Wstaw akapit po bieżącym elemencie", + "Insert a paragraph before the current node": "Wstaw akapit przed bieżącym elementem", + "Insert paragraph after": "Wstaw akapit po", + "Insert paragraph before": "Wstaw akapit przed", + "Justify Center": "Wycentruj", + "Justify Full": "Wyjustuj", + "Justify Left": "Wyrównaj do lewej", + "Justify Right": "Wyrównaj do prawej", + "Link points to:": "Odnośnik wskazuje na:", + "Make lin_k...": "Utwórz odnośnik", + "Opens this link in a new window": "Otwiera ten odnośnik w nowym oknie", + "Paste": "Wklej", + "Please confirm that you want to remove this element:": "Na pewno chcesz usunąć ten element?", + "Please confirm that you want to unlink this element.": "Na pewno chcesz usunąć odnośnik?", + "Remove the $elem Element...": "Usuń $elem...", + "Remove this node from the document": "Usuń ten element z dokumentu", + "Ro_w Properties...": "Właściwości wiersza", + "Show the Table Cell Properties dialog": "Pokaż okno właściwości komórki", + "Show the Table Properties dialog": "Pokaż okienko właściwości tabeli", + "Show the Table Row Properties dialog": "Pokaż okno właściwości wiersza", + "Show the image properties dialog": "Pokaż okienko właściwości obrazka", + "Unlink the current element": "Usuń odnośnik z zaznaczonego elementu", + "_Delete Row": "Usuń wiersz", + "_Image Properties...": "Właściwości obrazka", + "_Modify Link...": "Zmień odnośnik", + "_Remove Link...": "Usuń odnośnik", + "_Table Properties...": "Właściwości tabeli" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "Na pewno chcesz usunąć odnośnik?", + "Cancel": "Anuluj", + "Insert/Modify Link": "Wstaw/edytuj odnośnik", + "New window (_blank)": "Nowe okno (_blank)", + "None (use implicit)": "Brak", + "OK": "OK", + "Other": "Inne", + "Same frame (_self)": "Ta sama ramka (_self)", + "Target:": "Okno docelowe:", + "Title (tooltip):": "Tytuł (tooltip):", + "Top frame (_top)": "Główna ramka (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "Anuluj", + "OK": "OK" + }, + "Equation": { + "Cancel": "Anuluj", + "OK": "OK", + "Preview": "Podgląd" + }, + "ExtendedFileManager": { + "Absbottom": "Abs. dół", + "Absmiddle": "Abs. środek", + "Align": "Wyrównanie", + "Alt": "Alt", + "Baseline": "Linia bazowa", + "Border": "Ramka", + "Border Color": "Kolor ramki", + "Bottom": "Dół", + "Cancel": "Anuluj", + "Clear": "Wyczyść", + "Color": "Kolor", + "Constrain Proportions": "Zachowaj proporcje", + "Copy": "Kopiuj", + "Crop": "Przytnij", + "Cut": "Wytnij", + "Directory": "Katalog", + "Directory Up": "Katalog wyżej", + "Edit": "Edytuj", + "File Manager": "Menedżer plików", + "Filename:": "Nazwa pliku:", + "Flip Horizontal": "Odwróć poziomo", + "Flip Image": "Odwróć", + "Flip Vertical": "Odwróć pionowo", + "GIF format is not supported, image editing not supported.": "Brak obsługi plików GIF, edycja jest niemożliwa.", + "Height": "Wysokość", + "Height:": "Wysokość:", + "Insert File Link": "Wstaw odnośnik do pliku na serwerze", + "Invalid base directory:": "Nieprawidłowy katalog bazowy:", + "JPEG High": "JPEG wysoka", + "JPEG Low": "JPEG niska", + "JPEG Medium": "JPEG średnia", + "Left": "Do lewej", + "Loading": "Ładowanie", + "Lock": "Zablokuj", + "Margin": "Odstęp", + "Marker": "Zaznacz", + "Measure": "Zmierz", + "Middle": "Środek", + "New Folder": "Nowy katalog", + "New window (_blank)": "Nowe okno (_blank)", + "No Files Found": "Nie znaleziono plików", + "No Image Available": "Obrazek niedostępny", + "None (use implicit)": "Brak", + "Not set": "Nie ustawione", + "OK": "OK", + "Padding": "Wcięcie", + "Positioning of this image": "Wyrównanie tego obrazka na stronie", + "Preview": "Podgląd", + "Quality:": "Jakość", + "Refresh": "Odśwież", + "Rename": "Zmień nazwę", + "Resize": "Przeskaluj", + "Right": "Do prawej", + "Rotate": "Obróć", + "Rotate Image": "Obróć", + "Same frame (_self)": "Ta sama ramka (_self)", + "Save": "Zapisz", + "Start X:": "Początek X:", + "Start Y:": "Początek Y:", + "Target Window": "Docelowe okno", + "Texttop": "Góra tekstu", + "Title (tooltip)": "Tytuł", + "Top": "Góra", + "Top frame (_top)": "Główna ramka (_top)", + "Trash": "Usuń", + "Upload": "Wgraj", + "W:": "L:", + "Width": "Szerokość", + "Width:": "Szerokość:", + "You must select some text before making a new link.": "Zaznacz tekst przed dodaniem odnośnika." + }, + "FindReplace": { + "Case sensitive search": "Wg wielkości liter", + "Clear": "Wyczyść", + "Done": "Gotowe", + "Enter the text you want to find": "Podaj tekst, jaki chcesz wyszukać", + "Find and Replace": "Znajdź i zamień", + "Highlight": "Podświetl", + "Inform a replacement word": "Podaj tekst do zamiany", + "Next": "Następny", + "Options": "Opcje", + "Replace with:": "Zamień na:", + "Search for:": "Szukaj:", + "Substitute all occurrences": "Zamień wszystkie wystąpienia", + "Substitute this occurrence?": "Zamienić to wystąpienie?", + "Undo": "Cofnij", + "Whole words only": "Całe słowa", + "found item": "znaleziony", + "found items": "znalezionych", + "not found": "nie znaleziony", + "replaced item": "zamieniony", + "replaced items": "zamienionych" + }, + "Forms": { + "Cancel": "Anuluj", + "Image URL:": "URL obrazka:", + "Name": "Nazwa", + "OK": "OK", + "Options": "Opcje", + "Rows:": "Wierszy:", + "Size:": "Rozmiar:" + }, + "FullPage": { + "Alternate style-sheet:": "Alternatywny arkusz stylów:", + "Background color:": "Kolor tła:", + "Cancel": "Anuluj", + "Character set:": "Zestaw znaków", + "DOCTYPE:": "DOCTYPE:", + "Description:": "Opis", + "Document properties": "Właściwości dokumentu", + "Document title:": "Tytuł dokumentu:", + "Keywords:": "Słowa kluczowe", + "OK": "OK", + "Primary style-sheet:": "Arkusz stylów:", + "Text color:": "Kolor tekstu:", + "UTF-8 (recommended)": "UTF-8 (zalecany)" + }, + "FullScreen": { + "Maximize/Minimize Editor": "Maksymalizuj/minimalizuj edytor" + }, + "HorizontalRule": { + "Alignment:": "Wyrównanie:", + "Cancel": "Anuluj", + "Center": "Środek", + "Color:": "Kolor:", + "Height:": "Wysokość:", + "Horizontal Rule": "Linia pozioma", + "Layout": "Layout", + "Left": "Do lewej", + "OK": "OK", + "Right": "Do prawej", + "Width:": "Szerokość:", + "percent": "%", + "pixels": "pikseli" + }, + "ImageManager": { + "Absbottom": "Abs. dół", + "Absmiddle": "Abs. środek", + "Angle:": "Kąt:", + "Baseline": "Linia bazowa", + "Bottom": "Dół", + "Cancel": "Anuluj", + "Clear": "Wyczyść", + "Constrain Proportions": "Zachowaj proporcje", + "Crop": "Przytnij", + "Directory": "Katalog", + "Directory Up": "Katalog wyżej", + "Edit": "Edytuj", + "Filename:": "Nazwa pliku:", + "Flip Horizontal": "Odwróć poziomo", + "Flip Image": "Odwróć", + "Flip Vertical": "Odwróć pionowo", + "Folder Name:": "Nazwa katalogu", + "GIF format is not supported, image editing not supported.": "Brak obsługi plików GIF, edycja jest niemożliwa.", + "Height:": "Wysokość:", + "Image Format": "Format pliku:", + "Insert Image": "Wstaw obrazek", + "Invalid base directory:": "Nieprawidłowy katalog bazowy:", + "JPEG High": "JPEG wysoka", + "JPEG Low": "JPEG niska", + "JPEG Medium": "JPEG średnia", + "Left": "Do lewej", + "Lock": "Zablokuj", + "Marker": "Zaznacz", + "Measure": "Zmierz", + "Middle": "Środek", + "New Folder": "Nowy katalog", + "No Image Available": "Obrazek niedostępny", + "No Images Found": "Nie znaleziono obrazków", + "Not set": "Nie ustawione", + "OK": "OK", + "Positioning of this image": "Wyrównanie tego obrazka na stronie", + "Quality:": "Jakość", + "Refresh": "Odśwież", + "Resize": "Przeskaluj", + "Right": "Do prawej", + "Rotate": "Obróć", + "Rotate Image": "Obróć", + "Save": "Zapisz", + "Start X:": "Początek X", + "Start Y:": "Początek Y", + "Texttop": "Góra tekstu", + "Top": "Góra", + "Trash": "Usuń", + "W:": "L:", + "Width:": "Szerokość:" + }, + "InlineStyler": { + "Background": "Tło", + "Baseline": "Linia bazowa", + "Border": "Ramka", + "Bottom": "Dół", + "CSS Style": "Styl CSS", + "Center": "Środek", + "Char": "Znak", + "Collapsed borders": "Ramki skolapsowane", + "FG Color": "Kolor czcionek", + "Float": "Opływanie", + "Height": "Wysokość", + "Image URL": "URL obrazka", + "Justify": "Wyjustuj", + "Layout": "Layout", + "Left": "Do lewej", + "Margin": "Odstęp", + "Middle": "Środek", + "None": "Brak", + "Padding": "Wcięcia", + "Right": "Do prawej", + "Text align": "Wyr. w poziomie", + "Top": "Góra", + "Vertical align": "Wyr. w pionie", + "Width": "Szerokość", + "percent": "%", + "pixels": "pikseli" + }, + "InsertAnchor": { + "Anchor name": "Nazwa kotwicy", + "Cancel": "Anuluj", + "Delete": "Usuń", + "Insert Anchor": "Wstaw kotwicę", + "OK": "OK" + }, + "InsertImage": { + "Absbottom": "Abs. dół", + "Absmiddle": "Abs. środek", + "Alignment:": "Wyrównanie:", + "Alternate text:": "Tekst alternatywny:", + "Baseline": "Linia bazowa", + "Border thickness:": "Grubość obramowania:", + "Bottom": "Dół", + "Cancel": "Anuluj", + "Enter the image URL here": "Podaj URL obrazka", + "For browsers that don't support images": "Dla przeglądarek, które nie obsługują obrazków", + "Horizontal padding": "Wcięcie poziome", + "Horizontal:": "Poziome:", + "Image Preview:": "Podgląd obrazka:", + "Image URL:": "URL obrazka:", + "Insert Image": "Wstaw obrazek", + "Layout": "Layout", + "Leave empty for no border": "Bez ramek - zostaw puste", + "Left": "Do lewej", + "Middle": "Środek", + "Not set": "Nie ustawione", + "OK": "OK", + "Positioning of this image": "Wyrównanie tego obrazka na stronie", + "Preview": "Podgląd", + "Preview the image in a new window": "Podgląd obrazka w nowym oknie", + "Right": "Do prawej", + "Spacing": "Odstęp", + "Texttop": "Góra tekstu", + "Top": "Góra", + "Vertical padding": "Wcięcie pionowe", + "Vertical:": "Pionowe:" + }, + "InsertMarquee": { + "Cancel": "Anuluj", + "Height:": "Wysokość:", + "Left": "Do lewej", + "Name": "Nazwa", + "OK": "OK", + "Right": "Do prawej", + "Width:": "Szerokość:" + }, + "InsertNote": { + "Cancel": "Anuluj" + }, + "InsertPicture": { + "Absbottom": "Abs. dół", + "Absmiddle": "Abs. środek", + "Alignment:": "Wyrównanie:", + "Alternate text:": "Tekst alternatywny:", + "Baseline": "Linia bazowa", + "Border thickness:": "Grubość obramowania:", + "Bottom": "Dół", + "Cancel": "Anuluj", + "Enter the image URL here": "Podaj URL obrazka", + "For browsers that don't support images": "Dla przeglądarek, które nie obsługują obrazków", + "Height:": "Wysokość:", + "Horizontal padding": "Wcięcie poziome", + "Horizontal:": "Poziome:", + "Image Preview:": "Podgląd obrazka:", + "Image URL:": "URL obrazka:", + "Insert Image": "Wstaw obrazek", + "Layout": "Layout", + "Leave empty for no border": "Bez ramek - zostaw puste", + "Left": "Do lewej", + "Middle": "Środek", + "Not set": "Nie ustawione", + "OK": "OK", + "Positioning of this image": "Wyrównanie tego obrazka na stronie", + "Preview": "Podgląd", + "Preview the image in a new window": "Podgląd obrazka w nowym oknie", + "Right": "Do prawej", + "Size": "Rozmiar", + "Spacing": "Odstęp", + "Texttop": "Góra tekstu", + "Top": "Góra", + "Vertical padding": "Wcięcie pionowe", + "Vertical:": "Pionowe:", + "Width:": "Szerokość:" + }, + "InsertSnippet": { + "Cancel": "Anuluj" + }, + "InsertSnippet2": { + "Cancel": "Anuluj" + }, + "InsertTable": { + "Absbottom": "Abs. dół", + "Absmiddle": "Abs. środek", + "Alignment:": "Wyrównanie:", + "Baseline": "Linia bazowa", + "Border": "Ramka", + "Border thickness:": "Grubość obramowania:", + "Bottom": "Dół", + "Cancel": "Anuluj", + "Caption": "Podpis", + "Cell padding:": "Wcięcie komórek:", + "Cell spacing:": "Odstęp komórek:", + "Cols:": "Kolumn:", + "Em": "Em", + "Fixed width columns": "Kolumny o stałej szerokości", + "Insert Table": "Wstaw tabelę", + "Layout": "Layout", + "Leave empty for no border": "Bez ramek - zostaw puste", + "Left": "Do lewej", + "Middle": "Środek", + "Not set": "Nie ustawione", + "Number of columns": "Liczba kolumn", + "Number of rows": "Liczba wierszy", + "OK": "OK", + "Percent": "Procent", + "Pixels": "Pikseli", + "Positioning of this table": "Pozycjonowanie tabeli", + "Right": "Do prawej", + "Rows:": "Wierszy:", + "Space between adjacent cells": "Przestrzeń pomiędzy komórkami", + "Space between content and border in cell": "Przestrzeń między krawędzią a zawartością komórki", + "Spacing": "Odstęp", + "Texttop": "Góra tekstu", + "Top": "Góra", + "Width of the table": "Szerokość tabeli", + "Width unit": "Jednostka", + "Width:": "Szerokość:" + }, + "Linker": { + "Are you sure you wish to remove this link?": "Na pewno chcesz usunąć odnośnik?", + "Cancel": "Anuluj", + "Email Address:": "Adres e-mail", + "Email Link": "Link do e-maila", + "Insert/Modify Link": "Wstaw/edytuj odnośnik", + "Message Template:": "Szablon wiadmości:", + "Name:": "Nazwa:", + "New Window": "Nowe okno", + "OK": "OK", + "Ordinary Link": "Zwykły odnośnik", + "Popup Window": "Okienko pop-up", + "Remove Link": "USUŃ ODNOŚNIK", + "Same Window (jump out of frames)": "To samo okno (wyskocz z ramek)", + "Size:": "Rozmiar:", + "Subject:": "Temat:", + "Target:": "Okno docelowe:", + "URL Link": "Adres URL", + "URL:": "URL:", + "You must select some text before making a new link.": "Zaznacz tekst przed dodaniem odnośnika." + }, + "ListType": { + "Choose list style type (for ordered lists)": "Wybierz typ listy numerowanej", + "Decimal numbers": "Cyfry arabskie", + "Lower greek letters": "Małe litery greckie", + "Lower latin letters": "Małe litery", + "Lower roman numbers": "Małe rzymskie", + "Upper latin letters": "Duże litery", + "Upper roman numbers": "Duże rzymskie" + }, + "MootoolsFileManager": { + "Insert File Link": "Wstaw odnośnik do pliku na serwerze", + "You must select some text before making a new link.": "Zaznacz tekst przed dodaniem odnośnika." + }, + "NoteServer": { + "Cancel": "Anuluj", + "Image Preview": "Podgląd obrazka:", + "OK": "OK", + "Options": "Opcje", + "Preview": "Podgląd", + "Preview the image in a new window": "Podgląd obrazka w nowym oknie" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Przycisk Wklej nie działa w przeglądarkach Mozilla z uwagi na ustawienia bezpieczeństwa. Naciśnij CRTL-V, aby wkleić zawartość schowka." + }, + "PSLocal": { + "Cancel": "Anuluj" + }, + "PasteText": { + "Cancel": "Anuluj", + "OK": "OK", + "Paste as Plain Text": "Wklej jako czysty tekst" + }, + "PersistentStorage": { + "Cancel": "Anuluj", + "Copy": "Kopiuj", + "Delete": "Usuń", + "Directory Up": "Katalog wyżej", + "File Manager": "Menedżer plików", + "Filename": "Nazwa pliku:", + "Insert Image": "Wstaw obrazek", + "New Folder": "Nowy katalog", + "Save": "Zapisz", + "You must select some text before making a new link.": "Zaznacz tekst przed dodaniem odnośnika." + }, + "QuickTag": { + "ATTRIBUTES": "ATRYBUTY", + "Cancel": "Anuluj", + "Colors": "Kolory", + "Enter the TAG you want to insert": "Podaj TAG, który chcesz wstawić", + "No CSS class avaiable": "Brak dostępnych klas CSS", + "OPTIONS": "OPCJE", + "Ok": "Ok", + "Quick Tag Editor": "Edytor Quick Tag", + "TAGs": "TAGi", + "There are some unclosed quote": "Są jakieś niezamknięte cudzysłowia", + "This attribute already exists in the TAG": "TAG posiada już ten atrybut", + "You have to select some text": "Musisz zaznaczyć tekst." + }, + "SaveSubmit": { + "Save": "Zapisz" + }, + "SetId": { + "Cancel": "Anuluj", + "Delete": "Usuń", + "OK": "OK" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Anuluj", + "OK": "OK", + "Replace with": "Zamień na:" + }, + "Stylist": { + "Styles": "Style" + }, + "SuperClean": { + "Cancel": "Anuluj", + "OK": "OK" + }, + "TableOperations": { + "All four sides": "Wszystkie 4 strony", + "Borders": "Ramki", + "Cancel": "Anuluj", + "Caption": "Podpis", + "Cell Properties": "Właściwości komórki", + "Cell properties": "Właściwości komórki", + "Delete cell": "Usuń komórkę", + "Delete column": "Usuń kolumnę", + "Delete row": "Usuń wiersz", + "Description": "Opis", + "Frame and borders": "Obramowania", + "Frames": "Ramki zewn.", + "Insert cell after": "Wstaw komórkę po", + "Insert cell before": "Wstaw komórkę przed", + "Insert column after": "Wstaw kolumnę po", + "Insert column before": "Wstaw kolumnę przed", + "Insert row after": "Wstaw wiersz po", + "Insert row before": "Wstaw wiersz przed", + "Merge cells": "Scal komórki", + "No rules": "Bez wewnętrzych", + "No sides": "Bez ramek", + "OK": "OK", + "Padding": "Wcięcia", + "Please click into some cell": "Kliknij w jakąś komórkę", + "Row Properties": "Właściwości wiersza", + "Row properties": "Właściwości wiersza", + "Rows": "Wierszy:", + "Rules will appear between all rows and columns": "Linie będą widoczne pomiędzy kolumnami i wierszami", + "Rules will appear between columns only": "Linie będą widoczne tylko pomiędzy kolumnami", + "Rules will appear between rows only": "Linie będą widoczne tylko pomiędzy wierszami", + "Spacing": "Odstęp", + "Spacing and padding": "Spacjowanie", + "Split column": "Rozdziel kolumnę", + "Split row": "Rozdziel wiersz", + "Summary": "Podsumowanie", + "Table Properties": "Właściwości tabeli", + "Table properties": "Właściwości tabeli", + "The bottom side only": "Tylko dolna linia", + "The left-hand side only": "Tylko lewa linia", + "The right and left sides only": "Lewa i prawa linia", + "The right-hand side only": "Tylko prawa linia", + "The top and bottom sides only": "Górna i dolna linia", + "The top side only": "Tylko górna linia", + "Xinha cowardly refuses to delete the last cell in row.": "Nie możesz skasować ostatniej komórki w wierszu.", + "Xinha cowardly refuses to delete the last column in table.": "Nie możesz skasować ostatniej kolumny w tabeli.", + "Xinha cowardly refuses to delete the last row in table.": "Nie możesz skasować ostatniego wiersza w tabeli.", + "pixels": "pikseli" + }, + "Template": { + "Cancel": "Anuluj" + }, + "UnFormat": { + "Cancel": "Anuluj", + "OK": "OK" + }, + "Xinha": { + "— format —": "— Format —", + "About this editor": "Informacje o tym edytorze", + "Address": "Adres", + "Background Color": "Kolor tła", + "Bold": "Pogrubienie", + "Bulleted List": "Wypunktowanie", + "Clear Inline Font Specifications": "Wycisz bezpośrednie przypisania czcionek", + "Clear MSOffice tags": "Wyczyść tagi MSOffice", + "Copy selection": "Kopiuje zaznaczenie do schowka", + "Current style": "Obecny styl", + "Cut selection": "Wycina zaznaczenie do schowka", + "Decrease Indent": "Zmniejsz wcięcie", + "Direction left to right": "Kierunek tekstu lewo-prawo", + "Direction right to left": "Kierunek tekstu prawo-lewo", + "Font Color": "Kolor czcionki", + "Formatted": "Preformatowany", + "Heading 1": "Nagłówek 1", + "Heading 2": "Nagłówek 2", + "Heading 3": "Nagłówek 3", + "Heading 4": "Nagłówek 4", + "Heading 5": "Nagłówek 5", + "Heading 6": "Nagłówek 6", + "Help using editor": "Pomoc", + "Horizontal Rule": "Linia pozioma", + "Increase Indent": "Zwiększ wcięcie", + "Insert Table": "Wstaw tabelę", + "Insert Web Link": "Wstaw adres sieci Web", + "Insert/Modify Image": "Wstaw obraz", + "Italic": "Pochylenie", + "Justify Center": "Wyśrodkuj", + "Justify Full": "Wyjustuj", + "Justify Left": "Wyrównaj do lewej", + "Justify Right": "Wyrównaj do prawej", + "Normal": "Normalny", + "Ordered List": "Numerowanie", + "Paste from clipboard": "Wkleja zawartość schowka", + "Path": "Ścieżka", + "Print document": "Drukuj dokument", + "Redoes your last action": "Ponawia ostatnio wykonane polecenie", + "Remove formatting": "Usuń formatowanie", + "Select all": "Zaznacz wszystko", + "Split Block": "Podziel blok", + "Strikethrough": "Przekreślenie", + "Subscript": "Indeks dolny", + "Superscript": "Indeks górny", + "Toggle Borders": "Włącz / wyłącz ramki", + "Toggle HTML Source": "Edycja WYSIWYG/w źródle strony", + "Underline": "Podkreślenie", + "Undoes your last action": "Cofa ostatnio wykonane polecenie", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jesteś w TRYBIE TEKSTOWYM. Użyj przycisku [<>], aby przełączyć się na tryb WYSIWYG." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "Delete Cell": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Merge Cells": "" + }, + "CreateLink": { + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "" + }, + "FullPage": { + "...": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "western (ISO-8859-1)": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "-": "<>" + }, + "InsertImage": { + "You must enter the URL": "" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Location Bar:": "", + "Menu Bar:": "", + "PopupWindow": "", + "Resizeable:": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Title:": "", + "Toolbar:": "" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Clean content pasted from Word": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Generate Xinha framework": "", + "Georgia": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Register plugin $plugin": "", + "Save as": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "D:": "", + "File List": "", + "Filesize:": "", + "Folder": "", + "GIF": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Toggle marker color": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Image List": "", + "Keyword": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "D:": "<>", + "GIF": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "PNG": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "Guido code": "", + "GUIDO Code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "File List": "<>", + "Insert": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/pt_br.js new file mode 100644 index 0000000000..6681f711b3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/pt_br.js @@ -0,0 +1,1553 @@ +// Xinha Language Combined Translation File +// +// LANG: "pt_br", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/pt_br.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'pt_br'; +// _editor_lang_merged_file = '/xinha/lang/merged/pt_br.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Abbreviation": "Abreviação", + "Cancel": "Cancelar", + "Delete": "Apagar", + "Expansion:": "Expandir:", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "Sobre este editor", + "Close": "Fechar" + }, + "BackgroundImage": { + "Cancel": "Cancelar", + "Remove Current Background": "Remover fundo atual", + "Set Page Background Image": "Definir Imagem de Fundo", + "Set page background image": "Definir imagem de fundo" + }, + "CharCounter": { + "... in progress": "... em processo", + "Chars": "Caracteres", + "HTML": "HTML", + "Words": "Palavras" + }, + "CharacterMap": { + "Insert special character": "Inserir caracter especial" + }, + "ClientsideSpellcheck": { + "Spell Check using ieSpell": "Verificação Ortográfica utilizando ieSpell" + }, + "ColorPicker": { + "Click a color...": "Selecione uma côr...", + "Close": "Fechar", + "Color: ": "Côr:", + "OK": "OK", + "Sample": "Exemplo", + "Web Safe: ": "Web Segura:" + }, + "ContextMenu": { + "C_ell Properties...": "Propriedades da célula", + "Chec_k Link...": "Verificar Link...", + "Copy": "Copiar", + "Create a link": "Criar um novo link", + "Current URL is": "A URL corrente é", + "Cut": "Recortar", + "De_lete Column": "Apagar Coluna", + "Delete Cell": "Apagar Célula", + "Delete the current column": "Apagar a coluna atual", + "Delete the current row": "Apagar a linha atual", + "How did you get here? (Please report!)": "Como você começou aqui? (Por favor, informe!)", + "I_nsert Row Before": "Inserir linha antes deste ponto", + "In_sert Row After": "Inserir linha depois deste ponto", + "Insert C_olumn After": "Inserir coluna após este ponto", + "Insert Cell After": "Inserir Célula Depois", + "Insert Cell Before": "Inserir Célula Antes", + "Insert _Column Before": "Inserir coluna antes deste ponto", + "Insert a new column after the current one": "Inserir uma nova coluna após esta", + "Insert a new column before the current one": "Inserir uma nova coluna antes desta", + "Insert a new row after the current one": "Inserir uma linha após esta", + "Insert a new row before the current one": "Inserir uma nova linha antes desta", + "Insert a paragraph after the current node": "Inserir um parágrafo após o nó atual", + "Insert a paragraph before the current node": "Inserir um parágrafo antes do nó atual", + "Insert paragraph after": "Inserir um parágrafo após", + "Insert paragraph before": "Inserir um parágrafo antes", + "Justify Center": "Justificar centralizado", + "Justify Full": "Justificação completa", + "Justify Left": "Justificar à esquerda", + "Justify Right": "Justificar à direita", + "Link points to:": "Link para:", + "Make lin_k...": "Criar link...", + "Merge Cells": "Mesclar Células", + "Opens this link in a new window": "Abrir este link em uma nova janela", + "Paste": "Colar", + "Please confirm that you want to remove this element:": "Por favor, confirme que deseja remover este elemento:", + "Please confirm that you want to unlink this element.": "Por favor, confirme que deseja retirar o link do elemento.", + "Remove the $elem Element...": "Remover o elemento $elem...", + "Remove this node from the document": "Remover este nó do documento", + "Ro_w Properties...": "Propriedades da Linha", + "Show the Table Cell Properties dialog": "Mostrar Propriedades da Tabelas", + "Show the Table Properties dialog": "Mostrar caixa de diálogo de Propriedades da Tabela", + "Show the Table Row Properties dialog": "Mostrar caixa de diálogo de Propriedades da Linha", + "Show the image properties dialog": "Mostrar a caixa de diálogo das Propriedades da imagem", + "Unlink the current element": "Remover link do elemento atual", + "_Delete Row": "Apagar linha", + "_Image Properties...": "Propriedades da imagem...", + "_Modify Link...": "Modificar link", + "_Remove Link...": "Remover Link", + "_Table Properties...": "Propriedades da Tabela" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "Você tem certeza que deseja remover este link?", + "Cancel": "Cancelar", + "Insert/Modify Link": "Inserir/Modificar Link", + "New window (_blank)": "Nova janela (_blank)", + "None (use implicit)": "Nenhum (uso implícito)", + "OK": "OK", + "Same frame (_self)": "Mesma frame (_self)", + "Target:": "Destino:", + "Title (tooltip):": "Título (tooltip)", + "Top frame (_top)": "Frame do topo (_top)", + "URL:": "URL:", + "You need to select some text before creating a link": "Você precisa selecionar um texto antes de criar um link" + }, + "DefinitionList": { + "definition description": "Descrição de definição", + "definition list": "Lista de definição", + "definition term": "Termo de definição" + }, + "DynamicCSS": { + "Choose stylesheet": "Escolher estilo", + "Default": "Padrão", + "Undefined": "Indefinido" + }, + "EditTag": { + "Cancel": "Cancelar", + "Edit HTML for selected text": "Editar HTML para texto selecionado", + "Edit Tag By Peg": "Editar Tag por Peg", + "OK": "OK", + "Tag Editor": "Editor de Tag" + }, + "Equation": { + ""text"": ""text"", + "AsciiMath Formula Input": "Inserir Fórmula AsciiMath", + "AsciiMathML Example": "Exemplo AsciiMathML", + "Based on ASCIIMathML by": "Baseado no ASCIIMathML por", + "Cancel": "Cancelar", + "For more information on AsciiMathML visit this page:": "Para maiores informações do AsciiMathML visite este site:", + "Formula Editor": "Editor de Fórmula", + "Input": "Entrada", + "OK": "OK", + "Preview": "Visualizar", + "`"text"`": "`"texto"`" + }, + "ExtendedFileManager": { + ">List View": ">Lista", + ">Thumbnail View": ">Miniaturas", + "A:": "A:", + "Absbottom": "Inferior absoluto", + "Absmiddle": "Meio absoluto", + "Align": "Alinhamento", + "Alt": "Alt", + "Baseline": "Linha de base", + "Border": "Borda", + "Border Color": "Côr da Borda", + "Bottom": "Inferior", + "Cancel": "Cancelar", + "Clear": "Limpar", + "Color": "Côr", + "Constrain Proportions": "Manter Proporcionalidade", + "Copy": "Copiar", + "Crop": "Recortar", + "Cut": "Cortar", + "D:": "G:", + "Directory": "Diretório", + "Directory Up": "Diretório Acima", + "Edit": "Editar", + "File List": "Lista de Arquivos", + "File Manager": "Gerenciador de Arquivos", + "Filename:": "Nome do Arquivo:", + "Flip Horizontal": "Espelhar Horizontalmente", + "Flip Image": "Espelhar Imagem", + "Flip Vertical": "Espelhar Verticalmente", + "Folder": "Pasta", + "GIF": "GIF", + "GIF format is not supported, image editing not supported.": "Formato GIF não é suportado, não é possível editar imagem.", + "H:": "A:", + "Height": "Altura", + "Height:": "Altura:", + "Image Editor": "Editor de Imagem", + "Image Selection": "Seleção de Imagem", + "Insert File Link": "Inserir Link de Arquivo", + "Invalid base directory:": "Diretório base inválido", + "JPEG High": "JPEG Alto", + "JPEG Low": "JPEG Baixo", + "JPEG Medium": "JPEG Médio", + "Left": "Esquerda", + "Loading": "Carregando", + "Lock": "Travar", + "Margin": "Margem", + "Marker": "Marcar", + "Maximum folder size limit reached. Upload disabled.": "Atingido o limite máximo da pasta. Envio desativado.", + "Measure": "Medida:", + "Middle": "Meio", + "New Folder": "Nova Pasta", + "New window (_blank)": "Nova janela (_blank)", + "No Files Found": "Nenhum Arquivo Encontrado", + "No Image Available": "Nenhuma Imagem Disponível", + "None (use implicit)": "Nenhum (uso implícito)", + "Not set": "Não definido", + "OK": "OK", + "PNG": "PNG", + "Padding": "Espaçamento Interno", + "Please enter value": "Por favor, entre o valor", + "Positioning of this image": "Posicionamento desta imagem", + "Preview": "Visualizar", + "Quality:": "Qualidade:", + "Refresh": "Atualizar", + "Rename": "Renomear", + "Resize": "Redimencionar", + "Right": "Direita(o)", + "Rotate": "Rotacionar", + "Rotate 180 °": "Rotacionar 180 °", + "Rotate 90 ° CCW": "Rotacionar 90 ° anti-horário", + "Rotate 90 ° CW": "Rotacionar 90 ° horário", + "Rotate Image": "Rotacionar Imagem", + "Same frame (_self)": "Mesma frame (_self)", + "Save": "Gravar", + "Start X:": "Início X:", + "Start Y:": "Início Y", + "Target Window": "Janela Destino", + "Texttop": "Texto no topo", + "Title (tooltip)": "Título (tooltip)", + "Top": "Topo", + "Top frame (_top)": "Frame do topo (_top)", + "Trash": "Lixo", + "Upload": "Enviar", + "W:": "L:", + "Width": "Largura", + "Width:": "Largura:", + "X:": "X:", + "Y:": "Y:", + "You must select some text before making a new link.": "Você precisa selecionar um texto antes de criar um novo link.", + "Zoom": "Ampliação" + }, + "Filter": { + "Filter": "Filtro" + }, + "FindReplace": { + "Case sensitive search": "Procura diferenciada Maiúsculas/Minúsculas", + "Clear": "Limpar", + "Done": "Executado", + "Enter the text you want to find": "Forneça o texto que deseja procurar", + "Find and Replace": "Procurar e Substituir", + "Highlight": "Marcar", + "Inform a replacement word": "Informe uma palavra para substituir", + "Next": "Próxima", + "Options": "Opções", + "Replace with:": "Substituir por:", + "Search for:": "Procurar por:", + "Substitute all occurrences": "Substituir todas as ocorrências", + "Substitute this occurrence?": "Substituir todas as ocorrências?", + "Undo": "Desfazer", + "Whole words only": "Apenas palavras inteiras", + "found item": "Item encontrado", + "found items": "Itens encontrados", + "not found": "nada encontrado", + "replaced item": "substituir item", + "replaced items": "substituir itens" + }, + "FormOperations": { + "Enter the name for new option.": "Entre com o nome para nova opção", + "Form Editor": "Editor de Formulários", + "Insert a Form.": "Inserir um Formulário.", + "Insert a check box.": "Inserir uma caixa de opção", + "Insert a multi-line text field.": "Inserir um texto multi-linha.", + "Insert a radio button.": "Inserir um campo de escolha", + "Insert a select field.": "Inserir seleção.", + "Insert a submit/reset button.": "Inserir um botão de envio/reset", + "Insert a text, password or hidden field.": "Inserir um texto, senha ou campo escondido." + }, + "Forms": { + "Access Key:": "Tecla de Acesso:", + "Action URL:": "Ação - URL:", + "Button Script": "Script de Botão", + "Cancel": "Cancelar", + "Checked": "Definido", + "Columns:": "Colunas:", + "Default text (optional)": "Texto padrão (opcional)", + "Dimensions": "Dimensões", + "Disabled": "Desativado", + "Encoding:": "Codificação:", + "For Control:": "Para Controle:", + "Form": "Formulário", + "Form Element: FIELDSET": "Elemento do formulário: FIELDSET", + "Form Element: INPUT": "Elemento do formulário: INPUT", + "Form Element: LABEL": "Elemento do formulário: LABEL", + "Form Element: SELECT": "Elemento do formulário: SELECT", + "Form Element: TEXTAREA": "Elemento do formulário: TEXTAREA", + "Form Name:": "Nome do Formulário:", + "Form handler script": "Script do Formulário", + "HTML-Form to CGI (default)": "Formulário para CGI (padrão)", + "Hard": "Difícil", + "Height in number of rows": "Altura em número de linhas", + "Image URL:": "URL da imagem:", + "Image source": "Imagem de Origem", + "Initial Text:": "Texto Inicial:", + "Insert/Edit Form": "Inserir/Editar Formulário", + "Insert/Edit Form Element FIELDSET": "Inserir/Editar Elemento FIELDSET", + "Insert/Edit Form Element INPUT": "Inserir/Editar Elemento INPUT", + "Insert/Edit Form Element LABEL": "Inserir/Editar Elemento LABEL", + "Insert/Edit Form Element SELECT": "Inserir/Editar Elemento SELECT", + "Insert/Edit Form Element TEXTAREA": "Inserir/Editar Elemento TEXTAREA", + "Javascript for button click": "Javascript para botão de clicar", + "Label:": "Etiqueta:", + "Legend:": "Legenda:", + "Max length:": "Comprimento Máx.:", + "Maximum number of characters accepted": "Máximo número de caracteres aceitos", + "Method:": "Método:", + "Name": "Nome", + "Name of the form input": "Nome do formulário de entrada", + "Name of the form select": "Nome do formulário de seleção", + "Name/ID:": "Nome/ID:", + "OK": "OK", + "Off": "Desligado", + "Options": "Opções", + "Physical": "Físico", + "Please enter a Label": "Por favor, entre uma Etiqueta", + "Post": "Post", + "Read Only": "Somente Leitura", + "Rows:": "Linhas:", + "Size of text box in characters": "Tamanho da caixa de texto em caracteres", + "Size:": "Tamanho:", + "Soft": "Fácil", + "Tab Index:": "Ordem de Tabulação:", + "Target Frame:": "Frame de destino:", + "Text:": "Texto:", + "URL of image": "URL da imagem", + "Value of the form input": "Valor do formulário de entrada", + "Value:": "Valor:", + "Virtual": "Virtual", + "Width in number of characters": "Largura em número de caracteres", + "Wrap Mode:": "Modo de quebras:", + "You must enter a Name": "Você precisa entrar com um Nome", + "multipart Form Data (File-Upload)": "Formulário de dados multipart (Enviar arquivo)", + "name of the textarea": "nome da área de texto", + "normal": "normal", + "nowrap": "sem quebras" + }, + "FullPage": { + "Alternate style-sheet:": "Estilo alternativo:", + "Background color:": "Côr de Fundo:", + "Cancel": "Cancelar", + "Character set:": "Conjunto de Caracteres:", + "DOCTYPE:": "DOCTYPE:", + "Description:": "Descrição:", + "Document properties": "Propriedades do Documento", + "Document title:": "Título do Documento:", + "Keywords:": "Palavras chave:", + "OK": "OK", + "Primary style-sheet:": "Estilo Primário:", + "Text color:": "Côr do Texto:", + "UTF-8 (recommended)": "UTF-8 (recomendado)", + "cyrillic (ISO-8859-5)": "Cirílico (ISO-8859-5)", + "cyrillic (KOI8-R)": "Cirílico (KOI8-R)", + "cyrillic (WINDOWS-1251)": "Círilico (WINDOWS-1251)", + "western (ISO-8859-1)": "Ocidental (ISO-8859-1)" + }, + "FullScreen": { + "Maximize/Minimize Editor": "Maximizar/Minimizar Editor" + }, + "HorizontalRule": { + "Alignment:": "Alinhamento:", + "Cancel": "Cancelar", + "Center": "Centralizar", + "Color:": "Côr:", + "Height:": "Alturar:", + "Horizontal Rule": "Linha Horizontal", + "Insert/Edit Horizontal Rule": "Inserir/Editar Linha Horizontal", + "Insert/edit horizontal rule": "Inserir/editar linha horizontal", + "Layout": "Esquema", + "Left": "Esquerda", + "No shading": "Sem sombra", + "OK": "OK", + "Right": "Direita", + "Style": "Estilo", + "Width:": "Largura:", + "percent": "porcentagem", + "pixels": "pixels" + }, + "HtmlTidy": { + "Auto-Tidy": "Auto-Tidy", + "Don't Tidy": "Sem Tidy", + "HTML Tidy": "HTML Tidy", + "Tidy failed. Check your HTML for syntax errors.": "Tidy falhou. Verifique erros de sintaxe em seu HTML." + }, + "ImageManager": { + "A:": "A:", + "Absbottom": "Inferior absoluto", + "Absmiddle": "Meio absoluto", + "Angle:": "Ângulo:", + "Baseline": "Linha de base", + "Bottom": "Base", + "Cancel": "Cancelar", + "Clear": "Limpar", + "Constrain Proportions": "Manter proporções", + "Crop": "Recortar", + "D:": "G:", + "Directory": "Diretório", + "Directory Up": "Diretório Acima", + "Edit": "Editar", + "Filename:": "Nome do arquivo:", + "Flip Horizontal": "Espelhar Horizontalmente", + "Flip Image": "Espelhar Imagem", + "Flip Vertical": "Espelhar Verticalmente", + "Folder Name:": "Nome da Pasta:", + "GIF": "GIF", + "GIF format is not supported, image editing not supported.": "Formato GIF não é suportado, edição de imagem não é suportada.", + "H:": "A:", + "Height:": "Altura:", + "Image Editor": "Editor de Imagem", + "Image Format": "Formato da Imagem", + "Image List": "Lista de Imagens", + "Image Selection": "Seleção de Imagem", + "Insert Image": "Inserir Imagem", + "Invalid base directory:": "Diretório base inválido:", + "JPEG High": "JPEG Alto", + "JPEG Low": "JPEG Baixo", + "JPEG Medium": "JPEG Médio", + "Left": "Esquerda", + "Lock": "Travar", + "Marker": "Marcar", + "Measure": "Medida", + "Middle": "Meio", + "New Folder": "Nova Pasta", + "No Image Available": "Sem Imagem Disponível", + "No Images Found": "Nenhuma Imagem Encontrada", + "Not set": "Não definido", + "OK": "OK", + "PNG": "PNG", + "Positioning of this image": "Posicionamento desta imagem", + "Quality:": "Qualidade:", + "Refresh": "Atualização", + "Resize": "Redimencionar", + "Right": "Direita", + "Rotate": "Rotacionar", + "Rotate 180 °": "Rotacionar 180 °", + "Rotate 90 ° CCW": "Rotacionar 90 ° anti-horário", + "Rotate 90 ° CW": "Rotacionar 90 ° horário", + "Rotate Image": "Rotacionar Imagem", + "Save": "Gravar", + "Start X:": "Início X:", + "Start Y:": "Início Y:", + "Texttop": "Texto no topo", + "Top": "Topo", + "Trash": "Lixo", + "W:": "C:", + "Width:": "Largura:", + "X:": "X:", + "Y:": "Y:" + }, + "InlineStyler": { + "Background": "Fundo", + "Baseline": "Linha de base", + "Border": "Borda", + "Bottom": "Base", + "CSS Style": "Estilo (CSS)", + "Center": "Centralizar", + "Char": "Caracter", + "Collapsed borders": "Bordas fechadas", + "FG Color": "Cor de primeiro plano", + "Float": "Flutuante", + "Height": "Altura", + "Image URL": "URL da imagem", + "Justify": "Justificado", + "Layout": "Esquema", + "Left": "Esquerda", + "Margin": "Margem", + "Middle": "Meio", + "None": "Nenhum", + "Padding": "Espaço interno", + "Right": "Direita", + "Text align": "Alinhamento do texto", + "Top": "Topo", + "Vertical align": "Alinhamento vertical", + "Width": "Largura", + "percent": "porcentagem", + "pixels": "pixels" + }, + "InsertAnchor": { + "Anchor name": "Nome da âncora", + "Cancel": "Cancelar", + "Delete": "Deletar", + "Insert Anchor": "Inserir Âncora", + "OK": "OK" + }, + "InsertImage": { + "Absbottom": "Inferior absoluto", + "Absmiddle": "Meio absoluto", + "Alignment:": "Alinhamento:", + "Alternate text:": "Texto Alternativo:", + "Baseline": "Linha de base", + "Border thickness:": "Espessura da Borda", + "Bottom": "Base", + "Cancel": "Cancelar", + "Enter the image URL here": "Entre aqui com a URL da imagem", + "For browsers that don't support images": "Para navegadores que não suportam imagens", + "Horizontal padding": "Espaço horizontal", + "Horizontal:": "Horizontal:", + "Image Preview:": "Visualização da Imagem:", + "Image URL:": "URL da imagem:", + "Insert Image": "Inserir Imagem", + "Layout": "Esquema", + "Leave empty for no border": "Deixe em branco para sem bordas", + "Left": "Esquerda", + "Middle": "Meio", + "Not set": "Não definido", + "OK": "OK", + "Positioning of this image": "Posicionamento desta imagem", + "Preview": "Visualizar", + "Preview the image in a new window": "Visualizar imagem em uma nova janela", + "Right": "Direita", + "Spacing": "Espaçamento", + "Texttop": "Texto no topo", + "Top": "Topo", + "Vertical padding": "Espaço vertical", + "Vertical:": "Vertical:" + }, + "InsertMarquee": { + "Alternate": "Alternativo", + "Background-Color:": "Côr de Fundo:", + "Behavior:": "Comportamento:", + "Cancel": "Cancelar", + "Continuous": "Contínuo", + "Direction:": "Direção:", + "Height:": "Altura:", + "Insert scrolling marquee": "Inserir faixa rolante", + "Left": "Esquerda", + "Marquee Editor": "Editor de Faixas", + "Name": "Nome", + "Name/ID:": "Nome/ID:", + "OK": "OK", + "Right": "Direita", + "Scroll Amount:": "Quantidade de Rolagem:", + "Scroll Delay:": "Atrazo de Rolagem:", + "Slide": "Corrediço", + "Speed Control": "Controle de Velocidade", + "Text:": "Texto:", + "Width:": "Largura:" + }, + "InsertNote": { + "Cancel": "Cancelar", + "Insert": "Inserir" + }, + "InsertPagebreak": { + "Page break": "Quebra de página" + }, + "InsertPicture": { + " Open file in new window": " Abrir arquivo em um nova janela", + "Absbottom": "Inferior Absoluto", + "Absmiddle": "Meio Absoluto", + "Alignment:": "Alinhamento:", + "Alternate text:": "Texto Alternativo:", + "Baseline": "Linha de Base", + "Border thickness:": "Espessura da Borda", + "Bottom": "Inferior", + "Cancel": "Cancelar", + "Enter the image URL here": "Entre aqui com a URL da imagem", + "For browsers that don't support images": "Para navegadores que não suportam imagens", + "Height:": "Altura:", + "Horizontal padding": "Espaço horizontal", + "Horizontal:": "Horizontal:", + "Image Preview:": "Visualização da Imagem:", + "Image URL:": "URL da Imagem:", + "Insert Image": "Inserir Imagem", + "Layout": "Esquema", + "Leave empty for no border": "Deixe em branco para sem bordas", + "Leave empty for not defined": "Deixe em branco para não definido", + "Left": "Esquerda", + "Middle": "Meio", + "Not set": "Não definido", + "OK": "OK", + "Open file in new window": "Abrir arquivo em uma nova janela", + "Positioning of this image": "Posicionamento desta imagem", + "Preview": "Visualização", + "Preview the image in a new window": "Visualizar imagem em uma nova janela", + "Right": "Direita", + "Size": "Tamanho", + "Spacing": "Espaço", + "Texttop": "Texto no topo", + "Top": "Topo", + "Upload file": "Enviar arquivo", + "Vertical padding": "Espaço vertical", + "Vertical:": "Vertical:", + "Width:": "Largura:" + }, + "InsertSmiley": { + "Insert Smiley": "Inserir Smiley" + }, + "InsertSnippet": { + "Cancel": "Cancelar", + "Hide preview": "Esconder Visualização", + "Insert Snippet": "Inserir Fragmento de Código", + "Insert as": "Inserir como", + "InsertSnippet for Xinha": "Fragmento de Códigos para o Xinha", + "Show preview": "Mostrar Visualização", + "This is an information about something": "Isto é uma informação sobre alguma coisa", + "Variable": "Variável" + }, + "InsertSnippet2": { + "Cancel": "Cancelar", + "Filter": "Filtro", + "HTML": "HTML", + "Insert Snippet": "Inserir Fragmento de Código", + "InsertSnippet for Xinha": "Fragmento de Códigos para o Xinha", + "Variable": "Variável" + }, + "InsertTable": { + "Absbottom": "Inferior absoluto", + "Absmiddle": "Meio absoluto", + "Alignment:": "Alinhamento:", + "Baseline": "Linha de base", + "Border": "Borda", + "Border thickness:": "Espessura da Borda", + "Bottom": "Base", + "Cancel": "Cancelar", + "Caption": "Captação", + "Cell padding:": "Espaçamento interno da célula:", + "Cell spacing:": "Espaçamento da célula:", + "Collapse borders:": "Bordas fechadas:", + "Cols:": "Colunas:", + "Em": "Em", + "Fixed width columns": "Colunas com largura fixa", + "Insert Table": "Inserir Tabela", + "Layout": "Esquema", + "Leave empty for no border": "Deixe em branco para sem bordas", + "Left": "Esquerda", + "Middle": "Meio", + "Not set": "Não definido", + "Number of columns": "Número de colunas", + "Number of rows": "Número de linhas", + "OK": "OK", + "Percent": "Porcentagem", + "Pixels": "Pixels", + "Positioning of this table": "Posicionamento desta tabela", + "Right": "Direita", + "Rows:": "Linhas:", + "Space between adjacent cells": "Espaço entre células adjacentes", + "Space between content and border in cell": "Espaço entre conteúdo e borda na célula", + "Spacing": "Espaçamento", + "Texttop": "Texto no topo", + "Top": "Topo", + "Width of the table": "Largura da tabela", + "Width unit": "Unidade de largura", + "Width:": "Largura:" + }, + "LangMarks": { + "— language —": "— Idioma —", + "English": "Inglês", + "French": "Francês", + "Greek": "Grego", + "Latin": "Latim", + "language select": "Selecionar idioma" + }, + "Linker": { + "Anchor-Link": "Link-Âncora", + "Anchor:": "Âncora:", + "Are you sure you wish to remove this link?": "Você tem certeza que deseja remover este link?", + "Cancel": "Cancelar", + "Email Address:": "Endereço de E-mail:", + "Email Link": "Link de E-mail", + "Insert/Modify Link": "Inserir/Modificar Link", + "Location Bar:": "Barra de Localização:", + "Menu Bar:": "Barra de Menu:", + "Message Template:": "Modelo de Mensagem:", + "Name:": "Nome:", + "New Window": "Nova Janela", + "OK": "OK", + "Ordinary Link": "Link Comum", + "Popup Window": "Janela Pop-up", + "Remove Link": "Remover Link", + "Resizeable:": "Redimensionável", + "Same Window (jump out of frames)": "Mesma Janela (Sair fora dos frames)", + "Scrollbars:": "Barra de Rolagem:", + "Size:": "Tamanho:", + "Status Bar:": "Barra de Informações:", + "Subject:": "Assunto:", + "Target:": "Destino:", + "Toolbar:": "Barra de Ferramentas:", + "URL Link": "URL do Link", + "URL:": "URL:", + "You must select some text before making a new link.": "Você precisa selecionar algum texto antes de criar um novo link." + }, + "ListType": { + "Choose list style type (for ordered lists)": "Escolha um tipo de lista (para lista ordenada)", + "Decimal numbers": "Números decimais", + "Lower greek letters": "Letras gregas inferiores", + "Lower latin letters": "Letras latinas inferiores", + "Lower roman numbers": "Números romanos inferiores", + "Upper latin letters": "Letras latinas superiores", + "Upper roman numbers": "Números romanos superiores" + }, + "MootoolsFileManager": { + "Insert File Link": "Inserir Link de Arquivo", + "You must select some text before making a new link.": "Você precisa selecionar algum texto antes de criar um novo link." + }, + "NoteServer": { + "Add GUIDO Code in a textbox on the page": "Adicionar código GUIDO em uma caixa de texto na página", + "Add MIDI link to allow students to hear the music": "Adicionar um link MIDI para permitir que os estudantes escutem a música", + "Cancel": "Cancelar", + "Format": "Formato", + "GUIDO Code": "Código GUIDO", + "Guido code": "Código Guido", + "Image Preview": "Visualização da Imagem", + "Image in applet": "Imagem em Applet", + "Insert GUIDO Music Notation": "Inserir Notação GUIDO de Música", + "MIDI File": "Arquivo MIDI", + "OK": "OK", + "Options": "Opções", + "Preview": "Visualização", + "Preview the image in a new window": "Visualizar imagem em uma nova janela", + "Source Code": "Codigo Fonte", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "Com Mozilla, o applet não estará visível no editor, somente na Página Web depois do envio.", + "Zoom": "Ampliação", + "Zoom :": "Ampliação :" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "O botão Colar não funciona em navegadores baseado no Mozilla (por razões técnicas de segurança). Pressione CTRL-V no seu teclado para colar diretamente." + }, + "PSLocal": { + "Cancel": "Cancelar" + }, + "PasteText": { + "Cancel": "Cancelar", + "OK": "OK", + "Paste as Plain Text": "Colar um texto básico" + }, + "PersistentStorage": { + "Cancel": "Cancelar", + "Copy": "Copiar", + "Delete": "Deletar", + "Directory Up": "Diretório Acima", + "File List": "Lista de Arquivos", + "File Manager": "Gerenciador de Arquivos", + "Filename": "Nome do arquivo:", + "Insert": "Inserir", + "Insert Image": "Inserir Imagem", + "New Folder": "Nova Pasta", + "Save": "Salvar", + "You must select some text before making a new link.": "Você precisa selecionar algum texto antes de criar um novo link." + }, + "QuickTag": { + "ATTRIBUTES": "ATRIBUTOS", + "Cancel": "Cancelar", + "Colors": "Cores", + "Enter the TAG you want to insert": "Entre com a TAG que deseja inserir", + "No CSS class avaiable": "Não há classes CSS disponível", + "OPTIONS": "OPÇÕES", + "Ok": "Ok", + "Quick Tag Editor": "Editor Rápido", + "TAGs": "TAGs", + "There are some unclosed quote": "Há uma ou mais aspas sem fechamento", + "This attribute already exists in the TAG": "Esse atributo já existe na TAG", + "You have to select some text": "É preciso selecionar algum texto" + }, + "SaveSubmit": { + "Ready": "Pronto", + "Save": "Salvar", + "Saving...": "Gravando...", + "in progress": "em processo" + }, + "SetId": { + "Cancel": "Cancelar", + "Delete": "Apagar", + "ID/Name:": "ID/Nome:", + "OK": "OK", + "Set ID/Name": "Definir ID/Nome", + "Set Id and Name": "Definir Id e Nome", + "Set Id/Name": "Definir Id/Nome" + }, + "SmartReplace": { + "Convert all quotes and dashes in the current document": "Converter todas as citações e hífens no documento atual", + "Enable automatic replacements": "Ativar substituições automáticas", + "OK": "OK", + "SmartReplace": "Substituição Rápida", + "SmartReplace Settings": "Configurações da Substituição Rápida" + }, + "SpellChecker": { + "Cancel": "Cancelar", + "Dictionary": "Dicionário", + "Finished list of mispelled words": "Finalizada lista de palavras desconhecidas", + "HTMLArea Spell Checker": "Dicionário HTMLArea", + "I will open it in a new page.": "Será aberto em uma nova página", + "Ignore": "Ignorar", + "Ignore all": "Ignorar todas", + "Info": "Informação", + "Learn": "Aprender", + "No mispelled words found with the selected dictionary.": "Nenhuma palavra desconhecida foi encontrada no dicionário selecionado", + "OK": "OK", + "Original word": "Palavra Original", + "Please confirm that you want to open this link": "Por favor, confirme se deseja abrir este link", + "Please wait. Calling spell checker.": "Por favor, aguarde. Chamando dicionário.", + "Please wait: changing dictionary to": "Por favor, aguarde: mudando dicionário para", + "Re-check": "Re-verificar", + "Replace": "Substituir", + "Replace all": "Substituir tudo", + "Replace with": "Substituir com", + "Revert": "Reverter", + "Spell Checker": "Dicionário", + "Spell-check": "Dicionário", + "Suggestions": "Sugestões", + "This will drop changes and quit spell checker. Please confirm.": "Isso desfará as mudanças e finalizará o dicionário. Por favor, confirme.", + "pliz weit ;-)": "Por favor, aguarde..." + }, + "Stylist": { + "Styles": "Estilos" + }, + "SuperClean": { + "Cancel": "Cancelar", + "Clean up HTML": "Limpar HTML", + "General tidy up and correction of some problems.": "Limpesa geral e correção de alguns problemas.", + "OK": "OK", + "Please select from the following cleaning options...": "Por favor, selecione uma das opções de limpesa...", + "Remove custom font sizes.": "Remover tamanho de fontes personalizados (font size).", + "Remove custom text colors.": "Remover cores de texto personalizados (font color).", + "Remove custom typefaces (font \"styles\").": "Remover tipos de letras personalizadas (font \"styles\").", + "Remove lang attributes.": "Remover atributos de idioma." + }, + "TableOperations": { + "All four sides": "todos os quatro lados", + "Borders": "Bordas", + "Cancel": "Cancelar", + "Caption": "Captação", + "Cell Properties": "Propriedades da célula", + "Cells down": "Células para baixo", + "Cells to the right, and": "Células para direita, e", + "Columns": "Colunas", + "Delete cell": "Apagar célula", + "Delete column": "Apagar coluna", + "Delete row": "Apagar linha", + "Description": "Descrição", + "Frame and borders": "Frames e bordas", + "Frames": "Frames", + "Insert cell after": "Inserir célula antes", + "Insert cell before": "Inserir célula depois", + "Insert column after": "Inserir coluna antes", + "Insert column before": "Inserir coluna depois", + "Insert row after": "Inserir linha depois", + "Insert row before": "Inserir linha antes", + "Merge Cells": "Mesclar Células", + "Merge current cell with:": "Mesclar célula atual com:", + "No rules": "Sem regras", + "No sides": "Sem lados", + "OK": "OK", + "Padding": "Espaço interno", + "Please click into some cell": "Por favor, clique em alguma célula", + "Row Properties": "Propriedades da Linha", + "Rows": "Linhas", + "Rules will appear between all rows and columns": "As Regras apareceram entre todas as linhas e colunas", + "Rules will appear between columns only": "Regras apareceram somente nas colunas", + "Rules will appear between rows only": "Regras apareceram somente nas linhas", + "Spacing": "Espaçamento", + "Spacing and padding": "Espaçamentos", + "Split column": "Separar colunas", + "Split row": "Separar linhas", + "Summary": "Sumário", + "Table Properties": "Propriedades da Tabela", + "The bottom side only": "Somente na parte inferior", + "The left-hand side only": "Somente na parte esquerda", + "The right and left sides only": "Somente nas parte direita e esquerda", + "The right-hand side only": "Somente na parte direita", + "The top and bottom sides only": "Somente na parte inferior e superior", + "The top side only": "Somente na parte superior", + "Xinha cowardly refuses to delete the last cell in row.": "Xinha recusa-se a apagar a última célula na linha", + "Xinha cowardly refuses to delete the last column in table.": "Xinha recusa-se a apagar a última coluna da tabela", + "Xinha cowardly refuses to delete the last row in table.": "Xinha recusa-se a apagar a última linha da tabela", + "pixels": "Pixel" + }, + "Template": { + "Cancel": "Cancelar", + "Insert template": "Inserir modelo" + }, + "UnFormat": { + "All": "Tudo", + "All HTML:": "Todo HTML:", + "Cancel": "Cancelar", + "Cleaning Area": "Limpando Área", + "Cleaning options": "Opções de limpesa", + "Formatting:": "Formatação:", + "OK": "OK", + "Page Cleaner": "Limpesa de página", + "Select which types of formatting you would like to remove.": "Selecione o tipo de formatação que deseja remover.", + "Selection": "Seleção" + }, + "Xinha": { + "— font —": "— fonte —", + "— format —": "— formato —", + "— size —": "— tamanho —", + "About this editor": "Sobre este editor", + "Address": "Endereço", + "Background Color": "Cor do Fundo", + "Bold": "Negrito", + "Bulleted List": "Lista Marcadores", + "CTRL-0 (zero)": "CTRL-0 (zero)", + "CTRL-1 .. CTRL-6": "CTRL-1 .. CTRL-6", + "CTRL-A": "CTRL-A", + "CTRL-B": "CTRL-B", + "CTRL-C": "CTRL-C", + "CTRL-E": "CTRL-E", + "CTRL-I": "CTRL-I", + "CTRL-J": "CTRL-J", + "CTRL-L": "CTRL-L", + "CTRL-N": "CTRL-N", + "CTRL-R": "CTRL-R", + "CTRL-S": "CTRL-S", + "CTRL-U": "CTRL-U", + "CTRL-V": "CTRL-V", + "CTRL-X": "CTRL-X", + "CTRL-Y": "CTRL-Y", + "CTRL-Z": "CTRL-Z", + "Clean content pasted from Word": "Limpar conteúdo copiado do Word", + "Clear Inline Font Specifications": "Limpar especificações de fontes inline", + "Clear MSOffice tags": "Limpar tags do MS Office", + "Close": "Fechar", + "Constructing object": "Construindo objeto", + "Copy selection": "Copiar seleção", + "Create Statusbar": "Criar barra de informação (statusbar)", + "Create Toolbar": "Criar Barra de Ferramentas", + "Current style": "Estilo Atual", + "Cut selection": "Recortar seleção", + "Decrease Indent": "Diminuir Indentação", + "Direction left to right": "Da esquerda para direita", + "Direction right to left": "Da direita para esquerda", + "ENTER": "ENTER", + "Editor Help": "Ajuda do Editor", + "Finishing": "Terminando", + "Font Color": "Cor da Fonte", + "Formatted": "Formatado", + "Generate Xinha framework": "Gerar Área de Trabalho do Xinha", + "Heading 1": "Título 1", + "Heading 2": "Título 2", + "Heading 3": "Título 3", + "Heading 4": "Título 4", + "Heading 5": "Título 5", + "Heading 6": "Título 6", + "Headings": "Títulos", + "Help using editor": "Ajuda - Usando o editor", + "Horizontal Rule": "Linha Horizontal", + "Increase Indent": "Aumentar Indentação", + "Init editor size": "Iniciar tamanho do editor", + "Insert Table": "Inserir Tabela", + "Insert Web Link": "Inserir Link", + "Insert/Modify Image": "Inserir/Modificar Imagem", + "Insert/Overwrite": "Inserir/Sobrescrever", + "Italic": "Itálico", + "Justify Center": "Justificar Centralizado", + "Justify Full": "Justificar Completamente", + "Justify Left": "Justificar à Esquerda", + "Justify Right": "Justificar à Direita", + "Keyboard shortcuts": "Atalhos de Teclado", + "Loading in progress. Please wait!": "Carregamento em processo. Por favor, aguarde!", + "Normal": "Normal", + "Ordered List": "Lista Numerada", + "Paste from clipboard": "Colar da Área de Transferência", + "Path": "Caminho", + "Print document": "Imprimir documento", + "Redoes your last action": "Refazer sua última ação", + "Remove formatting": "Remover formatação", + "SHIFT-ENTER": "SHIFT-ENTER", + "Save as": "Salvar como", + "Select Color": "Selecionar cor", + "Select all": "Selecionar tudo", + "Set format to paragraph": "Definir formato para o parágrafo", + "Split Block": "Dividir Bloco", + "Strikethrough": "Tachado", + "Subscript": "Subscrito", + "Superscript": "Sobrescrito", + "The editor provides the following key combinations:": "Este editor fornece a seguinte combinação de teclas:", + "Toggle Borders": "Mudar Bordas", + "Toggle HTML Source": "Ver Código-Fonte", + "Underline": "Sublinhado", + "Undoes your last action": "Desfazer sua última ação", + "Would you like to clear font colours?": "Deseja limpar as cores de fonte", + "Would you like to clear font sizes?": "Deseja limpar os tamanhos de fonte", + "Would you like to clear font typefaces?": "Deseja limpar os tipos de fonte", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Você está no MODO TEXTO. Use o botão [<>] para mudar para o MODO VISUAL (WYSIWYG)", + "insert linebreak": "inserir quebra de linha", + "new paragraph": "novo parágrafo" + }, + "__NEW_TRANSLATIONS__": { + "CreateLink": { + "Other": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`larr`": "", + "`lArr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`nn`": "", + "`NN`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`pi`": "", + "`Pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`theta`": "", + "`Theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`xi`": "", + "`Xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "bara": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "harr": "", + "hArr": "", + "hata": "", + "if": "", + "in": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "lambda": "", + "Lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "nn": "", + "NN": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "Psi": "", + "psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "theta": "", + "Theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "xi": "", + "Xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "" + }, + "FormOperations": { + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Get": "", + "pre": "" + }, + "FullPage": { + "...": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "" + }, + "InlineStyler": { + "-": "<>" + }, + "InsertImage": { + "You must enter the URL": "" + }, + "InsertNote": { + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page Break": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "" + }, + "InsertTable": { + "Caption for the table": "", + "Layou": "", + "Style of the border": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "" + }, + "LangMarks": { + "', '": "" + }, + "Linker": { + "(px)": "", + "PopupWindow": "", + "Shows On Hover": "", + "Title:": "" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Cleaning Scope": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove emphasis and annotations.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell properties": "", + "Cell Type:": "", + "Do Not Change": "", + "Header (th)": "", + "Merge cells": "", + "Normal (td)": "", + "Row properties": "", + "Table properties": "" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Courier New": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Georgia": "", + "Impact": "", + "Loading Core": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Register plugin $plugin": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Set Background": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + "Filesize:": "", + "Preset": "", + "Toggle marker color": "", + "Xinha Image Editor": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Keyword": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "100%": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ro.js new file mode 100644 index 0000000000..ab6fbc9a91 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ro.js @@ -0,0 +1,1577 @@ +// Xinha Language Combined Translation File +// +// LANG: "ro", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/ro.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'ro'; +// _editor_lang_merged_file = '/xinha/lang/merged/ro.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Renunţă", + "OK": "Acceptă" + }, + "AboutBox": { + "About this editor": "Despre editor" + }, + "BackgroundImage": { + "Cancel": "Renunţă" + }, + "ColorPicker": { + "Color: ": "Culoare", + "OK": "Acceptă" + }, + "ContextMenu": { + "Justify Center": "Aliniere pe centru", + "Justify Full": "Aliniere în ambele părţi", + "Justify Left": "Aliniere la stânga", + "Justify Right": "Aliniere la dreapta" + }, + "CreateLink": { + "Cancel": "Renunţă", + "Insert/Modify Link": "Inserează/modifcă link", + "New window (_blank)": "Fereastră nouă (_blank)", + "None (use implicit)": "Nimic (foloseşte ce-i implicit)", + "OK": "Acceptă", + "Other": "Alt target", + "Same frame (_self)": "Aceeaşi fereastră (_self)", + "Target:": "Ţinta:", + "Title (tooltip):": "Titlul (tooltip):", + "Top frame (_top)": "Fereastra principală (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "Renunţă", + "OK": "Acceptă" + }, + "Equation": { + "Cancel": "Renunţă", + "OK": "Acceptă" + }, + "ExtendedFileManager": { + "Align": "Aliniere", + "Baseline": "Baseline", + "Border": "Chenar", + "Bottom": "Jos", + "Cancel": "Renunţă", + "Color": "Culoare", + "Height": "Înălţimea", + "Height:": "Înălţimea", + "Left": "Stânga", + "Margin": "Margine", + "Middle": "Mijloc", + "New window (_blank)": "Fereastră nouă (_blank)", + "None (use implicit)": "Nimic (foloseşte ce-i implicit)", + "OK": "Acceptă", + "Padding": "Spaţiere", + "Right": "Dreapta", + "Same frame (_self)": "Aceeaşi fereastră (_self)", + "Title (tooltip)": "Titlul (tooltip):", + "Top": "Sus", + "Top frame (_top)": "Fereastra principală (_top)", + "Width": "Lăţime", + "Width:": "Lăţime" + }, + "FindReplace": { + "Replace with:": "Înlocuieşte cu" + }, + "Forms": { + "Cancel": "Renunţă", + "Image URL:": "URL-ul imaginii", + "OK": "Acceptă" + }, + "FullPage": { + "Alternate style-sheet:": "Template CSS alternativ:", + "Background color:": "Culoare de fundal:", + "Cancel": "Renunţă", + "DOCTYPE:": "DOCTYPE:", + "Description:": "Descriere", + "Document properties": "Proprietăţile documentului", + "Document title:": "Titlul documentului:", + "OK": "Acceptă", + "Primary style-sheet:": "Template CSS principal:", + "Text color:": "Culoare text:" + }, + "HorizontalRule": { + "Cancel": "Renunţă", + "Center": "Centru", + "Color:": "Culoare", + "Height:": "Înălţimea", + "Horizontal Rule": "Linie orizontală", + "Layout": "Aranjament", + "Left": "Stânga", + "OK": "Acceptă", + "Right": "Dreapta", + "Width:": "Lăţime", + "percent": "procente", + "pixels": "pixeli" + }, + "ImageManager": { + "Baseline": "Baseline", + "Bottom": "Jos", + "Cancel": "Renunţă", + "Height:": "Înălţimea", + "Left": "Stânga", + "Middle": "Mijloc", + "OK": "Acceptă", + "Right": "Dreapta", + "Top": "Sus", + "Width:": "Lăţime" + }, + "InlineStyler": { + "Background": "Fundal", + "Baseline": "Baseline", + "Border": "Chenar", + "Bottom": "Jos", + "Center": "Centru", + "Char": "Caracter", + "Collapsed borders": "Chenare asimilate", + "FG Color": "Culoare text", + "Float": "Poziţie", + "Height": "Înălţimea", + "Image URL": "URL-ul imaginii", + "Justify": "Justify", + "Layout": "Aranjament", + "Left": "Stânga", + "Margin": "Margine", + "Middle": "Mijloc", + "None": "Nimic", + "Padding": "Spaţiere", + "Right": "Dreapta", + "Text align": "Aliniere", + "Top": "Sus", + "Vertical align": "Aliniere pe verticală", + "Width": "Lăţime", + "percent": "procente", + "pixels": "pixeli" + }, + "InsertAnchor": { + "Cancel": "Renunţă", + "OK": "Acceptă" + }, + "InsertImage": { + "Baseline": "Baseline", + "Bottom": "Jos", + "Cancel": "Renunţă", + "Image URL:": "URL-ul imaginii", + "Layout": "Aranjament", + "Left": "Stânga", + "Middle": "Mijloc", + "OK": "Acceptă", + "Right": "Dreapta", + "Spacing": "Între celule", + "Top": "Sus" + }, + "InsertMarquee": { + "Cancel": "Renunţă", + "Height:": "Înălţimea", + "Left": "Stânga", + "OK": "Acceptă", + "Right": "Dreapta", + "Width:": "Lăţime" + }, + "InsertNote": { + "Cancel": "Renunţă" + }, + "InsertPicture": { + "Baseline": "Baseline", + "Bottom": "Jos", + "Cancel": "Renunţă", + "Height:": "Înălţimea", + "Image URL:": "URL-ul imaginii", + "Layout": "Aranjament", + "Left": "Stânga", + "Middle": "Mijloc", + "OK": "Acceptă", + "Right": "Dreapta", + "Spacing": "Între celule", + "Top": "Sus", + "Width:": "Lăţime" + }, + "InsertSnippet": { + "Cancel": "Renunţă" + }, + "InsertSnippet2": { + "Cancel": "Renunţă" + }, + "InsertTable": { + "Baseline": "Baseline", + "Border": "Chenar", + "Bottom": "Jos", + "Cancel": "Renunţă", + "Caption": "Titlu de tabel", + "Insert Table": "Inserează un tabel", + "Layout": "Aranjament", + "Left": "Stânga", + "Middle": "Mijloc", + "OK": "Acceptă", + "Percent": "procente", + "Pixels": "pixeli", + "Right": "Dreapta", + "Spacing": "Între celule", + "Top": "Sus", + "Width:": "Lăţime" + }, + "Linker": { + "Cancel": "Renunţă", + "Insert/Modify Link": "Inserează/modifcă link", + "OK": "Acceptă", + "Target:": "Ţinta:", + "URL:": "URL:" + }, + "NoteServer": { + "Cancel": "Renunţă", + "OK": "Acceptă" + }, + "PSLocal": { + "Cancel": "Renunţă" + }, + "PasteText": { + "Cancel": "Renunţă", + "OK": "Acceptă" + }, + "PersistentStorage": { + "Cancel": "Renunţă" + }, + "QuickTag": { + "Cancel": "Renunţă" + }, + "SetId": { + "Cancel": "Renunţă", + "OK": "Acceptă" + }, + "SmartReplace": { + "OK": "Acceptă" + }, + "SpellChecker": { + "Cancel": "Anulează", + "Dictionary": "Dicţionar", + "Finished list of mispelled words": "Am terminat lista de cuvinte greşite", + "I will open it in a new page.": "O voi deschide într-o altă fereastră.", + "Ignore": "Ignoră", + "Ignore all": "Ignoră toate", + "No mispelled words found with the selected dictionary.": "Nu am găsit nici un cuvânt greşit cu acest dicţionar.", + "OK": "OK", + "Original word": "Cuvântul original", + "Please confirm that you want to open this link": "Vă rog confirmaţi că vreţi să deschideţi acest link", + "Please wait. Calling spell checker.": "Vă rog aşteptaţi. Apelez spell-checker-ul.", + "Please wait: changing dictionary to": "Vă rog aşteptaţi. Schimb dicţionarul cu", + "Re-check": "Scanează", + "Replace": "Înlocuieşte", + "Replace all": "Înlocuieşte toate", + "Replace with": "Înlocuieşte cu", + "Spell-check": "Detectează greşeli", + "Suggestions": "Sugestii", + "This will drop changes and quit spell checker. Please confirm.": "Doriţi să renunţaţi la modificări şi să închid spell-checker-ul?" + }, + "SuperClean": { + "Cancel": "Renunţă", + "OK": "Acceptă" + }, + "TableOperations": { + "All four sides": "Toate părţile", + "Borders": "Chenare", + "Cancel": "Renunţă", + "Caption": "Titlu de tabel", + "Cell Properties": "Proprietăţile celulei", + "Cell properties": "Proprietăţile celulei", + "Delete cell": "Şterge celula", + "Delete column": "Şterge coloana", + "Delete row": "Şterge rândul", + "Description": "Descriere", + "Frames": "Chenare", + "Insert cell after": "Inserează o celulă la dreapta", + "Insert cell before": "Inserează o celulă la stânga", + "Insert column after": "Inserează o coloană la dreapta", + "Insert column before": "Inserează o coloană la stânga", + "Insert row after": "Inserează un rând după", + "Insert row before": "Inserează un rând înainte", + "Merge cells": "Uneşte celulele", + "No rules": "Fără linii", + "No sides": "Fără părţi", + "OK": "Acceptă", + "Padding": "Spaţiere", + "Please click into some cell": "Vă rog să daţi click într-o celulă", + "Row Properties": "Proprietăţile liniei", + "Row properties": "Proprietăţile rândului", + "Rules will appear between all rows and columns": "Vor apărea linii între toate rândurile şi coloanele", + "Rules will appear between columns only": "Vor apărea doar linii verticale", + "Rules will appear between rows only": "Vor apărea doar linii orizontale", + "Spacing": "Între celule", + "Spacing and padding": "Spaţierea", + "Split column": "Împarte coloana", + "Split row": "Împarte rândul", + "Summary": "Sumar", + "Table Properties": "Proprietăţile tabelei", + "Table properties": "Proprietăţile tabelei", + "The bottom side only": "Doar partea de jos", + "The left-hand side only": "Doar partea din stânga", + "The right and left sides only": "Partea din stânga şi cea din dreapta", + "The right-hand side only": "Doar partea din dreapta", + "The top and bottom sides only": "Partea de sus si cea de jos", + "The top side only": "Doar partea de sus", + "Xinha cowardly refuses to delete the last cell in row.": "Xinha refuză cu laşitate să şteargă ultima celulă din rând.", + "Xinha cowardly refuses to delete the last column in table.": "Xinha refuză cu laşitate să şteargă ultima coloamă din tabela.", + "Xinha cowardly refuses to delete the last row in table.": "Xinha refuză cu laşitate să şteargă ultimul rând din tabela.", + "pixels": "pixeli" + }, + "Template": { + "Cancel": "Renunţă" + }, + "UnFormat": { + "Cancel": "Renunţă", + "OK": "Acceptă" + }, + "Xinha": { + "About this editor": "Despre editor", + "Background Color": "Culoare de fundal", + "Bold": "Îngroşat", + "Bulleted List": "Listă marcată", + "Copy selection": "Copie în clipboard", + "Current style": "Stilul curent", + "Cut selection": "Taie în clipboard", + "Decrease Indent": "Micşorează alineatul", + "Direction left to right": "Direcţia de scriere: stânga - dreapta", + "Direction right to left": "Direcţia de scriere: dreapta - stânga", + "Font Color": "Culoarea textului", + "Help using editor": "Documentaţie (devel)", + "Horizontal Rule": "Linie orizontală", + "Increase Indent": "Măreşte alineatul", + "Insert Table": "Inserează un tabel", + "Insert Web Link": "Inserează/modifică link", + "Insert/Modify Image": "Inserează/modifică imagine", + "Italic": "Italic", + "Justify Center": "Aliniere pe centru", + "Justify Full": "Aliniere în ambele părţi", + "Justify Left": "Aliniere la stânga", + "Justify Right": "Aliniere la dreapta", + "Ordered List": "Listă ordonată", + "Paste from clipboard": "Aduce din clipboard", + "Path": "Calea", + "Redoes your last action": "Reface ultima acţiune anulată", + "Strikethrough": "Tăiat", + "Subscript": "Indice jos", + "Superscript": "Indice sus", + "Toggle HTML Source": "Sursa HTML / WYSIWYG", + "Underline": "Subliniat", + "Undoes your last action": "Anulează ultima acţiune", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Eşti în modul TEXT. Apasă butonul [<>] pentru a te întoarce în modul WYSIWYG." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Keywords:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Preview": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Border thickness:": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Rows:": "<>", + "Texttop": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>", + "Rows": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Copy": "<>", + "Cut": "<>", + "Insert File Link": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Save": "<>", + "Texttop": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Border thickness:": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Insert Image": "<>", + "Leave empty for no border": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Size": "<>", + "Texttop": "<>", + "Vertical padding": "<>", + "Vertical:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "HTMLArea Spell Checker": "", + "Info": "", + "Learn": "", + "pliz weit ;-)": "", + "Revert": "", + "Spell Checker": "" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ru.js new file mode 100644 index 0000000000..84451d0558 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/ru.js @@ -0,0 +1,1575 @@ +// Xinha Language Combined Translation File +// +// LANG: "ru", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/ru.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'ru'; +// _editor_lang_merged_file = '/xinha/lang/merged/ru.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Отмена", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "О редакторе", + "Close": "Закрыть" + }, + "BackgroundImage": { + "Cancel": "Отмена" + }, + "CharacterMap": { + "Insert special character": "Вставить специальный символ" + }, + "ColorPicker": { + "Close": "Закрыть", + "Color: ": "Цвет", + "OK": "OK" + }, + "ContextMenu": { + "Justify Center": "По центру", + "Justify Full": "По ширине", + "Justify Left": "По левому краю", + "Justify Right": "По правому краю" + }, + "CreateLink": { + "Cancel": "Отмена", + "Insert/Modify Link": "Вставка/изменение ссылки", + "New window (_blank)": "Новое окно (_blank)", + "None (use implicit)": "По умолчанию", + "OK": "OK", + "Other": "Другое", + "Same frame (_self)": "То же окно (_self)", + "Target:": "Открывать в окне:", + "Title (tooltip):": "Всплывающая подсказка", + "Top frame (_top)": "Родительское окно (_top)", + "URL:": "URL:", + "You need to select some text before creating a link": "Вы должны выделить текст, который будет преобразован в ссылку" + }, + "DefinitionList": { + "definition description": "Пояснение", + "definition list": "Список с определением", + "definition term": "Заголовок" + }, + "EditTag": { + "Cancel": "Отмена", + "OK": "OK" + }, + "Equation": { + "Cancel": "Отмена", + "OK": "OK", + "Preview": "Предварительный просмотр" + }, + "ExtendedFileManager": { + "Absbottom": "По нижней границе", + "Absmiddle": "По середине текста", + "Align": "Выравнивание", + "Baseline": "По нижней границе текста", + "Border": "Рамка", + "Bottom": "По нижнему краю", + "Cancel": "Отмена", + "Clear": "Очистить", + "Color": "Цвет", + "Constrain Proportions": "Сохранить пропорции", + "Crop": "Обрезать", + "Directory": "Папка", + "Directory Up": "Папка наверх", + "Edit": "Правка", + "Filename:": "Имя файла", + "Flip Horizontal": "Развернуть по горизонтали", + "Flip Image": "Развернуть картинку", + "Flip Vertical": "Развернуть по вертикали", + "GIF format is not supported, image editing not supported.": "Формат GIF не поддерживается, редактирование картинки не поддерживается.", + "Height": "Высота", + "Height:": "Высота", + "Invalid base directory:": "Неверная базовая папка:", + "JPEG High": "JPEG высок.", + "JPEG Low": "JPEG низк.", + "JPEG Medium": "JPEG средн.", + "Left": "По левому краю", + "Loading": "Загрузка", + "Lock": "Блокировка", + "Margin": "Отступ", + "Marker": "Маркер", + "Measure": "Измерение", + "Middle": "Посредине", + "New Folder": "Новая папка", + "New window (_blank)": "Новое окно (_blank)", + "No Image Available": "Нет доступных картинок", + "None (use implicit)": "По умолчанию", + "Not set": "Не установлено", + "OK": "OK", + "Padding": "Поля", + "Positioning of this image": "Расположение изображения", + "Preview": "Предварительный просмотр", + "Quality:": "Качество", + "Refresh": "Обновить", + "Resize": "Масшабировать", + "Right": "По правому краю", + "Rotate": "Повернуть", + "Rotate Image": "Повернуть картинку", + "Same frame (_self)": "То же окно (_self)", + "Save": "Сохранить", + "Start X:": "Начало X", + "Start Y:": "Начало Y", + "Texttop": "По верхней границе текста", + "Title (tooltip)": "Всплывающая подсказка", + "Top": "По верхнему краю", + "Top frame (_top)": "Родительское окно (_top)", + "Trash": "Корзина", + "Upload": "Загрузить", + "W:": "Ш:", + "Width": "Ширина", + "Width:": "Ширина" + }, + "FindReplace": { + "Case sensitive search": "Поиск с учетом регистра", + "Clear": "Очистить", + "Done": "OK", + "Enter the text you want to find": "Введите текст, который вы хотите найти", + "Find and Replace": "Найти и заменить", + "Highlight": "Выделить", + "Inform a replacement word": "Показать замещающее слово", + "Next": "След.", + "Options": "Опции", + "Replace with:": "Заменить с", + "Search for:": "Найти", + "Substitute all occurrences": "Заменить все вхождения", + "Substitute this occurrence?": "Заменить это вхождение?", + "Undo": "Отменить", + "Whole words only": "Только слова целиком", + "found item": "найти", + "found items": "найти", + "not found": "не найдено", + "replaced item": "замененная", + "replaced items": "замененные" + }, + "Forms": { + "Cancel": "Отмена", + "Image URL:": "URL изображения", + "OK": "OK", + "Options": "Опции", + "Rows:": "Строки" + }, + "FullPage": { + "Cancel": "Отмена", + "Description:": "Описание", + "OK": "OK" + }, + "FullScreen": { + "Maximize/Minimize Editor": "Развернуть/Свернуть редактор" + }, + "HorizontalRule": { + "Alignment:": "Выравнивание", + "Cancel": "Отмена", + "Center": "Центр", + "Color:": "Цвет", + "Height:": "Высота", + "Horizontal Rule": "Горизонтальный разделитель", + "Layout": "Расположение", + "Left": "По левому краю", + "OK": "OK", + "Right": "По правому краю", + "Width:": "Ширина", + "percent": "процентов", + "pixels": "пикселей" + }, + "ImageManager": { + "Absbottom": "По нижней границе", + "Absmiddle": "По середине текста", + "Angle:": "Угол", + "Baseline": "По нижней границе текста", + "Bottom": "По нижнему краю", + "Cancel": "Отмена", + "Clear": "Очистить", + "Constrain Proportions": "Сохранить пропорции", + "Crop": "Обрезать", + "Directory": "Папка", + "Directory Up": "Папка наверх", + "Edit": "Правка", + "Filename:": "Имя файла", + "Flip Horizontal": "Развернуть по горизонтали", + "Flip Image": "Развернуть картинку", + "Flip Vertical": "Развернуть по вертикали", + "Folder Name:": "Название папки:", + "GIF format is not supported, image editing not supported.": "Формат GIF не поддерживается, редактирование картинки не поддерживается.", + "Height:": "Высота", + "Image Format": "Формат картинки", + "Insert Image": "Вставка картинки", + "Invalid base directory:": "Неверная базовая папка:", + "JPEG High": "JPEG высок.", + "JPEG Low": "JPEG низк.", + "JPEG Medium": "JPEG средн.", + "Left": "По левому краю", + "Lock": "Блокировка", + "Marker": "Маркер", + "Measure": "Измерение", + "Middle": "Посредине", + "New Folder": "Новая папка", + "No Image Available": "Нет доступных картинок", + "No Images Found": "Картинок не найдено", + "Not set": "Не установлено", + "OK": "OK", + "Positioning of this image": "Расположение изображения", + "Quality:": "Качество", + "Refresh": "Обновить", + "Resize": "Масшабировать", + "Right": "По правому краю", + "Rotate": "Повернуть", + "Rotate Image": "Повернуть картинку", + "Save": "Сохранить", + "Start X:": "Начало X", + "Start Y:": "Начало Y", + "Texttop": "По верхней границе текста", + "Top": "По верхнему краю", + "Trash": "Корзина", + "W:": "Ш:", + "Width:": "Ширина" + }, + "InlineStyler": { + "Background": "Фон", + "Baseline": "По нижней границе текста", + "Border": "Рамка", + "Bottom": "По нижнему краю", + "Center": "Центр", + "Char": "Символ", + "Collapsed borders": "Накладывающиеся рамки", + "FG Color": "Цвет переднего плана", + "Float": "Обтекание", + "Height": "Высота", + "Image URL": "URL картинки", + "Justify": "По правому краю", + "Layout": "Расположение", + "Left": "По левому краю", + "Margin": "Отступ", + "Middle": "Посредине", + "None": "Ничего", + "Padding": "Поля", + "Right": "По правому краю", + "Text align": "Выравнивание теста", + "Top": "По верхнему краю", + "Vertical align": "Вертикальное выравнивание", + "Width": "Ширина", + "percent": "процентов", + "pixels": "пикселей" + }, + "InsertAnchor": { + "Cancel": "Отмена", + "OK": "OK" + }, + "InsertImage": { + "Absbottom": "По нижней границе", + "Absmiddle": "По середине текста", + "Alignment:": "Выравнивание", + "Alternate text:": "Альтернативный текст", + "Baseline": "По нижней границе текста", + "Border thickness:": "Толщина рамки", + "Bottom": "По нижнему краю", + "Cancel": "Отмена", + "Enter the image URL here": "Вставьте адрес изображения", + "For browsers that don't support images": "Для браузеров, которые не отображают картинки", + "Horizontal padding": "Горизонтальные поля", + "Horizontal:": "По горизонтали", + "Image Preview:": "Предварительный просмотр", + "Image URL:": "URL изображения", + "Insert Image": "Вставка картинки", + "Layout": "Расположение", + "Leave empty for no border": "Оставьте пустым, чтобы убрать рамку", + "Left": "По левому краю", + "Middle": "Посредине", + "Not set": "Не установлено", + "OK": "OK", + "Positioning of this image": "Расположение изображения", + "Preview": "Предварительный просмотр", + "Preview the image in a new window": "Предварительный просмотр в отдельном окне", + "Right": "По правому краю", + "Spacing": "Отступы", + "Texttop": "По верхней границе текста", + "Top": "По верхнему краю", + "Vertical padding": "Вертикальные поля", + "Vertical:": "По вертикали", + "You must enter the URL": "Вы должны ввести URL" + }, + "InsertMarquee": { + "Cancel": "Отмена", + "Height:": "Высота", + "Left": "По левому краю", + "OK": "OK", + "Right": "По правому краю", + "Width:": "Ширина" + }, + "InsertNote": { + "Cancel": "Отмена" + }, + "InsertPicture": { + "Absbottom": "По нижней границе", + "Absmiddle": "По середине текста", + "Alignment:": "Выравнивание", + "Alternate text:": "Альтернативный текст", + "Baseline": "По нижней границе текста", + "Border thickness:": "Толщина рамки", + "Bottom": "По нижнему краю", + "Cancel": "Отмена", + "Enter the image URL here": "Вставьте адрес изображения", + "For browsers that don't support images": "Для браузеров, которые не отображают картинки", + "Height:": "Высота", + "Horizontal padding": "Горизонтальные поля", + "Horizontal:": "По горизонтали", + "Image Preview:": "Предварительный просмотр", + "Image URL:": "URL изображения", + "Insert Image": "Вставка картинки", + "Layout": "Расположение", + "Leave empty for no border": "Оставьте пустым, чтобы убрать рамку", + "Left": "По левому краю", + "Middle": "Посредине", + "Not set": "Не установлено", + "OK": "OK", + "Positioning of this image": "Расположение изображения", + "Preview": "Предварительный просмотр", + "Preview the image in a new window": "Предварительный просмотр в отдельном окне", + "Right": "По правому краю", + "Spacing": "Отступы", + "Texttop": "По верхней границе текста", + "Top": "По верхнему краю", + "Vertical padding": "Вертикальные поля", + "Vertical:": "По вертикали", + "Width:": "Ширина" + }, + "InsertSnippet": { + "Cancel": "Отмена" + }, + "InsertSnippet2": { + "Cancel": "Отмена" + }, + "InsertTable": { + "Absbottom": "По нижней границе", + "Absmiddle": "По середине текста", + "Alignment:": "Выравнивание", + "Baseline": "По нижней границе текста", + "Border": "Рамка", + "Border thickness:": "Толщина рамки", + "Bottom": "По нижнему краю", + "Cancel": "Отмена", + "Caption": "Заголовок", + "Cell padding:": "Поля в ячейках", + "Cell spacing:": "Расстояние между ячейками", + "Cols:": "Столбцы", + "Em": "em", + "Fixed width columns": "Столбцы фиксированной ширины", + "Insert Table": "Вставка таблицы", + "Layout": "Расположение", + "Leave empty for no border": "Оставьте пустым, чтобы убрать рамку", + "Left": "По левому краю", + "Middle": "Посредине", + "Not set": "Не установлено", + "Number of columns": "Количество столбцов", + "Number of rows": "Количество строк", + "OK": "OK", + "Percent": "проценты", + "Pixels": "пикселы", + "Positioning of this table": "Расположение таблицы", + "Right": "По правому краю", + "Rows:": "Строки", + "Space between adjacent cells": "Расстояние между соседними ячейками", + "Space between content and border in cell": "Расстояние между границей ячейки и текстом", + "Spacing": "Отступы", + "Texttop": "По верхней границе текста", + "Top": "По верхнему краю", + "Width of the table": "Ширина таблицы", + "Width unit": "Единицы измерения", + "Width:": "Ширина", + "You must enter a number of columns": "Вы должны ввести количество столбцов", + "You must enter a number of rows": "Вы должны ввести количество строк" + }, + "Linker": { + "Cancel": "Отмена", + "Insert/Modify Link": "Вставка/изменение ссылки", + "OK": "OK", + "Target:": "Открывать в окне:", + "URL:": "URL:" + }, + "ListType": { + "Choose list style type (for ordered lists)": "Выберите стиль списков (для упорядоченных списков)", + "Decimal numbers": "Десятичные числа", + "Lower greek letters": "Строчные греческие символы", + "Lower latin letters": "Строчные латинские символы", + "Lower roman numbers": "Строчные романские числа", + "Upper latin letters": "Заглавные латинские символы", + "Upper roman numbers": "Заглавные романские числа" + }, + "NoteServer": { + "Cancel": "Отмена", + "Image Preview": "Предварительный просмотр", + "OK": "OK", + "Options": "Опции", + "Preview": "Предварительный просмотр", + "Preview the image in a new window": "Предварительный просмотр в отдельном окне" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Кнопка Вставить не работает в браузерах на основе Mozilla (по техническим причинам, связанным с безопасностью). Нажмите Ctrl-V на клавиатуре, чтобы вставить." + }, + "PSLocal": { + "Cancel": "Отмена" + }, + "PasteText": { + "Cancel": "Отмена", + "OK": "OK", + "Paste as Plain Text": "Вставить как обычный текст" + }, + "PersistentStorage": { + "Cancel": "Отмена", + "Directory Up": "Папка наверх", + "Filename": "Имя файла", + "Insert Image": "Вставка картинки", + "New Folder": "Новая папка", + "Save": "Сохранить" + }, + "QuickTag": { + "Cancel": "Отмена" + }, + "SaveSubmit": { + "Ready": "Готово", + "Save": "Сохранить", + "Saving...": "Сохранение...", + "in progress": "пожалуйста, ждите" + }, + "SetId": { + "Cancel": "Отмена", + "OK": "OK" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Отмена", + "OK": "OK", + "Replace with": "Заменить с" + }, + "Stylist": { + "Styles": "Стили" + }, + "SuperClean": { + "Cancel": "Отмена", + "OK": "OK" + }, + "TableOperations": { + "All four sides": "Все 4 стороны", + "Borders": "Рамки", + "Cancel": "Отмена", + "Caption": "Заголовок", + "Cell Properties": "Свойства ячеек", + "Cell properties": "Свойства ячеек", + "Delete cell": "Удалить ячейку", + "Delete column": "Удалить столбец", + "Delete row": "Удалить строку", + "Description": "Описание", + "Frames": "Фреймы", + "Insert cell after": "Вставить ячейку после", + "Insert cell before": "Вставить ячейку до", + "Insert column after": "Вставить столбец после", + "Insert column before": "Вставить столбец до", + "Insert row after": "Вставить строку после", + "Insert row before": "Вставить строку до", + "Merge cells": "Объединить ячейки", + "No rules": "Нет линейки", + "No sides": "Нет сторон", + "OK": "OK", + "Padding": "Поля", + "Please click into some cell": "Пожалуйста щелкните в некоторые ячейки", + "Row Properties": "Свойства строк", + "Row properties": "Свойства строки", + "Rows": "Строки", + "Rules will appear between all rows and columns": "Линейки появятся между всеми строками и столбцами", + "Rules will appear between columns only": "Линейки появятся только между столбцами", + "Rules will appear between rows only": "Линейки появятся только между строками", + "Spacing": "Отступы", + "Spacing and padding": "Поля и отступы", + "Split column": "Разделить столбец", + "Split row": "Разделить строку", + "Summary": "Сводка", + "Table Properties": "Свойства таблиц", + "Table properties": "Свойства таблиц", + "The bottom side only": "Только нижний край", + "The left-hand side only": "Только левый край", + "The right and left sides only": "Только левый и правый край", + "The right-hand side only": "Только правый край", + "The top and bottom sides only": "Только верхний и нижний край", + "The top side only": "Только верхний край", + "Xinha cowardly refuses to delete the last cell in row.": "Xinha отказалась удалять последнюю ячейку в строке.", + "Xinha cowardly refuses to delete the last column in table.": "Xinha отказалась удалять последний столбец в таблице.", + "Xinha cowardly refuses to delete the last row in table.": "Xinha отказалась удалять последнюю строку в таблице.", + "pixels": "пикселей" + }, + "Template": { + "Cancel": "Отмена" + }, + "UnFormat": { + "Cancel": "Отмена", + "OK": "OK" + }, + "Xinha": { + "— font —": "— шрифт —", + "— format —": "— форматирование —", + "— size —": "— размер —", + "About this editor": "О редакторе", + "Address": "Адрес", + "Background Color": "Цвет фона", + "Bold": "Полужирный", + "Bulleted List": "Маркированный список", + "Clean content pasted from Word": "Очистить текст, вставленный из Word", + "Clear Inline Font Specifications": "Удалить непосредственное задание шрифтов", + "Clear MSOffice tags": "Удалить разметку MSOffice", + "Close": "Закрыть", + "Constructing object": "Создание объекта", + "Copy selection": "Копировать", + "Create Toolbar": "Создание панели инструментов", + "Current style": "Текущий стиль", + "Cut selection": "Вырезать", + "Decrease Indent": "Уменьшить отступ", + "Direction left to right": "Направление слева направо", + "Direction right to left": "Направление справа налево", + "ENTER": "ENTER", + "Editor Help": "Помощь", + "Font Color": "Цвет шрифта", + "Formatted": "Отформатированный текст", + "Heading 1": "Заголовок 1", + "Heading 2": "Заголовок 2", + "Heading 3": "Заголовок 3", + "Heading 4": "Заголовок 4", + "Heading 5": "Заголовок 5", + "Heading 6": "Заголовок 6", + "Headings": "Заголовки", + "Help using editor": "Помощь", + "Horizontal Rule": "Горизонтальный разделитель", + "Increase Indent": "Увеличить отступ", + "Init editor size": "Инициализация размера редактора", + "Insert Table": "Вставка таблицы", + "Insert Web Link": "Вставить гиперссылку", + "Insert/Modify Image": "Вставить изображение", + "Insert/Overwrite": "Вставка/замена", + "Italic": "Наклонный", + "Justify Center": "По центру", + "Justify Full": "По ширине", + "Justify Left": "По левому краю", + "Justify Right": "По правому краю", + "Keyboard shortcuts": "Горячие клавиши", + "Normal": "Обычный текст", + "Ordered List": "Нумерованный список", + "Paste from clipboard": "Вставить", + "Path": "Путь", + "Print document": "Печать", + "Redoes your last action": "Повторить", + "Register plugin $plugin": "Регистрация $plugin", + "Remove formatting": "Убрать форматирование", + "SHIFT-ENTER": "SHIFT+ENTER", + "Save as": "Сохранить как", + "Select all": "Выделить все", + "Set format to paragraph": "Отформатировать абзац", + "Split Block": "Разделить блок", + "Strikethrough": "Перечеркнутый", + "Subscript": "Нижний индекс", + "Superscript": "Верхний индекс", + "The editor provides the following key combinations:": "Редактор поддерживает следующие комбинации клавиш:", + "Toggle Borders": "Включить/выключить отображение границ", + "Toggle HTML Source": "Показать Html-код", + "Underline": "Подчеркнутый", + "Undoes your last action": "Отменить", + "Would you like to clear font colours?": "Удалить цвета шрифтов ?", + "Would you like to clear font sizes?": "Удалить размеры шрифтов ?", + "Would you like to clear font typefaces?": "Удалить типы шрифтов?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Вы в режиме отображения Html-кода. нажмите кнопку [<>], чтобы переключиться в визуальный режим.", + "insert linebreak": "перенос строки", + "new paragraph": "новый абзац" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Courier New": "", + "Create Statusbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Generate Xinha framework": "", + "Georgia": "", + "Impact": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Select Color": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Alt": "", + "Border Color": "", + "D:": "", + "File List": "", + "File Manager": "", + "Filesize:": "", + "Folder": "", + "GIF": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Maximum folder size limit reached. Upload disabled.": "", + "No Files Found": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Rename": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Target Window": "", + "Toggle marker color": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Copy": "<>", + "Cut": "<>", + "Insert File Link": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Image List": "", + "Keyword": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "D:": "<>", + "GIF": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "PNG": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Size": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "Guido code": "", + "GUIDO Code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "File List": "<>", + "File Manager": "<>", + "Insert": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/sh.js new file mode 100644 index 0000000000..e734c52c15 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/sh.js @@ -0,0 +1,1575 @@ +// Xinha Language Combined Translation File +// +// LANG: "sh", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/sh.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'sh'; +// _editor_lang_merged_file = '/xinha/lang/merged/sh.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Poništi", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "O ovom editoru" + }, + "BackgroundImage": { + "Cancel": "Poništi" + }, + "ColorPicker": { + "OK": "OK" + }, + "ContextMenu": { + "Justify Center": "Ravnanje po simetrali", + "Justify Full": "Puno ravnanje", + "Justify Left": "Ravnanje ulevo", + "Justify Right": "Ravnanje udesno" + }, + "CreateLink": { + "Cancel": "Poništi", + "Insert/Modify Link": "Dodaj/promeni Link", + "New window (_blank)": "Novom prozoru (_blank)", + "None (use implicit)": "koristi podrazumevano", + "OK": "OK", + "Other": "Drugo", + "Same frame (_self)": "Isti frejm (_self)", + "Target:": "Otvori u:", + "Title (tooltip):": "Naziv (tooltip):", + "Top frame (_top)": "Glavni frejm (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "Poništi", + "OK": "OK" + }, + "Equation": { + "Cancel": "Poništi", + "OK": "OK", + "Preview": "Pregled" + }, + "ExtendedFileManager": { + "Absbottom": "Apsolutno dno", + "Absmiddle": "Apsolutna sredina", + "Baseline": "Donja linija", + "Bottom": "Dno", + "Cancel": "Poništi", + "Left": "Levo", + "Middle": "Sredina", + "New window (_blank)": "Novom prozoru (_blank)", + "None (use implicit)": "koristi podrazumevano", + "Not set": "Nije postavljeno", + "OK": "OK", + "Positioning of this image": "Postavljanje ove slike", + "Preview": "Pregled", + "Right": "Desno", + "Same frame (_self)": "Isti frejm (_self)", + "Texttop": "Vrh teksta", + "Title (tooltip)": "Naziv (tooltip):", + "Top": "Vrh", + "Top frame (_top)": "Glavni frejm (_top)", + "Width": "Širina", + "Width:": "Širina" + }, + "Forms": { + "Cancel": "Poništi", + "Image URL:": "URL slike", + "OK": "OK", + "Rows:": "Redovi" + }, + "FullPage": { + "Cancel": "Poništi", + "OK": "OK" + }, + "HorizontalRule": { + "Alignment:": "Ravnanje", + "Cancel": "Poništi", + "Horizontal Rule": "Horizontalna linija", + "Layout": "Prelom", + "Left": "Levo", + "OK": "OK", + "Right": "Desno", + "Width:": "Širina" + }, + "ImageManager": { + "Absbottom": "Apsolutno dno", + "Absmiddle": "Apsolutna sredina", + "Baseline": "Donja linija", + "Bottom": "Dno", + "Cancel": "Poništi", + "Insert Image": "Ubaci sliku", + "Left": "Levo", + "Middle": "Sredina", + "Not set": "Nije postavljeno", + "OK": "OK", + "Positioning of this image": "Postavljanje ove slike", + "Right": "Desno", + "Texttop": "Vrh teksta", + "Top": "Vrh", + "Width:": "Širina" + }, + "InlineStyler": { + "Baseline": "Donja linija", + "Bottom": "Dno", + "Image URL": "URL slike", + "Layout": "Prelom", + "Left": "Levo", + "Middle": "Sredina", + "Right": "Desno", + "Top": "Vrh", + "Width": "Širina" + }, + "InsertAnchor": { + "Cancel": "Poništi", + "OK": "OK" + }, + "InsertImage": { + "Absbottom": "Apsolutno dno", + "Absmiddle": "Apsolutna sredina", + "Alignment:": "Ravnanje", + "Alternate text:": "Alternativni tekst", + "Baseline": "Donja linija", + "Border thickness:": "Debljina okvira", + "Bottom": "Dno", + "Cancel": "Poništi", + "Enter the image URL here": "Unesite URL slike ovde", + "For browsers that don't support images": "Za pretraživače koji ne podržavaju slike", + "Horizontal padding": "Horizontalno odstojanje", + "Horizontal:": "Po horizontali", + "Image Preview:": "Pregled slike", + "Image URL:": "URL slike", + "Insert Image": "Ubaci sliku", + "Layout": "Prelom", + "Leave empty for no border": "Ostavi prazno kad nema okvira", + "Left": "Levo", + "Middle": "Sredina", + "Not set": "Nije postavljeno", + "OK": "OK", + "Positioning of this image": "Postavljanje ove slike", + "Preview": "Pregled", + "Preview the image in a new window": "Pregledaj sliku u novom prozoru", + "Right": "Desno", + "Spacing": "Razmak", + "Texttop": "Vrh teksta", + "Top": "Vrh", + "Vertical padding": "Vertikalno odstojanje", + "Vertical:": "Po vertikali" + }, + "InsertMarquee": { + "Cancel": "Poništi", + "Left": "Levo", + "OK": "OK", + "Right": "Desno", + "Width:": "Širina" + }, + "InsertNote": { + "Cancel": "Poništi" + }, + "InsertPicture": { + "Absbottom": "Apsolutno dno", + "Absmiddle": "Apsolutna sredina", + "Alignment:": "Ravnanje", + "Alternate text:": "Alternativni tekst", + "Baseline": "Donja linija", + "Border thickness:": "Debljina okvira", + "Bottom": "Dno", + "Cancel": "Poništi", + "Enter the image URL here": "Unesite URL slike ovde", + "For browsers that don't support images": "Za pretraživače koji ne podržavaju slike", + "Horizontal padding": "Horizontalno odstojanje", + "Horizontal:": "Po horizontali", + "Image Preview:": "Pregled slike", + "Image URL:": "URL slike", + "Insert Image": "Ubaci sliku", + "Layout": "Prelom", + "Leave empty for no border": "Ostavi prazno kad nema okvira", + "Left": "Levo", + "Middle": "Sredina", + "Not set": "Nije postavljeno", + "OK": "OK", + "Positioning of this image": "Postavljanje ove slike", + "Preview": "Pregled", + "Preview the image in a new window": "Pregledaj sliku u novom prozoru", + "Right": "Desno", + "Spacing": "Razmak", + "Texttop": "Vrh teksta", + "Top": "Vrh", + "Vertical padding": "Vertikalno odstojanje", + "Vertical:": "Po vertikali", + "Width:": "Širina" + }, + "InsertSnippet": { + "Cancel": "Poništi" + }, + "InsertSnippet2": { + "Cancel": "Poništi" + }, + "InsertTable": { + "Absbottom": "Apsolutno dno", + "Absmiddle": "Apsolutna sredina", + "Alignment:": "Ravnanje", + "Baseline": "Donja linija", + "Border thickness:": "Debljina okvira", + "Bottom": "Dno", + "Cancel": "Poništi", + "Cell padding:": "Unutrašnja odstojanja u ćeliji", + "Cell spacing:": "Rastojanje ćelija", + "Cols:": "Kolone", + "Em": "Em", + "Fixed width columns": "Fiksirana širina kolona", + "Insert Table": "Ubaci tabelu", + "Layout": "Prelom", + "Leave empty for no border": "Ostavi prazno kad nema okvira", + "Left": "Levo", + "Middle": "Sredina", + "Not set": "Nije postavljeno", + "Number of columns": "Broj kolona", + "Number of rows": "Broj redova", + "OK": "OK", + "Percent": "Procenat", + "Pixels": "Pikseli", + "Positioning of this table": "Postavljanje ove tabele", + "Right": "Desno", + "Rows:": "Redovi", + "Space between adjacent cells": "Rastojanje naspramnih ćelija", + "Space between content and border in cell": "Rastojanje između sadržaja i okvira ćelije", + "Spacing": "Razmak", + "Texttop": "Vrh teksta", + "Top": "Vrh", + "Width of the table": "Širina tabele", + "Width unit": "Jedinica širine", + "Width:": "Širina" + }, + "Linker": { + "Cancel": "Poništi", + "Insert/Modify Link": "Dodaj/promeni Link", + "OK": "OK", + "Target:": "Otvori u:", + "URL:": "URL:" + }, + "NoteServer": { + "Cancel": "Poništi", + "Image Preview": "Pregled slike", + "OK": "OK", + "Preview": "Pregled", + "Preview the image in a new window": "Pregledaj sliku u novom prozoru" + }, + "PSLocal": { + "Cancel": "Poništi" + }, + "PasteText": { + "Cancel": "Poništi", + "OK": "OK" + }, + "PersistentStorage": { + "Cancel": "Poništi", + "Insert Image": "Ubaci sliku" + }, + "QuickTag": { + "Cancel": "Poništi" + }, + "SetId": { + "Cancel": "Poništi", + "OK": "OK" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Poništi", + "OK": "OK" + }, + "SuperClean": { + "Cancel": "Poništi", + "OK": "OK" + }, + "TableOperations": { + "Cancel": "Poništi", + "OK": "OK", + "Rows": "Redovi", + "Spacing": "Razmak" + }, + "Template": { + "Cancel": "Poništi" + }, + "UnFormat": { + "Cancel": "Poništi", + "OK": "OK" + }, + "Xinha": { + "— format —": "— Format —", + "About this editor": "O ovom editoru", + "Address": "Adresa", + "Background Color": "Boja pozadine", + "Bold": "Masno", + "Bulleted List": "Lista sa simbolima", + "Clear Inline Font Specifications": "Obriši dodeljene osobine fonta", + "Clear MSOffice tags": "Obriši MSOffice tagove", + "Copy selection": "Kopiraj izabrano", + "Current style": "Važeći stil", + "Cut selection": "Iseci izabrano", + "Decrease Indent": "smanji uvlačenje", + "Direction left to right": "Pravac s leva na desno", + "Direction right to left": "Pravac s desna na levo", + "Font Color": "Boja slova", + "Formatted": "Formatiran", + "Heading 1": "Zaglavlje 1", + "Heading 2": "Zaglavlje 2", + "Heading 3": "Zaglavlje 3", + "Heading 4": "Zaglavlje 4", + "Heading 5": "Zaglavlje 5", + "Heading 6": "Zaglavlje 6", + "Help using editor": "Pomoć pri korišćenju editora", + "Horizontal Rule": "Horizontalna linija", + "Increase Indent": "Povećaj uvlačenje", + "Insert Table": "Ubaci tabelu", + "Insert Web Link": "Dodaj web link", + "Insert/Modify Image": "Dodaj/promeni sliku", + "Italic": "Kurziv", + "Justify Center": "Ravnanje po simetrali", + "Justify Full": "Puno ravnanje", + "Justify Left": "Ravnanje ulevo", + "Justify Right": "Ravnanje udesno", + "Normal": "Običan", + "Ordered List": "Lista sa rednim brojevima", + "Paste from clipboard": "Zalepi iz klipborda", + "Path": "Putanja", + "Print document": "Štampaj dokument", + "Redoes your last action": "Vraća poslednju radnju", + "Remove formatting": "Ukoni formatiranje", + "Select Color": "Izaberite boju", + "Select all": "Izaberi sve", + "Split Block": "Podeli blok", + "Strikethrough": "Precrtano", + "Subscript": "Indeks-tekst", + "Superscript": "Eksponent-tekst", + "Toggle Borders": "Izmeni okvire", + "Toggle HTML Source": "Prebaci na HTML kod", + "Underline": "Podvučeno", + "Undoes your last action": "Poništava poslednju radnju", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Nalazite se u TEXT režimu. Koristite [<>] dugme za povratak na WYSIWYG." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "percent": "", + "pixels": "", + "Style": "" + }, + "InlineStyler": { + "Background": "", + "Border": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "None": "", + "Padding": "", + "Text align": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "percent": "<>", + "pixels": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "You must enter the URL": "" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Border": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table Properties": "", + "Table properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Clean content pasted from Word": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Generate Xinha framework": "", + "Georgia": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Register plugin $plugin": "", + "Save as": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Border": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Margin": "<>", + "Padding": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "PNG": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Height:": "<>", + "Size": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "Guido code": "", + "GUIDO Code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Options": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/si.js new file mode 100644 index 0000000000..76feb0a360 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/si.js @@ -0,0 +1,1573 @@ +// Xinha Language Combined Translation File +// +// LANG: "si", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/si.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'si'; +// _editor_lang_merged_file = '/xinha/lang/merged/si.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "AboutBox": { + "About this editor": "Vizitka za urejevalnik" + }, + "BackgroundImage": { + "Cancel": "Prekliči" + }, + "ColorPicker": { + "OK": "V redu" + }, + "ContextMenu": { + "Justify Center": "Na sredino", + "Justify Full": "Porazdeli vsebino", + "Justify Left": "Poravnaj levo", + "Justify Right": "Poravnaj desno" + }, + "CreateLink": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "EditTag": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "Equation": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "ExtendedFileManager": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "Forms": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "FullPage": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "HorizontalRule": { + "Cancel": "Prekliči", + "Horizontal Rule": "Vodoravna črta", + "OK": "V redu" + }, + "ImageManager": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "InsertAnchor": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "InsertImage": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "InsertMarquee": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "InsertNote": { + "Cancel": "Prekliči" + }, + "InsertPicture": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "InsertSnippet": { + "Cancel": "Prekliči" + }, + "InsertSnippet2": { + "Cancel": "Prekliči" + }, + "InsertTable": { + "Cancel": "Prekliči", + "Insert Table": "Vstavi tabelo", + "OK": "V redu" + }, + "Linker": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "NoteServer": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "PSLocal": { + "Cancel": "Prekliči" + }, + "PasteText": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "PersistentStorage": { + "Cancel": "Prekliči" + }, + "QuickTag": { + "Cancel": "Prekliči" + }, + "SetId": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "SmartReplace": { + "OK": "V redu" + }, + "SpellChecker": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "SuperClean": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "TableOperations": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "Template": { + "Cancel": "Prekliči" + }, + "UnFormat": { + "Cancel": "Prekliči", + "OK": "V redu" + }, + "Xinha": { + "About this editor": "Vizitka za urejevalnik", + "Background Color": "Barva ozadja", + "Bold": "Krepko", + "Bulleted List": "Označevanje", + "Copy selection": "Kopiraj", + "Current style": "Trenutni slog", + "Cut selection": "Izreži", + "Decrease Indent": "Zmanjšaj zamik", + "Font Color": "Barva pisave", + "Help using editor": "Pomoč za urejevalnik", + "Horizontal Rule": "Vodoravna črta", + "Increase Indent": "Povečaj zamik", + "Insert Table": "Vstavi tabelo", + "Insert Web Link": "Vstavi hiperpovezavo", + "Insert/Modify Image": "Vstavi sliko", + "Italic": "Ležeče", + "Justify Center": "Na sredino", + "Justify Full": "Porazdeli vsebino", + "Justify Left": "Poravnaj levo", + "Justify Right": "Poravnaj desno", + "Ordered List": "Oštevilčevanje", + "Paste from clipboard": "Prilepi", + "Path": "Pot", + "Redoes your last action": "Uveljavi zadnjo akcijo", + "Strikethrough": "Prečrtano", + "Subscript": "Podpisano", + "Superscript": "Nadpisano", + "Toggle HTML Source": "Preklopi na HTML kodo", + "Underline": "Podčrtano", + "Undoes your last action": "Razveljavi zadnjo akcijo", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Si v tekstovnem načinu. Uporabi [<>] gumb za prklop nazaj na WYSIWYG." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top": "<>", + "Top frame (_top)": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + "Open file in new window": "", + " Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/sr.js new file mode 100644 index 0000000000..d15bee8ab4 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/sr.js @@ -0,0 +1,1577 @@ +// Xinha Language Combined Translation File +// +// LANG: "sr", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/sr.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'sr'; +// _editor_lang_merged_file = '/xinha/lang/merged/sr.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Поништи", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "О овом едитору" + }, + "BackgroundImage": { + "Cancel": "Поништи" + }, + "ColorPicker": { + "OK": "OK" + }, + "ContextMenu": { + "Justify Center": "Равнање по симетрали", + "Justify Full": "Пуно равнање", + "Justify Left": "Равнање улево", + "Justify Right": "Равнање удесно" + }, + "CreateLink": { + "Cancel": "Поништи", + "Insert/Modify Link": "додај/промени линк", + "New window (_blank)": "Новом прозору (_blank)", + "None (use implicit)": "користи подразумевано", + "OK": "OK", + "Other": "Друго", + "Same frame (_self)": "Исти фрејм (_self)", + "Target:": "Отвори у:", + "Title (tooltip):": "Назив (tooltip):", + "Top frame (_top)": "Главни фрејм (_top)", + "URL:": "УРЛ:" + }, + "EditTag": { + "Cancel": "Поништи", + "OK": "OK" + }, + "Equation": { + "Cancel": "Поништи", + "OK": "OK", + "Preview": "Преглед" + }, + "ExtendedFileManager": { + "Absbottom": "Апсолутно дно", + "Absmiddle": "Апсолутна средина", + "Baseline": "Доња линија", + "Bottom": "Дно", + "Cancel": "Поништи", + "Left": "Лево", + "Middle": "Средина", + "New window (_blank)": "Новом прозору (_blank)", + "None (use implicit)": "користи подразумевано", + "Not set": "Није постављено", + "OK": "OK", + "Positioning of this image": "Постављање ове слике", + "Preview": "Преглед", + "Right": "Десно", + "Same frame (_self)": "Исти фрејм (_self)", + "Texttop": "Врх текста", + "Title (tooltip)": "Назив (tooltip):", + "Top": "Врх", + "Top frame (_top)": "Главни фрејм (_top)", + "Width": "Ширина", + "Width:": "Ширина" + }, + "Forms": { + "Cancel": "Поништи", + "Image URL:": "УРЛ слике", + "OK": "OK", + "Rows:": "Редови" + }, + "FullPage": { + "Cancel": "Поништи", + "OK": "OK" + }, + "HorizontalRule": { + "Alignment:": "Равнање", + "Cancel": "Поништи", + "Horizontal Rule": "Хоризонтална линија", + "Layout": "Прелом", + "Left": "Лево", + "OK": "OK", + "Right": "Десно", + "Width:": "Ширина" + }, + "ImageManager": { + "Absbottom": "Апсолутно дно", + "Absmiddle": "Апсолутна средина", + "Baseline": "Доња линија", + "Bottom": "Дно", + "Cancel": "Поништи", + "Insert Image": "Убаци слику", + "Left": "Лево", + "Middle": "Средина", + "Not set": "Није постављено", + "OK": "OK", + "Positioning of this image": "Постављање ове слике", + "Right": "Десно", + "Texttop": "Врх текста", + "Top": "Врх", + "Width:": "Ширина" + }, + "InlineStyler": { + "Baseline": "Доња линија", + "Bottom": "Дно", + "Image URL": "УРЛ слике", + "Layout": "Прелом", + "Left": "Лево", + "Middle": "Средина", + "Right": "Десно", + "Top": "Врх", + "Width": "Ширина" + }, + "InsertAnchor": { + "Cancel": "Поништи", + "OK": "OK" + }, + "InsertImage": { + "Absbottom": "Апсолутно дно", + "Absmiddle": "Апсолутна средина", + "Alignment:": "Равнање", + "Alternate text:": "алтернативни текст", + "Baseline": "Доња линија", + "Border thickness:": "Дебљина оквира", + "Bottom": "Дно", + "Cancel": "Поништи", + "Enter the image URL here": "Унесите УРЛ слике овде", + "For browsers that don't support images": "За претраживаче који не подржавају слике", + "Horizontal padding": "Хортизонтално одстојање", + "Horizontal:": "По хоризонтали", + "Image Preview:": "Преглед слике", + "Image URL:": "УРЛ слике", + "Insert Image": "Убаци слику", + "Layout": "Прелом", + "Leave empty for no border": "Остави празно кад нема оквира", + "Left": "Лево", + "Middle": "Средина", + "Not set": "Није постављено", + "OK": "OK", + "Positioning of this image": "Постављање ове слике", + "Preview": "Преглед", + "Preview the image in a new window": "Прегледај слику у новом прозору", + "Right": "Десно", + "Spacing": "Размак", + "Texttop": "Врх текста", + "Top": "Врх", + "Vertical padding": "Вертикално одстојање", + "Vertical:": "По вертикали" + }, + "InsertMarquee": { + "Cancel": "Поништи", + "Left": "Лево", + "OK": "OK", + "Right": "Десно", + "Width:": "Ширина" + }, + "InsertNote": { + "Cancel": "Поништи" + }, + "InsertPicture": { + "Absbottom": "Апсолутно дно", + "Absmiddle": "Апсолутна средина", + "Alignment:": "Равнање", + "Alternate text:": "алтернативни текст", + "Baseline": "Доња линија", + "Border thickness:": "Дебљина оквира", + "Bottom": "Дно", + "Cancel": "Поништи", + "Enter the image URL here": "Унесите УРЛ слике овде", + "For browsers that don't support images": "За претраживаче који не подржавају слике", + "Horizontal padding": "Хортизонтално одстојање", + "Horizontal:": "По хоризонтали", + "Image Preview:": "Преглед слике", + "Image URL:": "УРЛ слике", + "Insert Image": "Убаци слику", + "Layout": "Прелом", + "Leave empty for no border": "Остави празно кад нема оквира", + "Left": "Лево", + "Middle": "Средина", + "Not set": "Није постављено", + "OK": "OK", + "Positioning of this image": "Постављање ове слике", + "Preview": "Преглед", + "Preview the image in a new window": "Прегледај слику у новом прозору", + "Right": "Десно", + "Spacing": "Размак", + "Texttop": "Врх текста", + "Top": "Врх", + "Vertical padding": "Вертикално одстојање", + "Vertical:": "По вертикали", + "Width:": "Ширина" + }, + "InsertSnippet": { + "Cancel": "Поништи" + }, + "InsertSnippet2": { + "Cancel": "Поништи" + }, + "InsertTable": { + "Absbottom": "Апсолутно дно", + "Absmiddle": "Апсолутна средина", + "Alignment:": "Равнање", + "Baseline": "Доња линија", + "Border thickness:": "Дебљина оквира", + "Bottom": "Дно", + "Cancel": "Поништи", + "Cell padding:": "Унутрашња одстојања од ивица ћелије", + "Cell spacing:": "Размак између ћелија", + "Cols:": "Колоне", + "Em": "Ем", + "Fixed width columns": "Фиксирана ширина колоне", + "Insert Table": "Убаци табелу", + "Layout": "Прелом", + "Leave empty for no border": "Остави празно кад нема оквира", + "Left": "Лево", + "Middle": "Средина", + "Not set": "Није постављено", + "Number of columns": "Број колона", + "Number of rows": "Број редова", + "OK": "OK", + "Percent": "Процената", + "Pixels": "Пиксела", + "Positioning of this table": "Постављање ове табеле", + "Right": "Десно", + "Rows:": "Редови", + "Space between adjacent cells": "Размак између наспрамних ћелија", + "Space between content and border in cell": "Растојање између садржаја у ћелији и њеног оквира", + "Spacing": "Размак", + "Texttop": "Врх текста", + "Top": "Врх", + "Width of the table": "Ширина табеле", + "Width unit": "Јединица ширине", + "Width:": "Ширина" + }, + "Linker": { + "Cancel": "Поништи", + "Insert/Modify Link": "додај/промени линк", + "OK": "OK", + "Target:": "Отвори у:", + "URL:": "УРЛ:" + }, + "NoteServer": { + "Cancel": "Поништи", + "Image Preview": "Преглед слике", + "OK": "OK", + "Preview": "Преглед", + "Preview the image in a new window": "Прегледај слику у новом прозору" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Дугме 'залепи' не ради у претраживачима породице Mozilla (из разлога сигурности). Притисните CTRL-V на тастатури да директно залепите." + }, + "PSLocal": { + "Cancel": "Поништи" + }, + "PasteText": { + "Cancel": "Поништи", + "OK": "OK" + }, + "PersistentStorage": { + "Cancel": "Поништи", + "Insert Image": "Убаци слику" + }, + "QuickTag": { + "Cancel": "Поништи" + }, + "SetId": { + "Cancel": "Поништи", + "OK": "OK" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Поништи", + "OK": "OK" + }, + "SuperClean": { + "Cancel": "Поништи", + "OK": "OK" + }, + "TableOperations": { + "Cancel": "Поништи", + "OK": "OK", + "Rows": "Редови", + "Spacing": "Размак" + }, + "Template": { + "Cancel": "Поништи" + }, + "UnFormat": { + "Cancel": "Поништи", + "OK": "OK" + }, + "Xinha": { + "— format —": "— Format —", + "About this editor": "О овом едитору", + "Address": "адреса", + "Background Color": "Боја позадине", + "Bold": "Масно", + "Bulleted List": "Листа са симболима", + "Clear Inline Font Specifications": "Обриши примењене особине фонта", + "Clear MSOffice tags": "Обриши MSOffice тагове", + "Copy selection": "Копирај изабрано", + "Current style": "Важећи стил", + "Cut selection": "Исеци изабрано", + "Decrease Indent": "Смањи увлачење", + "Direction left to right": "Правац с лева на десно", + "Direction right to left": "Правац с десна на лево", + "Font Color": "Боја слова", + "Formatted": "форматиран", + "Heading 1": "Заглавље 1", + "Heading 2": "Заглавље 2", + "Heading 3": "Заглавље 3", + "Heading 4": "Заглавље 4", + "Heading 5": "Заглавље 5", + "Heading 6": "Заглавље 6", + "Help using editor": "Помоћ при коришћењу едитора", + "Horizontal Rule": "Хоризонтална линија", + "Increase Indent": "Повећај увлачење", + "Insert Table": "Убаци табелу", + "Insert Web Link": "додај веб линк", + "Insert/Modify Image": "додај/промени слику", + "Italic": "Курзив", + "Justify Center": "Равнање по симетрали", + "Justify Full": "Пуно равнање", + "Justify Left": "Равнање улево", + "Justify Right": "Равнање удесно", + "Normal": "обичан", + "Ordered List": "Листа са редним бројевима", + "Paste from clipboard": "Залепи из клипборда", + "Path": "Путања", + "Print document": "Штампај документ", + "Redoes your last action": "Враћа последњу радњу", + "Remove formatting": "Уклони форматирање", + "Select Color": "Изабери боју", + "Select all": "Изабери све", + "Split Block": "Подели блок", + "Strikethrough": "Прецртано", + "Subscript": "Индекс-текст", + "Superscript": "Експонент-текст", + "Toggle Borders": "Пребаци оквирне линије", + "Toggle HTML Source": "Пребаци на приказ ХТМЛ кода", + "Underline": "Подвучено", + "Undoes your last action": "Поништава последњу радњу", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Налазите се у ТЕКСТ режиму. Користите [<>] дугме за повратак на ШВТИД (WYSIWYG)." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "percent": "", + "pixels": "", + "Style": "" + }, + "InlineStyler": { + "Background": "", + "Border": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "None": "", + "Padding": "", + "Text align": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "percent": "<>", + "pixels": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "You must enter the URL": "" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Border": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table Properties": "", + "Table properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Clean content pasted from Word": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Generate Xinha framework": "", + "Georgia": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Register plugin $plugin": "", + "Save as": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Border": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Margin": "<>", + "Padding": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "PNG": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Height:": "<>", + "Size": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "Guido code": "", + "GUIDO Code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Options": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/sv.js new file mode 100644 index 0000000000..05ffea2d31 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/sv.js @@ -0,0 +1,1577 @@ +// Xinha Language Combined Translation File +// +// LANG: "sv", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/sv.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'sv'; +// _editor_lang_merged_file = '/xinha/lang/merged/sv.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Avbryt", + "OK": "OK" + }, + "AboutBox": { + "About this editor": "Om denna editor", + "Close": "Stäng" + }, + "BackgroundImage": { + "Cancel": "Avbryt" + }, + "CharacterMap": { + "Insert special character": "Infoga tecken" + }, + "ColorPicker": { + "Close": "Stäng", + "Color: ": "Färg", + "OK": "OK" + }, + "ContextMenu": { + "C_ell Properties...": "C_ellegenskaper...", + "Chec_k Link...": "Kontrollera länk...", + "Copy": "Kopiera", + "Create a link": "SKapa ny länk", + "Current URL is": "Aktuellt URL är", + "Cut": "Klipp ut", + "De_lete Column": "_Radera kolumn", + "Delete the current column": "Radera aktuell kolumn", + "Delete the current row": "T bort aktuell rad", + "How did you get here? (Please report!)": "Hur hamnade du här? (Beskriv förloppet)", + "I_nsert Row Before": "I_nfoga rad före", + "In_sert Row After": "Infoga rad efter aktuell rad", + "Insert C_olumn After": "Infoga k_olumn efter", + "Insert _Column Before": "Infoga kolumn efter (_c)", + "Insert a new column after the current one": "Infoga kolumn efter aktuell", + "Insert a new column before the current one": "Infoga kolumn före aktuell", + "Insert a new row after the current one": "Infoga ny rad efter aktuell", + "Insert a new row before the current one": "Infoga ny rad före aktuell", + "Insert a paragraph after the current node": "Infoga paragraf efter aktuell nod", + "Insert a paragraph before the current node": "Infoga paragraf före aktuell nod", + "Insert paragraph after": "Infoga paragraf efter", + "Insert paragraph before": "Infoga paragraf före", + "Justify Center": "_Centerjustera", + "Justify Full": "Block_justera", + "Justify Left": "_Vänsterjustera", + "Justify Right": "_Högerjustera", + "Link points to:": "Länken pekar mot:", + "Make lin_k...": "Skapa län_k...", + "Opens this link in a new window": "Öppna länk i nytt fönster", + "Paste": "Klistra in", + "Please confirm that you want to remove this element:": "Bekräfta borttagning av element:", + "Please confirm that you want to unlink this element.": "Bekräfta borttagning av länk", + "Remove the $elem Element...": "Radera elementet $elem...", + "Remove this node from the document": "Radera nod från dokumentet", + "Ro_w Properties...": "Radegenskaper... (_w)", + "Show the Table Cell Properties dialog": "Visa egenskaper for cellen", + "Show the Table Properties dialog": "Visa tabellegenskaper", + "Show the Table Row Properties dialog": "Visa egenskaper för rad", + "Show the image properties dialog": "Visa bildegenskaper", + "Unlink the current element": "Ta bort länk kopplad till elementet", + "_Delete Row": "Radera rad (_d)", + "_Image Properties...": "_Bildegenskaper...", + "_Modify Link...": "_Redigera Länk...", + "_Remove Link...": "_Ta bort länk...", + "_Table Properties...": "_Tabellegenskaper..." + }, + "CreateLink": { + "Cancel": "Avbryt", + "Insert/Modify Link": "Redigera länk", + "New window (_blank)": "Nytt fönster (_blank)", + "None (use implicit)": "Ingen (använd standardinställing)", + "OK": "OK", + "Other": "Annan", + "Same frame (_self)": "Samma ram (_self)", + "Target:": "Mål:", + "Title (tooltip):": "Titel (tooltip):", + "Top frame (_top)": "Toppram (_top)", + "URL:": "Sökväg:", + "You need to select some text before creating a link": "Du måsta markera ett objekt att applicera länken på!" + }, + "EditTag": { + "Cancel": "Avbryt", + "OK": "OK" + }, + "Equation": { + "Cancel": "Avbryt", + "OK": "OK", + "Preview": "Förhandsgranska" + }, + "ExtendedFileManager": { + "Align": "Justera", + "Baseline": "Baslinje", + "Border": "Kantlinje", + "Bottom": "Botten", + "Cancel": "Avbryt", + "Clear": "Töm", + "Color": "Färg", + "Copy": "Kopiera", + "Crop": "Beskjär", + "Cut": "Klipp ut", + "Height": "Höjd", + "Height:": "Höjd:", + "Left": "Venster", + "Margin": "Marginal", + "Middle": "Mitten", + "New window (_blank)": "Nytt fönster (_blank)", + "None (use implicit)": "Ingen (använd standardinställing)", + "OK": "OK", + "Padding": "Luft", + "Positioning of this image": "Bildens positionering", + "Preview": "Förhandsgranska", + "Right": "Höger", + "Same frame (_self)": "Samma ram (_self)", + "Title (tooltip)": "Titel (tooltip):", + "Top": "Överkant", + "Top frame (_top)": "Toppram (_top)", + "Width": "Bredd", + "Width:": "Bredd:" + }, + "FindReplace": { + "Case sensitive search": "Skilj mellan stora och små bokstäver", + "Clear": "Töm", + "Done": "Färdig", + "Enter the text you want to find": "Skriv in text du vill söka", + "Find and Replace": "Sök och ersätt", + "Highlight": "Markera", + "Inform a replacement word": "Skriv in ett ersättningsord", + "Next": "Nästa", + "Options": "Välj", + "Replace with:": "Ersätt med:", + "Search for:": "Sök efter:", + "Substitute all occurrences": "Erstatt alla träffar", + "Substitute this occurrence?": "Ersätt denna?", + "Undo": "Tillbaka", + "Whole words only": "Bara hela ord", + "found item": "Träff", + "found items": "förekomster funna i sökningen", + "not found": "inte funnet", + "replaced item": "erstatt träff", + "replaced items": "förekomster erstatta" + }, + "Forms": { + "Cancel": "Avbryt", + "Image URL:": "Bildens URL:", + "OK": "OK", + "Options": "Välj", + "Rows:": "Rader:", + "Size:": "Storlek" + }, + "FullPage": { + "Cancel": "Avbryt", + "Description:": "Beskrivning", + "OK": "OK" + }, + "FullScreen": { + "Maximize/Minimize Editor": "Maximera/Minimera WYSIWYG fönster" + }, + "HorizontalRule": { + "Alignment:": "Placering:", + "Cancel": "Avbryt", + "Center": "Centrera", + "Color:": "Färg", + "Height:": "Höjd:", + "Horizontal Rule": "Vågrät linje", + "Layout": "Layout", + "Left": "Venster", + "OK": "OK", + "Right": "Höger", + "Width:": "Bredd:", + "percent": "procent", + "pixels": "bildpunkter" + }, + "ImageManager": { + "Baseline": "Baslinje", + "Bottom": "Botten", + "Cancel": "Avbryt", + "Clear": "Töm", + "Crop": "Beskjär", + "Height:": "Höjd:", + "Insert Image": "Infoga bild", + "Left": "Venster", + "Middle": "Mitten", + "OK": "OK", + "Positioning of this image": "Bildens positionering", + "Right": "Höger", + "Top": "Överkant", + "Width:": "Bredd:" + }, + "InlineStyler": { + "Background": "Bakgrund", + "Baseline": "Baslinje", + "Border": "Kantlinje", + "Bottom": "Botten", + "Center": "Centrera", + "Char": "Tecken", + "Collapsed borders": "Osynliga kantlinjer", + "FG Color": "Förgrundsfärg", + "Float": "Flytande", + "Height": "Höjd", + "Image URL": "Bildens URL", + "Justify": "Justera", + "Layout": "Layout", + "Left": "Venster", + "Margin": "Marginal", + "Middle": "Mitten", + "None": "Ingen", + "Padding": "Luft", + "Right": "Höger", + "Text align": "Justera text", + "Top": "Överkant", + "Vertical align": "Vertikal justering", + "Width": "Bredd", + "percent": "procent", + "pixels": "bildpunkter" + }, + "InsertAnchor": { + "Cancel": "Avbryt", + "OK": "OK" + }, + "InsertImage": { + "Alignment:": "Placering:", + "Alternate text:": "Alternativ text:", + "Baseline": "Baslinje", + "Border thickness:": "Ramtjocklek:", + "Bottom": "Botten", + "Cancel": "Avbryt", + "Enter the image URL here": "Bildens sökväg (URL)", + "For browsers that don't support images": "Beskrivande text för webläsare som inte stödjer inbäddade bilder", + "Horizontal padding": "Horizontellt indrag på bild", + "Horizontal:": "Horisontell:", + "Image Preview:": "Förhandsgranskning:", + "Image URL:": "Bildens URL:", + "Insert Image": "Infoga bild", + "Layout": "Layout", + "Leave empty for no border": "Lämna tomt för att undvika ram", + "Left": "Venster", + "Middle": "Mitten", + "OK": "OK", + "Positioning of this image": "Bildens positionering", + "Preview": "Förhandsgranska", + "Preview the image in a new window": "Öppna bild i nytt fönster", + "Right": "Höger", + "Spacing": "Mellanrum", + "Top": "Överkant", + "Vertical padding": "Vertikalt indrag på bild", + "Vertical:": "Vertikal:" + }, + "InsertMarquee": { + "Cancel": "Avbryt", + "Height:": "Höjd:", + "Left": "Venster", + "OK": "OK", + "Right": "Höger", + "Width:": "Bredd:" + }, + "InsertNote": { + "Cancel": "Avbryt" + }, + "InsertPicture": { + "Alignment:": "Placering:", + "Alternate text:": "Alternativ text:", + "Baseline": "Baslinje", + "Border thickness:": "Ramtjocklek:", + "Bottom": "Botten", + "Cancel": "Avbryt", + "Enter the image URL here": "Bildens sökväg (URL)", + "For browsers that don't support images": "Beskrivande text för webläsare som inte stödjer inbäddade bilder", + "Height:": "Höjd:", + "Horizontal padding": "Horizontellt indrag på bild", + "Horizontal:": "Horisontell:", + "Image Preview:": "Förhandsgranskning:", + "Image URL:": "Bildens URL:", + "Insert Image": "Infoga bild", + "Layout": "Layout", + "Leave empty for no border": "Lämna tomt för att undvika ram", + "Leave empty for not defined": "Lämna tomt för att låta webläsaren bestämma", + "Left": "Venster", + "Middle": "Mitten", + "OK": "OK", + "Positioning of this image": "Bildens positionering", + "Preview": "Förhandsgranska", + "Preview the image in a new window": "Öppna bild i nytt fönster", + "Right": "Höger", + "Size": "Storlek", + "Spacing": "Marginal", + "Top": "Överkant", + "Upload file": "Ladda upp bild", + "Vertical padding": "Vertikalt indrag på bild", + "Vertical:": "Vertikal:", + "Width:": "Bredd:" + }, + "InsertSnippet": { + "Cancel": "Avbryt" + }, + "InsertSnippet2": { + "Cancel": "Avbryt" + }, + "InsertTable": { + "Alignment:": "Placering:", + "Baseline": "Baslinje", + "Border": "Kantlinje", + "Border thickness:": "Ramtjocklek:", + "Bottom": "Botten", + "Cancel": "Avbryt", + "Caption": "Överskrift", + "Cell padding:": "Cellindrag:", + "Cell spacing:": "Cellmarginaler:", + "Cols:": "Kolumner:", + "Fixed width columns": "Fixerad bredd", + "Insert Table": "Infoga tabell", + "Layout": "Layout", + "Leave empty for no border": "Lämna tomt för att undvika ram", + "Left": "Venster", + "Middle": "Mitten", + "Number of columns": "Antal kolumner", + "Number of rows": "Antal rader", + "OK": "OK", + "Percent": "Procent", + "Pixels": "Pixlar", + "Positioning of this table": "Tabellposition", + "Right": "Höger", + "Rows:": "Rader:", + "Space between adjacent cells": "Utrymme mellan celler", + "Space between content and border in cell": "Utrymme mellan ram och cellinnehåll", + "Spacing": "Mellanrum", + "Top": "Överkant", + "Width of the table": "Tabellbredd", + "Width unit": "Breddenheter", + "Width:": "Bredd:", + "You must enter a number of columns": "Ange antal kolumner", + "You must enter a number of rows": "Ange ental rader" + }, + "Linker": { + "Cancel": "Avbryt", + "Insert/Modify Link": "Redigera länk", + "OK": "OK", + "Size:": "Storlek", + "Target:": "Mål:", + "URL:": "Sökväg:" + }, + "ListType": { + "Choose list style type (for ordered lists)": "Välj listtyp (för numrerade listor)", + "Decimal numbers": "Desimaltal", + "Lower greek letters": "Små grekiska bokstäver", + "Lower latin letters": "Små latinska bokstäver", + "Lower roman numbers": "Små romerska siffror", + "Upper latin letters": "Stora latinska bokstäver", + "Upper roman numbers": "Stora romerska siffror" + }, + "NoteServer": { + "Cancel": "Avbryt", + "Image Preview": "Förhandsgranskning:", + "OK": "OK", + "Options": "Välj", + "Preview": "Förhandsgranska", + "Preview the image in a new window": "Öppna bild i nytt fönster" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Denna knapp fungerar ej i Mozillabaserad webläsare, använd istället snabbtangenterna CTRL-V på tangentbordet för att klistra in." + }, + "PSLocal": { + "Cancel": "Avbryt" + }, + "PasteText": { + "Cancel": "Avbryt", + "OK": "OK" + }, + "PersistentStorage": { + "Cancel": "Avbryt", + "Copy": "Kopiera", + "Insert Image": "Infoga bild" + }, + "QuickTag": { + "Cancel": "Avbryt" + }, + "SetId": { + "Cancel": "Avbryt", + "OK": "OK" + }, + "SmartReplace": { + "OK": "OK" + }, + "SpellChecker": { + "Cancel": "Avbryt", + "OK": "OK", + "Replace with": "Ersätt med:" + }, + "SuperClean": { + "Cancel": "Avbryt", + "OK": "OK" + }, + "TableOperations": { + "All four sides": "Alla fyra sidor", + "Borders": "Kantlinjer", + "Cancel": "Avbryt", + "Caption": "Överskrift", + "Cell Properties": "Cellegenskaper", + "Cell properties": "Egenskaper for cell", + "Delete cell": "Radera cell", + "Delete column": "Radera kolumn", + "Delete row": "Radera rad", + "Description": "Beskrivning", + "Frames": "ramar", + "Insert cell after": "Infoga cell efter", + "Insert cell before": "Infoga cell före", + "Insert column after": "Infoga kolumn efter", + "Insert column before": "Infoga kolumn före", + "Insert row after": "Infoga rad efter", + "Insert row before": "Infoga rad före", + "Merge cells": "Slå samman celler", + "No rules": "Ingen linjal", + "No sides": "Inga sidor", + "OK": "OK", + "Padding": "Luft", + "Please click into some cell": "Klicka i valfri cell", + "Row Properties": "Egenskaper for rad", + "Row properties": "Egenskaper för rad", + "Rows": "Rader:", + "Rules will appear between all rows and columns": "Linjaler kommer att synas mellan alla rader och kolumner", + "Rules will appear between columns only": "Linjaler kommer enbart synas mellan kolumner", + "Rules will appear between rows only": "Linjaler kommer enbart synas mellan rader", + "Spacing": "Mellanrum", + "Spacing and padding": "Mellanrum och luft", + "Split column": "Dela kolumn", + "Split row": "Dela rad", + "Summary": "Sammandrag", + "Table Properties": "Tabellegenskaper", + "Table properties": "Tabellegenskaper", + "The bottom side only": "Nederkanten enbart", + "The left-hand side only": "Vänstersidan enbart", + "The right and left sides only": "Höger- och vänstersidan enbart", + "The right-hand side only": "Högersidan enbart", + "The top and bottom sides only": "Över- och nederkanten enbart", + "The top side only": "Överkanten enbart", + "Xinha cowardly refuses to delete the last cell in row.": "Xinha nekar att radera sista cellen i tabellen.", + "Xinha cowardly refuses to delete the last column in table.": "Xinha nekar att radera sista kolumnen i tabellen.", + "Xinha cowardly refuses to delete the last row in table.": "Xinha nekar att radera sista raden i tabellen.", + "pixels": "bildpunkter" + }, + "Template": { + "Cancel": "Avbryt" + }, + "UnFormat": { + "Cancel": "Avbryt", + "OK": "OK" + }, + "Xinha": { + "About this editor": "Om denna editor", + "Background Color": "Bakgrundsfärg", + "Bold": "Fet", + "Bulleted List": "Punktlista", + "Clean content pasted from Word": "Rensa innehåll inklistrat från MS Word", + "Clear Inline Font Specifications": "Rensa inbäddad typsnittsinformation", + "Clear MSOffice tags": "Städa bort MS Office taggar", + "Close": "Stäng", + "Copy selection": "Kopiera markering", + "Create Toolbar": "Skapar verktygspanel", + "Current style": "Nuvarande stil", + "Cut selection": "Klipp ut markering", + "Decrease Indent": "Minska indrag", + "Direction left to right": "Vänster till höger", + "Direction right to left": "Höger till vänster", + "Font Color": "Textfärg", + "Headings": "Skapa standardrubrik", + "Help using editor": "Hjälp", + "Horizontal Rule": "Vågrät linje", + "Increase Indent": "Öka indrag", + "Insert Table": "Infoga tabell", + "Insert Web Link": "Infoga länk", + "Insert/Modify Image": "Infoga bild", + "Insert/Overwrite": "Infoga/Skriv över", + "Italic": "Kursiv", + "Justify Center": "Centrera", + "Justify Full": "Marginaljustera", + "Justify Left": "Vänsterjustera", + "Justify Right": "Högerjustera", + "Keyboard shortcuts": "Snabbtangenter", + "Ordered List": "Numrerad lista", + "Paste from clipboard": "Klistra in", + "Path": "Objekt", + "Print document": "Skriv ut", + "Redoes your last action": "Upprepa kommando", + "Remove formatting": "Rensa formattering", + "Select all": "Markera allt", + "Set format to paragraph": "Aktivera paragrafläge", + "Split Block": "Dela block", + "Strikethrough": "Genomstruken", + "Subscript": "Nedsänkt", + "Superscript": "Upphöjd", + "The editor provides the following key combinations:": "Editorn nyttjar följande kombinationer:", + "Toggle Borders": "Objektramar", + "Toggle HTML Source": "Visa källkod", + "Underline": "Understruken", + "Undoes your last action": "Ångra kommando", + "Would you like to clear font colours?": "Ta bort all textfärger ?", + "Would you like to clear font sizes?": "Radera alla fontstorlekar ?", + "Would you like to clear font typefaces?": "Radera alla typsnittsinformation ?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Du befinner dig i texläge. Klicka på ikonen [<>] ovan för att växla tillbaka till WYSIWIG läge", + "insert linebreak": "Infoga radbrytning ", + "new paragraph": "Ny paragraf " + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "ColorPicker": { + "Click a color...": "", + "Sample": "", + "Web Safe: ": "" + }, + "ContextMenu": { + "Delete Cell": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Merge Cells": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Not set": "", + "Texttop": "", + "You must enter the URL": "" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Collapse borders:": "", + "Em": "", + "Layou": "", + "Style of the border": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Not set": "<>", + "Texttop": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Impact": "", + "Init editor size": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Normal": "", + "Register plugin $plugin": "", + "Save as": "", + "Select Color": "", + "SHIFT-ENTER": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Insert File Link": "<>", + "Not set": "<>", + "Save": "<>", + "Texttop": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Constrain Proportions": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + " Open file in new window": "", + "Open file in new window": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Not set": "<>", + "Texttop": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "Guido code": "", + "GUIDO Code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/th.js new file mode 100644 index 0000000000..7ba49854ba --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/th.js @@ -0,0 +1,1573 @@ +// Xinha Language Combined Translation File +// +// LANG: "th", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/th.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'th'; +// _editor_lang_merged_file = '/xinha/lang/merged/th.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "AboutBox": { + "About this editor": "เกี่ยวกับโปรแกรมนี้" + }, + "BackgroundImage": { + "Cancel": "ยกเลิก" + }, + "ColorPicker": { + "OK": "ตกลง" + }, + "ContextMenu": { + "Justify Center": "จัดกึ่งกลาง", + "Justify Full": "จัดเต็มขอบ", + "Justify Left": "จัดชิดซ้าย", + "Justify Right": "จัดชิดขวา" + }, + "CreateLink": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "EditTag": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "Equation": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "ExtendedFileManager": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "Forms": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "FullPage": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "HorizontalRule": { + "Cancel": "ยกเลิก", + "Horizontal Rule": "เส้นกึ่งกลาง", + "OK": "ตกลง" + }, + "ImageManager": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "InsertAnchor": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "InsertImage": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "InsertMarquee": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "InsertNote": { + "Cancel": "ยกเลิก" + }, + "InsertPicture": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "InsertSnippet": { + "Cancel": "ยกเลิก" + }, + "InsertSnippet2": { + "Cancel": "ยกเลิก" + }, + "InsertTable": { + "Cancel": "ยกเลิก", + "Insert Table": "เพิ่มตาราง", + "OK": "ตกลง" + }, + "Linker": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "NoteServer": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "PSLocal": { + "Cancel": "ยกเลิก" + }, + "PasteText": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "PersistentStorage": { + "Cancel": "ยกเลิก" + }, + "QuickTag": { + "Cancel": "ยกเลิก" + }, + "SetId": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "SmartReplace": { + "OK": "ตกลง" + }, + "SpellChecker": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "SuperClean": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "TableOperations": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "Template": { + "Cancel": "ยกเลิก" + }, + "UnFormat": { + "Cancel": "ยกเลิก", + "OK": "ตกลง" + }, + "Xinha": { + "About this editor": "เกี่ยวกับโปรแกรมนี้", + "Background Color": "สีพื้นหลัง", + "Bold": "ตัวหนา", + "Bulleted List": "ลำดับ", + "Copy selection": "สำเนาส่วนที่เลือก", + "Current style": "รูปแบบปัจจุบัน", + "Cut selection": "ตัดส่วนที่เลือก", + "Decrease Indent": "ลดย่อหน้า", + "Font Color": "สีขอบแบบอักษร", + "Help using editor": "การใช้งานโปรแกรม", + "Horizontal Rule": "เส้นกึ่งกลาง", + "Increase Indent": "เพิ่มย่อหน้า", + "Insert Table": "เพิ่มตาราง", + "Insert Web Link": "ิเพิ่มลิ้งค์", + "Insert/Modify Image": "เพิ่ม/แก้ไขภาพ", + "Italic": "ตัวเอียง", + "Justify Center": "จัดกึ่งกลาง", + "Justify Full": "จัดเต็มขอบ", + "Justify Left": "จัดชิดซ้าย", + "Justify Right": "จัดชิดขวา", + "Ordered List": "เลขลำดับ", + "Paste from clipboard": "วางจากคลิปบอร์ด", + "Path": "เส้นทาง", + "Redoes your last action": "ทำซ้ำ", + "Strikethrough": "ขีดทับ", + "Subscript": "ตัวห้อย", + "Superscript": "ตัวยก", + "Toggle HTML Source": "สลับการแสดงโค้ด HTML", + "Underline": "ขีดเส้นใต้", + "Undoes your last action": "ย้อนกลับ", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "คุณอยู่ในโหมดธรรมดา กดที่ปุ่ม [<>] เพื่อสลับกลับไปยังโหมดพิมพ์งานแบบเวิร์ด" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top": "<>", + "Top frame (_top)": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + "Open file in new window": "", + " Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/tr.js new file mode 100644 index 0000000000..9f43b0cfd7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/tr.js @@ -0,0 +1,1569 @@ +// Xinha Language Combined Translation File +// +// LANG: "tr", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/tr.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'tr'; +// _editor_lang_merged_file = '/xinha/lang/merged/tr.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Abbreviation": "Kısaltma", + "Cancel": "İptal", + "Delete": "Sil", + "Expansion:": "Açılım:", + "OK": "Tamam" + }, + "AboutBox": { + "About this editor": "Bu düzenleyici hakkında", + "Close": "Kapat" + }, + "BackgroundImage": { + "Cancel": "İptal" + }, + "CharacterMap": { + "Insert special character": "Özel karakter ekle" + }, + "ColorPicker": { + "Click a color...": "Bir renk seçin", + "Close": "Kapat", + "Color: ": "Renk: ", + "OK": "Tamam", + "Sample": "Örnek", + "Web Safe: ": "Web güvenli mod: " + }, + "ContextMenu": { + "Justify Center": "Ortaya hizala", + "Justify Full": "Tam hizala", + "Justify Left": "Sola hizala", + "Justify Right": "Sağa hizala" + }, + "CreateLink": { + "Cancel": "İptal", + "Insert/Modify Link": "Bağlantı ekle/değiştir", + "New window (_blank)": "Yeni pencere (_blank)", + "None (use implicit)": "Hiçbiri (Örtük)", + "OK": "Tamam", + "Other": "Başka", + "Same frame (_self)": "Aynı çerçeve (_self)", + "Target:": "Hedef:", + "Title (tooltip):": "Başlık (Araç ipucu):", + "Top frame (_top)": "En üst çerçeve (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "İptal", + "Edit HTML for selected text": "Seçilen metin için HTML düzenlemesi yap", + "OK": "Tamam", + "Tag Editor": "HTML etiket düzenleyicisi" + }, + "Equation": { + "Cancel": "İptal", + "OK": "Tamam", + "Preview": "Önizleme" + }, + "ExtendedFileManager": { + "Absbottom": "Salt alta", + "Absmiddle": "Salt orta", + "Align": "Hizala", + "Baseline": "Taban hizası", + "Border": "Kenarlık", + "Bottom": "Alta", + "Cancel": "İptal", + "Color": "Renk", + "Height": "Yükseklik", + "Height:": "Yükseklik", + "Left": "Sola", + "Margin": "Kenar boşluğu", + "Middle": "Ortala", + "New window (_blank)": "Yeni pencere (_blank)", + "None (use implicit)": "Hiçbiri (Örtük)", + "Not set": "Ayarlanmamış", + "OK": "Tamam", + "Padding": "İç boşluk", + "Positioning of this image": "Resmi konumlandırma", + "Preview": "Önizleme", + "Right": "Sağa", + "Same frame (_self)": "Aynı çerçeve (_self)", + "Texttop": "Metin-üstte", + "Title (tooltip)": "Başlık (Araç ipucu):", + "Top": "Yukarı", + "Top frame (_top)": "En üst çerçeve (_top)", + "Width": "Genişlik", + "Width:": "Genişlik:" + }, + "Forms": { + "Cancel": "İptal", + "Image URL:": "Resim URL'si:", + "OK": "Tamam", + "Rows:": "Satır:" + }, + "FullPage": { + "Cancel": "İptal", + "Description:": "Tanım", + "OK": "Tamam" + }, + "FullScreen": { + "Maximize/Minimize Editor": "Editörü simge durumuna küçült/geri yükle" + }, + "HorizontalRule": { + "Alignment:": "Hizalama:", + "Cancel": "İptal", + "Center": "Ortala", + "Color:": "Renk", + "Height:": "Yükseklik", + "Horizontal Rule": "Yatay cetvel", + "Layout": "Düzen", + "Left": "Sola", + "OK": "Tamam", + "Right": "Sağa", + "Width:": "Genişlik:", + "percent": "%", + "pixels": "Piksel" + }, + "ImageManager": { + "Absbottom": "Salt alta", + "Absmiddle": "Salt orta", + "Baseline": "Taban hizası", + "Bottom": "Alta", + "Cancel": "İptal", + "Height:": "Yükseklik", + "Insert Image": "Resim ekle", + "Left": "Sola", + "Middle": "Ortala", + "Not set": "Ayarlanmamış", + "OK": "Tamam", + "Positioning of this image": "Resmi konumlandırma", + "Right": "Sağa", + "Texttop": "Metin-üstte", + "Top": "Yukarı", + "Width:": "Genişlik:" + }, + "InlineStyler": { + "Background": "Arka plan", + "Baseline": "Taban hizası", + "Border": "Kenarlık", + "Bottom": "Alta", + "Center": "Ortala", + "Char": "Karakter", + "Collapsed borders": "Daraltılmış kenarlıklar", + "FG Color": "Ön plan rengi", + "Float": "Kaydır", + "Height": "Yükseklik", + "Image URL": "Resim URL'si", + "Justify": "Yasla", + "Layout": "Düzen", + "Left": "Sola", + "Margin": "Kenar boşluğu", + "Middle": "Ortala", + "None": "Hiçbiri", + "Padding": "İç boşluk", + "Right": "Sağa", + "Text align": "Metin hizası", + "Top": "Yukarı", + "Vertical align": "Dikey hiza", + "Width": "Genişlik", + "percent": "%", + "pixels": "Piksel" + }, + "InsertAnchor": { + "Cancel": "İptal", + "Delete": "Sil", + "OK": "Tamam" + }, + "InsertImage": { + "Absbottom": "Salt alta", + "Absmiddle": "Salt orta", + "Alignment:": "Hizalama:", + "Alternate text:": "Alternatif metin:", + "Baseline": "Taban hizası", + "Border thickness:": "Kenarlık kalınlığı:", + "Bottom": "Alta", + "Cancel": "İptal", + "Enter the image URL here": "Lütfen buraya resim URL'sini girin", + "For browsers that don't support images": "Resim desteklemeyen tarayıcılar için", + "Horizontal padding": "Yatay doldurma miktarı", + "Horizontal:": "Yatay:", + "Image Preview:": "Resim önizleme:", + "Image URL:": "Resim URL'si:", + "Insert Image": "Resim ekle", + "Layout": "Düzen", + "Leave empty for no border": "Kenarlık istemiyorsanız boş bırakın", + "Left": "Sola", + "Middle": "Ortala", + "Not set": "Ayarlanmamış", + "OK": "Tamam", + "Positioning of this image": "Resmi konumlandırma", + "Preview": "Önizleme", + "Preview the image in a new window": "Resmi yeni pencerede önizleme", + "Right": "Sağa", + "Spacing": "Aralık", + "Texttop": "Metin-üstte", + "Top": "Yukarı", + "Vertical padding": "Dikey doldurma miktarı", + "Vertical:": "Dikey:", + "You must enter the URL": "Lütfen URL girin" + }, + "InsertMarquee": { + "Cancel": "İptal", + "Height:": "Yükseklik", + "Left": "Sola", + "OK": "Tamam", + "Right": "Sağa", + "Width:": "Genişlik:" + }, + "InsertNote": { + "Cancel": "İptal" + }, + "InsertPicture": { + "Absbottom": "Salt alta", + "Absmiddle": "Salt orta", + "Alignment:": "Hizalama:", + "Alternate text:": "Alternatif metin:", + "Baseline": "Taban hizası", + "Border thickness:": "Kenarlık kalınlığı:", + "Bottom": "Alta", + "Cancel": "İptal", + "Enter the image URL here": "Lütfen buraya resim URL'sini girin", + "For browsers that don't support images": "Resim desteklemeyen tarayıcılar için", + "Height:": "Yükseklik", + "Horizontal padding": "Yatay doldurma miktarı", + "Horizontal:": "Yatay:", + "Image Preview:": "Resim önizleme:", + "Image URL:": "Resim URL'si:", + "Insert Image": "Resim ekle", + "Layout": "Düzen", + "Leave empty for no border": "Kenarlık istemiyorsanız boş bırakın", + "Left": "Sola", + "Middle": "Ortala", + "Not set": "Ayarlanmamış", + "OK": "Tamam", + "Positioning of this image": "Resmi konumlandırma", + "Preview": "Önizleme", + "Preview the image in a new window": "Resmi yeni pencerede önizleme", + "Right": "Sağa", + "Spacing": "Aralık", + "Texttop": "Metin-üstte", + "Top": "Yukarı", + "Vertical padding": "Dikey doldurma miktarı", + "Vertical:": "Dikey:", + "Width:": "Genişlik:" + }, + "InsertSmiley": { + "Insert Smiley": "Gülen yüz ekle" + }, + "InsertSnippet": { + "Cancel": "İptal" + }, + "InsertSnippet2": { + "Cancel": "İptal" + }, + "InsertTable": { + "Absbottom": "Salt alta", + "Absmiddle": "Salt orta", + "Alignment:": "Hizalama:", + "Baseline": "Taban hizası", + "Border": "Kenarlık", + "Border thickness:": "Kenarlık kalınlığı:", + "Bottom": "Alta", + "Cancel": "İptal", + "Caption": "Başlık", + "Cell padding:": "Hücre doldurma:", + "Cell spacing:": "Hücre aralığı:", + "Cols:": "Sütun:", + "Em": "Em", + "Fixed width columns": "Sabit başlı sütun", + "Insert Table": "Tablo ekle", + "Layout": "Düzen", + "Leave empty for no border": "Kenarlık istemiyorsanız boş bırakın", + "Left": "Sola", + "Middle": "Ortala", + "Not set": "Ayarlanmamış", + "Number of columns": "Sütun sayısı", + "Number of rows": "Satır sayısı", + "OK": "Tamam", + "Percent": "Yüzde", + "Pixels": "Piksel", + "Positioning of this table": "Tablo konumlandırma", + "Right": "Sağa", + "Rows:": "Satır:", + "Space between adjacent cells": "Bitişik hücre aralığı", + "Space between content and border in cell": "İç kenarlığı ve hücre içeriği arasındaki boşluk", + "Spacing": "Aralık", + "Texttop": "Metin-üstte", + "Top": "Yukarı", + "Width of the table": "Tablo genişliği", + "Width unit": "Genişlik birimi", + "Width:": "Genişlik:", + "You must enter a number of columns": "Lütfen sütun sayısını girin", + "You must enter a number of rows": "Lütfen satır sayısını girin" + }, + "Linker": { + "Cancel": "İptal", + "Insert/Modify Link": "Bağlantı ekle/değiştir", + "OK": "Tamam", + "Target:": "Hedef:", + "URL:": "URL:" + }, + "NoteServer": { + "Cancel": "İptal", + "Image Preview": "Resim önizleme:", + "OK": "Tamam", + "Preview": "Önizleme", + "Preview the image in a new window": "Resmi yeni pencerede önizleme" + }, + "Opera": { + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Güvenlik sebeplerinden dolayı bazı tarayıcılar kes/kopyala/yapıştır komutlarına erişemez. Kesme/kopyalama/yapıştırma komutunu kullanmak için lütfen klavyenizin kısayollarını kullanın (CTRL + C/V/X)." + }, + "PSLocal": { + "Cancel": "İptal" + }, + "PasteText": { + "Cancel": "İptal", + "OK": "Tamam" + }, + "PersistentStorage": { + "Cancel": "İptal", + "Delete": "Sil", + "Insert Image": "Resim ekle" + }, + "QuickTag": { + "Cancel": "İptal" + }, + "SetId": { + "Cancel": "İptal", + "Delete": "Sil", + "OK": "Tamam" + }, + "SmartReplace": { + "OK": "Tamam" + }, + "SpellChecker": { + "Cancel": "İptal", + "OK": "Tamam" + }, + "SuperClean": { + "Cancel": "İptal", + "OK": "Tamam" + }, + "TableOperations": { + "All four sides": "Dört kenarı da", + "Borders": "Kenarlıklar", + "Cancel": "İptal", + "Caption": "Başlık", + "Cell Properties": "Hücre özellikleri", + "Cell properties": "Satır özellikleri", + "Delete cell": "Hücreyi sil", + "Delete column": "Sütunu sil", + "Delete row": "Sırayı sil", + "Description": "Tanım", + "Frames": "Çerçeveler", + "Insert cell after": "Sağına satır ekle", + "Insert cell before": "Soluna satır ekle", + "Insert column after": "Sağına sütun ekle", + "Insert column before": "Soluna sütun ekle", + "Insert row after": "Soluna sıra ekle", + "Insert row before": "Sağına sıra ekle", + "Merge cells": "Satırları birleştir", + "No rules": "Çizgi olmasın", + "No sides": "Kenar olmasın", + "OK": "Tamam", + "Padding": "İç boşluk", + "Please click into some cell": "Lütfen bir hücre seçin", + "Row Properties": "Satır özellikleri", + "Row properties": "Sıra özellikleri", + "Rows": "Satır:", + "Rules will appear between all rows and columns": "Tüm satır ve sütunların arasında", + "Rules will appear between columns only": "Yalnızca sütunların arasında", + "Rules will appear between rows only": "Yalnızca satırların arasında", + "Spacing": "Aralık", + "Spacing and padding": "Aralıklar", + "Split column": "Sütunu böl", + "Split row": "Sütunu böl", + "Summary": "Özet", + "Table Properties": "Tablo özellikleri", + "Table properties": "Tablo özellikleri", + "The bottom side only": "Yalnız alt taraf", + "The left-hand side only": "Yalnız sol taraf", + "The right and left sides only": "Yalnız sağ ve sol taraf", + "The right-hand side only": "Yalnız sağ taraf", + "The top and bottom sides only": "Yalnız üst ve alt taraf", + "The top side only": "Yalnız üst taraf", + "Xinha cowardly refuses to delete the last cell in row.": "Satırdaki son hücre silinemez", + "Xinha cowardly refuses to delete the last column in table.": "Tablodaki son sütun silinemez", + "Xinha cowardly refuses to delete the last row in table.": "Tablodaki son satır silinemez", + "pixels": "Piksel" + }, + "Template": { + "Cancel": "İptal" + }, + "UnFormat": { + "Cancel": "İptal", + "OK": "Tamam" + }, + "Xinha": { + "— format —": "— Bçim —", + "About this editor": "Bu düzenleyici hakkında", + "Address": "Adres", + "Background Color": "Arka plan rengi", + "Bold": "Kalın", + "Bulleted List": "Madde işaretli liste", + "Clean content pasted from Word": "Word'dan yapıştırılan içeriği temizle", + "Clear Inline Font Specifications": "Yazı tipi biçimlendirmesini sil", + "Clear MSOffice tags": "MSOffice etiketlerini sil", + "Close": "Kapat", + "Constructing object": "Nesne oluşturuluyor", + "Copy selection": "Seçimi kopyala", + "Create Statusbar": "Durum çubuğu oluşturuluyor", + "Create Toolbar": "Araç çubuğu oluşturuluyor", + "Current style": "Geçerli stil", + "Cut selection": "Seçimi kes", + "Decrease Indent": "Girintiyi azalt", + "Direction left to right": "Belge yönlendirmesi soldan sağa", + "Direction right to left": "Belde yönlendirmesi sağdan sola", + "Finishing": "Başlatılıyor", + "Font Color": "Yazı tipi rengi", + "Formatted": "Biçimli", + "Generate Xinha framework": "Xinha çerçevesi oluşturuluyor", + "Heading 1": "Başlık 1", + "Heading 2": "Başlık 2", + "Heading 3": "Başlık 3", + "Heading 4": "Başlık 4", + "Heading 5": "Başlık 5", + "Heading 6": "Başlık 6", + "Headings": "Başlık türleri", + "Help using editor": "Yardım", + "Horizontal Rule": "Yatay cetvel", + "Increase Indent": "Girintiyi arttır", + "Init editor size": "Editör büyüklüğü tanımlanıyor", + "Insert Table": "Tablo ekle", + "Insert Web Link": "Web bağlantısı gir", + "Insert/Modify Image": "Resim ekle/değiştir", + "Insert/Overwrite": "Ekle/Üzerine yaz", + "Italic": "İtalik", + "Justify Center": "Ortaya hizala", + "Justify Full": "Tam hizala", + "Justify Left": "Sola hizala", + "Justify Right": "Sağa hizala", + "Keyboard shortcuts": "Klavye kısayolları", + "Loading in progress. Please wait!": "Editör yükleniyor. Lütfen bekleyin!", + "Loading plugin $plugin": "$plugin yükleniyor", + "Normal": "Normal (Paragraf)", + "Ordered List": "Sıralı liste", + "Paste from clipboard": "Panodan yapıştır", + "Path": "Yol", + "Print document": "Belgeyi yazdır", + "Redoes your last action": "Yinele", + "Register plugin $plugin": "$plugin kayıt ediliyor", + "Remove formatting": "Biçimlendirmeyi kaldır", + "Save as": "Farklı kaydet", + "Select all": "Tümünü seç", + "Set format to paragraph": "Paragrafın biçimini ayarla", + "Split Block": "Bloğu böl", + "Strikethrough": "Üstü çizili", + "Subscript": "Altsimge", + "Superscript": "Üstsimge", + "The editor provides the following key combinations:": "Editörün desteklediği kombinasyonlar:", + "Toggle Borders": "Tablo kenarlıklarını göster/gösterme", + "Toggle HTML Source": "HTML kaynak kodunu aç/kapat", + "Underline": "Altı çizili", + "Undoes your last action": "Geri al", + "Would you like to clear font colours?": "Yazı tipi renklerini sıfırlamak mı istiyorsunuz?", + "Would you like to clear font sizes?": "Yazı tipi boyutlarını sıfırlamak mı istiyorsunuz?", + "Would you like to clear font typefaces?": "Yazı tipi biçimlendirmesini silmek mı istiyorsunuz?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Metin modundasınız. Görsel moda (WYSIWIG) dönmek için [<>] düğmesine tıklayın.", + "insert linebreak": "Satır sonu ekle", + "new paragraph": "Yeni paragraf" + }, + "__NEW_TRANSLATIONS__": { + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit Tag By Peg": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`lambda`": "", + "`Lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`Phi`": "", + "`phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`sigma`": "", + "`Sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "Delta": "", + "delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "omega": "", + "Omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "No shading": "", + "Style": "" + }, + "InlineStyler": { + "CSS Style": "", + "-": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption for the table": "", + "Collapse borders:": "", + "Layou": "", + "Style of the border": "" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Do Not Change": "", + "Frame and borders": "", + "Header (th)": "", + "Merge current cell with:": "", + "Normal (td)": "", + "Columns": "<>", + "Merge Cells": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Arial": "", + "Courier New": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Georgia": "", + "Impact": "", + "Loading Core": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "Select Color": "", + "SHIFT-ENTER": "", + "Tahoma": "", + "Times New Roman": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Clear": "<>", + "Copy": "<>", + "Cut": "<>", + "Insert File Link": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "PNG": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Trash": "<>", + "W:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Name": "<>", + "Name/ID:": "<>", + "Text:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Size": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "Guido code": "", + "GUIDO Code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Options": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/vn.js new file mode 100644 index 0000000000..d26187c379 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/vn.js @@ -0,0 +1,1573 @@ +// Xinha Language Combined Translation File +// +// LANG: "vn", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/vn.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'vn'; +// _editor_lang_merged_file = '/xinha/lang/merged/vn.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "Abbreviation": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "AboutBox": { + "About this editor": "Tự Giới Thiệu" + }, + "BackgroundImage": { + "Cancel": "Hủy" + }, + "ColorPicker": { + "OK": "Đồng ý" + }, + "ContextMenu": { + "Justify Center": "Căn Giữa", + "Justify Full": "Căn Đều", + "Justify Left": "Căn Trái", + "Justify Right": "Căn Phải" + }, + "CreateLink": { + "Cancel": "Hủy", + "Insert/Modify Link": "Thêm/Chỉnh sửa đường dẫn", + "New window (_blank)": "Cửa sổ mới (_blank)", + "None (use implicit)": "Không (sử dụng implicit)", + "OK": "Đồng ý", + "Other": "Khác", + "Same frame (_self)": "Trên cùng khung (_self)", + "Target:": "Nơi hiện thị:", + "Title (tooltip):": "Tiêu đề (của hướng dẫn):", + "Top frame (_top)": "Khung trên cùng (_top)", + "URL:": "URL:" + }, + "EditTag": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "Equation": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "ExtendedFileManager": { + "Cancel": "Hủy", + "New window (_blank)": "Cửa sổ mới (_blank)", + "None (use implicit)": "Không (sử dụng implicit)", + "OK": "Đồng ý", + "Same frame (_self)": "Trên cùng khung (_self)", + "Title (tooltip)": "Tiêu đề (của hướng dẫn):", + "Top frame (_top)": "Khung trên cùng (_top)" + }, + "Forms": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "FullPage": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "HorizontalRule": { + "Cancel": "Hủy", + "Horizontal Rule": "Dòng Kẻ Ngang", + "OK": "Đồng ý" + }, + "ImageManager": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "InsertAnchor": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "InsertImage": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "InsertMarquee": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "InsertNote": { + "Cancel": "Hủy" + }, + "InsertPicture": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "InsertSnippet": { + "Cancel": "Hủy" + }, + "InsertSnippet2": { + "Cancel": "Hủy" + }, + "InsertTable": { + "Cancel": "Hủy", + "Insert Table": "Chèn Bảng", + "OK": "Đồng ý" + }, + "Linker": { + "Cancel": "Hủy", + "Insert/Modify Link": "Thêm/Chỉnh sửa đường dẫn", + "OK": "Đồng ý", + "Target:": "Nơi hiện thị:", + "URL:": "URL:" + }, + "NoteServer": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "PSLocal": { + "Cancel": "Hủy" + }, + "PasteText": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "PersistentStorage": { + "Cancel": "Hủy" + }, + "QuickTag": { + "Cancel": "Hủy" + }, + "SetId": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "SmartReplace": { + "OK": "Đồng ý" + }, + "SpellChecker": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "SuperClean": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "TableOperations": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "Template": { + "Cancel": "Hủy" + }, + "UnFormat": { + "Cancel": "Hủy", + "OK": "Đồng ý" + }, + "Xinha": { + "About this editor": "Tự Giới Thiệu", + "Background Color": "Màu Nền", + "Bold": "Đậm", + "Bulleted List": "Danh Sách Phi Thứ Tự (Chấm đầu dòng)", + "Copy selection": "Sao chép", + "Current style": "Định Dạng Hiện Thời", + "Cut selection": "Cắt", + "Decrease Indent": "Lùi Ra Ngoài", + "Direction left to right": "Viết từ trái sang phải", + "Direction right to left": "Viết từ phải sang trái", + "Font Color": "Màu Chữ", + "Help using editor": "Giúp Đỡ", + "Horizontal Rule": "Dòng Kẻ Ngang", + "Increase Indent": "Thụt Vào Trong", + "Insert Table": "Chèn Bảng", + "Insert Web Link": "Tạo Liên Kết", + "Insert/Modify Image": "Chèn Ảnh", + "Italic": "Nghiêng", + "Justify Center": "Căn Giữa", + "Justify Full": "Căn Đều", + "Justify Left": "Căn Trái", + "Justify Right": "Căn Phải", + "Ordered List": "Danh Sách Có Thứ Tự (1, 2, 3)", + "Paste from clipboard": "Dán", + "Path": "Đường Dẫn", + "Redoes your last action": "Lấy lại thao tác vừa bỏ", + "Strikethrough": "Gạch Xóa", + "Subscript": "Viết Xuống Dưới", + "Superscript": "Viết Lên Trên", + "Toggle HTML Source": "Chế Độ Mã HTML", + "Underline": "Gạch Chân", + "Undoes your last action": "Hủy thao tác trước", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Bạn đang ở chế độ text. Sử dụng nút [<>] để chuyển lại chế độ WYSIWIG." + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Delete": "", + "Expansion:": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "You need to select some text before creating a link": "" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`harr`": "", + "`hArr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`lArr`": "", + "`larr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`omega`": "", + "`Omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`Psi`": "", + "`psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`Theta`": "", + "`theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`Xi`": "", + "`xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "Lambda": "", + "lambda": "", + "larr": "", + "lArr": "", + "lim_(x->oo)": "", + "mu": "", + "NN": "", + "nn": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "phi": "", + "Phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "sigma": "", + "Sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/edit horizontal rule": "", + "Insert/Edit Horizontal Rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Delete": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Name:": "<>", + "Size:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Delete": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell properties": "", + "Cell Properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row properties": "", + "Row Properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Print document": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "Not set": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Save": "<>", + "Texttop": "<>", + "Top": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + "Open file in new window": "", + " Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Image Preview": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/zh_cn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/zh_cn.js new file mode 100644 index 0000000000..c9642f77e6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/merged/zh_cn.js @@ -0,0 +1,1513 @@ +// Xinha Language Combined Translation File +// +// LANG: "zh_cn", ENCODING: UTF-8 +// +// INSTRUCTIONS TO TRANSLATORS +// =========================================================================== +// +// Your translation must be in UTF-8 Character Encoding. +// +// This is a JSON encoded file (plus comments), strings should be double-quote +// only, do not use single quotes to surround strings - "hello", not 'hello' +// do not have a trailing comma after the last entry in a section. +// +// Only full line comments are allowed (that a comments occupy entire lines). +// +// Search for the __NEW_TRANSLATIONS__ section below, this is where you will +// want to focus, this section includes things that do not presently have a +// translation or for which the translation needs to be checked for accuracy. +// +// In the New Translations section a translation string is one of the following +// +// "English String Here" : "" +// This means it is not translated yet, add your translation... +// "English String Here" : "Klingon String Here" +// +// "English String Here" : "Translated String Here" +// This means that an existing translation for this string, in some other +// section has been found, and used. Check that it is approprite for this +// section and if it is, that's fine leave it as is, otherwise change as +// appropriate. +// +// "English String Here" : "<>" +// This means use the same translation for this string as <> +// this saves you re-tranlating strings. If the Context of this section +// and the context of AnotherSection seem the same, that's fine leave it +// using that translation, but if this section needs a different translation, +// you can provide it by replacing the link (<>) with that +// new translation. For example - a "Table" in say "DataPlugin" is +// perhaps translated differently to "Table" in "FurniturePlugin". +// +// TESTING YOUR TRANSLATION +// =========================================================================== +// Simply place your translation file on your webserver somewhere for example +// +// /xinha/lang/merged/zh_cn.js +// +// and then tell Xinha where to get it (before loading XinhaCore.js) by +// +// _editor_lang = 'zh_cn'; +// _editor_lang_merged_file = '/xinha/lang/merged/zh_cn.js'; +// +// Xinha will load your new language definition. +// +// SUBMITTING YOUR TRANSLATION +// =========================================================================== +// Simply create a Ticket on the Xinha website and attach your translation +// file. +// +// The Xinha developers will take your file and use the +// contrib/lc_split_merged_file.php +// script to load it into the Xinha distribution. + +{ + "AboutBox": { + "About this editor": "关於 Xinha" + }, + "ContextMenu": { + "Justify Center": "位置居中", + "Justify Full": "位置左右平等", + "Justify Left": "位置靠左", + "Justify Right": "位置靠右" + }, + "HorizontalRule": { + "Horizontal Rule": "水平线" + }, + "InsertTable": { + "Insert Table": "插入表格" + }, + "Xinha": { + "About this editor": "关於 Xinha", + "Background Color": "背景颜色", + "Bold": "粗体", + "Bulleted List": "无序清单", + "Current style": "字体例子", + "Decrease Indent": "减小行前空白", + "Font Color": "文字颜色", + "Help using editor": "说明", + "Horizontal Rule": "水平线", + "Increase Indent": "加宽行前空白", + "Insert Table": "插入表格", + "Insert Web Link": "插入连结", + "Insert/Modify Image": "插入图形", + "Italic": "斜体", + "Justify Center": "位置居中", + "Justify Full": "位置左右平等", + "Justify Left": "位置靠左", + "Justify Right": "位置靠右", + "Ordered List": "顺序清单", + "Strikethrough": "删除线", + "Subscript": "下标", + "Superscript": "上标", + "Toggle HTML Source": "切换HTML原始码", + "Underline": "底线" + }, + "__NEW_TRANSLATIONS__": { + "Abbreviation": { + "Abbreviation": "", + "Cancel": "", + "Delete": "", + "Expansion:": "", + "OK": "" + }, + "AboutBox": { + "Close": "<>" + }, + "CharCounter": { + "... in progress": "", + "Chars": "", + "HTML": "", + "Words": "" + }, + "CharacterMap": { + "Insert special character": "" + }, + "ColorPicker": { + "Click a color...": "", + "Color: ": "", + "Sample": "", + "Web Safe: ": "", + "Close": "<>", + "OK": "<>" + }, + "ContextMenu": { + "_Delete Row": "", + "_Image Properties...": "", + "_Modify Link...": "", + "_Remove Link...": "", + "_Table Properties...": "", + "C_ell Properties...": "", + "Chec_k Link...": "", + "Copy": "", + "Create a link": "", + "Current URL is": "", + "Cut": "", + "De_lete Column": "", + "Delete Cell": "", + "Delete the current column": "", + "Delete the current row": "", + "How did you get here? (Please report!)": "", + "I_nsert Row Before": "", + "In_sert Row After": "", + "Insert _Column Before": "", + "Insert a new column after the current one": "", + "Insert a new column before the current one": "", + "Insert a new row after the current one": "", + "Insert a new row before the current one": "", + "Insert a paragraph after the current node": "", + "Insert a paragraph before the current node": "", + "Insert C_olumn After": "", + "Insert Cell After": "", + "Insert Cell Before": "", + "Insert paragraph after": "", + "Insert paragraph before": "", + "Link points to:": "", + "Make lin_k...": "", + "Merge Cells": "", + "Opens this link in a new window": "", + "Paste": "", + "Please confirm that you want to remove this element:": "", + "Please confirm that you want to unlink this element.": "", + "Remove the $elem Element...": "", + "Remove this node from the document": "", + "Ro_w Properties...": "", + "Show the image properties dialog": "", + "Show the Table Cell Properties dialog": "", + "Show the Table Properties dialog": "", + "Show the Table Row Properties dialog": "", + "Unlink the current element": "" + }, + "CreateLink": { + "Are you sure you wish to remove this link?": "", + "Insert/Modify Link": "", + "New window (_blank)": "", + "None (use implicit)": "", + "Other": "", + "Same frame (_self)": "", + "Target:": "", + "Title (tooltip):": "", + "Top frame (_top)": "", + "URL:": "", + "You need to select some text before creating a link": "", + "Cancel": "<>", + "OK": "<>" + }, + "DefinitionList": { + "definition description": "", + "definition list": "", + "definition term": "" + }, + "Dialogs": { + "Some Text Here": "" + }, + "DynamicCSS": { + "Choose stylesheet": "", + "Default": "", + "Undefined": "" + }, + "EditTag": { + "Edit HTML for selected text": "", + "Edit Tag By Peg": "", + "Tag Editor": "", + "Cancel": "<>", + "OK": "<>" + }, + "Equation": { + "!=": "", + "!in": "", + ">-": "", + ">=": "", + "<=": "", + "<=>": "", + "<x>": "", + "  `!`  ": "", + "  `.`  ": "", + "  `0`  ": "", + "  `2`  ": "", + "  `3`  ": "", + "  `4`  ": "", + "  `5`  ": "", + "  `6`  ": "", + "  `7`  ": "", + "  `8`  ": "", + "  `9`  ": "", + "  `e`  ": "", + "  `1`  ": "", + " `+{::}` ": "", + " `-:\\ `": "", + " `-{::}` ": "", + " `C` ": "", + " `cos`": "", + " `ln` ": "", + " `pi`  ": "", + " `sin`": "", + " `tan`": "", + " `times` ": "", + ""text"": "", + "'+formula+'": "", + "((n),(k))": "", + "(x+1)/(x-1)": "", + "*": "", + "**": "", + "+-": "", + "->": "", + "-<": "", + "-:": "", + "-=": "", + "//": "", + "/_": "", + ":.": "", + "=>": "", + "@": "", + "[[a,b],[c,d]]": "", + "\\\\": "", + "\\nClick in the box to use your keyboard or use the buttons\\n": "", + "^^": "", + "^^^": "", + "__|": "", + "_|_": "", + "`!=`": "", + "`!in`": "", + "`∧`": "", + "`∩`": "", + "`∪`": "", + "`>-`": "", + "`>=`": "", + "`<=>`": "", + "`<=`": "", + "`<x>`": "", + "`∨`": "", + "`"text"`": "", + "`((n),(k))`": "", + "`(x+1)/(x-1)`": "", + "`**`": "", + "`*`": "", + "`+-`": "", + "`->`": "", + "`-<`": "", + "`-:`": "", + "`-=`": "", + "`//`": "", + "`/_`": "", + "`:.`": "", + "`=>`": "", + "`@`": "", + "`[[a,b],[c,d]]`": "", + "`\\\\`": "", + "`__|`": "", + "`_|_`": "", + "`AA`": "", + "`aleph`": "", + "`alpha`": "", + "`and`": "", + "`bara`": "", + "`bba`": "", + "`bbba`": "", + "`beta`": "", + "`CC`": "", + "`cca`": "", + "`chi`": "", + "`darr`": "", + "`ddota`": "", + "`del`": "", + "`Delta`": "", + "`delta`": "", + "`diamond`": "", + "`dota`": "", + "`dy/dx`": "", + "`EE`": "", + "`epsi`": "", + "`eta`": "", + "`fra`": "", + "`Gamma`": "", + "`gamma`": "", + "`grad`": "", + "`hArr`": "", + "`harr`": "", + "`hata`": "", + "`if`": "", + "`in`": "", + "`int`": "", + "`iota`": "", + "`kappa`": "", + "`Lambda`": "", + "`lambda`": "", + "`larr`": "", + "`lArr`": "", + "`lim_(x->oo)`": "", + "`log`": "", + "`mu`": "", + "`NN`": "", + "`nn`": "", + "`not`": "", + "`nu`": "", + "`o+`": "", + "`o.`": "", + "`O/`": "", + "`oint`": "", + "`Omega`": "", + "`omega`": "", + "`oo`": "", + "`or`": "", + "`ox`": "", + "`phi`": "", + "`Phi`": "", + "`Pi`": "", + "`pi`": "", + "`prod`": "", + "`prop`": "", + "`psi`": "", + "`Psi`": "", + "`QQ`": "", + "`quad`": "", + "`rArr`": "", + "`rho`": "", + "`root(n)(x)`": "", + "`RR`": "", + "`sfa`": "", + "`Sigma`": "", + "`sigma`": "", + "`sqrt(x)`": "", + "`square`": "", + "`stackrel(->)(+)`": "", + "`sub`": "", + "`sube`": "", + "`sum`": "", + "`sup`": "", + "`supe`": "", + "`tau`": "", + "`theta`": "", + "`Theta`": "", + "`TT`": "", + "`tta`": "", + "`uarr`": "", + "`ula`": "", + "`upsilon`": "", + "`uu`": "", + "`veca`": "", + "`vv`": "", + "`x_(mn)`": "", + "`xi`": "", + "`Xi`": "", + "`xx`": "", + "`zeta`": "", + "`ZZ`": "", + "`|->`": "", + "`|--`": "", + "`|==`": "", + "`|__`": "", + "`|~`": "", + "`~=`": "", + "`~|`": "", + "`~~`": "", + "AA": "", + "aleph": "", + "alpha": "", + "and": "", + "AsciiMath Formula Input": "", + "AsciiMathML Example": "", + "bara": "", + "Based on ASCIIMathML by": "", + "bba": "", + "bbba": "", + "beta": "", + "CC": "", + "cca": "", + "chi": "", + "darr": "", + "ddota": "", + "del": "", + "delta": "", + "Delta": "", + "diamond": "", + "dota": "", + "dy/dx": "", + "EE": "", + "epsi": "", + "eta": "", + "For more information on AsciiMathML visit this page:": "", + "Formula Editor": "", + "fra": "", + "gamma": "", + "Gamma": "", + "grad": "", + "hArr": "", + "harr": "", + "hata": "", + "if": "", + "in": "", + "Input": "", + "int": "", + "int_a^bf(x)dx": "", + "iota": "", + "kappa": "", + "lambda": "", + "Lambda": "", + "lArr": "", + "larr": "", + "lim_(x->oo)": "", + "mu": "", + "nn": "", + "NN": "", + "nnn": "", + "not": "", + "nu": "", + "o+": "", + "o.": "", + "O/": "", + "oint": "", + "Omega": "", + "omega": "", + "oo": "", + "or": "", + "ox": "", + "Phi": "", + "phi": "", + "pi": "", + "Pi": "", + "Preview": "", + "prod": "", + "prop": "", + "psi": "", + "Psi": "", + "QQ": "", + "quad": "", + "rArr": "", + "rho": "", + "root(n)(x)": "", + "RR": "", + "sfa": "", + "Sigma": "", + "sigma": "", + "sqrt(x)": "", + "square": "", + "stackrel(->)(+)": "", + "sub": "", + "sube": "", + "sum": "", + "sum_(n=1)^oo": "", + "sup": "", + "supe": "", + "tau": "", + "Theta": "", + "theta": "", + "TT": "", + "tta": "", + "uarr": "", + "ula": "", + "upsilon": "", + "uu": "", + "uuu": "", + "veca": "", + "vv": "", + "vvv": "", + "x^(m+n)": "", + "x_(mn)": "", + "Xi": "", + "xi": "", + "xx": "", + "zeta": "", + "ZZ": "", + "|->": "", + "|--": "", + "|==": "", + "|__": "", + "|~": "", + "~=": "", + "~|": "", + "~~": "", + "Cancel": "<>", + "OK": "<>" + }, + "FancySelects": { + "'+opt.text+'": "" + }, + "FindReplace": { + "';\r\n var tagc = '": "", + "Case sensitive search": "", + "Clear": "", + "Done": "", + "Enter the text you want to find": "", + "Find and Replace": "", + "found item": "", + "found items": "", + "Highlight": "", + "Inform a replacement word": "", + "Next": "", + "not found": "", + "Options": "", + "Replace with:": "", + "replaced item": "", + "replaced items": "", + "Search for:": "", + "Substitute all occurrences": "", + "Substitute this occurrence?": "", + "Undo": "", + "Whole words only": "" + }, + "FormOperations": { + "Enter the name for new option.": "", + "Form Editor": "", + "Insert a check box.": "", + "Insert a Form.": "", + "Insert a multi-line text field.": "", + "Insert a radio button.": "", + "Insert a select field.": "", + "Insert a submit/reset button.": "", + "Insert a text, password or hidden field.": "", + "Message Sent": "", + "Please Select...": "" + }, + "Forms": { + "'onClick'=": "", + "Access Key:": "", + "Action URL:": "", + "Button Script": "", + "Checked": "", + "Columns:": "", + "Default text (optional)": "", + "Dimensions": "", + "Disabled": "", + "Encoding:": "", + "For Control:": "", + "Form": "", + "Form Element: FIELDSET": "", + "Form Element: INPUT": "", + "Form Element: LABEL": "", + "Form Element: SELECT": "", + "Form Element: TEXTAREA": "", + "Form handler script": "", + "Form Name:": "", + "Get": "", + "Hard": "", + "Height in number of rows": "", + "HTML-Form to CGI (default)": "", + "Image source": "", + "Image URL:": "", + "Initial Text:": "", + "Insert/Edit Form": "", + "Insert/Edit Form Element FIELDSET": "", + "Insert/Edit Form Element INPUT": "", + "Insert/Edit Form Element LABEL": "", + "Insert/Edit Form Element SELECT": "", + "Insert/Edit Form Element TEXTAREA": "", + "Javascript for button click": "", + "Label:": "", + "Legend:": "", + "Max length:": "", + "Maximum number of characters accepted": "", + "Method:": "", + "multipart Form Data (File-Upload)": "", + "Name": "", + "Name of the form input": "", + "Name of the form select": "", + "name of the textarea": "", + "Name/ID:": "", + "normal": "", + "nowrap": "", + "Off": "", + "Physical": "", + "Please enter a Label": "", + "Post": "", + "pre": "", + "Read Only": "", + "Rows:": "", + "Size of text box in characters": "", + "Size:": "", + "Soft": "", + "Tab Index:": "", + "Target Frame:": "", + "Text:": "", + "URL of image": "", + "Value of the form input": "", + "Value:": "", + "Virtual": "", + "Width in number of characters": "", + "Wrap Mode:": "", + "You must enter a Name": "", + "Cancel": "<>", + "OK": "<>", + "Options": "<>" + }, + "FullPage": { + "...": "", + "Alternate style-sheet:": "", + "Background color:": "", + "Character set:": "", + "cyrillic (ISO-8859-5)": "", + "cyrillic (KOI8-R)": "", + "cyrillic (WINDOWS-1251)": "", + "Description:": "", + "DOCTYPE:": "", + "Document properties": "", + "Document title:": "", + "Keywords:": "", + "Primary style-sheet:": "", + "Text color:": "", + "UTF-8 (recommended)": "", + "western (ISO-8859-1)": "", + "Cancel": "<>", + "OK": "<>" + }, + "FullScreen": { + "Maximize/Minimize Editor": "" + }, + "Gecko": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "" + }, + "HorizontalRule": { + "×": "", + " ": "", + "Alignment:": "", + "Center": "", + "Color:": "", + "Height:": "", + "Insert/Edit Horizontal Rule": "", + "Insert/edit horizontal rule": "", + "Layout": "", + "Left": "", + "No shading": "", + "percent": "", + "pixels": "", + "Right": "", + "Style": "", + "Width:": "", + "Cancel": "<>", + "OK": "<>" + }, + "InlineStyler": { + "Background": "", + "Baseline": "", + "Border": "", + "Bottom": "", + "Char": "", + "Collapsed borders": "", + "CSS Style": "", + "FG Color": "", + "Float": "", + "Justify": "", + "Margin": "", + "Middle": "", + "None": "", + "Padding": "", + "Text align": "", + "Top": "", + "Vertical align": "", + "-": "<>", + "Center": "<>", + "Height": "<>", + "Image URL": "<>", + "Layout": "<>", + "Left": "<>", + "percent": "<>", + "pixels": "<>", + "Right": "<>", + "Width": "<>" + }, + "InsertAnchor": { + "Anchor name": "", + "Insert Anchor": "", + "Cancel": "<>", + "Delete": "<>", + "OK": "<>" + }, + "InsertImage": { + "Absbottom": "", + "Absmiddle": "", + "Alternate text:": "", + "Border thickness:": "", + "Enter the image URL here": "", + "For browsers that don't support images": "", + "Horizontal padding": "", + "Horizontal:": "", + "Image Preview:": "", + "Insert Image": "", + "Leave empty for no border": "", + "Not set": "", + "Positioning of this image": "", + "Preview the image in a new window": "", + "Spacing": "", + "Texttop": "", + "Vertical padding": "", + "Vertical:": "", + "You must enter the URL": "", + "Alignment:": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Image URL:": "<>", + "Layout": "<>", + "Left": "<>", + "Middle": "<>", + "OK": "<>", + "Preview": "<>", + "Right": "<>", + "Top": "<>" + }, + "InsertNote": { + "Insert": "", + "Insert footnote": "", + "Insert Note": "", + "Cancel": "<>" + }, + "InsertPagebreak": { + "Page break": "", + "Page Break": "" + }, + "InsertSmiley": { + "Insert Smiley": "" + }, + "InsertSnippet": { + "\\n This is an information about something\\n": "", + "Hide preview": "", + "Insert as": "", + "Insert Snippet": "", + "InsertSnippet for Xinha": "", + "Link1": "", + "Link2": "", + "Link3": "", + "Link4": "", + "Link5": "", + "Show preview": "", + "This is an information about something": "", + "Variable": "", + "Cancel": "<>" + }, + "InsertSnippet2": { + "All Categories": "", + "Filter": "", + "Insert as HTML": "", + "Insert as template variable": "", + "Only search word beginning": "", + "Cancel": "<>", + "HTML": "<>", + "Insert Snippet": "<>", + "InsertSnippet for Xinha": "<>", + "Variable": "<>" + }, + "InsertTable": { + "Caption": "", + "Caption for the table": "", + "Cell padding:": "", + "Cell spacing:": "", + "Collapse borders:": "", + "Cols:": "", + "Em": "", + "Fixed width columns": "", + "Layou": "", + "Number of columns": "", + "Number of rows": "", + "Positioning of this table": "", + "Space between adjacent cells": "", + "Space between content and border in cell": "", + "Style of the border": "", + "Width of the table": "", + "Width unit": "", + "You must enter a number of columns": "", + "You must enter a number of rows": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Baseline": "<>", + "Border": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "OK": "<>", + "Percent": "<>", + "Pixels": "<>", + "Right": "<>", + "Rows:": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Width:": "<>" + }, + "LangMarks": { + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "language select": "", + "Latin": "" + }, + "Linker": { + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Email Address:": "", + "Email Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "New Window": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Status Bar:": "", + "Subject:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "You must select some text before making a new link.": "", + "Are you sure you wish to remove this link?": "<>", + "Cancel": "<>", + "Insert/Modify Link": "<>", + "Name:": "<>", + "OK": "<>", + "Size:": "<>", + "Target:": "<>", + "URL:": "<>" + }, + "ListType": { + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" + }, + "MootoolsFileManager": { + "Insert File Link": "", + "You must select some text before making a new link.": "<>" + }, + "Opera": { + "MARK": "", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "" + }, + "PasteText": { + "Insert text in new paragraph": "", + "Paste as Plain Text": "", + "Cancel": "<>", + "OK": "<>" + }, + "PreserveScripts": { + "JavaScript": "", + "PHP": "" + }, + "QuickTag": { + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "Ok": "", + "OPTIONS": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "", + "Cancel": "<>" + }, + "SaveSubmit": { + "in progress": "", + "Ready": "", + "Save": "", + "Saving...": "" + }, + "SetId": { + "ID/Name:": "", + "Set Id and Name": "", + "Set Id/Name": "", + "Set ID/Name": "", + "Cancel": "<>", + "Delete": "<>", + "OK": "<>" + }, + "SmartReplace": { + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "", + "OK": "<>" + }, + "Stylist": { + "Styles": "" + }, + "SuperClean": { + "Clean bad HTML from Microsoft Word.": "", + "Clean Selection Only": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove All HTML Tags": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove Paragraphs": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "", + "Cancel": "<>", + "OK": "<>" + }, + "TableOperations": { + "All four sides": "", + "Borders": "", + "Cell Properties": "", + "Cell properties": "", + "Cell Type:": "", + "Cells down": "", + "Cells to the right, and": "", + "Delete cell": "", + "Delete column": "", + "Delete row": "", + "Do Not Change": "", + "Frame and borders": "", + "Frames": "", + "Header (th)": "", + "Insert cell after": "", + "Insert cell before": "", + "Insert column after": "", + "Insert column before": "", + "Insert row after": "", + "Insert row before": "", + "Merge cells": "", + "Merge current cell with:": "", + "No rules": "", + "No sides": "", + "Normal (td)": "", + "Please click into some cell": "", + "Row Properties": "", + "Row properties": "", + "Rules will appear between all rows and columns": "", + "Rules will appear between columns only": "", + "Rules will appear between rows only": "", + "Spacing and padding": "", + "Split column": "", + "Split row": "", + "Summary": "", + "Table properties": "", + "Table Properties": "", + "The bottom side only": "", + "The left-hand side only": "", + "The right and left sides only": "", + "The right-hand side only": "", + "The top and bottom sides only": "", + "The top side only": "", + "Xinha cowardly refuses to delete the last cell in row.": "", + "Xinha cowardly refuses to delete the last column in table.": "", + "Xinha cowardly refuses to delete the last row in table.": "", + "Cancel": "<>", + "Caption": "<>", + "Columns": "<>", + "Description": "<>", + "Merge Cells": "<>", + "OK": "<>", + "Padding": "<>", + "pixels": "<>", + "Rows": "<>", + "Spacing": "<>" + }, + "UnsavedChanges": { + "You have unsaved changes in the editor": "" + }, + "WebKit": { + "The Paste button does not work in this browser for security reasons. Press CTRL-V on your keyboard to paste directly.": "<>" + }, + "Xinha": { + "— font —": "", + "— format —": "", + "— size —": "", + "1 (8 pt)": "", + "2 (10 pt)": "", + "3 (12 pt)": "", + "4 (14 pt)": "", + "5 (18 pt)": "", + "6 (24 pt)": "", + "7 (36 pt)": "", + "Address": "", + "Arial": "", + "Clean content pasted from Word": "", + "Clear Inline Font Specifications": "", + "Clear MSOffice tags": "", + "Close": "", + "Constructing object": "", + "Copy selection": "", + "Courier New": "", + "Create Statusbar": "", + "Create Toolbar": "", + "CTRL-0 (zero)": "", + "CTRL-1 .. CTRL-6": "", + "CTRL-A": "", + "CTRL-B": "", + "CTRL-C": "", + "CTRL-E": "", + "CTRL-I": "", + "CTRL-J": "", + "CTRL-L": "", + "CTRL-N": "", + "CTRL-R": "", + "CTRL-S": "", + "CTRL-U": "", + "CTRL-V": "", + "CTRL-X": "", + "CTRL-Y": "", + "CTRL-Z": "", + "Cut selection": "", + "Direction left to right": "", + "Direction right to left": "", + "Editor Help": "", + "ENTER": "", + "Error Loading Xinha. Developers, check the Error Console for information.": "", + "Finishing": "", + "Formatted": "", + "Generate Xinha framework": "", + "Georgia": "", + "Heading 1": "", + "Heading 2": "", + "Heading 3": "", + "Heading 4": "", + "Heading 5": "", + "Heading 6": "", + "Headings": "", + "Impact": "", + "Init editor size": "", + "insert linebreak": "", + "Insert/Overwrite": "", + "Keyboard shortcuts": "", + "Loading Core": "", + "Loading in progress. Please wait!": "", + "Loading plugin $plugin": "", + "Loading plugins": "", + "MS Word Cleaner": "", + "new paragraph": "", + "Normal": "", + "Paste from clipboard": "", + "Path": "", + "Print document": "", + "Redoes your last action": "", + "Register plugin $plugin": "", + "Remove formatting": "", + "Save as": "", + "Select all": "", + "Select Color": "", + "Set format to paragraph": "", + "SHIFT-ENTER": "", + "Split Block": "", + "Tahoma": "", + "The editor provides the following key combinations:": "", + "Times New Roman": "", + "Toggle Borders": "", + "Touch here first to activate editor.": "", + "Undoes your last action": "", + "Verdana": "", + "Waiting for Iframe to load...": "", + "WingDings": "", + "Would you like to clear font colours?": "", + "Would you like to clear font sizes?": "", + "Would you like to clear font typefaces?": "", + "Xinha": "", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "" + }, + "BackgroundImage": { + "__ TRANSLATOR NOTE __": "*** BACKGROUNDIMAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Remove Current Background": "", + "Set Background": "", + "Set page background image": "", + "Set Page Background Image": "", + "Cancel": "<>" + }, + "ClientsideSpellcheck": { + "__ TRANSLATOR NOTE __": "*** CLIENTSIDESPELLCHECK IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Spell Check using ieSpell": "" + }, + "ExtendedFileManager": { + "__ TRANSLATOR NOTE __": "*** EXTENDEDFILEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "10%": "", + "100%": "", + "200%": "", + "25%": "", + "50%": "", + "75%": "", + ">List View": "", + ">Thumbnail View": "", + "A:": "", + "Align": "", + "Alt": "", + "Border Color": "", + "Constrain Proportions": "", + "Crop": "", + "D:": "", + "Directory": "", + "Directory Up": "", + "Edit": "", + "File List": "", + "File Manager": "", + "Filename:": "", + "Filesize:": "", + "Flip Horizontal": "", + "Flip Image": "", + "Flip Vertical": "", + "Folder": "", + "GIF": "", + "GIF format is not supported, image editing not supported.": "", + "H:": "", + "Image Editor": "", + "Image Selection": "", + "Invalid base directory:": "", + "JPEG High": "", + "JPEG Low": "", + "JPEG Medium": "", + "Loading": "", + "Lock": "", + "Marker": "", + "Maximum folder size limit reached. Upload disabled.": "", + "Measure": "", + "New Folder": "", + "No Files Found": "", + "No Image Available": "", + "Please enter value": "", + "PNG": "", + "Preset": "", + "Quality:": "", + "Refresh": "", + "Rename": "", + "Resize": "", + "Rotate": "", + "Rotate 180 °": "", + "Rotate 90 ° CCW": "", + "Rotate 90 ° CW": "", + "Rotate Image": "", + "Start X:": "", + "Start Y:": "", + "Target Window": "", + "Toggle marker color": "", + "Trash": "", + "Upload": "", + "W:": "", + "X:": "", + "Xinha Image Editor": "", + "Y:": "", + "Zoom": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Border": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Clear": "<>", + "Color": "<>", + "Copy": "<>", + "Cut": "<>", + "Height": "<>", + "Height:": "<>", + "Insert File Link": "<>", + "Left": "<>", + "Margin": "<>", + "Middle": "<>", + "New window (_blank)": "<>", + "None (use implicit)": "<>", + "Not set": "<>", + "OK": "<>", + "Padding": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Right": "<>", + "Same frame (_self)": "<>", + "Save": "<>", + "Texttop": "<>", + "Title (tooltip)": "<>", + "Top": "<>", + "Top frame (_top)": "<>", + "Width": "<>", + "Width:": "<>", + "You must select some text before making a new link.": "<>" + }, + "Filter": { + "__ TRANSLATOR NOTE __": "*** FILTER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Filter": "<>" + }, + "HtmlTidy": { + "__ TRANSLATOR NOTE __": "*** HTMLTIDY IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Auto-Tidy": "", + "Don't Tidy": "", + "HTML Tidy": "", + "Tidy failed. Check your HTML for syntax errors.": "" + }, + "ImageManager": { + "__ TRANSLATOR NOTE __": "*** IMAGEMANAGER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Angle:": "", + "Flickr Picture List": "", + "Flickr Pictures": "", + "Flickr Selection": "", + "Flickr Username/Email": "", + "Folder Name:": "", + "Image Format": "", + "Image List": "", + "Keyword": "", + "No Images Found": "", + "No Photos Found": "", + "No Videos Found": "", + "This Server": "", + "YouTube Selection": "", + "YouTube Username": "", + "YouTube Video List": "", + "YouTube Videos": "", + "A:": "<>", + "Absbottom": "<>", + "Absmiddle": "<>", + "Baseline": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Clear": "<>", + "Constrain Proportions": "<>", + "Crop": "<>", + "D:": "<>", + "Directory": "<>", + "Directory Up": "<>", + "Edit": "<>", + "Filename:": "<>", + "Flip Horizontal": "<>", + "Flip Image": "<>", + "Flip Vertical": "<>", + "GIF": "<>", + "GIF format is not supported, image editing not supported.": "<>", + "H:": "<>", + "Height:": "<>", + "Image Editor": "<>", + "Image Selection": "<>", + "Insert Image": "<>", + "Invalid base directory:": "<>", + "JPEG High": "<>", + "JPEG Low": "<>", + "JPEG Medium": "<>", + "Left": "<>", + "Lock": "<>", + "Marker": "<>", + "Measure": "<>", + "Middle": "<>", + "New Folder": "<>", + "No Image Available": "<>", + "Not set": "<>", + "OK": "<>", + "PNG": "<>", + "Positioning of this image": "<>", + "Quality:": "<>", + "Refresh": "<>", + "Resize": "<>", + "Right": "<>", + "Rotate": "<>", + "Rotate 180 °": "<>", + "Rotate 90 ° CCW": "<>", + "Rotate 90 ° CW": "<>", + "Rotate Image": "<>", + "Save": "<>", + "Start X:": "<>", + "Start Y:": "<>", + "Texttop": "<>", + "Top": "<>", + "Trash": "<>", + "W:": "<>", + "Width:": "<>", + "X:": "<>", + "Y:": "<>" + }, + "InsertMarquee": { + "__ TRANSLATOR NOTE __": "*** INSERTMARQUEE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Alternate": "", + "Background-Color:": "", + "Behavior:": "", + "Continuous": "", + "Direction:": "", + "Insert scrolling marquee": "", + "Marquee Editor": "", + "Scroll Amount:": "", + "Scroll Delay:": "", + "Slide": "", + "Speed Control": "", + "Cancel": "<>", + "Height:": "<>", + "Left": "<>", + "Name": "<>", + "Name/ID:": "<>", + "OK": "<>", + "Right": "<>", + "Text:": "<>", + "Width:": "<>" + }, + "InsertPicture": { + "__ TRANSLATOR NOTE __": "*** INSERTPICTURE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Leave empty for not defined": "", + " Open file in new window": "", + "Open file in new window": "", + "Upload file": "", + "Absbottom": "<>", + "Absmiddle": "<>", + "Alignment:": "<>", + "Alternate text:": "<>", + "Baseline": "<>", + "Border thickness:": "<>", + "Bottom": "<>", + "Cancel": "<>", + "Enter the image URL here": "<>", + "For browsers that don't support images": "<>", + "Height:": "<>", + "Horizontal padding": "<>", + "Horizontal:": "<>", + "Image Preview:": "<>", + "Image URL:": "<>", + "Insert Image": "<>", + "Layout": "<>", + "Leave empty for no border": "<>", + "Left": "<>", + "Middle": "<>", + "Not set": "<>", + "OK": "<>", + "Positioning of this image": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Right": "<>", + "Size": "<>", + "Spacing": "<>", + "Texttop": "<>", + "Top": "<>", + "Vertical padding": "<>", + "Vertical:": "<>", + "Width:": "<>" + }, + "NoteServer": { + "__ TRANSLATOR NOTE __": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom :": "", + "100%": "<>", + "Cancel": "<>", + "Image Preview": "<>", + "OK": "<>", + "Options": "<>", + "Preview": "<>", + "Preview the image in a new window": "<>", + "Zoom": "<>" + }, + "PSLocal": { + "__ TRANSLATOR NOTE __": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "", + "Cancel": "<>" + }, + "PSServer": { + "__ TRANSLATOR NOTE __": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "File: ": "", + "Import": "" + }, + "PersistentStorage": { + "__ TRANSLATOR NOTE __": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Details": "", + "File Browser": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "List of Places": "", + "New Document": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "Cancel": "<>", + "Confirm": "<>", + "Copy": "<>", + "Delete": "<>", + "Directory Up": "<>", + "File List": "<>", + "File Manager": "<>", + "Filename": "<>", + "Insert": "<>", + "Insert Image": "<>", + "New Folder": "<>", + "Save": "<>", + "You must select some text before making a new link.": "<>" + }, + "SpellChecker": { + "__ TRANSLATOR NOTE __": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "pliz weit ;-)": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "Cancel": "<>", + "OK": "<>", + "Replace with": "<>" + }, + "Template": { + "__ TRANSLATOR NOTE __": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "Insert template": "", + "Cancel": "<>" + }, + "UnFormat": { + "__ TRANSLATOR NOTE __": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***", + "All": "", + "All HTML:": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "", + "Cancel": "<>", + "OK": "<>" + } + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/nb.js new file mode 100644 index 0000000000..ccd9bd0971 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/nb.js @@ -0,0 +1,79 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Om denne editor", + "Background Color": "Bakgrundsfarge", + "Bold": "Fet", + "Bulleted List": "Punktliste", + "Clear Inline Font Specifications": "Fjerne inline font spesifikasjoner", + "Copy selection": "Kopier område", + "Create Toolbar": "Lag verktøylinje", + "Current style": "Nåværende stil", + "Cut selection": "Klipp ut område", + "Decrease Indent": "Reduser innrykk", + "Direction left to right": "Fra venstre mot høyre", + "Direction right to left": "Fra høyre mot venstre", + "Font Color": "Tekstfarge", + "Help using editor": "Hjelp", + "Horizontal Rule": "Vannrett linje", + "Increase Indent": "Øke innrykk", + "Insert Table": "Sett inn tabell", + "Insert Web Link": "Lag lenke", + "Insert/Modify Image": "Sett inn bilde", + "Insert/Overwrite": "Sett inn/Overskriv", + "Italic": "Kursiv", + "Justify Center": "Midtjuster", + "Justify Full": "Blokkjuster", + "Justify Left": "Venstrejuster", + "Justify Right": "Høyrejuster", + "Ordered List": "Nummerert liste", + "Paste from clipboard": "Lim inn", + "Path": "Tekstvelger", + "Print document": "Skriv ut dokumentet", + "Redoes your last action": "Gjør om siste angring", + "Remove formatting": "Fjern formattering", + "Save as": "Lagre som", + "Select all": "Merk alt", + "Split Block": "Seperasjonsblokk", + "Strikethrough": "Gjennomstreket", + "Subscript": "Nedsenket", + "Superscript": "Opphøyet", + "Toggle Borders": "Skru av/på hjelpelinjer på tabeller", + "Toggle HTML Source": "Vis kildekode", + "Underline": "Understreket", + "Undoes your last action": "Angrer siste redigering", + "Would you like to clear font colours?": "Ønsker du å fjerne farger på skriften", + "Would you like to clear font sizes?": "Ønsker du å fjerne skrift størrelser", + "Would you like to clear font typefaces?": "Ønsker du å fjerne skrifttyper", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Du er i tekstmodus Klikk på [<>] for å gå tilbake til WYSIWIG.", + "__OBSOLETE__": { + "Cancel": "Avbryt", + "Constructing main object": "Vennligst vent", + "Enlarge Editor": "Vis i eget vindu", + "Insert/Modify Link": "Rediger lenke", + "Loading in progress. Please wait !": "WYSIWYG laster, vennligst vent!", + "New window (_blank)": "Eget vindu (_blank)", + "None (use implicit)": "Ingen (bruk standardinnstilling)", + "OK": "OK", + "Other": "Annen", + "Register panel bottom": "Registrer bunnpanel", + "Register panel left": "Registrer venstrepanel", + "Register panel right": "Registrer høyrepanel", + "Register panel top": "Registrer toppanel", + "Same frame (_self)": "Samme ramme (_self)", + "Target:": "Mål:", + "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "Visning i eget vindu har kjente problemer med Internet Explorer, på grunn av problemer med denne nettleseren. Mulige problemer er et uryddig skjermbilde, manglende editorfunksjoner og/eller at nettleseren crasher. Hvis du bruker Windows 95 eller Windows 98 er det også muligheter for at Windows will crashe.\n\nTrykk ", + "Title (tooltip):": "Tittel (tooltip):", + "Top frame (_top)": "Toppramme (_top)", + "URL:": "Adresse:", + "You must enter the URL where this link points to": "Du må skrive inn en adresse som denne lenken skal peke til" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/nl.js new file mode 100644 index 0000000000..60759685fb --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/nl.js @@ -0,0 +1,62 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Over deze editor", + "Background Color": "Achtergrondkleur", + "Bold": "Vet", + "Bulleted List": "Opsommingstekens", + "Copy selection": "Kopi?ren", + "Current style": "Huidige stijl", + "Cut selection": "Knippen", + "Decrease Indent": "Inspringing verkleinen", + "Direction left to right": "Tekstrichting links naar rechts", + "Direction right to left": "Tekstrichting rechts naar links", + "Font Color": "Tekstkleur", + "Help using editor": "Xinha help", + "Horizontal Rule": "Horizontale lijn", + "Increase Indent": "Inspringing vergroten", + "Insert Table": "Tabel invoegen", + "Insert Web Link": "Hyperlink invoegen/aanpassen", + "Insert/Modify Image": "Afbeelding invoegen/aanpassen", + "Italic": "Cursief", + "Justify Center": "Centreren", + "Justify Full": "Uitvullen", + "Justify Left": "Links uitlijnen", + "Justify Right": "Rechts uitlijnen", + "Normal": "normaal", + "Ordered List": "Nummering", + "Paste from clipboard": "Plakken", + "Path": "Pad", + "Redoes your last action": "Herhalen", + "Strikethrough": "Doorhalen", + "Subscript": "Subscript", + "Superscript": "Superscript", + "Toggle HTML Source": "HTML broncode", + "Underline": "Onderstrepen", + "Undoes your last action": "Ongedaan maken", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Je bent in TEKST-mode. Gebruik de [<>] knop om terug te keren naar WYSIWYG-mode.", + "__OBSOLETE__": { + "Cancel": "Annuleren", + "Enlarge Editor": "Vergroot Editor", + "Insert/Modify Link": "Hyperlink invoegen/aanpassen", + "New window (_blank)": "Nieuw venster (_blank)", + "None (use implicit)": "Geen", + "OK": "OK", + "Other": "Ander", + "Same frame (_self)": "Zelfde frame (_self)", + "Target:": "Doel:", + "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "Fullscreen-mode veroorzaakt problemen met Internet Explorer door bugs in de webbrowser die we niet kunnen omzeilen. Hierdoor kunnen de volgende effecten optreden: verknoeide teksten, een verlies aan editor-functionaliteit en/of willekeurig vastlopen van de webbrowser. Als u Windows 95 of 98 gebruikt, is het zeer waarschijnlijk dat u een algemene beschermingsfout (", + "Title (tooltip):": "Titel (tooltip):", + "Top frame (_top)": "Bovenste frame (_top)", + "URL:": "URL:", + "You must enter the URL where this link points to": "Geef de URL in waar de link naar verwijst" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/pl.js new file mode 100644 index 0000000000..899c93b13c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/pl.js @@ -0,0 +1,122 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— format —": "— Format —", + "About this editor": "Informacje o tym edytorze", + "Address": "Adres", + "Background Color": "Kolor tła", + "Bold": "Pogrubienie", + "Bulleted List": "Wypunktowanie", + "Clear Inline Font Specifications": "Wycisz bezpośrednie przypisania czcionek", + "Clear MSOffice tags": "Wyczyść tagi MSOffice", + "Copy selection": "Kopiuje zaznaczenie do schowka", + "Current style": "Obecny styl", + "Cut selection": "Wycina zaznaczenie do schowka", + "Decrease Indent": "Zmniejsz wcięcie", + "Direction left to right": "Kierunek tekstu lewo-prawo", + "Direction right to left": "Kierunek tekstu prawo-lewo", + "Font Color": "Kolor czcionki", + "Formatted": "Preformatowany", + "Heading 1": "Nagłówek 1", + "Heading 2": "Nagłówek 2", + "Heading 3": "Nagłówek 3", + "Heading 4": "Nagłówek 4", + "Heading 5": "Nagłówek 5", + "Heading 6": "Nagłówek 6", + "Help using editor": "Pomoc", + "Horizontal Rule": "Linia pozioma", + "Increase Indent": "Zwiększ wcięcie", + "Insert Table": "Wstaw tabelę", + "Insert Web Link": "Wstaw adres sieci Web", + "Insert/Modify Image": "Wstaw obraz", + "Italic": "Pochylenie", + "Justify Center": "Wyśrodkuj", + "Justify Full": "Wyjustuj", + "Justify Left": "Wyrównaj do lewej", + "Justify Right": "Wyrównaj do prawej", + "Normal": "Normalny", + "Ordered List": "Numerowanie", + "Paste from clipboard": "Wkleja zawartość schowka", + "Path": "Ścieżka", + "Print document": "Drukuj dokument", + "Redoes your last action": "Ponawia ostatnio wykonane polecenie", + "Remove formatting": "Usuń formatowanie", + "Select all": "Zaznacz wszystko", + "Split Block": "Podziel blok", + "Strikethrough": "Przekreślenie", + "Subscript": "Indeks dolny", + "Superscript": "Indeks górny", + "Toggle Borders": "Włącz / wyłącz ramki", + "Toggle HTML Source": "Edycja WYSIWYG/w źródle strony", + "Underline": "Podkreślenie", + "Undoes your last action": "Cofa ostatnio wykonane polecenie", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Jesteś w TRYBIE TEKSTOWYM. Użyj przycisku [<>], aby przełączyć się na tryb WYSIWYG.", + "__OBSOLETE__": { + "Absbottom": "Abs. dół", + "Absmiddle": "Abs. środek", + "Alignment:": "Wyrównanie:", + "Alternate text:": "Tekst alternatywny:", + "Baseline": "Linia bazowa", + "Border thickness:": "Grubość obramowania:", + "Bottom": "Dół", + "Cancel": "Anuluj", + "Cell padding:": "Wcięcie komórek:", + "Cell spacing:": "Odstęp komórek:", + "Cols:": "Kolumn:", + "Em": "Em", + "Enlarge Editor": "Pełny ekran", + "Enter the image URL here": "Podaj URL obrazka", + "Fixed width columns": "Kolumny o stałej szerokości", + "For browsers that don't support images": "Dla przeglądarek, które nie obsługują obrazków", + "Horizontal padding": "Wcięcie poziome", + "Horizontal:": "Poziome:", + "Image Preview:": "Podgląd obrazka:", + "Image URL:": "URL obrazka:", + "Insert Image": "Wstaw obrazek", + "Insert/Modify Link": "Wstaw/edytuj odnośnik", + "Layout": "Layout", + "Leave empty for no border": "Bez ramek - zostaw puste", + "Left": "Do lewej", + "Middle": "Środek", + "New window (_blank)": "Nowe okno (_blank)", + "None (use implicit)": "Brak", + "Not set": "Nie ustawione", + "Number of columns": "Liczba kolumn", + "Number of rows": "Liczba wierszy", + "OK": "OK", + "Other": "Inne", + "Percent": "Procent", + "Pixels": "Pikseli", + "Positioning of this image": "Pozycjonowanie obrazka", + "Positioning of this table": "Pozycjonowanie tabeli", + "Preview": "Podgląd", + "Preview the image in a new window": "Podgląd obrazka w nowym oknie", + "Right": "Do prawej", + "Rows:": "Wierszy:", + "Same frame (_self)": "Ta sama ramka (_self)", + "Space between adjacent cells": "Przestrzeń pomiędzy komórkami", + "Space between content and border in cell": "Przestrzeń między krawędzią a zawartością komórki", + "Spacing": "Spacjowanie", + "Target:": "Okno docelowe:", + "Texttop": "Góra tekstu", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Przycisk Wklej nie działa w przeglądarkach Mozilla z uwagi na ustawienia bezpieczeństwa. Naciśnij CRTL-V, aby wkleić zawartość schowka.", + "Title (tooltip):": "Tytuł (tooltip):", + "Top": "Góra", + "Top frame (_top)": "Główna ramka (_top)", + "URL:": "URL:", + "Vertical padding": "Wcięcie pionowe", + "Vertical:": "Pionowe:", + "Width of the table": "Szerokość tabeli", + "Width unit": "Jednostka", + "Width:": "Szerokość:", + "You must enter the URL where this link points to": "Musisz podać URL, na jaki będzie wskazywał odnośnik" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/pt_br.js new file mode 100644 index 0000000000..7b6c740a74 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/pt_br.js @@ -0,0 +1,175 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— font —": "— fonte —", + "— format —": "— formato —", + "— size —": "— tamanho —", + "About this editor": "Sobre este editor", + "Address": "Endereço", + "Background Color": "Cor do Fundo", + "Bold": "Negrito", + "Bulleted List": "Lista Marcadores", + "CTRL-0 (zero)": "CTRL-0 (zero)", + "CTRL-1 .. CTRL-6": "CTRL-1 .. CTRL-6", + "CTRL-A": "CTRL-A", + "CTRL-B": "CTRL-B", + "CTRL-C": "CTRL-C", + "CTRL-E": "CTRL-E", + "CTRL-I": "CTRL-I", + "CTRL-J": "CTRL-J", + "CTRL-L": "CTRL-L", + "CTRL-N": "CTRL-N", + "CTRL-R": "CTRL-R", + "CTRL-S": "CTRL-S", + "CTRL-U": "CTRL-U", + "CTRL-V": "CTRL-V", + "CTRL-X": "CTRL-X", + "CTRL-Y": "CTRL-Y", + "CTRL-Z": "CTRL-Z", + "Clean content pasted from Word": "Limpar conteúdo copiado do Word", + "Clear Inline Font Specifications": "Limpar especificações de fontes inline", + "Clear MSOffice tags": "Limpar tags do MS Office", + "Close": "Fechar", + "Constructing object": "Construindo objeto", + "Copy selection": "Copiar seleção", + "Create Statusbar": "Criar barra de informação (statusbar)", + "Create Toolbar": "Criar Barra de Ferramentas", + "Current style": "Estilo Atual", + "Cut selection": "Recortar seleção", + "Decrease Indent": "Diminuir Indentação", + "Direction left to right": "Da esquerda para direita", + "Direction right to left": "Da direita para esquerda", + "ENTER": "ENTER", + "Editor Help": "Ajuda do Editor", + "Finishing": "Terminando", + "Font Color": "Cor da Fonte", + "Formatted": "Formatado", + "Generate Xinha framework": "Gerar Área de Trabalho do Xinha", + "Heading 1": "Título 1", + "Heading 2": "Título 2", + "Heading 3": "Título 3", + "Heading 4": "Título 4", + "Heading 5": "Título 5", + "Heading 6": "Título 6", + "Headings": "Títulos", + "Help using editor": "Ajuda - Usando o editor", + "Horizontal Rule": "Linha Horizontal", + "Increase Indent": "Aumentar Indentação", + "Init editor size": "Iniciar tamanho do editor", + "Insert Table": "Inserir Tabela", + "Insert Web Link": "Inserir Link", + "Insert/Modify Image": "Inserir/Modificar Imagem", + "Insert/Overwrite": "Inserir/Sobrescrever", + "Italic": "Itálico", + "Justify Center": "Justificar Centralizado", + "Justify Full": "Justificar Completamente", + "Justify Left": "Justificar à Esquerda", + "Justify Right": "Justificar à Direita", + "Keyboard shortcuts": "Atalhos de Teclado", + "Loading in progress. Please wait!": "Carregamento em processo. Por favor, aguarde!", + "Normal": "Normal", + "Ordered List": "Lista Numerada", + "Paste from clipboard": "Colar da Área de Transferência", + "Path": "Caminho", + "Print document": "Imprimir documento", + "Redoes your last action": "Refazer sua última ação", + "Remove formatting": "Remover formatação", + "SHIFT-ENTER": "SHIFT-ENTER", + "Save as": "Salvar como", + "Select Color": "Selecionar cor", + "Select all": "Selecionar tudo", + "Set format to paragraph": "Definir formato para o parágrafo", + "Split Block": "Dividir Bloco", + "Strikethrough": "Tachado", + "Subscript": "Subscrito", + "Superscript": "Sobrescrito", + "The editor provides the following key combinations:": "Este editor fornece a seguinte combinação de teclas:", + "Toggle Borders": "Mudar Bordas", + "Toggle HTML Source": "Ver Código-Fonte", + "Underline": "Sublinhado", + "Undoes your last action": "Desfazer sua última ação", + "Would you like to clear font colours?": "Deseja limpar as cores de fonte", + "Would you like to clear font sizes?": "Deseja limpar os tamanhos de fonte", + "Would you like to clear font typefaces?": "Deseja limpar os tipos de fonte", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Você está no MODO TEXTO. Use o botão [<>] para mudar para o MODO VISUAL (WYSIWYG)", + "insert linebreak": "inserir quebra de linha", + "new paragraph": "novo parágrafo", + "__OBSOLETE__": { + "About": "Sobre", + "About Xinha": "Sobre o Xinha", + "Absbottom": "Inferior absoluto", + "Absmiddle": "Meio absoluto", + "Alignment:": "Alinhamento", + "Alternate text:": "Texto alternativo", + "Baseline": "Linha base", + "Border thickness:": "Espessura da borda", + "Bottom": "Botão", + "Cancel": "Cancelar", + "Cell padding:": "Espaçamento interno da célula:", + "Cell spacing:": "Espaçamento da célula:", + "Collapse borders:": "Bordas fechadas:", + "Cols:": "Colunas:", + "Developer": "Desenvolvedor", + "Em": "Em", + "Enlarge Editor": "Expandir Editor", + "Enter the image URL here": "Entre aqui com a URL da imagem", + "Fixed width columns": "Colunas com largura fixa", + "For browsers that don't support images": "Para navegadores que não suportam imagens", + "Horizontal padding": "Espaçamento interno horizontal", + "Horizontal:": "Horizontal:", + "Image Preview:": "Visualização da Imagem:", + "Image URL:": "URL da imagem:", + "Insert Image": "Inserir Imagem", + "Insert/Modify Link": "Inserir/Modificar Link", + "Layout": "Esquema", + "Leave empty for no border": "Deixe em branco para não ter bordas", + "Left": "Esquerda", + "License": "Licença", + "Middle": "Meio", + "Name": "Nome", + "New window (_blank)": "Nova janela (_blank)", + "None (use implicit)": "Nenhum (uso implicito)", + "Not set": "Não definido", + "Number of columns": "Número de colunas", + "Number of rows": "Número de linhas", + "OK": "OK", + "Percent": "Porcentagem", + "Pixels": "Pixels", + "Plugins": "Plugins", + "Positioning of this image": "Posicionamento desta imagem", + "Positioning of this table": "Posicionamento desta tabela", + "Preview": "Visualização", + "Preview the image in a new window": "Visualizar a imagem em uma nova janela", + "Right": "Direita", + "Rows:": "Linhas:", + "Same frame (_self)": "Mesmo frame (_self)", + "Space between adjacent cells": "Espaço entre células adjacentes", + "Space between content and border in cell": "Espaço entre conteúdo e borda na célula", + "Spacing": "Espaçamento", + "Sponsored by": "Patrocinado por", + "Target:": "Destino:", + "Texttop": "Texto no topo", + "Thanks": "Agradecimentos", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "O botão Colar não funciona em navegadores baseado no Mozilla (por razões técnicas de segurança). Pressione CTRL-V no seu teclado para colar diretamente.", + "Title (tooltip):": "Título (tooltip)", + "Top": "Topo", + "Top frame (_top)": "Frame no topo (_top)", + "URL:": "URL:", + "Version": "Versão", + "Vertical padding": "Espaçamento interno vertical", + "Vertical:": "Vertical:", + "Width of the table": "Largura da tabela", + "Width unit": "Unidade de largura", + "Width:": "Largura:", + "Xinha Help": "Ajuda do Xinha", + "Your Document is not well formed. Check JavaScript console for details.": "Seu Documento não está formatado corretamente. Verifique o console do JavaScript para maiores detalhes." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ro.js new file mode 100644 index 0000000000..4977d885e8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ro.js @@ -0,0 +1,60 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Despre editor", + "Background Color": "Culoare de fundal", + "Bold": "Îngroşat", + "Bulleted List": "Listă marcată", + "Copy selection": "Copie în clipboard", + "Current style": "Stilul curent", + "Cut selection": "Taie în clipboard", + "Decrease Indent": "Micşorează alineatul", + "Direction left to right": "Direcţia de scriere: stânga - dreapta", + "Direction right to left": "Direcţia de scriere: dreapta - stânga", + "Font Color": "Culoarea textului", + "Help using editor": "Documentaţie (devel)", + "Horizontal Rule": "Linie orizontală", + "Increase Indent": "Măreşte alineatul", + "Insert Table": "Inserează un tabel", + "Insert Web Link": "Inserează/modifică link", + "Insert/Modify Image": "Inserează/modifică imagine", + "Italic": "Italic", + "Justify Center": "Aliniere pe centru", + "Justify Full": "Aliniere în ambele părţi", + "Justify Left": "Aliniere la stânga", + "Justify Right": "Aliniere la dreapta", + "Ordered List": "Listă ordonată", + "Paste from clipboard": "Aduce din clipboard", + "Path": "Calea", + "Redoes your last action": "Reface ultima acţiune anulată", + "Strikethrough": "Tăiat", + "Subscript": "Indice jos", + "Superscript": "Indice sus", + "Toggle HTML Source": "Sursa HTML / WYSIWYG", + "Underline": "Subliniat", + "Undoes your last action": "Anulează ultima acţiune", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Eşti în modul TEXT. Apasă butonul [<>] pentru a te întoarce în modul WYSIWYG.", + "__OBSOLETE__": { + "Cancel": "Renunţă", + "Enlarge Editor": "Maximizează editorul", + "Insert/Modify Link": "Inserează/modifcă link", + "New window (_blank)": "Fereastră nouă (_blank)", + "None (use implicit)": "Nimic (foloseşte ce-i implicit)", + "OK": "OK", + "Other": "Alt target", + "Same frame (_self)": "Aceeaşi fereastră (_self)", + "Target:": "Ţinta:", + "Title (tooltip):": "Titlul (tooltip):", + "Top frame (_top)": "Fereastra principală (_top)", + "URL:": "URL:", + "You must enter the URL where this link points to": "Trebuie să introduceţi un URL" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ru.js new file mode 100644 index 0000000000..cdcbda9b9d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/ru.js @@ -0,0 +1,159 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— font —": "— шрифт —", + "— format —": "— форматирование —", + "— size —": "— размер —", + "About this editor": "О редакторе", + "Address": "Адрес", + "Background Color": "Цвет фона", + "Bold": "Полужирный", + "Bulleted List": "Маркированный список", + "Clean content pasted from Word": "Очистить текст, вставленный из Word", + "Clear Inline Font Specifications": "Удалить непосредственное задание шрифтов", + "Clear MSOffice tags": "Удалить разметку MSOffice", + "Close": "Закрыть", + "Constructing object": "Создание объекта", + "Copy selection": "Копировать", + "Create Toolbar": "Создание панели инструментов", + "Current style": "Текущий стиль", + "Cut selection": "Вырезать", + "Decrease Indent": "Уменьшить отступ", + "Direction left to right": "Направление слева направо", + "Direction right to left": "Направление справа налево", + "ENTER": "ENTER", + "Editor Help": "Помощь", + "Font Color": "Цвет шрифта", + "Formatted": "Отформатированный текст", + "Heading 1": "Заголовок 1", + "Heading 2": "Заголовок 2", + "Heading 3": "Заголовок 3", + "Heading 4": "Заголовок 4", + "Heading 5": "Заголовок 5", + "Heading 6": "Заголовок 6", + "Headings": "Заголовки", + "Help using editor": "Помощь", + "Horizontal Rule": "Горизонтальный разделитель", + "Increase Indent": "Увеличить отступ", + "Init editor size": "Инициализация размера редактора", + "Insert Table": "Вставка таблицы", + "Insert Web Link": "Вставить гиперссылку", + "Insert/Modify Image": "Вставить изображение", + "Insert/Overwrite": "Вставка/замена", + "Italic": "Наклонный", + "Justify Center": "По центру", + "Justify Full": "По ширине", + "Justify Left": "По левому краю", + "Justify Right": "По правому краю", + "Keyboard shortcuts": "Горячие клавиши", + "Normal": "Обычный текст", + "Ordered List": "Нумерованный список", + "Paste from clipboard": "Вставить", + "Path": "Путь", + "Print document": "Печать", + "Redoes your last action": "Повторить", + "Register plugin $plugin": "Регистрация $plugin", + "Remove formatting": "Убрать форматирование", + "SHIFT-ENTER": "SHIFT+ENTER", + "Save as": "Сохранить как", + "Select all": "Выделить все", + "Set format to paragraph": "Отформатировать абзац", + "Split Block": "Разделить блок", + "Strikethrough": "Перечеркнутый", + "Subscript": "Нижний индекс", + "Superscript": "Верхний индекс", + "The editor provides the following key combinations:": "Редактор поддерживает следующие комбинации клавиш:", + "Toggle Borders": "Включить/выключить отображение границ", + "Toggle HTML Source": "Показать Html-код", + "Underline": "Подчеркнутый", + "Undoes your last action": "Отменить", + "Would you like to clear font colours?": "Удалить цвета шрифтов ?", + "Would you like to clear font sizes?": "Удалить размеры шрифтов ?", + "Would you like to clear font typefaces?": "Удалить типы шрифтов?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Вы в режиме отображения Html-кода. нажмите кнопку [<>], чтобы переключиться в визуальный режим.", + "insert linebreak": "перенос строки", + "new paragraph": "новый абзац", + "__OBSOLETE__": { + "Absbottom": "По нижней границе", + "Absmiddle": "По середине текста", + "Alignment:": "Выравнивание", + "Alternate text:": "Альтернативный текст", + "Baseline": "По нижней границе текста", + "Border thickness:": "Толщина рамки", + "Bottom": "По нижнему краю", + "Cancel": "Отмена", + "Cell padding:": "Поля в ячейках", + "Cell spacing:": "Расстояние между ячейками", + "Cols:": "Столбцы", + "Constructing main object": "Создание главного объекта", + "Create StatusBar": "Создание панели состояния", + "Em": "em", + "Enlarge Editor": "Увеличить редактор", + "Enter the image URL here": "Вставьте адрес изображения", + "Fixed width columns": "Столбцы фиксированной ширины", + "For browsers that don't support images": "Для браузеров, которые не отображают картинки", + "Generate Xinha object": "Создание объекта Xinha", + "Horizontal padding": "Горизонтальные поля", + "Horizontal:": "По горизонтали", + "Image Preview:": "Предварительный просмотр", + "Image URL:": "URL изображения", + "Init IFrame": "инициализация iframe", + "Insert Image": "Вставка изображения", + "Insert/Modify Link": "Вставка/изменение ссылки", + "Layout": "Расположение", + "Leave empty for no border": "Оставьте пустым, чтобы убрать рамку", + "Left": "По левому краю", + "Loading in progress. Please wait !": "Загрузка... Пожалуйста, подождите.", + "Middle": "Посредине", + "New window (_blank)": "Новое окно (_blank)", + "None (use implicit)": "По умолчанию", + "Not set": "Не установлено", + "Number of columns": "Количество столбцов", + "Number of rows": "Количество строк", + "OK": "OK", + "Other": "Другое", + "Percent": "проценты", + "Pixels": "пикселы", + "Positioning of this image": "Расположение изображения", + "Positioning of this table": "Расположение таблицы", + "Preview": "Предварительный просмотр", + "Preview the image in a new window": "Предварительный просмотр в отдельном окне", + "Register panel bottom": "Регистрация нижней панели", + "Register panel left": "Регистрация левой панели", + "Register panel right": "Регистрация правой панели", + "Register panel top": "Регистрация верхней панели", + "Right": "По правому краю", + "Rows:": "Строки", + "Same frame (_self)": "То же окно (_self)", + "Space between adjacent cells": "Расстояние между соседними ячейками", + "Space between content and border in cell": "Расстояние между границей ячейки и текстом", + "Spacing": "Поля", + "Target:": "Открывать в окне:", + "Texttop": "По верхней границе текста", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Кнопка Вставить не работает в браузерах на основе Mozilla (по техническим причинам, связанным с безопасностью). Нажмите Ctrl-V на клавиатуре, чтобы вставить.", + "Title (tooltip):": "Всплывающая подсказка", + "Top": "По верхнему краю", + "Top frame (_top)": "Родительское окно (_top)", + "URL:": "URL:", + "Vertical padding": "Вертикальные поля", + "Vertical:": "По вертикали", + "Width of the table": "Ширина таблицы", + "Width unit": "Единицы измерения", + "Width:": "Ширина", + "Xinha Help": "Помощь", + "You must enter a number of columns": "Вы должны ввести количество столбцов", + "You must enter a number of rows": "Вы должны ввести количество строк", + "You must enter the URL": "Вы должны ввести URL", + "You must enter the URL where this link points to": "Вы должны указать URL, на который будет указывать ссылка", + "You need to select some text before creating a link": "Вы должны выделить текст, который будет преобразован в ссылку", + "Your Document is not well formed. Check JavaScript console for details.": "Ваш документ неправильно сформирован. Посмотрите Консоль JavaScript, чтобы узнать подробности." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/sh.js new file mode 100644 index 0000000000..3fac98044e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/sh.js @@ -0,0 +1,123 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— format —": "— Format —", + "About this editor": "O ovom editoru", + "Address": "Adresa", + "Background Color": "Boja pozadine", + "Bold": "Masno", + "Bulleted List": "Lista sa simbolima", + "Clear Inline Font Specifications": "Obriši dodeljene osobine fonta", + "Clear MSOffice tags": "Obriši MSOffice tagove", + "Copy selection": "Kopiraj izabrano", + "Current style": "Važeći stil", + "Cut selection": "Iseci izabrano", + "Decrease Indent": "smanji uvlačenje", + "Direction left to right": "Pravac s leva na desno", + "Direction right to left": "Pravac s desna na levo", + "Font Color": "Boja slova", + "Formatted": "Formatiran", + "Heading 1": "Zaglavlje 1", + "Heading 2": "Zaglavlje 2", + "Heading 3": "Zaglavlje 3", + "Heading 4": "Zaglavlje 4", + "Heading 5": "Zaglavlje 5", + "Heading 6": "Zaglavlje 6", + "Help using editor": "Pomoć pri korišćenju editora", + "Horizontal Rule": "Horizontalna linija", + "Increase Indent": "Povećaj uvlačenje", + "Insert Table": "Ubaci tabelu", + "Insert Web Link": "Dodaj web link", + "Insert/Modify Image": "Dodaj/promeni sliku", + "Italic": "Kurziv", + "Justify Center": "Ravnanje po simetrali", + "Justify Full": "Puno ravnanje", + "Justify Left": "Ravnanje ulevo", + "Justify Right": "Ravnanje udesno", + "Normal": "Običan", + "Ordered List": "Lista sa rednim brojevima", + "Paste from clipboard": "Zalepi iz klipborda", + "Path": "Putanja", + "Print document": "Štampaj dokument", + "Redoes your last action": "Vraća poslednju radnju", + "Remove formatting": "Ukoni formatiranje", + "Select Color": "Izaberite boju", + "Select all": "Izaberi sve", + "Split Block": "Podeli blok", + "Strikethrough": "Precrtano", + "Subscript": "Indeks-tekst", + "Superscript": "Eksponent-tekst", + "Toggle Borders": "Izmeni okvire", + "Toggle HTML Source": "Prebaci na HTML kod", + "Underline": "Podvučeno", + "Undoes your last action": "Poništava poslednju radnju", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Nalazite se u TEXT režimu. Koristite [<>] dugme za povratak na WYSIWYG.", + "__OBSOLETE__": { + "Absbottom": "Apsolutno dno", + "Absmiddle": "Apsolutna sredina", + "Alignment:": "Ravnanje", + "Alternate text:": "Alternativni tekst", + "Baseline": "Donja linija", + "Border thickness:": "Debljina okvira", + "Bottom": "Dno", + "Cancel": "Poništi", + "Cell padding:": "Unutrašnja odstojanja u ćeliji", + "Cell spacing:": "Rastojanje ćelija", + "Cols:": "Kolone", + "Em": "Em", + "Enlarge Editor": "Povećaj editor", + "Enter the image URL here": "Unesite URL slike ovde", + "Fixed width columns": "Fiksirana širina kolona", + "For browsers that don't support images": "Za pretraživače koji ne podržavaju slike", + "Horizontal padding": "Horizontalno odstojanje", + "Horizontal:": "Po horizontali", + "Image Preview:": "Pregled slike", + "Image URL:": "URL slike", + "Insert Image": "Ubaci sliku", + "Insert/Modify Link": "Dodaj/promeni Link", + "Layout": "Prelom", + "Leave empty for no border": "Ostavi prazno kad nema okvira", + "Left": "Levo", + "Middle": "Sredina", + "New window (_blank)": "Novom prozoru (_blank)", + "None (use implicit)": "koristi podrazumevano", + "Not set": "Nije postavljeno", + "Number of columns": "Broj kolona", + "Number of rows": "Broj redova", + "OK": "OK", + "Other": "Drugo", + "Percent": "Procenat", + "Pixels": "Pikseli", + "Positioning of this image": "Postavljanje ove slike", + "Positioning of this table": "Postavljanje ove tabele", + "Preview": "Pregled", + "Preview the image in a new window": "Pregledaj sliku u novom prozoru", + "Right": "Desno", + "Rows:": "Redovi", + "Same frame (_self)": "Isti frejm (_self)", + "Space between adjacent cells": "Rastojanje naspramnih ćelija", + "Space between content and border in cell": "Rastojanje između sadržaja i okvira ćelije", + "Spacing": "Razmak", + "Target:": "Otvori u:", + "Texttop": "Vrh teksta", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "", + "Title (tooltip):": "Naziv (tooltip):", + "Top": "Vrh", + "Top frame (_top)": "Glavni frejm (_top)", + "URL:": "URL:", + "Vertical padding": "Vertikalno odstojanje", + "Vertical:": "Po vertikali", + "Width of the table": "Širina tabele", + "Width unit": "Jedinica širine", + "Width:": "Širina", + "You must enter the URL where this link points to": "Morate uneti URL na koji vodi ovaj link" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/si.js new file mode 100644 index 0000000000..3b60373dca --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/si.js @@ -0,0 +1,48 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Vizitka za urejevalnik", + "Background Color": "Barva ozadja", + "Bold": "Krepko", + "Bulleted List": "Označevanje", + "Copy selection": "Kopiraj", + "Current style": "Trenutni slog", + "Cut selection": "Izreži", + "Decrease Indent": "Zmanjšaj zamik", + "Font Color": "Barva pisave", + "Help using editor": "Pomoč za urejevalnik", + "Horizontal Rule": "Vodoravna črta", + "Increase Indent": "Povečaj zamik", + "Insert Table": "Vstavi tabelo", + "Insert Web Link": "Vstavi hiperpovezavo", + "Insert/Modify Image": "Vstavi sliko", + "Italic": "Ležeče", + "Justify Center": "Na sredino", + "Justify Full": "Porazdeli vsebino", + "Justify Left": "Poravnaj levo", + "Justify Right": "Poravnaj desno", + "Ordered List": "Oštevilčevanje", + "Paste from clipboard": "Prilepi", + "Path": "Pot", + "Redoes your last action": "Uveljavi zadnjo akcijo", + "Strikethrough": "Prečrtano", + "Subscript": "Podpisano", + "Superscript": "Nadpisano", + "Toggle HTML Source": "Preklopi na HTML kodo", + "Underline": "Podčrtano", + "Undoes your last action": "Razveljavi zadnjo akcijo", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Si v tekstovnem načinu. Uporabi [<>] gumb za prklop nazaj na WYSIWYG.", + "__OBSOLETE__": { + "Cancel": "Prekliči", + "Enlarge Editor": "Povečaj urejevalnik", + "OK": "V redu" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/sr.js new file mode 100644 index 0000000000..84e0c70daf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/sr.js @@ -0,0 +1,123 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— format —": "— Format —", + "About this editor": "О овом едитору", + "Address": "адреса", + "Background Color": "Боја позадине", + "Bold": "Масно", + "Bulleted List": "Листа са симболима", + "Clear Inline Font Specifications": "Обриши примењене особине фонта", + "Clear MSOffice tags": "Обриши MSOffice тагове", + "Copy selection": "Копирај изабрано", + "Current style": "Важећи стил", + "Cut selection": "Исеци изабрано", + "Decrease Indent": "Смањи увлачење", + "Direction left to right": "Правац с лева на десно", + "Direction right to left": "Правац с десна на лево", + "Font Color": "Боја слова", + "Formatted": "форматиран", + "Heading 1": "Заглавље 1", + "Heading 2": "Заглавље 2", + "Heading 3": "Заглавље 3", + "Heading 4": "Заглавље 4", + "Heading 5": "Заглавље 5", + "Heading 6": "Заглавље 6", + "Help using editor": "Помоћ при коришћењу едитора", + "Horizontal Rule": "Хоризонтална линија", + "Increase Indent": "Повећај увлачење", + "Insert Table": "Убаци табелу", + "Insert Web Link": "додај веб линк", + "Insert/Modify Image": "додај/промени слику", + "Italic": "Курзив", + "Justify Center": "Равнање по симетрали", + "Justify Full": "Пуно равнање", + "Justify Left": "Равнање улево", + "Justify Right": "Равнање удесно", + "Normal": "обичан", + "Ordered List": "Листа са редним бројевима", + "Paste from clipboard": "Залепи из клипборда", + "Path": "Путања", + "Print document": "Штампај документ", + "Redoes your last action": "Враћа последњу радњу", + "Remove formatting": "Уклони форматирање", + "Select Color": "Изабери боју", + "Select all": "Изабери све", + "Split Block": "Подели блок", + "Strikethrough": "Прецртано", + "Subscript": "Индекс-текст", + "Superscript": "Експонент-текст", + "Toggle Borders": "Пребаци оквирне линије", + "Toggle HTML Source": "Пребаци на приказ ХТМЛ кода", + "Underline": "Подвучено", + "Undoes your last action": "Поништава последњу радњу", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Налазите се у ТЕКСТ режиму. Користите [<>] дугме за повратак на ШВТИД (WYSIWYG).", + "__OBSOLETE__": { + "Absbottom": "Апсолутно дно", + "Absmiddle": "Апсолутна средина", + "Alignment:": "Равнање", + "Alternate text:": "алтернативни текст", + "Baseline": "Доња линија", + "Border thickness:": "Дебљина оквира", + "Bottom": "Дно", + "Cancel": "Поништи", + "Cell padding:": "Унутрашња одстојања од ивица ћелије", + "Cell spacing:": "Размак између ћелија", + "Cols:": "Колоне", + "Em": "Ем", + "Enlarge Editor": "Повећај едитор", + "Enter the image URL here": "Унесите УРЛ слике овде", + "Fixed width columns": "Фиксирана ширина колоне", + "For browsers that don't support images": "За претраживаче који не подржавају слике", + "Horizontal padding": "Хортизонтално одстојање", + "Horizontal:": "По хоризонтали", + "Image Preview:": "Преглед слике", + "Image URL:": "УРЛ слике", + "Insert Image": "Убаци слику", + "Insert/Modify Link": "додај/промени линк", + "Layout": "Прелом", + "Leave empty for no border": "Остави празно кад нема оквира", + "Left": "Лево", + "Middle": "Средина", + "New window (_blank)": "Новом прозору (_blank)", + "None (use implicit)": "користи подразумевано", + "Not set": "Није постављено", + "Number of columns": "Број колона", + "Number of rows": "Број редова", + "OK": "OK", + "Other": "Друго", + "Percent": "Процената", + "Pixels": "Пиксела", + "Positioning of this image": "Постављање ове слике", + "Positioning of this table": "Постављање ове табеле", + "Preview": "Преглед", + "Preview the image in a new window": "Прегледај слику у новом прозору", + "Right": "Десно", + "Rows:": "Редови", + "Same frame (_self)": "Исти фрејм (_self)", + "Space between adjacent cells": "Размак између наспрамних ћелија", + "Space between content and border in cell": "Растојање између садржаја у ћелији и њеног оквира", + "Spacing": "Размак", + "Target:": "Отвори у:", + "Texttop": "Врх текста", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Дугме 'залепи' не ради у претраживачима породице Mozilla (из разлога сигурности). Притисните CTRL-V на тастатури да директно залепите.", + "Title (tooltip):": "Назив (tooltip):", + "Top": "Врх", + "Top frame (_top)": "Главни фрејм (_top)", + "URL:": "УРЛ:", + "Vertical padding": "Вертикално одстојање", + "Vertical:": "По вертикали", + "Width of the table": "Ширина табеле", + "Width unit": "Јединица ширине", + "Width:": "Ширина", + "You must enter the URL where this link points to": "Морате унети УРЛ на који води овај линк" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/sv.js new file mode 100644 index 0000000000..25bf8adfb7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/sv.js @@ -0,0 +1,111 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Om denna editor", + "Background Color": "Bakgrundsfärg", + "Bold": "Fet", + "Bulleted List": "Punktlista", + "Clean content pasted from Word": "Rensa innehåll inklistrat från MS Word", + "Clear Inline Font Specifications": "Rensa inbäddad typsnittsinformation", + "Clear MSOffice tags": "Städa bort MS Office taggar", + "Close": "Stäng", + "Copy selection": "Kopiera markering", + "Create Toolbar": "Skapar verktygspanel", + "Current style": "Nuvarande stil", + "Cut selection": "Klipp ut markering", + "Decrease Indent": "Minska indrag", + "Direction left to right": "Vänster till höger", + "Direction right to left": "Höger till vänster", + "Font Color": "Textfärg", + "Headings": "Skapa standardrubrik", + "Help using editor": "Hjälp", + "Horizontal Rule": "Vågrät linje", + "Increase Indent": "Öka indrag", + "Insert Table": "Infoga tabell", + "Insert Web Link": "Infoga länk", + "Insert/Modify Image": "Infoga bild", + "Insert/Overwrite": "Infoga/Skriv över", + "Italic": "Kursiv", + "Justify Center": "Centrera", + "Justify Full": "Marginaljustera", + "Justify Left": "Vänsterjustera", + "Justify Right": "Högerjustera", + "Keyboard shortcuts": "Snabbtangenter", + "Ordered List": "Numrerad lista", + "Paste from clipboard": "Klistra in", + "Path": "Objekt", + "Print document": "Skriv ut", + "Redoes your last action": "Upprepa kommando", + "Remove formatting": "Rensa formattering", + "Select all": "Markera allt", + "Set format to paragraph": "Aktivera paragrafläge", + "Split Block": "Dela block", + "Strikethrough": "Genomstruken", + "Subscript": "Nedsänkt", + "Superscript": "Upphöjd", + "The editor provides the following key combinations:": "Editorn nyttjar följande kombinationer:", + "Toggle Borders": "Objektramar", + "Toggle HTML Source": "Visa källkod", + "Underline": "Understruken", + "Undoes your last action": "Ångra kommando", + "Would you like to clear font colours?": "Ta bort all textfärger ?", + "Would you like to clear font sizes?": "Radera alla fontstorlekar ?", + "Would you like to clear font typefaces?": "Radera alla typsnittsinformation ?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Du befinner dig i texläge. Klicka på ikonen [<>] ovan för att växla tillbaka till WYSIWIG läge", + "insert linebreak": "Infoga radbrytning ", + "new paragraph": "Ny paragraf ", + "__OBSOLETE__": { + "Alignment:": "Marginaljustering", + "Border thickness:": "Ramtjocklek", + "Cancel": "Avbryt", + "Cell padding:": "Cellindrag:", + "Cell spacing:": "Cellmarginaler:", + "Cols:": "Kolumner:", + "Constructing main object": "Skapar huvudobjekt", + "Em": "", + "Enlarge Editor": "Visa i eget fönster", + "Fixed width columns": "Fixerad bredd", + "Insert/Modify Link": "Redigera länk", + "Leave empty for no border": "Lämna fältet tomt för att undvika ramar", + "Loading in progress. Please wait !": "Editorn laddas. Vänta...", + "New window (_blank)": "Nytt fönster (_blank)", + "None (use implicit)": "Ingen (använd standardinställing)", + "Number of columns": "Antal kolumner", + "Number of rows": "Antal rader", + "OK": "OK", + "Other": "Annan", + "Percent": "Procent", + "Pixels": "Pixlar", + "Positioning of this table": "Tabellposition", + "Register panel bottom": "Registerar fotpanel", + "Register panel left": "Registerar panel vänster", + "Register panel right": "Registerar panel höger", + "Register panel top": "Registerar toppanel", + "Rows:": "Rader:", + "Same frame (_self)": "Samma ram (_self)", + "Space between adjacent cells": "Utrymme mellan celler", + "Space between content and border in cell": "Utrymme mellan ram och cellinnehåll", + "Spacing": "Cellegenskaper", + "Target:": "Mål:", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Denna knapp fungerar ej i Mozillabaserad webläsare, använd istället snabbtangenterna CTRL-V på tangentbordet för att klistra in.", + "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "Visning i fullskärmsläga fungerar dåligt i din webläsare. Möjliga problem resulterar i en ryckig editor, saknade editorfunktioner och/eller att webläsaren kraschar. Om du använder Windows 95/98 finns också möjligheten att Windows kraschar.\n\nTryck ", + "Title (tooltip):": "Titel (tooltip):", + "Top frame (_top)": "Toppram (_top)", + "URL:": "Sökväg:", + "Width of the table": "Tabellbredd", + "Width unit": "Breddenheter", + "Width:": "Bredd:", + "You must enter a number of columns": "Ange antal kolumner", + "You must enter a number of rows": "Ange ental rader", + "You must enter the URL where this link points to": "Du måsta ange en adress till vilken länken skall peka på", + "You need to select some text before creating a link": "Du måsta markera ett objekt att applicera länken på!" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/th.js new file mode 100644 index 0000000000..eedfa141c2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/th.js @@ -0,0 +1,48 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "เกี่ยวกับโปรแกรมนี้", + "Background Color": "สีพื้นหลัง", + "Bold": "ตัวหนา", + "Bulleted List": "ลำดับ", + "Copy selection": "สำเนาส่วนที่เลือก", + "Current style": "รูปแบบปัจจุบัน", + "Cut selection": "ตัดส่วนที่เลือก", + "Decrease Indent": "ลดย่อหน้า", + "Font Color": "สีขอบแบบอักษร", + "Help using editor": "การใช้งานโปรแกรม", + "Horizontal Rule": "เส้นกึ่งกลาง", + "Increase Indent": "เพิ่มย่อหน้า", + "Insert Table": "เพิ่มตาราง", + "Insert Web Link": "ิเพิ่มลิ้งค์", + "Insert/Modify Image": "เพิ่ม/แก้ไขภาพ", + "Italic": "ตัวเอียง", + "Justify Center": "จัดกึ่งกลาง", + "Justify Full": "จัดเต็มขอบ", + "Justify Left": "จัดชิดซ้าย", + "Justify Right": "จัดชิดขวา", + "Ordered List": "เลขลำดับ", + "Paste from clipboard": "วางจากคลิปบอร์ด", + "Path": "เส้นทาง", + "Redoes your last action": "ทำซ้ำ", + "Strikethrough": "ขีดทับ", + "Subscript": "ตัวห้อย", + "Superscript": "ตัวยก", + "Toggle HTML Source": "สลับการแสดงโค้ด HTML", + "Underline": "ขีดเส้นใต้", + "Undoes your last action": "ย้อนกลับ", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "คุณอยู่ในโหมดธรรมดา กดที่ปุ่ม [<>] เพื่อสลับกลับไปยังโหมดพิมพ์งานแบบเวิร์ด", + "__OBSOLETE__": { + "Cancel": "ยกเลิก", + "Enlarge Editor": "ขยายให้เต็มจอ", + "OK": "ตกลง" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/tr.js new file mode 100644 index 0000000000..841d282c86 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/tr.js @@ -0,0 +1,157 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— format —": "— Bçim —", + "About this editor": "Bu düzenleyici hakkında", + "Address": "Adres", + "Background Color": "Arka plan rengi", + "Bold": "Kalın", + "Bulleted List": "Madde işaretli liste", + "Clean content pasted from Word": "Word'dan yapıştırılan içeriği temizle", + "Clear Inline Font Specifications": "Yazı tipi biçimlendirmesini sil", + "Clear MSOffice tags": "MSOffice etiketlerini sil", + "Close": "Kapat", + "Constructing object": "Nesne oluşturuluyor", + "Copy selection": "Seçimi kopyala", + "Create Statusbar": "Durum çubuğu oluşturuluyor", + "Create Toolbar": "Araç çubuğu oluşturuluyor", + "Current style": "Geçerli stil", + "Cut selection": "Seçimi kes", + "Decrease Indent": "Girintiyi azalt", + "Direction left to right": "Belge yönlendirmesi soldan sağa", + "Direction right to left": "Belde yönlendirmesi sağdan sola", + "Finishing": "Başlatılıyor", + "Font Color": "Yazı tipi rengi", + "Formatted": "Biçimli", + "Generate Xinha framework": "Xinha çerçevesi oluşturuluyor", + "Heading 1": "Başlık 1", + "Heading 2": "Başlık 2", + "Heading 3": "Başlık 3", + "Heading 4": "Başlık 4", + "Heading 5": "Başlık 5", + "Heading 6": "Başlık 6", + "Headings": "Başlık türleri", + "Help using editor": "Yardım", + "Horizontal Rule": "Yatay cetvel", + "Increase Indent": "Girintiyi arttır", + "Init editor size": "Editör büyüklüğü tanımlanıyor", + "Insert Table": "Tablo ekle", + "Insert Web Link": "Web bağlantısı gir", + "Insert/Modify Image": "Resim ekle/değiştir", + "Insert/Overwrite": "Ekle/Üzerine yaz", + "Italic": "İtalik", + "Justify Center": "Ortaya hizala", + "Justify Full": "Tam hizala", + "Justify Left": "Sola hizala", + "Justify Right": "Sağa hizala", + "Keyboard shortcuts": "Klavye kısayolları", + "Loading in progress. Please wait!": "Editör yükleniyor. Lütfen bekleyin!", + "Loading plugin $plugin": "$plugin yükleniyor", + "Normal": "Normal (Paragraf)", + "Ordered List": "Sıralı liste", + "Paste from clipboard": "Panodan yapıştır", + "Path": "Yol", + "Print document": "Belgeyi yazdır", + "Redoes your last action": "Yinele", + "Register plugin $plugin": "$plugin kayıt ediliyor", + "Remove formatting": "Biçimlendirmeyi kaldır", + "Save as": "Farklı kaydet", + "Select all": "Tümünü seç", + "Set format to paragraph": "Paragrafın biçimini ayarla", + "Split Block": "Bloğu böl", + "Strikethrough": "Üstü çizili", + "Subscript": "Altsimge", + "Superscript": "Üstsimge", + "The editor provides the following key combinations:": "Editörün desteklediği kombinasyonlar:", + "Toggle Borders": "Tablo kenarlıklarını göster/gösterme", + "Toggle HTML Source": "HTML kaynak kodunu aç/kapat", + "Underline": "Altı çizili", + "Undoes your last action": "Geri al", + "Would you like to clear font colours?": "Yazı tipi renklerini sıfırlamak mı istiyorsunuz?", + "Would you like to clear font sizes?": "Yazı tipi boyutlarını sıfırlamak mı istiyorsunuz?", + "Would you like to clear font typefaces?": "Yazı tipi biçimlendirmesini silmek mı istiyorsunuz?", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Metin modundasınız. Görsel moda (WYSIWIG) dönmek için [<>] düğmesine tıklayın.", + "insert linebreak": "Satır sonu ekle", + "new paragraph": "Yeni paragraf", + "__OBSOLETE__": { + "Absbottom": "Salt alta", + "Absmiddle": "Salt orta", + "Alignment:": "Hizalama:", + "Alternate text:": "Alternatif metin:", + "Baseline": "Taban hizası", + "Border thickness:": "Kenarlık kalınlığı:", + "Bottom": "Alta", + "Cancel": "İptal", + "Cell padding:": "Hücre doldurma:", + "Cell spacing:": "Hücre aralığı:", + "Click a color...": "Bir renk seçin", + "Color: ": "Renk: ", + "Cols:": "Sütun:", + "Em": "Em", + "Enlarge Editor": "Düzenleyiciyi büyüt", + "Enter the image URL here": "Lütfen buraya resim URL'sini girin", + "Fixed width columns": "Sabit başlı sütun", + "For browsers that don't support images": "Resim desteklemeyen tarayıcılar için", + "Horizontal padding": "Yatay doldurma miktarı", + "Horizontal:": "Yatay:", + "Image Preview:": "Resim önizleme:", + "Image URL:": "Resim URL'si:", + "Insert Image": "Resim ekle", + "Insert/Modify Link": "Bağlantı ekle/değiştir", + "Layout": "Düzen", + "Leave empty for no border": "Kenarlık istemiyorsanız boş bırakın", + "Left": "Sola", + "Middle": "Ortala", + "New window (_blank)": "Yeni pencere (_blank)", + "None (use implicit)": "Hiçbiri (Örtük)", + "Not set": "Ayarlanmamış", + "Number of columns": "Sütun sayısı", + "Number of rows": "Satır sayısı", + "OK": "OK", + "Other": "Başka", + "Percent": "Yüzde", + "Pixels": "Piksel", + "Positioning of this image": "Resmi konumlandırma", + "Positioning of this table": "Tablo konumlandırma", + "Preview": "Önizleme", + "Preview the image in a new window": "Resmi yeni pencerede önizleme", + "Register bottom panel": "Alt panel oluşturuluyor", + "Register left panel": "Sol panel oluşturuluyor", + "Register right panel": "Sağ panel oluşturuluyor", + "Register top panel": "Üst panel oluşturuluyor", + "Right": "Sağa", + "Rows:": "Satır:", + "Same frame (_self)": "Aynı çerçeve (_self)", + "Sample": "Örnek", + "Space between adjacent cells": "Bitişik hücre aralığı", + "Space between content and border in cell": "İç kenarlığı ve hücre içeriği arasındaki boşluk", + "Spacing": "Aralık", + "Target:": "Hedef:", + "Texttop": "Metin-üstte", + "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "Güvenlik sebeplerinden dolayı bazı tarayıcılar kes/kopyala/yapıştır komutlarına erişemez. Kesme/kopyalama/yapıştırma komutunu kullanmak için lütfen klavyenizin kısayollarını kullanın (CTRL + C/V/X).", + "Title (tooltip):": "Başlık (Araç ipucu):", + "Top": "Yukarı", + "Top frame (_top)": "En üst çerçeve (_top)", + "URL:": "URL:", + "Vertical padding": "Dikey doldurma miktarı", + "Vertical:": "Dikey:", + "Web Safe: ": "Web güvenli mod: ", + "Width of the table": "Tablo genişliği", + "Width unit": "Genişlik birimi", + "Width:": "Genişlik:", + "You must enter a number of columns": "Lütfen sütun sayısını girin", + "You must enter a number of rows": "Lütfen satır sayısını girin", + "You must enter the URL": "Lütfen URL girin", + "You must enter the URL where this link points to": "Bağlantının hangi konuma işaret ettiğini girmelisiniz", + "You need to select some text before create a link": "Bağlantı oluşturmak için bir metin seçmeniz gerekir", + "Your Document is not well formed. Check JavaScript console for details.": "Metninizin biçimi iyi değil. Daha fazla bilgi için Javascript konsolunu kontrol edin." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/vn.js new file mode 100644 index 0000000000..08d8747c73 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/vn.js @@ -0,0 +1,61 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "Tự Giới Thiệu", + "Background Color": "Màu Nền", + "Bold": "Đậm", + "Bulleted List": "Danh Sách Phi Thứ Tự (Chấm đầu dòng)", + "Copy selection": "Sao chép", + "Current style": "Định Dạng Hiện Thời", + "Cut selection": "Cắt", + "Decrease Indent": "Lùi Ra Ngoài", + "Direction left to right": "Viết từ trái sang phải", + "Direction right to left": "Viết từ phải sang trái", + "Font Color": "Màu Chữ", + "Help using editor": "Giúp Đỡ", + "Horizontal Rule": "Dòng Kẻ Ngang", + "Increase Indent": "Thụt Vào Trong", + "Insert Table": "Chèn Bảng", + "Insert Web Link": "Tạo Liên Kết", + "Insert/Modify Image": "Chèn Ảnh", + "Italic": "Nghiêng", + "Justify Center": "Căn Giữa", + "Justify Full": "Căn Đều", + "Justify Left": "Căn Trái", + "Justify Right": "Căn Phải", + "Ordered List": "Danh Sách Có Thứ Tự (1, 2, 3)", + "Paste from clipboard": "Dán", + "Path": "Đường Dẫn", + "Redoes your last action": "Lấy lại thao tác vừa bỏ", + "Strikethrough": "Gạch Xóa", + "Subscript": "Viết Xuống Dưới", + "Superscript": "Viết Lên Trên", + "Toggle HTML Source": "Chế Độ Mã HTML", + "Underline": "Gạch Chân", + "Undoes your last action": "Hủy thao tác trước", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Bạn đang ở chế độ text. Sử dụng nút [<>] để chuyển lại chế độ WYSIWIG.", + "__OBSOLETE__": { + "Cancel": "Hủy", + "Enlarge Editor": "Phóng To Ô Soạn Thảo", + "Insert/Modify Link": "Thêm/Chỉnh sửa đường dẫn", + "New window (_blank)": "Cửa sổ mới (_blank)", + "None (use implicit)": "Không (sử dụng implicit)", + "OK": "Đồng ý", + "Other": "Khác", + "Same frame (_self)": "Trên cùng khung (_self)", + "Target:": "Nơi hiện thị:", + "The full screen mode is known to cause problems with Internet Explorer, due to browser bugs that we weren": "Chế độ phóng to ô soạn thảo có thể gây lỗi với Internet Explorer vì một số lỗi của trình duyệt này, vì thế chế độ này có thể sẽ không chạy. Hiển thị không đúng, lộn xộn, không có đầy đủ chức năng, và cũng có thể làm trình duyệt của bạn bị tắt ngang. Nếu bạn đang sử dụng Windows 9x bạn có thể bị báo lỗi ", + "Title (tooltip):": "Tiêu đề (của hướng dẫn):", + "Top frame (_top)": "Khung trên cùng (_top)", + "URL:": "URL:", + "You must enter the URL where this link points to": "Bạn phải điền địa chỉ (URL) mà đường dẫn sẽ liên kết tới" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/zh_cn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/zh_cn.js new file mode 100644 index 0000000000..d0ba912ea2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/lang/zh_cn.js @@ -0,0 +1,39 @@ +// I18N constants +// LANG: "zh_cn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "About this editor": "关於 Xinha", + "Background Color": "背景颜色", + "Bold": "粗体", + "Bulleted List": "无序清单", + "Current style": "字体例子", + "Decrease Indent": "减小行前空白", + "Font Color": "文字颜色", + "Help using editor": "说明", + "Horizontal Rule": "水平线", + "Increase Indent": "加宽行前空白", + "Insert Table": "插入表格", + "Insert Web Link": "插入连结", + "Insert/Modify Image": "插入图形", + "Italic": "斜体", + "Justify Center": "位置居中", + "Justify Full": "位置左右平等", + "Justify Left": "位置靠左", + "Justify Right": "位置靠右", + "Ordered List": "顺序清单", + "Strikethrough": "删除线", + "Subscript": "下标", + "Superscript": "上标", + "Toggle HTML Source": "切换HTML原始码", + "Underline": "底线", + "__OBSOLETE__": { + "Enlarge Editor": "放大" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-Core-1.3.3dev.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-Core-1.3.3dev.js new file mode 100644 index 0000000000..a8478520da --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-Core-1.3.3dev.js @@ -0,0 +1,5958 @@ +/* +--- + +name: Core + +description: The heart of MooTools. + +license: MIT-style license. + +copyright: Copyright (c) 2006-2010 [Valerio Proietti](http://mad4milk.net/). + +authors: The MooTools production team (http://mootools.net/developers/) + +inspiration: + - Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php) + - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php) + +provides: [Core, MooTools, Type, typeOf, instanceOf, Native] + +... +*/ + +(function(){ + +this.MooTools = { + version: '1.3.3dev', + build: '%build%' +}; + +// typeOf, instanceOf + +var typeOf = this.typeOf = function(item){ + if (item == null) return 'null'; + if (item.$family) return item.$family(); + + if (item.nodeName){ + if (item.nodeType == 1) return 'element'; + if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? 'textnode' : 'whitespace'; + } else if (typeof item.length == 'number'){ + if (item.callee) return 'arguments'; + if ('item' in item) return 'collection'; + } + + return typeof item; +}; + +var instanceOf = this.instanceOf = function(item, object){ + if (item == null) return false; + var constructor = item.$constructor || item.constructor; + while (constructor){ + if (constructor === object) return true; + constructor = constructor.parent; + } + return item instanceof object; +}; + +// Function overloading + +var Function = this.Function; + +var enumerables = true; +for (var i in {toString: 1}) enumerables = null; +if (enumerables) enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor']; + +Function.prototype.overloadSetter = function(usePlural){ + var self = this; + return function(a, b){ + if (a == null) return this; + if (usePlural || typeof a != 'string'){ + for (var k in a) self.call(this, k, a[k]); + if (enumerables) for (var i = enumerables.length; i--;){ + k = enumerables[i]; + if (a.hasOwnProperty(k)) self.call(this, k, a[k]); + } + } else { + self.call(this, a, b); + } + return this; + }; +}; + +Function.prototype.overloadGetter = function(usePlural){ + var self = this; + return function(a){ + var args, result; + if (usePlural || typeof a != 'string') args = a; + else if (arguments.length > 1) args = arguments; + if (args){ + result = {}; + for (var i = 0; i < args.length; i++) result[args[i]] = self.call(this, args[i]); + } else { + result = self.call(this, a); + } + return result; + }; +}; + +Function.prototype.extend = function(key, value){ + this[key] = value; +}.overloadSetter(); + +Function.prototype.implement = function(key, value){ + this.prototype[key] = value; +}.overloadSetter(); + +// From + +var slice = Array.prototype.slice; + +Function.from = function(item){ + return (typeOf(item) == 'function') ? item : function(){ + return item; + }; +}; + +Array.from = function(item){ + if (item == null) return []; + return (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : slice.call(item) : [item]; +}; + +Number.from = function(item){ + var number = parseFloat(item); + return isFinite(number) ? number : null; +}; + +String.from = function(item){ + return item + ''; +}; + +// hide, protect + +Function.implement({ + + hide: function(){ + this.$hidden = true; + return this; + }, + + protect: function(){ + this.$protected = true; + return this; + } + +}); + +// Type + +var Type = this.Type = function(name, object){ + if (name){ + var lower = name.toLowerCase(); + var typeCheck = function(item){ + return (typeOf(item) == lower); + }; + + Type['is' + name] = typeCheck; + if (object != null){ + object.prototype.$family = (function(){ + return lower; + }).hide(); + //<1.2compat> + object.type = typeCheck; + // + } + } + + if (object == null) return null; + + object.extend(this); + object.$constructor = Type; + object.prototype.$constructor = object; + + return object; +}; + +var toString = Object.prototype.toString; + +Type.isEnumerable = function(item){ + return (item != null && typeof item.length == 'number' && toString.call(item) != '[object Function]' ); +}; + +var hooks = {}; + +var hooksOf = function(object){ + var type = typeOf(object.prototype); + return hooks[type] || (hooks[type] = []); +}; + +var implement = function(name, method){ + if (method && method.$hidden) return; + + var hooks = hooksOf(this); + + for (var i = 0; i < hooks.length; i++){ + var hook = hooks[i]; + if (typeOf(hook) == 'type') implement.call(hook, name, method); + else hook.call(this, name, method); + } + + var previous = this.prototype[name]; + if (previous == null || !previous.$protected) this.prototype[name] = method; + + if (this[name] == null && typeOf(method) == 'function') extend.call(this, name, function(item){ + return method.apply(item, slice.call(arguments, 1)); + }); +}; + +var extend = function(name, method){ + if (method && method.$hidden) return; + var previous = this[name]; + if (previous == null || !previous.$protected) this[name] = method; +}; + +Type.implement({ + + implement: implement.overloadSetter(), + + extend: extend.overloadSetter(), + + alias: function(name, existing){ + implement.call(this, name, this.prototype[existing]); + }.overloadSetter(), + + mirror: function(hook){ + hooksOf(this).push(hook); + return this; + } + +}); + +new Type('Type', Type); + +// Default Types + +var force = function(name, object, methods){ + var isType = (object != Object), + prototype = object.prototype; + + if (isType) object = new Type(name, object); + + for (var i = 0, l = methods.length; i < l; i++){ + var key = methods[i], + generic = object[key], + proto = prototype[key]; + + if (generic) generic.protect(); + + if (isType && proto){ + delete prototype[key]; + prototype[key] = proto.protect(); + } + } + + if (isType) object.implement(prototype); + + return force; +}; + +force('String', String, [ + 'charAt', 'charCodeAt', 'concat', 'indexOf', 'lastIndexOf', 'match', 'quote', 'replace', 'search', + 'slice', 'split', 'substr', 'substring', 'toLowerCase', 'toUpperCase' +])('Array', Array, [ + 'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice', + 'indexOf', 'lastIndexOf', 'filter', 'forEach', 'every', 'map', 'some', 'reduce', 'reduceRight' +])('Number', Number, [ + 'toExponential', 'toFixed', 'toLocaleString', 'toPrecision' +])('Function', Function, [ + 'apply', 'call', 'bind' +])('RegExp', RegExp, [ + 'exec', 'test' +])('Object', Object, [ + 'create', 'defineProperty', 'defineProperties', 'keys', + 'getPrototypeOf', 'getOwnPropertyDescriptor', 'getOwnPropertyNames', + 'preventExtensions', 'isExtensible', 'seal', 'isSealed', 'freeze', 'isFrozen' +])('Date', Date, ['now']); + +Object.extend = extend.overloadSetter(); + +Date.extend('now', function(){ + return +(new Date); +}); + +new Type('Boolean', Boolean); + +// fixes NaN returning as Number + +Number.prototype.$family = function(){ + return isFinite(this) ? 'number' : 'null'; +}.hide(); + +// Number.random + +Number.extend('random', function(min, max){ + return Math.floor(Math.random() * (max - min + 1) + min); +}); + +// forEach, each + +var hasOwnProperty = Object.prototype.hasOwnProperty; +Object.extend('forEach', function(object, fn, bind){ + for (var key in object){ + if (hasOwnProperty.call(object, key)) fn.call(bind, object[key], key, object); + } +}); + +Object.each = Object.forEach; + +Array.implement({ + + forEach: function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++){ + if (i in this) fn.call(bind, this[i], i, this); + } + }, + + each: function(fn, bind){ + Array.forEach(this, fn, bind); + return this; + } + +}); + +// Array & Object cloning, Object merging and appending + +var cloneOf = function(item){ + switch (typeOf(item)){ + case 'array': return item.clone(); + case 'object': return Object.clone(item); + default: return item; + } +}; + +Array.implement('clone', function(){ + var i = this.length, clone = new Array(i); + while (i--) clone[i] = cloneOf(this[i]); + return clone; +}); + +var mergeOne = function(source, key, current){ + switch (typeOf(current)){ + case 'object': + if (typeOf(source[key]) == 'object') Object.merge(source[key], current); + else source[key] = Object.clone(current); + break; + case 'array': source[key] = current.clone(); break; + default: source[key] = current; + } + return source; +}; + +Object.extend({ + + merge: function(source, k, v){ + if (typeOf(k) == 'string') return mergeOne(source, k, v); + for (var i = 1, l = arguments.length; i < l; i++){ + var object = arguments[i]; + for (var key in object) mergeOne(source, key, object[key]); + } + return source; + }, + + clone: function(object){ + var clone = {}; + for (var key in object) clone[key] = cloneOf(object[key]); + return clone; + }, + + append: function(original){ + for (var i = 1, l = arguments.length; i < l; i++){ + var extended = arguments[i] || {}; + for (var key in extended) original[key] = extended[key]; + } + return original; + } + +}); + +// Object-less types + +['Object', 'WhiteSpace', 'TextNode', 'Collection', 'Arguments'].each(function(name){ + new Type(name); +}); + +// Unique ID + +var UID = Date.now(); + +String.extend('uniqueID', function(){ + return (UID++).toString(36); +}); + +//<1.2compat> + +var Hash = this.Hash = new Type('Hash', function(object){ + if (typeOf(object) == 'hash') object = Object.clone(object.getClean()); + for (var key in object) this[key] = object[key]; + return this; +}); + +Hash.implement({ + + forEach: function(fn, bind){ + Object.forEach(this, fn, bind); + }, + + getClean: function(){ + var clean = {}; + for (var key in this){ + if (this.hasOwnProperty(key)) clean[key] = this[key]; + } + return clean; + }, + + getLength: function(){ + var length = 0; + for (var key in this){ + if (this.hasOwnProperty(key)) length++; + } + return length; + } + +}); + +Hash.alias('each', 'forEach'); + +Object.type = Type.isObject; + +var Native = this.Native = function(properties){ + return new Type(properties.name, properties.initialize); +}; + +Native.type = Type.type; + +Native.implement = function(objects, methods){ + for (var i = 0; i < objects.length; i++) objects[i].implement(methods); + return Native; +}; + +var arrayType = Array.type; +Array.type = function(item){ + return instanceOf(item, Array) || arrayType(item); +}; + +this.$A = function(item){ + return Array.from(item).slice(); +}; + +this.$arguments = function(i){ + return function(){ + return arguments[i]; + }; +}; + +this.$chk = function(obj){ + return !!(obj || obj === 0); +}; + +this.$clear = function(timer){ + clearTimeout(timer); + clearInterval(timer); + return null; +}; + +this.$defined = function(obj){ + return (obj != null); +}; + +this.$each = function(iterable, fn, bind){ + var type = typeOf(iterable); + ((type == 'arguments' || type == 'collection' || type == 'array' || type == 'elements') ? Array : Object).each(iterable, fn, bind); +}; + +this.$empty = function(){}; + +this.$extend = function(original, extended){ + return Object.append(original, extended); +}; + +this.$H = function(object){ + return new Hash(object); +}; + +this.$merge = function(){ + var args = Array.slice(arguments); + args.unshift({}); + return Object.merge.apply(null, args); +}; + +this.$lambda = Function.from; +this.$mixin = Object.merge; +this.$random = Number.random; +this.$splat = Array.from; +this.$time = Date.now; + +this.$type = function(object){ + var type = typeOf(object); + if (type == 'elements') return 'array'; + return (type == 'null') ? false : type; +}; + +this.$unlink = function(object){ + switch (typeOf(object)){ + case 'object': return Object.clone(object); + case 'array': return Array.clone(object); + case 'hash': return new Hash(object); + default: return object; + } +}; + +// + +})(); + + +/* +--- + +name: Array + +description: Contains Array Prototypes like each, contains, and erase. + +license: MIT-style license. + +requires: Type + +provides: Array + +... +*/ + +Array.implement({ + + /**/ + every: function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++){ + if ((i in this) && !fn.call(bind, this[i], i, this)) return false; + } + return true; + }, + + filter: function(fn, bind){ + var results = []; + for (var i = 0, l = this.length; i < l; i++){ + if ((i in this) && fn.call(bind, this[i], i, this)) results.push(this[i]); + } + return results; + }, + + indexOf: function(item, from){ + var len = this.length; + for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){ + if (this[i] === item) return i; + } + return -1; + }, + + map: function(fn, bind){ + var results = []; + for (var i = 0, l = this.length; i < l; i++){ + if (i in this) results[i] = fn.call(bind, this[i], i, this); + } + return results; + }, + + some: function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++){ + if ((i in this) && fn.call(bind, this[i], i, this)) return true; + } + return false; + }, + /**/ + + clean: function(){ + return this.filter(function(item){ + return item != null; + }); + }, + + invoke: function(methodName){ + var args = Array.slice(arguments, 1); + return this.map(function(item){ + return item[methodName].apply(item, args); + }); + }, + + associate: function(keys){ + var obj = {}, length = Math.min(this.length, keys.length); + for (var i = 0; i < length; i++) obj[keys[i]] = this[i]; + return obj; + }, + + link: function(object){ + var result = {}; + for (var i = 0, l = this.length; i < l; i++){ + for (var key in object){ + if (object[key](this[i])){ + result[key] = this[i]; + delete object[key]; + break; + } + } + } + return result; + }, + + contains: function(item, from){ + return this.indexOf(item, from) != -1; + }, + + append: function(array){ + this.push.apply(this, array); + return this; + }, + + getLast: function(){ + return (this.length) ? this[this.length - 1] : null; + }, + + getRandom: function(){ + return (this.length) ? this[Number.random(0, this.length - 1)] : null; + }, + + include: function(item){ + if (!this.contains(item)) this.push(item); + return this; + }, + + combine: function(array){ + for (var i = 0, l = array.length; i < l; i++) this.include(array[i]); + return this; + }, + + erase: function(item){ + for (var i = this.length; i--;){ + if (this[i] === item) this.splice(i, 1); + } + return this; + }, + + empty: function(){ + this.length = 0; + return this; + }, + + flatten: function(){ + var array = []; + for (var i = 0, l = this.length; i < l; i++){ + var type = typeOf(this[i]); + if (type == 'null') continue; + array = array.concat((type == 'array' || type == 'collection' || type == 'arguments' || instanceOf(this[i], Array)) ? Array.flatten(this[i]) : this[i]); + } + return array; + }, + + pick: function(){ + for (var i = 0, l = this.length; i < l; i++){ + if (this[i] != null) return this[i]; + } + return null; + }, + + hexToRgb: function(array){ + if (this.length != 3) return null; + var rgb = this.map(function(value){ + if (value.length == 1) value += value; + return value.toInt(16); + }); + return (array) ? rgb : 'rgb(' + rgb + ')'; + }, + + rgbToHex: function(array){ + if (this.length < 3) return null; + if (this.length == 4 && this[3] == 0 && !array) return 'transparent'; + var hex = []; + for (var i = 0; i < 3; i++){ + var bit = (this[i] - 0).toString(16); + hex.push((bit.length == 1) ? '0' + bit : bit); + } + return (array) ? hex : '#' + hex.join(''); + } + +}); + +//<1.2compat> + +Array.alias('extend', 'append'); + +var $pick = function(){ + return Array.from(arguments).pick(); +}; + +// + + +/* +--- + +name: String + +description: Contains String Prototypes like camelCase, capitalize, test, and toInt. + +license: MIT-style license. + +requires: Type + +provides: String + +... +*/ + +String.implement({ + + test: function(regex, params){ + return ((typeOf(regex) == 'regexp') ? regex : new RegExp('' + regex, params)).test(this); + }, + + contains: function(string, separator){ + return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1; + }, + + trim: function(){ + return this.replace(/^\s+|\s+$/g, ''); + }, + + clean: function(){ + return this.replace(/\s+/g, ' ').trim(); + }, + + camelCase: function(){ + return this.replace(/-\D/g, function(match){ + return match.charAt(1).toUpperCase(); + }); + }, + + hyphenate: function(){ + return this.replace(/[A-Z]/g, function(match){ + return ('-' + match.charAt(0).toLowerCase()); + }); + }, + + capitalize: function(){ + return this.replace(/\b[a-z]/g, function(match){ + return match.toUpperCase(); + }); + }, + + escapeRegExp: function(){ + return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1'); + }, + + toInt: function(base){ + return parseInt(this, base || 10); + }, + + toFloat: function(){ + return parseFloat(this); + }, + + hexToRgb: function(array){ + var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/); + return (hex) ? hex.slice(1).hexToRgb(array) : null; + }, + + rgbToHex: function(array){ + var rgb = this.match(/\d{1,3}/g); + return (rgb) ? rgb.rgbToHex(array) : null; + }, + + substitute: function(object, regexp){ + return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){ + if (match.charAt(0) == '\\') return match.slice(1); + return (object[name] != null) ? object[name] : ''; + }); + } + +}); + + +/* +--- + +name: Number + +description: Contains Number Prototypes like limit, round, times, and ceil. + +license: MIT-style license. + +requires: Type + +provides: Number + +... +*/ + +Number.implement({ + + limit: function(min, max){ + return Math.min(max, Math.max(min, this)); + }, + + round: function(precision){ + precision = Math.pow(10, precision || 0).toFixed(precision < 0 ? -precision : 0); + return Math.round(this * precision) / precision; + }, + + times: function(fn, bind){ + for (var i = 0; i < this; i++) fn.call(bind, i, this); + }, + + toFloat: function(){ + return parseFloat(this); + }, + + toInt: function(base){ + return parseInt(this, base || 10); + } + +}); + +Number.alias('each', 'times'); + +(function(math){ + var methods = {}; + math.each(function(name){ + if (!Number[name]) methods[name] = function(){ + return Math[name].apply(null, [this].concat(Array.from(arguments))); + }; + }); + Number.implement(methods); +})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']); + + +/* +--- + +name: Function + +description: Contains Function Prototypes like create, bind, pass, and delay. + +license: MIT-style license. + +requires: Type + +provides: Function + +... +*/ + +Function.extend({ + + attempt: function(){ + for (var i = 0, l = arguments.length; i < l; i++){ + try { + return arguments[i](); + } catch (e){} + } + return null; + } + +}); + +Function.implement({ + + attempt: function(args, bind){ + try { + return this.apply(bind, Array.from(args)); + } catch (e){} + + return null; + }, + + /**/ + bind: function(bind){ + var self = this, + args = (arguments.length > 1) ? Array.slice(arguments, 1) : null; + + return function(){ + if (!args && !arguments.length) return self.call(bind); + if (args && arguments.length) return self.apply(bind, args.concat(Array.from(arguments))); + return self.apply(bind, args || arguments); + }; + }, + /**/ + + pass: function(args, bind){ + var self = this; + if (args != null) args = Array.from(args); + return function(){ + return self.apply(bind, args || arguments); + }; + }, + + delay: function(delay, bind, args){ + return setTimeout(this.pass((args == null ? [] : args), bind), delay); + }, + + periodical: function(periodical, bind, args){ + return setInterval(this.pass((args == null ? [] : args), bind), periodical); + } + +}); + +//<1.2compat> + +delete Function.prototype.bind; + +Function.implement({ + + create: function(options){ + var self = this; + options = options || {}; + return function(event){ + var args = options.arguments; + args = (args != null) ? Array.from(args) : Array.slice(arguments, (options.event) ? 1 : 0); + if (options.event) args = [event || window.event].extend(args); + var returns = function(){ + return self.apply(options.bind || null, args); + }; + if (options.delay) return setTimeout(returns, options.delay); + if (options.periodical) return setInterval(returns, options.periodical); + if (options.attempt) return Function.attempt(returns); + return returns(); + }; + }, + + bind: function(bind, args){ + var self = this; + if (args != null) args = Array.from(args); + return function(){ + return self.apply(bind, args || arguments); + }; + }, + + bindWithEvent: function(bind, args){ + var self = this; + if (args != null) args = Array.from(args); + return function(event){ + return self.apply(bind, (args == null) ? arguments : [event].concat(args)); + }; + }, + + run: function(args, bind){ + return this.apply(bind, Array.from(args)); + } + +}); + +var $try = Function.attempt; + +// + + +/* +--- + +name: Object + +description: Object generic methods + +license: MIT-style license. + +requires: Type + +provides: [Object, Hash] + +... +*/ + +(function(){ + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +Object.extend({ + + subset: function(object, keys){ + var results = {}; + for (var i = 0, l = keys.length; i < l; i++){ + var k = keys[i]; + if (k in object) results[k] = object[k]; + } + return results; + }, + + map: function(object, fn, bind){ + var results = {}; + for (var key in object){ + if (hasOwnProperty.call(object, key)) results[key] = fn.call(bind, object[key], key, object); + } + return results; + }, + + filter: function(object, fn, bind){ + var results = {}; + for (var key in object){ + var value = object[key]; + if (hasOwnProperty.call(object, key) && fn.call(bind, value, key, object)) results[key] = value; + } + return results; + }, + + every: function(object, fn, bind){ + for (var key in object){ + if (hasOwnProperty.call(object, key) && !fn.call(bind, object[key], key)) return false; + } + return true; + }, + + some: function(object, fn, bind){ + for (var key in object){ + if (hasOwnProperty.call(object, key) && fn.call(bind, object[key], key)) return true; + } + return false; + }, + + keys: function(object){ + var keys = []; + for (var key in object){ + if (hasOwnProperty.call(object, key)) keys.push(key); + } + return keys; + }, + + values: function(object){ + var values = []; + for (var key in object){ + if (hasOwnProperty.call(object, key)) values.push(object[key]); + } + return values; + }, + + getLength: function(object){ + return Object.keys(object).length; + }, + + keyOf: function(object, value){ + for (var key in object){ + if (hasOwnProperty.call(object, key) && object[key] === value) return key; + } + return null; + }, + + contains: function(object, value){ + return Object.keyOf(object, value) != null; + }, + + toQueryString: function(object, base){ + var queryString = []; + + Object.each(object, function(value, key){ + if (base) key = base + '[' + key + ']'; + var result; + switch (typeOf(value)){ + case 'object': result = Object.toQueryString(value, key); break; + case 'array': + var qs = {}; + value.each(function(val, i){ + qs[i] = val; + }); + result = Object.toQueryString(qs, key); + break; + default: result = key + '=' + encodeURIComponent(value); + } + if (value != null) queryString.push(result); + }); + + return queryString.join('&'); + } + +}); + +})(); + +//<1.2compat> + +Hash.implement({ + + has: Object.prototype.hasOwnProperty, + + keyOf: function(value){ + return Object.keyOf(this, value); + }, + + hasValue: function(value){ + return Object.contains(this, value); + }, + + extend: function(properties){ + Hash.each(properties || {}, function(value, key){ + Hash.set(this, key, value); + }, this); + return this; + }, + + combine: function(properties){ + Hash.each(properties || {}, function(value, key){ + Hash.include(this, key, value); + }, this); + return this; + }, + + erase: function(key){ + if (this.hasOwnProperty(key)) delete this[key]; + return this; + }, + + get: function(key){ + return (this.hasOwnProperty(key)) ? this[key] : null; + }, + + set: function(key, value){ + if (!this[key] || this.hasOwnProperty(key)) this[key] = value; + return this; + }, + + empty: function(){ + Hash.each(this, function(value, key){ + delete this[key]; + }, this); + return this; + }, + + include: function(key, value){ + if (this[key] == null) this[key] = value; + return this; + }, + + map: function(fn, bind){ + return new Hash(Object.map(this, fn, bind)); + }, + + filter: function(fn, bind){ + return new Hash(Object.filter(this, fn, bind)); + }, + + every: function(fn, bind){ + return Object.every(this, fn, bind); + }, + + some: function(fn, bind){ + return Object.some(this, fn, bind); + }, + + getKeys: function(){ + return Object.keys(this); + }, + + getValues: function(){ + return Object.values(this); + }, + + toQueryString: function(base){ + return Object.toQueryString(this, base); + } + +}); + +Hash.extend = Object.append; + +Hash.alias({indexOf: 'keyOf', contains: 'hasValue'}); + +// + + +/* +--- + +name: Browser + +description: The Browser Object. Contains Browser initialization, Window and Document, and the Browser Hash. + +license: MIT-style license. + +requires: [Array, Function, Number, String] + +provides: [Browser, Window, Document] + +... +*/ + +(function(){ + +var document = this.document; +var window = document.window = this; + +var UID = 1; + +this.$uid = (window.ActiveXObject) ? function(item){ + return (item.uid || (item.uid = [UID++]))[0]; +} : function(item){ + return item.uid || (item.uid = UID++); +}; + +$uid(window); +$uid(document); + +var ua = navigator.userAgent.toLowerCase(), + platform = navigator.platform.toLowerCase(), + UA = ua.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/) || [null, 'unknown', 0], + mode = UA[1] == 'ie' && document.documentMode; + +var Browser = this.Browser = { + + extend: Function.prototype.extend, + + name: (UA[1] == 'version') ? UA[3] : UA[1], + + version: mode || parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : UA[2]), + + Platform: { + name: ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || ['other'])[0] + }, + + Features: { + xpath: !!(document.evaluate), + air: !!(window.runtime), + query: !!(document.querySelector), + json: !!(window.JSON) + }, + + Plugins: {} + +}; + +Browser[Browser.name] = true; +Browser[Browser.name + parseInt(Browser.version, 10)] = true; +Browser.Platform[Browser.Platform.name] = true; + +// Request + +Browser.Request = (function(){ + + var XMLHTTP = function(){ + return new XMLHttpRequest(); + }; + + var MSXML2 = function(){ + return new ActiveXObject('MSXML2.XMLHTTP'); + }; + + var MSXML = function(){ + return new ActiveXObject('Microsoft.XMLHTTP'); + }; + + return Function.attempt(function(){ + XMLHTTP(); + return XMLHTTP; + }, function(){ + MSXML2(); + return MSXML2; + }, function(){ + MSXML(); + return MSXML; + }); + +})(); + +Browser.Features.xhr = !!(Browser.Request); + +// Flash detection + +var version = (Function.attempt(function(){ + return navigator.plugins['Shockwave Flash'].description; +}, function(){ + return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); +}) || '0 r0').match(/\d+/g); + +Browser.Plugins.Flash = { + version: Number(version[0] || '0.' + version[1]) || 0, + build: Number(version[2]) || 0 +}; + +// String scripts + +Browser.exec = function(text){ + if (!text) return text; + if (window.execScript){ + window.execScript(text); + } else { + var script = document.createElement('script'); + script.setAttribute('type', 'text/javascript'); + script.text = text; + document.head.appendChild(script); + document.head.removeChild(script); + } + return text; +}; + +String.implement('stripScripts', function(exec){ + var scripts = ''; + var text = this.replace(/]*>([\s\S]*?)<\/script>/gi, function(all, code){ + scripts += code + '\n'; + return ''; + }); + if (exec === true) Browser.exec(scripts); + else if (typeOf(exec) == 'function') exec(scripts, text); + return text; +}); + +// Window, Document + +Browser.extend({ + Document: this.Document, + Window: this.Window, + Element: this.Element, + Event: this.Event +}); + +this.Window = this.$constructor = new Type('Window', function(){}); + +this.$family = Function.from('window').hide(); + +Window.mirror(function(name, method){ + window[name] = method; +}); + +this.Document = document.$constructor = new Type('Document', function(){}); + +document.$family = Function.from('document').hide(); + +Document.mirror(function(name, method){ + document[name] = method; +}); + +document.html = document.documentElement; +if (!document.head) document.head = document.getElementsByTagName('head')[0]; + +if (document.execCommand) try { + document.execCommand("BackgroundImageCache", false, true); +} catch (e){} + +/**/ +if (this.attachEvent && !this.addEventListener){ + var unloadEvent = function(){ + this.detachEvent('onunload', unloadEvent); + document.head = document.html = document.window = null; + }; + this.attachEvent('onunload', unloadEvent); +} + +// IE fails on collections and ) +var arrayFrom = Array.from; +try { + arrayFrom(document.html.childNodes); +} catch(e){ + Array.from = function(item){ + if (typeof item != 'string' && Type.isEnumerable(item) && typeOf(item) != 'array'){ + var i = item.length, array = new Array(i); + while (i--) array[i] = item[i]; + return array; + } + return arrayFrom(item); + }; + + var prototype = Array.prototype, + slice = prototype.slice; + ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice'].each(function(name){ + var method = prototype[name]; + Array[name] = function(item){ + return method.apply(Array.from(item), slice.call(arguments, 1)); + }; + }); +} +/**/ + +//<1.2compat> + +if (Browser.Platform.ios) Browser.Platform.ipod = true; + +Browser.Engine = {}; + +var setEngine = function(name, version){ + Browser.Engine.name = name; + Browser.Engine[name + version] = true; + Browser.Engine.version = version; +}; + +if (Browser.ie){ + Browser.Engine.trident = true; + + switch (Browser.version){ + case 6: setEngine('trident', 4); break; + case 7: setEngine('trident', 5); break; + case 8: setEngine('trident', 6); + } +} + +if (Browser.firefox){ + Browser.Engine.gecko = true; + + if (Browser.version >= 3) setEngine('gecko', 19); + else setEngine('gecko', 18); +} + +if (Browser.safari || Browser.chrome){ + Browser.Engine.webkit = true; + + switch (Browser.version){ + case 2: setEngine('webkit', 419); break; + case 3: setEngine('webkit', 420); break; + case 4: setEngine('webkit', 525); + } +} + +if (Browser.opera){ + Browser.Engine.presto = true; + + if (Browser.version >= 9.6) setEngine('presto', 960); + else if (Browser.version >= 9.5) setEngine('presto', 950); + else setEngine('presto', 925); +} + +if (Browser.name == 'unknown'){ + switch ((ua.match(/(?:webkit|khtml|gecko)/) || [])[0]){ + case 'webkit': + case 'khtml': + Browser.Engine.webkit = true; + break; + case 'gecko': + Browser.Engine.gecko = true; + } +} + +this.$exec = Browser.exec; + +// + +})(); + + +/* +--- + +name: Event + +description: Contains the Event Class, to make the event object cross-browser. + +license: MIT-style license. + +requires: [Window, Document, Array, Function, String, Object] + +provides: Event + +... +*/ + +var Event = new Type('Event', function(event, win){ + if (!win) win = window; + var doc = win.document; + event = event || win.event; + if (event.$extended) return event; + this.$extended = true; + var type = event.type, + target = event.target || event.srcElement, + page = {}, + client = {}, + related = null, + rightClick, wheel, code, key; + while (target && target.nodeType == 3) target = target.parentNode; + + if (type.indexOf('key') != -1){ + code = event.which || event.keyCode; + key = Object.keyOf(Event.Keys, code); + if (type == 'keydown'){ + var fKey = code - 111; + if (fKey > 0 && fKey < 13) key = 'f' + fKey; + } + if (!key) key = String.fromCharCode(code).toLowerCase(); + } else if ((/click|mouse|menu/i).test(type)){ + doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body; + page = { + x: (event.pageX != null) ? event.pageX : event.clientX + doc.scrollLeft, + y: (event.pageY != null) ? event.pageY : event.clientY + doc.scrollTop + }; + client = { + x: (event.pageX != null) ? event.pageX - win.pageXOffset : event.clientX, + y: (event.pageY != null) ? event.pageY - win.pageYOffset : event.clientY + }; + if ((/DOMMouseScroll|mousewheel/).test(type)){ + wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3; + } + rightClick = (event.which == 3) || (event.button == 2); + if ((/over|out/).test(type)){ + related = event.relatedTarget || event[(type == 'mouseover' ? 'from' : 'to') + 'Element']; + var testRelated = function(){ + while (related && related.nodeType == 3) related = related.parentNode; + return true; + }; + var hasRelated = (Browser.firefox2) ? testRelated.attempt() : testRelated(); + related = (hasRelated) ? related : null; + } + } else if ((/gesture|touch/i).test(type)){ + this.rotation = event.rotation; + this.scale = event.scale; + this.targetTouches = event.targetTouches; + this.changedTouches = event.changedTouches; + var touches = this.touches = event.touches; + if (touches && touches[0]){ + var touch = touches[0]; + page = {x: touch.pageX, y: touch.pageY}; + client = {x: touch.clientX, y: touch.clientY}; + } + } + + return Object.append(this, { + event: event, + type: type, + + page: page, + client: client, + rightClick: rightClick, + + wheel: wheel, + + relatedTarget: document.id(related), + target: document.id(target), + + code: code, + key: key, + + shift: event.shiftKey, + control: event.ctrlKey, + alt: event.altKey, + meta: event.metaKey + }); +}); + +Event.Keys = { + 'enter': 13, + 'up': 38, + 'down': 40, + 'left': 37, + 'right': 39, + 'esc': 27, + 'space': 32, + 'backspace': 8, + 'tab': 9, + 'delete': 46 +}; + +//<1.2compat> + +Event.Keys = new Hash(Event.Keys); + +// + +Event.implement({ + + stop: function(){ + return this.stopPropagation().preventDefault(); + }, + + stopPropagation: function(){ + if (this.event.stopPropagation) this.event.stopPropagation(); + else this.event.cancelBubble = true; + return this; + }, + + preventDefault: function(){ + if (this.event.preventDefault) this.event.preventDefault(); + else this.event.returnValue = false; + return this; + } + +}); + + +/* +--- + +name: Class + +description: Contains the Class Function for easily creating, extending, and implementing reusable Classes. + +license: MIT-style license. + +requires: [Array, String, Function, Number] + +provides: Class + +... +*/ + +(function(){ + +var Class = this.Class = new Type('Class', function(params){ + if (instanceOf(params, Function)) params = {initialize: params}; + + var newClass = function(){ + reset(this); + if (newClass.$prototyping) return this; + this.$caller = null; + var value = (this.initialize) ? this.initialize.apply(this, arguments) : this; + this.$caller = this.caller = null; + return value; + }.extend(this).implement(params); + + newClass.$constructor = Class; + newClass.prototype.$constructor = newClass; + newClass.prototype.parent = parent; + + return newClass; +}); + +var parent = function(){ + if (!this.$caller) throw new Error('The method "parent" cannot be called.'); + var name = this.$caller.$name, + parent = this.$caller.$owner.parent, + previous = (parent) ? parent.prototype[name] : null; + if (!previous) throw new Error('The method "' + name + '" has no parent.'); + return previous.apply(this, arguments); +}; + +var reset = function(object){ + for (var key in object){ + var value = object[key]; + switch (typeOf(value)){ + case 'object': + var F = function(){}; + F.prototype = value; + object[key] = reset(new F); + break; + case 'array': object[key] = value.clone(); break; + } + } + return object; +}; + +var wrap = function(self, key, method){ + if (method.$origin) method = method.$origin; + var wrapper = function(){ + if (method.$protected && this.$caller == null) throw new Error('The method "' + key + '" cannot be called.'); + var caller = this.caller, current = this.$caller; + this.caller = current; this.$caller = wrapper; + var result = method.apply(this, arguments); + this.$caller = current; this.caller = caller; + return result; + }.extend({$owner: self, $origin: method, $name: key}); + return wrapper; +}; + +var implement = function(key, value, retain){ + if (Class.Mutators.hasOwnProperty(key)){ + value = Class.Mutators[key].call(this, value); + if (value == null) return this; + } + + if (typeOf(value) == 'function'){ + if (value.$hidden) return this; + this.prototype[key] = (retain) ? value : wrap(this, key, value); + } else { + Object.merge(this.prototype, key, value); + } + + return this; +}; + +var getInstance = function(klass){ + klass.$prototyping = true; + var proto = new klass; + delete klass.$prototyping; + return proto; +}; + +Class.implement('implement', implement.overloadSetter()); + +Class.Mutators = { + + Extends: function(parent){ + this.parent = parent; + this.prototype = getInstance(parent); + }, + + Implements: function(items){ + Array.from(items).each(function(item){ + var instance = new item; + for (var key in instance) implement.call(this, key, instance[key], true); + }, this); + } +}; + +})(); + + +/* +--- + +name: Class.Extras + +description: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks. + +license: MIT-style license. + +requires: Class + +provides: [Class.Extras, Chain, Events, Options] + +... +*/ + +(function(){ + +this.Chain = new Class({ + + $chain: [], + + chain: function(){ + this.$chain.append(Array.flatten(arguments)); + return this; + }, + + callChain: function(){ + return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false; + }, + + clearChain: function(){ + this.$chain.empty(); + return this; + } + +}); + +var removeOn = function(string){ + return string.replace(/^on([A-Z])/, function(full, first){ + return first.toLowerCase(); + }); +}; + +this.Events = new Class({ + + $events: {}, + + addEvent: function(type, fn, internal){ + type = removeOn(type); + + /*<1.2compat>*/ + if (fn == $empty) return this; + /**/ + + this.$events[type] = (this.$events[type] || []).include(fn); + if (internal) fn.internal = true; + return this; + }, + + addEvents: function(events){ + for (var type in events) this.addEvent(type, events[type]); + return this; + }, + + fireEvent: function(type, args, delay){ + type = removeOn(type); + var events = this.$events[type]; + if (!events) return this; + args = Array.from(args); + events.each(function(fn){ + if (delay) fn.delay(delay, this, args); + else fn.apply(this, args); + }, this); + return this; + }, + + removeEvent: function(type, fn){ + type = removeOn(type); + var events = this.$events[type]; + if (events && !fn.internal){ + var index = events.indexOf(fn); + if (index != -1) delete events[index]; + } + return this; + }, + + removeEvents: function(events){ + var type; + if (typeOf(events) == 'object'){ + for (type in events) this.removeEvent(type, events[type]); + return this; + } + if (events) events = removeOn(events); + for (type in this.$events){ + if (events && events != type) continue; + var fns = this.$events[type]; + for (var i = fns.length; i--;) if (i in fns){ + this.removeEvent(type, fns[i]); + } + } + return this; + } + +}); + +this.Options = new Class({ + + setOptions: function(){ + var options = this.options = Object.merge.apply(null, [{}, this.options].append(arguments)); + if (this.addEvent) for (var option in options){ + if (typeOf(options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue; + this.addEvent(option, options[option]); + delete options[option]; + } + return this; + } + +}); + +})(); + + +/* +--- +name: Slick.Parser +description: Standalone CSS3 Selector parser +provides: Slick.Parser +... +*/ + +(function(){ + +var parsed, + separatorIndex, + combinatorIndex, + reversed, + cache = {}, + reverseCache = {}, + reUnescape = /\\/g; + +var parse = function(expression, isReversed){ + if (expression == null) return null; + if (expression.Slick === true) return expression; + expression = ('' + expression).replace(/^\s+|\s+$/g, ''); + reversed = !!isReversed; + var currentCache = (reversed) ? reverseCache : cache; + if (currentCache[expression]) return currentCache[expression]; + parsed = { + Slick: true, + expressions: [], + raw: expression, + reverse: function(){ + return parse(this.raw, true); + } + }; + separatorIndex = -1; + while (expression != (expression = expression.replace(regexp, parser))); + parsed.length = parsed.expressions.length; + return currentCache[parsed.raw] = (reversed) ? reverse(parsed) : parsed; +}; + +var reverseCombinator = function(combinator){ + if (combinator === '!') return ' '; + else if (combinator === ' ') return '!'; + else if ((/^!/).test(combinator)) return combinator.replace(/^!/, ''); + else return '!' + combinator; +}; + +var reverse = function(expression){ + var expressions = expression.expressions; + for (var i = 0; i < expressions.length; i++){ + var exp = expressions[i]; + var last = {parts: [], tag: '*', combinator: reverseCombinator(exp[0].combinator)}; + + for (var j = 0; j < exp.length; j++){ + var cexp = exp[j]; + if (!cexp.reverseCombinator) cexp.reverseCombinator = ' '; + cexp.combinator = cexp.reverseCombinator; + delete cexp.reverseCombinator; + } + + exp.reverse().push(last); + } + return expression; +}; + +var escapeRegExp = function(string){// Credit: XRegExp 0.6.1 (c) 2007-2008 Steven Levithan MIT License + return string.replace(/[-[\]{}()*+?.\\^$|,#\s]/g, function(match){ + return '\\' + match; + }); +}; + +var regexp = new RegExp( +/* +#!/usr/bin/env ruby +puts "\t\t" + DATA.read.gsub(/\(\?x\)|\s+#.*$|\s+|\\$|\\n/,'') +__END__ + "(?x)^(?:\ + \\s* ( , ) \\s* # Separator \n\ + | \\s* ( + ) \\s* # Combinator \n\ + | ( \\s+ ) # CombinatorChildren \n\ + | ( + | \\* ) # Tag \n\ + | \\# ( + ) # ID \n\ + | \\. ( + ) # ClassName \n\ + | # Attribute \n\ + \\[ \ + \\s* (+) (?: \ + \\s* ([*^$!~|]?=) (?: \ + \\s* (?:\ + ([\"']?)(.*?)\\9 \ + )\ + ) \ + )? \\s* \ + \\](?!\\]) \n\ + | :+ ( + )(?:\ + \\( (?:\ + (?:([\"'])([^\\12]*)\\12)|((?:\\([^)]+\\)|[^()]*)+)\ + ) \\)\ + )?\ + )" +*/ + "^(?:\\s*(,)\\s*|\\s*(+)\\s*|(\\s+)|(+|\\*)|\\#(+)|\\.(+)|\\[\\s*(+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)" + .replace(//, '[' + escapeRegExp(">+~`!@$%^&={}\\;/g, '(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])') + .replace(//g, '(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])') +); + +function parser( + rawMatch, + + separator, + combinator, + combinatorChildren, + + tagName, + id, + className, + + attributeKey, + attributeOperator, + attributeQuote, + attributeValue, + + pseudoMarker, + pseudoClass, + pseudoQuote, + pseudoClassQuotedValue, + pseudoClassValue +){ + if (separator || separatorIndex === -1){ + parsed.expressions[++separatorIndex] = []; + combinatorIndex = -1; + if (separator) return ''; + } + + if (combinator || combinatorChildren || combinatorIndex === -1){ + combinator = combinator || ' '; + var currentSeparator = parsed.expressions[separatorIndex]; + if (reversed && currentSeparator[combinatorIndex]) + currentSeparator[combinatorIndex].reverseCombinator = reverseCombinator(combinator); + currentSeparator[++combinatorIndex] = {combinator: combinator, tag: '*'}; + } + + var currentParsed = parsed.expressions[separatorIndex][combinatorIndex]; + + if (tagName){ + currentParsed.tag = tagName.replace(reUnescape, ''); + + } else if (id){ + currentParsed.id = id.replace(reUnescape, ''); + + } else if (className){ + className = className.replace(reUnescape, ''); + + if (!currentParsed.classList) currentParsed.classList = []; + if (!currentParsed.classes) currentParsed.classes = []; + currentParsed.classList.push(className); + currentParsed.classes.push({ + value: className, + regexp: new RegExp('(^|\\s)' + escapeRegExp(className) + '(\\s|$)') + }); + + } else if (pseudoClass){ + pseudoClassValue = pseudoClassValue || pseudoClassQuotedValue; + pseudoClassValue = pseudoClassValue ? pseudoClassValue.replace(reUnescape, '') : null; + + if (!currentParsed.pseudos) currentParsed.pseudos = []; + currentParsed.pseudos.push({ + key: pseudoClass.replace(reUnescape, ''), + value: pseudoClassValue, + type: pseudoMarker.length == 1 ? 'class' : 'element' + }); + + } else if (attributeKey){ + attributeKey = attributeKey.replace(reUnescape, ''); + attributeValue = (attributeValue || '').replace(reUnescape, ''); + + var test, regexp; + + switch (attributeOperator){ + case '^=' : regexp = new RegExp( '^'+ escapeRegExp(attributeValue) ); break; + case '$=' : regexp = new RegExp( escapeRegExp(attributeValue) +'$' ); break; + case '~=' : regexp = new RegExp( '(^|\\s)'+ escapeRegExp(attributeValue) +'(\\s|$)' ); break; + case '|=' : regexp = new RegExp( '^'+ escapeRegExp(attributeValue) +'(-|$)' ); break; + case '=' : test = function(value){ + return attributeValue == value; + }; break; + case '*=' : test = function(value){ + return value && value.indexOf(attributeValue) > -1; + }; break; + case '!=' : test = function(value){ + return attributeValue != value; + }; break; + default : test = function(value){ + return !!value; + }; + } + + if (attributeValue == '' && (/^[*$^]=$/).test(attributeOperator)) test = function(){ + return false; + }; + + if (!test) test = function(value){ + return value && regexp.test(value); + }; + + if (!currentParsed.attributes) currentParsed.attributes = []; + currentParsed.attributes.push({ + key: attributeKey, + operator: attributeOperator, + value: attributeValue, + test: test + }); + + } + + return ''; +}; + +// Slick NS + +var Slick = (this.Slick || {}); + +Slick.parse = function(expression){ + return parse(expression); +}; + +Slick.escapeRegExp = escapeRegExp; + +if (!this.Slick) this.Slick = Slick; + +}).apply(/**/(typeof exports != 'undefined') ? exports : /**/this); + + +/* +--- +name: Slick.Finder +description: The new, superfast css selector engine. +provides: Slick.Finder +requires: Slick.Parser +... +*/ + +(function(){ + +var local = {}, + featuresCache = {}, + toString = Object.prototype.toString; + +// Feature / Bug detection + +local.isNativeCode = function(fn){ + return (/\{\s*\[native code\]\s*\}/).test('' + fn); +}; + +local.isXML = function(document){ + return (!!document.xmlVersion) || (!!document.xml) || (toString.call(document) == '[object XMLDocument]') || + (document.nodeType == 9 && document.documentElement.nodeName != 'HTML'); +}; + +local.setDocument = function(document){ + + // convert elements / window arguments to document. if document cannot be extrapolated, the function returns. + var nodeType = document.nodeType; + if (nodeType == 9); // document + else if (nodeType) document = document.ownerDocument; // node + else if (document.navigator) document = document.document; // window + else return; + + // check if it's the old document + + if (this.document === document) return; + this.document = document; + + // check if we have done feature detection on this document before + + var root = document.documentElement, + rootUid = this.getUIDXML(root), + features = featuresCache[rootUid], + feature; + + if (features){ + for (feature in features){ + this[feature] = features[feature]; + } + return; + } + + features = featuresCache[rootUid] = {}; + + features.root = root; + features.isXMLDocument = this.isXML(document); + + features.brokenStarGEBTN + = features.starSelectsClosedQSA + = features.idGetsName + = features.brokenMixedCaseQSA + = features.brokenGEBCN + = features.brokenCheckedQSA + = features.brokenEmptyAttributeQSA + = features.isHTMLDocument + = features.nativeMatchesSelector + = false; + + var starSelectsClosed, starSelectsComments, + brokenSecondClassNameGEBCN, cachedGetElementsByClassName, + brokenFormAttributeGetter; + + var selected, id = 'slick_uniqueid'; + var testNode = document.createElement('div'); + + var testRoot = document.body || document.getElementsByTagName('body')[0] || root; + testRoot.appendChild(testNode); + + // on non-HTML documents innerHTML and getElementsById doesnt work properly + try { + testNode.innerHTML = ''; + features.isHTMLDocument = !!document.getElementById(id); + } catch(e){}; + + if (features.isHTMLDocument){ + + testNode.style.display = 'none'; + + // IE returns comment nodes for getElementsByTagName('*') for some documents + testNode.appendChild(document.createComment('')); + starSelectsComments = (testNode.getElementsByTagName('*').length > 1); + + // IE returns closed nodes (EG:"") for getElementsByTagName('*') for some documents + try { + testNode.innerHTML = 'foo'; + selected = testNode.getElementsByTagName('*'); + starSelectsClosed = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/'); + } catch(e){}; + + features.brokenStarGEBTN = starSelectsComments || starSelectsClosed; + + // IE returns elements with the name instead of just id for getElementsById for some documents + try { + testNode.innerHTML = ''; + features.idGetsName = document.getElementById(id) === testNode.firstChild; + } catch(e){}; + + if (testNode.getElementsByClassName){ + + // Safari 3.2 getElementsByClassName caches results + try { + testNode.innerHTML = ''; + testNode.getElementsByClassName('b').length; + testNode.firstChild.className = 'b'; + cachedGetElementsByClassName = (testNode.getElementsByClassName('b').length != 2); + } catch(e){}; + + // Opera 9.6 getElementsByClassName doesnt detects the class if its not the first one + try { + testNode.innerHTML = ''; + brokenSecondClassNameGEBCN = (testNode.getElementsByClassName('a').length != 2); + } catch(e){}; + + features.brokenGEBCN = cachedGetElementsByClassName || brokenSecondClassNameGEBCN; + } + + if (testNode.querySelectorAll){ + // IE 8 returns closed nodes (EG:"") for querySelectorAll('*') for some documents + try { + testNode.innerHTML = 'foo'; + selected = testNode.querySelectorAll('*'); + features.starSelectsClosedQSA = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/'); + } catch(e){}; + + // Safari 3.2 querySelectorAll doesnt work with mixedcase on quirksmode + try { + testNode.innerHTML = ''; + features.brokenMixedCaseQSA = !testNode.querySelectorAll('.MiX').length; + } catch(e){}; + + // Webkit and Opera dont return selected options on querySelectorAll + try { + testNode.innerHTML = ''; + features.brokenCheckedQSA = (testNode.querySelectorAll(':checked').length == 0); + } catch(e){}; + + // IE returns incorrect results for attr[*^$]="" selectors on querySelectorAll + try { + testNode.innerHTML = ''; + features.brokenEmptyAttributeQSA = (testNode.querySelectorAll('[class*=""]').length != 0); + } catch(e){}; + + } + + // IE6-7, if a form has an input of id x, form.getAttribute(x) returns a reference to the input + try { + testNode.innerHTML = '
'; + brokenFormAttributeGetter = (testNode.firstChild.getAttribute('action') != 's'); + } catch(e){}; + + // native matchesSelector function + + features.nativeMatchesSelector = root.matchesSelector || /*root.msMatchesSelector ||*/ root.mozMatchesSelector || root.webkitMatchesSelector; + if (features.nativeMatchesSelector) try { + // if matchesSelector trows errors on incorrect sintaxes we can use it + features.nativeMatchesSelector.call(root, ':slick'); + features.nativeMatchesSelector = null; + } catch(e){}; + + } + + try { + root.slick_expando = 1; + delete root.slick_expando; + features.getUID = this.getUIDHTML; + } catch(e) { + features.getUID = this.getUIDXML; + } + + testRoot.removeChild(testNode); + testNode = selected = testRoot = null; + + // getAttribute + + features.getAttribute = (features.isHTMLDocument && brokenFormAttributeGetter) ? function(node, name){ + var method = this.attributeGetters[name]; + if (method) return method.call(node); + var attributeNode = node.getAttributeNode(name); + return (attributeNode) ? attributeNode.nodeValue : null; + } : function(node, name){ + var method = this.attributeGetters[name]; + return (method) ? method.call(node) : node.getAttribute(name); + }; + + // hasAttribute + + features.hasAttribute = (root && this.isNativeCode(root.hasAttribute)) ? function(node, attribute) { + return node.hasAttribute(attribute); + } : function(node, attribute) { + node = node.getAttributeNode(attribute); + return !!(node && (node.specified || node.nodeValue)); + }; + + // contains + // FIXME: Add specs: local.contains should be different for xml and html documents? + features.contains = (root && this.isNativeCode(root.contains)) ? function(context, node){ + return context.contains(node); + } : (root && root.compareDocumentPosition) ? function(context, node){ + return context === node || !!(context.compareDocumentPosition(node) & 16); + } : function(context, node){ + if (node) do { + if (node === context) return true; + } while ((node = node.parentNode)); + return false; + }; + + // document order sorting + // credits to Sizzle (http://sizzlejs.com/) + + features.documentSorter = (root.compareDocumentPosition) ? function(a, b){ + if (!a.compareDocumentPosition || !b.compareDocumentPosition) return 0; + return a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; + } : ('sourceIndex' in root) ? function(a, b){ + if (!a.sourceIndex || !b.sourceIndex) return 0; + return a.sourceIndex - b.sourceIndex; + } : (document.createRange) ? function(a, b){ + if (!a.ownerDocument || !b.ownerDocument) return 0; + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.setStart(a, 0); + aRange.setEnd(a, 0); + bRange.setStart(b, 0); + bRange.setEnd(b, 0); + return aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + } : null ; + + root = null; + + for (feature in features){ + this[feature] = features[feature]; + } +}; + +// Main Method + +var reSimpleSelector = /^([#.]?)((?:[\w-]+|\*))$/, + reEmptyAttribute = /\[.+[*$^]=(?:""|'')?\]/, + qsaFailExpCache = {}; + +local.search = function(context, expression, append, first){ + + var found = this.found = (first) ? null : (append || []); + + if (!context) return found; + else if (context.navigator) context = context.document; // Convert the node from a window to a document + else if (!context.nodeType) return found; + + // setup + + var parsed, i, + uniques = this.uniques = {}, + hasOthers = !!(append && append.length), + contextIsDocument = (context.nodeType == 9); + + if (this.document !== (contextIsDocument ? context : context.ownerDocument)) this.setDocument(context); + + // avoid duplicating items already in the append array + if (hasOthers) for (i = found.length; i--;) uniques[this.getUID(found[i])] = true; + + // expression checks + + if (typeof expression == 'string'){ // expression is a string + + /**/ + var simpleSelector = expression.match(reSimpleSelector); + simpleSelectors: if (simpleSelector) { + + var symbol = simpleSelector[1], + name = simpleSelector[2], + node, nodes; + + if (!symbol){ + + if (name == '*' && this.brokenStarGEBTN) break simpleSelectors; + nodes = context.getElementsByTagName(name); + if (first) return nodes[0] || null; + for (i = 0; node = nodes[i++];){ + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + + } else if (symbol == '#'){ + + if (!this.isHTMLDocument || !contextIsDocument) break simpleSelectors; + node = context.getElementById(name); + if (!node) return found; + if (this.idGetsName && node.getAttributeNode('id').nodeValue != name) break simpleSelectors; + if (first) return node || null; + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + + } else if (symbol == '.'){ + + if (!this.isHTMLDocument || ((!context.getElementsByClassName || this.brokenGEBCN) && context.querySelectorAll)) break simpleSelectors; + if (context.getElementsByClassName && !this.brokenGEBCN){ + nodes = context.getElementsByClassName(name); + if (first) return nodes[0] || null; + for (i = 0; node = nodes[i++];){ + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + } else { + var matchClass = new RegExp('(^|\\s)'+ Slick.escapeRegExp(name) +'(\\s|$)'); + nodes = context.getElementsByTagName('*'); + for (i = 0; node = nodes[i++];){ + className = node.className; + if (!(className && matchClass.test(className))) continue; + if (first) return node; + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + } + + } + + if (hasOthers) this.sort(found); + return (first) ? null : found; + + } + /**/ + + /**/ + querySelector: if (context.querySelectorAll) { + + if (!this.isHTMLDocument + || qsaFailExpCache[expression] + //TODO: only skip when expression is actually mixed case + || this.brokenMixedCaseQSA + || (this.brokenCheckedQSA && expression.indexOf(':checked') > -1) + || (this.brokenEmptyAttributeQSA && reEmptyAttribute.test(expression)) + || (!contextIsDocument //Abort when !contextIsDocument and... + // there are multiple expressions in the selector + // since we currently only fix non-document rooted QSA for single expression selectors + && expression.indexOf(',') > -1 + ) + || Slick.disableQSA + ) break querySelector; + + var _expression = expression, _context = context; + if (!contextIsDocument){ + // non-document rooted QSA + // credits to Andrew Dupont + var currentId = _context.getAttribute('id'), slickid = 'slickid__'; + _context.setAttribute('id', slickid); + _expression = '#' + slickid + ' ' + _expression; + context = _context.parentNode; + } + + try { + if (context == null) { + qsaFailExpCache[expression] = 1; + break querySelector; + } + else if (first) return context.querySelector(_expression) || null; + else nodes = context.querySelectorAll(_expression); + } catch(e) { + qsaFailExpCache[expression] = 1; + break querySelector; + } finally { + if (!contextIsDocument){ + if (currentId) _context.setAttribute('id', currentId); + else _context.removeAttribute('id'); + context = _context; + } + } + + if (this.starSelectsClosedQSA) for (i = 0; node = nodes[i++];){ + if (node.nodeName > '@' && !(hasOthers && uniques[this.getUID(node)])) found.push(node); + } else for (i = 0; node = nodes[i++];){ + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + + if (hasOthers) this.sort(found); + return found; + + } + /**/ + + parsed = this.Slick.parse(expression); + if (!parsed.length) return found; + } else if (expression == null){ // there is no expression + return found; + } else if (expression.Slick){ // expression is a parsed Slick object + parsed = expression; + } else if (this.contains(context.documentElement || context, expression)){ // expression is a node + (found) ? found.push(expression) : found = expression; + return found; + } else { // other junk + return found; + } + + /**//**/ + + // cache elements for the nth selectors + + this.posNTH = {}; + this.posNTHLast = {}; + this.posNTHType = {}; + this.posNTHTypeLast = {}; + + /**//**/ + + // if append is null and there is only a single selector with one expression use pushArray, else use pushUID + this.push = (!hasOthers && (first || (parsed.length == 1 && parsed.expressions[0].length == 1))) ? this.pushArray : this.pushUID; + + if (found == null) found = []; + + // default engine + + var j, m, n; + var combinator, tag, id, classList, classes, attributes, pseudos; + var currentItems, currentExpression, currentBit, lastBit, expressions = parsed.expressions; + + search: for (i = 0; (currentExpression = expressions[i]); i++) for (j = 0; (currentBit = currentExpression[j]); j++){ + + combinator = 'combinator:' + currentBit.combinator; + if (!this[combinator]) continue search; + + tag = (this.isXMLDocument) ? currentBit.tag : currentBit.tag.toUpperCase(); + id = currentBit.id; + classList = currentBit.classList; + classes = currentBit.classes; + attributes = currentBit.attributes; + pseudos = currentBit.pseudos; + lastBit = (j === (currentExpression.length - 1)); + + this.bitUniques = {}; + + if (lastBit){ + this.uniques = uniques; + this.found = found; + } else { + this.uniques = {}; + this.found = []; + } + + if (j === 0){ + this[combinator](context, tag, id, classes, attributes, pseudos, classList); + if (first && lastBit && found.length) break search; + } else { + if (first && lastBit) for (m = 0, n = currentItems.length; m < n; m++){ + this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList); + if (found.length) break search; + } else for (m = 0, n = currentItems.length; m < n; m++) this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList); + } + + currentItems = this.found; + } + + // should sort if there are nodes in append and if you pass multiple expressions. + if (hasOthers || (parsed.expressions.length > 1)) this.sort(found); + + return (first) ? (found[0] || null) : found; +}; + +// Utils + +local.uidx = 1; +local.uidk = 'slick-uniqueid'; + +local.getUIDXML = function(node){ + var uid = node.getAttribute(this.uidk); + if (!uid){ + uid = this.uidx++; + node.setAttribute(this.uidk, uid); + } + return uid; +}; + +local.getUIDHTML = function(node){ + return node.uniqueNumber || (node.uniqueNumber = this.uidx++); +}; + +// sort based on the setDocument documentSorter method. + +local.sort = function(results){ + if (!this.documentSorter) return results; + results.sort(this.documentSorter); + return results; +}; + +/**//**/ + +local.cacheNTH = {}; + +local.matchNTH = /^([+-]?\d*)?([a-z]+)?([+-]\d+)?$/; + +local.parseNTHArgument = function(argument){ + var parsed = argument.match(this.matchNTH); + if (!parsed) return false; + var special = parsed[2] || false; + var a = parsed[1] || 1; + if (a == '-') a = -1; + var b = +parsed[3] || 0; + parsed = + (special == 'n') ? {a: a, b: b} : + (special == 'odd') ? {a: 2, b: 1} : + (special == 'even') ? {a: 2, b: 0} : {a: 0, b: a}; + + return (this.cacheNTH[argument] = parsed); +}; + +local.createNTHPseudo = function(child, sibling, positions, ofType){ + return function(node, argument){ + var uid = this.getUID(node); + if (!this[positions][uid]){ + var parent = node.parentNode; + if (!parent) return false; + var el = parent[child], count = 1; + if (ofType){ + var nodeName = node.nodeName; + do { + if (el.nodeName != nodeName) continue; + this[positions][this.getUID(el)] = count++; + } while ((el = el[sibling])); + } else { + do { + if (el.nodeType != 1) continue; + this[positions][this.getUID(el)] = count++; + } while ((el = el[sibling])); + } + } + argument = argument || 'n'; + var parsed = this.cacheNTH[argument] || this.parseNTHArgument(argument); + if (!parsed) return false; + var a = parsed.a, b = parsed.b, pos = this[positions][uid]; + if (a == 0) return b == pos; + if (a > 0){ + if (pos < b) return false; + } else { + if (b < pos) return false; + } + return ((pos - b) % a) == 0; + }; +}; + +/**//**/ + +local.pushArray = function(node, tag, id, classes, attributes, pseudos){ + if (this.matchSelector(node, tag, id, classes, attributes, pseudos)) this.found.push(node); +}; + +local.pushUID = function(node, tag, id, classes, attributes, pseudos){ + var uid = this.getUID(node); + if (!this.uniques[uid] && this.matchSelector(node, tag, id, classes, attributes, pseudos)){ + this.uniques[uid] = true; + this.found.push(node); + } +}; + +local.matchNode = function(node, selector){ + if (this.isHTMLDocument && this.nativeMatchesSelector){ + try { + return this.nativeMatchesSelector.call(node, selector.replace(/\[([^=]+)=\s*([^'"\]]+?)\s*\]/g, '[$1="$2"]')); + } catch(matchError) {} + } + + var parsed = this.Slick.parse(selector); + if (!parsed) return true; + + // simple (single) selectors + var expressions = parsed.expressions, reversedExpressions, simpleExpCounter = 0, i; + for (i = 0; (currentExpression = expressions[i]); i++){ + if (currentExpression.length == 1){ + var exp = currentExpression[0]; + if (this.matchSelector(node, (this.isXMLDocument) ? exp.tag : exp.tag.toUpperCase(), exp.id, exp.classes, exp.attributes, exp.pseudos)) return true; + simpleExpCounter++; + } + } + + if (simpleExpCounter == parsed.length) return false; + + var nodes = this.search(this.document, parsed), item; + for (i = 0; item = nodes[i++];){ + if (item === node) return true; + } + return false; +}; + +local.matchPseudo = function(node, name, argument){ + var pseudoName = 'pseudo:' + name; + if (this[pseudoName]) return this[pseudoName](node, argument); + var attribute = this.getAttribute(node, name); + return (argument) ? argument == attribute : !!attribute; +}; + +local.matchSelector = function(node, tag, id, classes, attributes, pseudos){ + if (tag){ + var nodeName = (this.isXMLDocument) ? node.nodeName : node.nodeName.toUpperCase(); + if (tag == '*'){ + if (nodeName < '@') return false; // Fix for comment nodes and closed nodes + } else { + if (nodeName != tag) return false; + } + } + + if (id && node.getAttribute('id') != id) return false; + + var i, part, cls; + if (classes) for (i = classes.length; i--;){ + cls = node.getAttribute('class') || node.className; + if (!(cls && classes[i].regexp.test(cls))) return false; + } + if (attributes) for (i = attributes.length; i--;){ + part = attributes[i]; + if (part.operator ? !part.test(this.getAttribute(node, part.key)) : !this.hasAttribute(node, part.key)) return false; + } + if (pseudos) for (i = pseudos.length; i--;){ + part = pseudos[i]; + if (!this.matchPseudo(node, part.key, part.value)) return false; + } + return true; +}; + +var combinators = { + + ' ': function(node, tag, id, classes, attributes, pseudos, classList){ // all child nodes, any level + + var i, item, children; + + if (this.isHTMLDocument){ + getById: if (id){ + item = this.document.getElementById(id); + if ((!item && node.all) || (this.idGetsName && item && item.getAttributeNode('id').nodeValue != id)){ + // all[id] returns all the elements with that name or id inside node + // if theres just one it will return the element, else it will be a collection + children = node.all[id]; + if (!children) return; + if (!children[0]) children = [children]; + for (i = 0; item = children[i++];){ + var idNode = item.getAttributeNode('id'); + if (idNode && idNode.nodeValue == id){ + this.push(item, tag, null, classes, attributes, pseudos); + break; + } + } + return; + } + if (!item){ + // if the context is in the dom we return, else we will try GEBTN, breaking the getById label + if (this.contains(this.root, node)) return; + else break getById; + } else if (this.document !== node && !this.contains(node, item)) return; + this.push(item, tag, null, classes, attributes, pseudos); + return; + } + getByClass: if (classes && node.getElementsByClassName && !this.brokenGEBCN){ + children = node.getElementsByClassName(classList.join(' ')); + if (!(children && children.length)) break getByClass; + for (i = 0; item = children[i++];) this.push(item, tag, id, null, attributes, pseudos); + return; + } + } + getByTag: { + children = node.getElementsByTagName(tag); + if (!(children && children.length)) break getByTag; + if (!this.brokenStarGEBTN) tag = null; + for (i = 0; item = children[i++];) this.push(item, tag, id, classes, attributes, pseudos); + } + }, + + '>': function(node, tag, id, classes, attributes, pseudos){ // direct children + if ((node = node.firstChild)) do { + if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos); + } while ((node = node.nextSibling)); + }, + + '+': function(node, tag, id, classes, attributes, pseudos){ // next sibling + while ((node = node.nextSibling)) if (node.nodeType == 1){ + this.push(node, tag, id, classes, attributes, pseudos); + break; + } + }, + + '^': function(node, tag, id, classes, attributes, pseudos){ // first child + node = node.firstChild; + if (node){ + if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos); + else this['combinator:+'](node, tag, id, classes, attributes, pseudos); + } + }, + + '~': function(node, tag, id, classes, attributes, pseudos){ // next siblings + while ((node = node.nextSibling)){ + if (node.nodeType != 1) continue; + var uid = this.getUID(node); + if (this.bitUniques[uid]) break; + this.bitUniques[uid] = true; + this.push(node, tag, id, classes, attributes, pseudos); + } + }, + + '++': function(node, tag, id, classes, attributes, pseudos){ // next sibling and previous sibling + this['combinator:+'](node, tag, id, classes, attributes, pseudos); + this['combinator:!+'](node, tag, id, classes, attributes, pseudos); + }, + + '~~': function(node, tag, id, classes, attributes, pseudos){ // next siblings and previous siblings + this['combinator:~'](node, tag, id, classes, attributes, pseudos); + this['combinator:!~'](node, tag, id, classes, attributes, pseudos); + }, + + '!': function(node, tag, id, classes, attributes, pseudos){ // all parent nodes up to document + while ((node = node.parentNode)) if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos); + }, + + '!>': function(node, tag, id, classes, attributes, pseudos){ // direct parent (one level) + node = node.parentNode; + if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos); + }, + + '!+': function(node, tag, id, classes, attributes, pseudos){ // previous sibling + while ((node = node.previousSibling)) if (node.nodeType == 1){ + this.push(node, tag, id, classes, attributes, pseudos); + break; + } + }, + + '!^': function(node, tag, id, classes, attributes, pseudos){ // last child + node = node.lastChild; + if (node){ + if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos); + else this['combinator:!+'](node, tag, id, classes, attributes, pseudos); + } + }, + + '!~': function(node, tag, id, classes, attributes, pseudos){ // previous siblings + while ((node = node.previousSibling)){ + if (node.nodeType != 1) continue; + var uid = this.getUID(node); + if (this.bitUniques[uid]) break; + this.bitUniques[uid] = true; + this.push(node, tag, id, classes, attributes, pseudos); + } + } + +}; + +for (var c in combinators) local['combinator:' + c] = combinators[c]; + +var pseudos = { + + /**/ + + 'empty': function(node){ + var child = node.firstChild; + return !(child && child.nodeType == 1) && !(node.innerText || node.textContent || '').length; + }, + + 'not': function(node, expression){ + return !this.matchNode(node, expression); + }, + + 'contains': function(node, text){ + return (node.innerText || node.textContent || '').indexOf(text) > -1; + }, + + 'first-child': function(node){ + while ((node = node.previousSibling)) if (node.nodeType == 1) return false; + return true; + }, + + 'last-child': function(node){ + while ((node = node.nextSibling)) if (node.nodeType == 1) return false; + return true; + }, + + 'only-child': function(node){ + var prev = node; + while ((prev = prev.previousSibling)) if (prev.nodeType == 1) return false; + var next = node; + while ((next = next.nextSibling)) if (next.nodeType == 1) return false; + return true; + }, + + /**/ + + 'nth-child': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTH'), + + 'nth-last-child': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHLast'), + + 'nth-of-type': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTHType', true), + + 'nth-last-of-type': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHTypeLast', true), + + 'index': function(node, index){ + return this['pseudo:nth-child'](node, '' + index + 1); + }, + + 'even': function(node){ + return this['pseudo:nth-child'](node, '2n'); + }, + + 'odd': function(node){ + return this['pseudo:nth-child'](node, '2n+1'); + }, + + /**/ + + /**/ + + 'first-of-type': function(node){ + var nodeName = node.nodeName; + while ((node = node.previousSibling)) if (node.nodeName == nodeName) return false; + return true; + }, + + 'last-of-type': function(node){ + var nodeName = node.nodeName; + while ((node = node.nextSibling)) if (node.nodeName == nodeName) return false; + return true; + }, + + 'only-of-type': function(node){ + var prev = node, nodeName = node.nodeName; + while ((prev = prev.previousSibling)) if (prev.nodeName == nodeName) return false; + var next = node; + while ((next = next.nextSibling)) if (next.nodeName == nodeName) return false; + return true; + }, + + /**/ + + // custom pseudos + + 'enabled': function(node){ + return !node.disabled; + }, + + 'disabled': function(node){ + return node.disabled; + }, + + 'checked': function(node){ + return node.checked || node.selected; + }, + + 'focus': function(node){ + return this.isHTMLDocument && this.document.activeElement === node && (node.href || node.type || this.hasAttribute(node, 'tabindex')); + }, + + 'root': function(node){ + return (node === this.root); + }, + + 'selected': function(node){ + return node.selected; + } + + /**/ +}; + +for (var p in pseudos) local['pseudo:' + p] = pseudos[p]; + +// attributes methods + +local.attributeGetters = { + + 'class': function(){ + return this.getAttribute('class') || this.className; + }, + + 'for': function(){ + return ('htmlFor' in this) ? this.htmlFor : this.getAttribute('for'); + }, + + 'href': function(){ + return ('href' in this) ? this.getAttribute('href', 2) : this.getAttribute('href'); + }, + + 'style': function(){ + return (this.style) ? this.style.cssText : this.getAttribute('style'); + }, + + 'tabindex': function(){ + var attributeNode = this.getAttributeNode('tabindex'); + return (attributeNode && attributeNode.specified) ? attributeNode.nodeValue : null; + }, + + 'type': function(){ + return this.getAttribute('type'); + } + +}; + +// Slick + +var Slick = local.Slick = (this.Slick || {}); + +Slick.version = '1.1.5'; + +// Slick finder + +Slick.search = function(context, expression, append){ + return local.search(context, expression, append); +}; + +Slick.find = function(context, expression){ + return local.search(context, expression, null, true); +}; + +// Slick containment checker + +Slick.contains = function(container, node){ + local.setDocument(container); + return local.contains(container, node); +}; + +// Slick attribute getter + +Slick.getAttribute = function(node, name){ + return local.getAttribute(node, name); +}; + +// Slick matcher + +Slick.match = function(node, selector){ + if (!(node && selector)) return false; + if (!selector || selector === node) return true; + local.setDocument(node); + return local.matchNode(node, selector); +}; + +// Slick attribute accessor + +Slick.defineAttributeGetter = function(name, fn){ + local.attributeGetters[name] = fn; + return this; +}; + +Slick.lookupAttributeGetter = function(name){ + return local.attributeGetters[name]; +}; + +// Slick pseudo accessor + +Slick.definePseudo = function(name, fn){ + local['pseudo:' + name] = function(node, argument){ + return fn.call(node, argument); + }; + return this; +}; + +Slick.lookupPseudo = function(name){ + var pseudo = local['pseudo:' + name]; + if (pseudo) return function(argument){ + return pseudo.call(this, argument); + }; + return null; +}; + +// Slick overrides accessor + +Slick.override = function(regexp, fn){ + local.override(regexp, fn); + return this; +}; + +Slick.isXML = local.isXML; + +Slick.uidOf = function(node){ + return local.getUIDHTML(node); +}; + +if (!this.Slick) this.Slick = Slick; + +}).apply(/**/(typeof exports != 'undefined') ? exports : /**/this); + + +/* +--- + +name: Element + +description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements. + +license: MIT-style license. + +requires: [Window, Document, Array, String, Function, Number, Slick.Parser, Slick.Finder] + +provides: [Element, Elements, $, $$, Iframe, Selectors] + +... +*/ + +var Element = function(tag, props){ + var konstructor = Element.Constructors[tag]; + if (konstructor) return konstructor(props); + if (typeof tag != 'string') return document.id(tag).set(props); + + if (!props) props = {}; + + if (!(/^[\w-]+$/).test(tag)){ + var parsed = Slick.parse(tag).expressions[0][0]; + tag = (parsed.tag == '*') ? 'div' : parsed.tag; + if (parsed.id && props.id == null) props.id = parsed.id; + + var attributes = parsed.attributes; + if (attributes) for (var i = 0, l = attributes.length; i < l; i++){ + var attr = attributes[i]; + if (props[attr.key] != null) continue; + + if (attr.value != null && attr.operator == '=') props[attr.key] = attr.value; + else if (!attr.value && !attr.operator) props[attr.key] = true; + } + + if (parsed.classList && props['class'] == null) props['class'] = parsed.classList.join(' '); + } + + return document.newElement(tag, props); +}; + +if (Browser.Element) Element.prototype = Browser.Element.prototype; + +new Type('Element', Element).mirror(function(name){ + if (Array.prototype[name]) return; + + var obj = {}; + obj[name] = function(){ + var results = [], args = arguments, elements = true; + for (var i = 0, l = this.length; i < l; i++){ + var element = this[i], result = results[i] = element[name].apply(element, args); + elements = (elements && typeOf(result) == 'element'); + } + return (elements) ? new Elements(results) : results; + }; + + Elements.implement(obj); +}); + +if (!Browser.Element){ + Element.parent = Object; + + Element.Prototype = {'$family': Function.from('element').hide()}; + + Element.mirror(function(name, method){ + Element.Prototype[name] = method; + }); +} + +Element.Constructors = {}; + +//<1.2compat> + +Element.Constructors = new Hash; + +// + +var IFrame = new Type('IFrame', function(){ + var params = Array.link(arguments, { + properties: Type.isObject, + iframe: function(obj){ + return (obj != null); + } + }); + + var props = params.properties || {}, iframe; + if (params.iframe) iframe = document.id(params.iframe); + var onload = props.onload || function(){}; + delete props.onload; + props.id = props.name = [props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + String.uniqueID()].pick(); + iframe = new Element(iframe || 'iframe', props); + + var onLoad = function(){ + onload.call(iframe.contentWindow); + }; + + if (window.frames[props.id]) onLoad(); + else iframe.addListener('load', onLoad); + return iframe; +}); + +var Elements = this.Elements = function(nodes){ + if (nodes && nodes.length){ + var uniques = {}, node; + for (var i = 0; node = nodes[i++];){ + var uid = Slick.uidOf(node); + if (!uniques[uid]){ + uniques[uid] = true; + this.push(node); + } + } + } +}; + +Elements.prototype = {length: 0}; +Elements.parent = Array; + +new Type('Elements', Elements).implement({ + + filter: function(filter, bind){ + if (!filter) return this; + return new Elements(Array.filter(this, (typeOf(filter) == 'string') ? function(item){ + return item.match(filter); + } : filter, bind)); + }.protect(), + + push: function(){ + var length = this.length; + for (var i = 0, l = arguments.length; i < l; i++){ + var item = document.id(arguments[i]); + if (item) this[length++] = item; + } + return (this.length = length); + }.protect(), + + unshift: function(){ + var items = []; + for (var i = 0, l = arguments.length; i < l; i++){ + var item = document.id(arguments[i]); + if (item) items.push(item); + } + return Array.prototype.unshift.apply(this, items); + }.protect(), + + concat: function(){ + var newElements = new Elements(this); + for (var i = 0, l = arguments.length; i < l; i++){ + var item = arguments[i]; + if (Type.isEnumerable(item)) newElements.append(item); + else newElements.push(item); + } + return newElements; + }.protect(), + + append: function(collection){ + for (var i = 0, l = collection.length; i < l; i++) this.push(collection[i]); + return this; + }.protect(), + + empty: function(){ + while (this.length) delete this[--this.length]; + return this; + }.protect() + +}); + +//<1.2compat> + +Elements.alias('extend', 'append'); + +// + +(function(){ + +// FF, IE +var splice = Array.prototype.splice, object = {'0': 0, '1': 1, length: 2}; + +splice.call(object, 1, 1); +if (object[1] == 1) Elements.implement('splice', function(){ + var length = this.length; + splice.apply(this, arguments); + while (length >= this.length) delete this[length--]; + return this; +}.protect()); + +Elements.implement(Array.prototype); + +Array.mirror(Elements); + +/**/ +var createElementAcceptsHTML; +try { + var x = document.createElement(''); + createElementAcceptsHTML = (x.name == 'x'); +} catch(e){} + +var escapeQuotes = function(html){ + return ('' + html).replace(/&/g, '&').replace(/"/g, '"'); +}; +/**/ + +Document.implement({ + + newElement: function(tag, props){ + if (props && props.checked != null) props.defaultChecked = props.checked; + /**/// Fix for readonly name and type properties in IE < 8 + if (createElementAcceptsHTML && props){ + tag = '<' + tag; + if (props.name) tag += ' name="' + escapeQuotes(props.name) + '"'; + if (props.type) tag += ' type="' + escapeQuotes(props.type) + '"'; + tag += '>'; + delete props.name; + delete props.type; + } + /**/ + return this.id(this.createElement(tag)).set(props); + } + +}); + +})(); + +Document.implement({ + + newTextNode: function(text){ + return this.createTextNode(text); + }, + + getDocument: function(){ + return this; + }, + + getWindow: function(){ + return this.window; + }, + + id: (function(){ + + var types = { + + string: function(id, nocash, doc){ + id = Slick.find(doc, '#' + id.replace(/(\W)/g, '\\$1')); + return (id) ? types.element(id, nocash) : null; + }, + + element: function(el, nocash){ + $uid(el); + if (!nocash && !el.$family && !(/^(?:object|embed)$/i).test(el.tagName)){ + Object.append(el, Element.Prototype); + } + return el; + }, + + object: function(obj, nocash, doc){ + if (obj.toElement) return types.element(obj.toElement(doc), nocash); + return null; + } + + }; + + types.textnode = types.whitespace = types.window = types.document = function(zero){ + return zero; + }; + + return function(el, nocash, doc){ + if (el && el.$family && el.uid) return el; + var type = typeOf(el); + return (types[type]) ? types[type](el, nocash, doc || document) : null; + }; + + })() + +}); + +if (window.$ == null) Window.implement('$', function(el, nc){ + return document.id(el, nc, this.document); +}); + +Window.implement({ + + getDocument: function(){ + return this.document; + }, + + getWindow: function(){ + return this; + } + +}); + +[Document, Element].invoke('implement', { + + getElements: function(expression){ + return Slick.search(this, expression, new Elements); + }, + + getElement: function(expression){ + return document.id(Slick.find(this, expression)); + } + +}); + +//<1.2compat> + +(function(search, find, match){ + + this.Selectors = {}; + var pseudos = this.Selectors.Pseudo = new Hash(); + + var addSlickPseudos = function(){ + for (var name in pseudos) if (pseudos.hasOwnProperty(name)){ + Slick.definePseudo(name, pseudos[name]); + delete pseudos[name]; + } + }; + + Slick.search = function(context, expression, append){ + addSlickPseudos(); + return search.call(this, context, expression, append); + }; + + Slick.find = function(context, expression){ + addSlickPseudos(); + return find.call(this, context, expression); + }; + + Slick.match = function(node, selector){ + addSlickPseudos(); + return match.call(this, node, selector); + }; + +})(Slick.search, Slick.find, Slick.match); + +if (window.$$ == null) Window.implement('$$', function(selector){ + var elements = new Elements; + if (arguments.length == 1 && typeof selector == 'string') return Slick.search(this.document, selector, elements); + var args = Array.flatten(arguments); + for (var i = 0, l = args.length; i < l; i++){ + var item = args[i]; + switch (typeOf(item)){ + case 'element': elements.push(item); break; + case 'string': Slick.search(this.document, item, elements); + } + } + return elements; +}); + +// + +if (window.$$ == null) Window.implement('$$', function(selector){ + if (arguments.length == 1){ + if (typeof selector == 'string') return Slick.search(this.document, selector, new Elements); + else if (Type.isEnumerable(selector)) return new Elements(selector); + } + return new Elements(arguments); +}); + +(function(){ + +var collected = {}, storage = {}; +var formProps = {input: 'checked', option: 'selected', textarea: 'value'}; + +var get = function(uid){ + return (storage[uid] || (storage[uid] = {})); +}; + +var clean = function(item){ + var uid = item.uid; + if (item.removeEvents) item.removeEvents(); + if (item.clearAttributes) item.clearAttributes(); + if (uid != null){ + delete collected[uid]; + delete storage[uid]; + } + return item; +}; + +var camels = ['defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly', + 'rowSpan', 'tabIndex', 'useMap' +]; +var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readOnly', 'multiple', 'selected', + 'noresize', 'defer', 'defaultChecked', 'autofocus' +]; + var attributes = { + 'html': 'innerHTML', + 'class': 'className', + 'for': 'htmlFor', + 'text': (function(){ + var temp = document.createElement('div'); + return (temp.textContent == null) ? 'innerText' : 'textContent'; + })() +}; +var readOnly = ['type']; +var expandos = ['value', 'defaultValue']; +var uriAttrs = /^(?:href|src|usemap)$/i; + +bools = bools.associate(bools); +camels = camels.associate(camels.map(String.toLowerCase)); +readOnly = readOnly.associate(readOnly); + +Object.append(attributes, expandos.associate(expandos)); + +var inserters = { + + before: function(context, element){ + var parent = element.parentNode; + if (parent) parent.insertBefore(context, element); + }, + + after: function(context, element){ + var parent = element.parentNode; + if (parent) parent.insertBefore(context, element.nextSibling); + }, + + bottom: function(context, element){ + element.appendChild(context); + }, + + top: function(context, element){ + element.insertBefore(context, element.firstChild); + } + +}; + +inserters.inside = inserters.bottom; + +//<1.2compat> + +Object.each(inserters, function(inserter, where){ + + where = where.capitalize(); + + var methods = {}; + + methods['inject' + where] = function(el){ + inserter(this, document.id(el, true)); + return this; + }; + + methods['grab' + where] = function(el){ + inserter(document.id(el, true), this); + return this; + }; + + Element.implement(methods); + +}); + +// + +var injectCombinator = function(expression, combinator){ + if (!expression) return combinator; + + expression = Object.clone(Slick.parse(expression)); + + var expressions = expression.expressions; + for (var i = expressions.length; i--;) + expressions[i][0].combinator = combinator; + + return expression; +}; + +Element.implement({ + + set: function(prop, value){ + var property = Element.Properties[prop]; + (property && property.set) ? property.set.call(this, value) : this.setProperty(prop, value); + }.overloadSetter(), + + get: function(prop){ + var property = Element.Properties[prop]; + return (property && property.get) ? property.get.apply(this) : this.getProperty(prop); + }.overloadGetter(), + + erase: function(prop){ + var property = Element.Properties[prop]; + (property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop); + return this; + }, + + setProperty: function(attribute, value){ + attribute = camels[attribute] || attribute; + if (value == null) return this.removeProperty(attribute); + var key = attributes[attribute]; + (key) ? this[key] = value : + (bools[attribute]) ? this[attribute] = !!value : this.setAttribute(attribute, '' + value); + return this; + }, + + setProperties: function(attributes){ + for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]); + return this; + }, + + getProperty: function(attribute){ + attribute = camels[attribute] || attribute; + var key = attributes[attribute] || readOnly[attribute]; + return (key) ? this[key] : + (bools[attribute]) ? !!this[attribute] : + (uriAttrs.test(attribute) ? this.getAttribute(attribute, 2) : + (key = this.getAttributeNode(attribute)) ? key.nodeValue : null) || null; + }, + + getProperties: function(){ + var args = Array.from(arguments); + return args.map(this.getProperty, this).associate(args); + }, + + removeProperty: function(attribute){ + attribute = camels[attribute] || attribute; + var key = attributes[attribute]; + (key) ? this[key] = '' : + (bools[attribute]) ? this[attribute] = false : this.removeAttribute(attribute); + return this; + }, + + removeProperties: function(){ + Array.each(arguments, this.removeProperty, this); + return this; + }, + + hasClass: function(className){ + return this.className.clean().contains(className, ' '); + }, + + addClass: function(className){ + if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean(); + return this; + }, + + removeClass: function(className){ + this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1'); + return this; + }, + + toggleClass: function(className, force){ + if (force == null) force = !this.hasClass(className); + return (force) ? this.addClass(className) : this.removeClass(className); + }, + + adopt: function(){ + var parent = this, fragment, elements = Array.flatten(arguments), length = elements.length; + if (length > 1) parent = fragment = document.createDocumentFragment(); + + for (var i = 0; i < length; i++){ + var element = document.id(elements[i], true); + if (element) parent.appendChild(element); + } + + if (fragment) this.appendChild(fragment); + + return this; + }, + + appendText: function(text, where){ + return this.grab(this.getDocument().newTextNode(text), where); + }, + + grab: function(el, where){ + inserters[where || 'bottom'](document.id(el, true), this); + return this; + }, + + inject: function(el, where){ + inserters[where || 'bottom'](this, document.id(el, true)); + return this; + }, + + replaces: function(el){ + el = document.id(el, true); + el.parentNode.replaceChild(this, el); + return this; + }, + + wraps: function(el, where){ + el = document.id(el, true); + return this.replaces(el).grab(el, where); + }, + + getPrevious: function(expression){ + return document.id(Slick.find(this, injectCombinator(expression, '!~'))); + }, + + getAllPrevious: function(expression){ + return Slick.search(this, injectCombinator(expression, '!~'), new Elements); + }, + + getNext: function(expression){ + return document.id(Slick.find(this, injectCombinator(expression, '~'))); + }, + + getAllNext: function(expression){ + return Slick.search(this, injectCombinator(expression, '~'), new Elements); + }, + + getFirst: function(expression){ + return document.id(Slick.search(this, injectCombinator(expression, '>'))[0]); + }, + + getLast: function(expression){ + return document.id(Slick.search(this, injectCombinator(expression, '>')).getLast()); + }, + + getParent: function(expression){ + return document.id(Slick.find(this, injectCombinator(expression, '!'))); + }, + + getParents: function(expression){ + return Slick.search(this, injectCombinator(expression, '!'), new Elements); + }, + + getSiblings: function(expression){ + return Slick.search(this, injectCombinator(expression, '~~'), new Elements); + }, + + getChildren: function(expression){ + return Slick.search(this, injectCombinator(expression, '>'), new Elements); + }, + + getWindow: function(){ + return this.ownerDocument.window; + }, + + getDocument: function(){ + return this.ownerDocument; + }, + + getElementById: function(id){ + return document.id(Slick.find(this, '#' + ('' + id).replace(/(\W)/g, '\\$1'))); + }, + + getSelected: function(){ + this.selectedIndex; // Safari 3.2.1 + return new Elements(Array.from(this.options).filter(function(option){ + return option.selected; + })); + }, + + toQueryString: function(){ + var queryString = []; + this.getElements('input, select, textarea').each(function(el){ + var type = el.type; + if (!el.name || el.disabled || type == 'submit' || type == 'reset' || type == 'file' || type == 'image') return; + + var value = (el.get('tag') == 'select') ? el.getSelected().map(function(opt){ + // IE + return document.id(opt).get('value'); + }) : ((type == 'radio' || type == 'checkbox') && !el.checked) ? null : el.get('value'); + + Array.from(value).each(function(val){ + if (typeof val != 'undefined') queryString.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(val)); + }); + }); + return queryString.join('&'); + }, + + destroy: function(){ + var children = clean(this).getElementsByTagName('*'); + Array.each(children, clean); + Element.dispose(this); + return null; + }, + + empty: function(){ + Array.from(this.childNodes).each(Element.dispose); + return this; + }, + + dispose: function(){ + return (this.parentNode) ? this.parentNode.removeChild(this) : this; + }, + + match: function(expression){ + return !expression || Slick.match(this, expression); + } + +}); + +var cleanClone = function(node, element, keepid){ + if (!keepid) node.setAttributeNode(document.createAttribute('id')); + if (node.clearAttributes){ + node.clearAttributes(); + node.mergeAttributes(element); + node.removeAttribute('uid'); + if (node.options){ + var no = node.options, eo = element.options; + for (var i = no.length; i--;) no[i].selected = eo[i].selected; + } + } + + var prop = formProps[element.tagName.toLowerCase()]; + if (prop && element[prop]) node[prop] = element[prop]; +}; + +Element.implement('clone', function(contents, keepid){ + contents = contents !== false; + var clone = this.cloneNode(contents), i; + + if (contents){ + var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*'); + for (i = ce.length; i--;) cleanClone(ce[i], te[i], keepid); + } + + cleanClone(clone, this, keepid); + + if (Browser.ie){ + var co = clone.getElementsByTagName('object'), to = this.getElementsByTagName('object'); + for (i = co.length; i--;) co[i].outerHTML = to[i].outerHTML; + } + return document.id(clone); +}); + +var contains = {contains: function(element){ + return Slick.contains(this, element); +}}; + +if (!document.contains) Document.implement(contains); +if (!document.createElement('div').contains) Element.implement(contains); + +//<1.2compat> + +Element.implement('hasChild', function(element){ + return this !== element && this.contains(element); +}); + +// + +[Element, Window, Document].invoke('implement', { + + addListener: function(type, fn){ + if (type == 'unload'){ + var old = fn, self = this; + fn = function(){ + self.removeListener('unload', fn); + old(); + }; + } else { + collected[$uid(this)] = this; + } + if (this.addEventListener) this.addEventListener(type, fn, !!arguments[2]); + else this.attachEvent('on' + type, fn); + return this; + }, + + removeListener: function(type, fn){ + if (this.removeEventListener) this.removeEventListener(type, fn, !!arguments[2]); + else this.detachEvent('on' + type, fn); + return this; + }, + + retrieve: function(property, dflt){ + var storage = get($uid(this)), prop = storage[property]; + if (dflt != null && prop == null) prop = storage[property] = dflt; + return prop != null ? prop : null; + }, + + store: function(property, value){ + var storage = get($uid(this)); + storage[property] = value; + return this; + }, + + eliminate: function(property){ + var storage = get($uid(this)); + delete storage[property]; + return this; + } + +}); + +/**/ +if (window.attachEvent && !window.addEventListener) window.addListener('unload', function(){ + Object.each(collected, clean); + if (window.CollectGarbage) CollectGarbage(); +}); +/**/ + +})(); + +Element.Properties = {}; + +//<1.2compat> + +Element.Properties = new Hash; + +// + +Element.Properties.style = { + + set: function(style){ + this.style.cssText = style; + }, + + get: function(){ + return this.style.cssText; + }, + + erase: function(){ + this.style.cssText = ''; + } + +}; + +Element.Properties.tag = { + + get: function(){ + return this.tagName.toLowerCase(); + } + +}; + +/**/ +(function(maxLength){ + if (maxLength != null) Element.Properties.maxlength = Element.Properties.maxLength = { + get: function(){ + var maxlength = this.getAttribute('maxLength'); + return maxlength == maxLength ? null : maxlength; + } + }; +})(document.createElement('input').getAttribute('maxLength')); +/**/ + +/**/ +Element.Properties.html = (function(){ + + var tableTest = Function.attempt(function(){ + var table = document.createElement('table'); + table.innerHTML = ''; + }); + + var wrapper = document.createElement('div'); + + var translations = { + table: [1, '', '
'], + select: [1, ''], + tbody: [2, '', '
'], + tr: [3, '', '
'] + }; + translations.thead = translations.tfoot = translations.tbody; + + var html = { + set: function(){ + var html = Array.flatten(arguments).join(''); + var wrap = (!tableTest && translations[this.get('tag')]); + if (wrap){ + var first = wrapper; + first.innerHTML = wrap[1] + html + wrap[2]; + for (var i = wrap[0]; i--;) first = first.firstChild; + this.empty().adopt(first.childNodes); + } else { + this.innerHTML = html; + } + } + }; + + html.erase = html.set; + + return html; +})(); +/**/ + + +/* +--- + +name: Element.Style + +description: Contains methods for interacting with the styles of Elements in a fashionable way. + +license: MIT-style license. + +requires: Element + +provides: Element.Style + +... +*/ + +(function(){ + +var html = document.html; + +Element.Properties.styles = {set: function(styles){ + this.setStyles(styles); +}}; + +var hasOpacity = (html.style.opacity != null); +var reAlpha = /alpha\(opacity=([\d.]+)\)/i; + +var setOpacity = function(element, opacity){ + if (!element.currentStyle || !element.currentStyle.hasLayout) element.style.zoom = 1; + if (hasOpacity){ + element.style.opacity = opacity; + } else { + opacity = (opacity * 100).limit(0, 100).round(); + opacity = (opacity == 100) ? '' : 'alpha(opacity=' + opacity + ')'; + var filter = element.style.filter || element.getComputedStyle('filter') || ''; + element.style.filter = reAlpha.test(filter) ? filter.replace(reAlpha, opacity) : filter + opacity; + } +}; + +Element.Properties.opacity = { + + set: function(opacity){ + var visibility = this.style.visibility; + if (opacity == 0 && visibility != 'hidden') this.style.visibility = 'hidden'; + else if (opacity != 0 && visibility != 'visible') this.style.visibility = 'visible'; + + setOpacity(this, opacity); + }, + + get: (hasOpacity) ? function(){ + var opacity = this.style.opacity || this.getComputedStyle('opacity'); + return (opacity == '') ? 1 : opacity; + } : function(){ + var opacity, filter = (this.style.filter || this.getComputedStyle('filter')); + if (filter) opacity = filter.match(reAlpha); + return (opacity == null || filter == null) ? 1 : (opacity[1] / 100); + } + +}; + +var floatName = (html.style.cssFloat == null) ? 'styleFloat' : 'cssFloat'; + +Element.implement({ + + getComputedStyle: function(property){ + if (this.currentStyle) return this.currentStyle[property.camelCase()]; + var defaultView = Element.getDocument(this).defaultView, + computed = defaultView ? defaultView.getComputedStyle(this, null) : null; + return (computed) ? computed.getPropertyValue((property == floatName) ? 'float' : property.hyphenate()) : null; + }, + + setOpacity: function(value){ + setOpacity(this, value); + return this; + }, + + getOpacity: function(){ + return this.get('opacity'); + }, + + setStyle: function(property, value){ + switch (property){ + case 'opacity': return this.set('opacity', parseFloat(value)); + case 'float': property = floatName; + } + property = property.camelCase(); + if (typeOf(value) != 'string'){ + var map = (Element.Styles[property] || '@').split(' '); + value = Array.from(value).map(function(val, i){ + if (!map[i]) return ''; + return (typeOf(val) == 'number') ? map[i].replace('@', Math.round(val)) : val; + }).join(' '); + } else if (value == String(Number(value))){ + value = Math.round(value); + } + if ((property === 'width' || property === 'height') && value.toString().indexOf('-') >= 0) + { + // [i_a] don't set a negative width or height: MSIE6 croaks! + this.style[property] = '0px'; + return this; + } + else if (property === 'zIndex' && value === 'auto') + { + // [i_a] MSIE6 croaks on this one; set to nil instead + this.style[property] = ''; + return this; + } + this.style[property] = value; + return this; + }, + + getStyle: function(property){ + switch (property){ + case 'opacity': return this.get('opacity'); + case 'float': property = floatName; + } + property = property.camelCase(); + var result = this.style[property]; + if (!result || property == 'zIndex'){ + result = []; + for (var style in Element.ShortStyles){ + if (property != style) continue; + for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s)); + return result.join(' '); + } + result = this.getComputedStyle(property); + } + if (result){ + result = String(result); + var color = result.match(/rgba?\([\d\s,]+\)/); + if (color) result = result.replace(color[0], color[0].rgbToHex()); + } + if (Browser.opera || (Browser.ie && isNaN(parseFloat(result)))){ + if ((/^(height|width)$/).test(property)){ + var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0; + values.each(function(value){ + size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt(); + }, this); + return this['offset' + property.capitalize()] - size + 'px'; + } + if (Browser.opera && String(result).indexOf('px') != -1) return result; + if ((/^border(.+)Width|margin|padding/).test(property)) return '0px'; + } + return result; + }, + + setStyles: function(styles){ + for (var style in styles) this.setStyle(style, styles[style]); + return this; + }, + + getStyles: function(){ + var result = {}; + Array.flatten(arguments).each(function(key){ + result[key] = this.getStyle(key); + }, this); + return result; + } + +}); + +Element.Styles = { + left: '@px', top: '@px', bottom: '@px', right: '@px', + width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px', + backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)', + fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)', + margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)', + borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)', + zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@' +}; + +//<1.2compat> + +Element.Styles = new Hash(Element.Styles); + +// + +Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}}; + +['Top', 'Right', 'Bottom', 'Left'].each(function(direction){ + var Short = Element.ShortStyles; + var All = Element.Styles; + ['margin', 'padding'].each(function(style){ + var sd = style + direction; + Short[style][sd] = All[sd] = '@px'; + }); + var bd = 'border' + direction; + Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)'; + var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color'; + Short[bd] = {}; + Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px'; + Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@'; + Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)'; +}); + +})(); + + +/* +--- + +name: Element.Event + +description: Contains Element methods for dealing with events. This file also includes mouseenter and mouseleave custom Element Events. + +license: MIT-style license. + +requires: [Element, Event] + +provides: Element.Event + +... +*/ + +(function(){ + +Element.Properties.events = {set: function(events){ + this.addEvents(events); +}}; + +[Element, Window, Document].invoke('implement', { + + addEvent: function(type, fn){ + var events = this.retrieve('events', {}); + if (!events[type]) events[type] = {keys: [], values: []}; + if (events[type].keys.contains(fn)) return this; + events[type].keys.push(fn); + var realType = type, + custom = Element.Events[type], + condition = fn, + self = this; + if (custom){ + if (custom.onAdd) custom.onAdd.call(this, fn); + if (custom.condition){ + condition = function(event){ + if (custom.condition.call(this, event)) return fn.call(this, event); + return true; + }; + } + realType = custom.base || realType; + } + var defn = function(){ + return fn.call(self); + }; + var nativeEvent = Element.NativeEvents[realType]; + if (nativeEvent){ + if (nativeEvent == 2){ + defn = function(event){ + event = new Event(event, self.getWindow()); + if (condition.call(self, event) === false) event.stop(); + }; + } + this.addListener(realType, defn, arguments[2]); + } + events[type].values.push(defn); + return this; + }, + + removeEvent: function(type, fn){ + var events = this.retrieve('events'); + if (!events || !events[type]) return this; + var list = events[type]; + var index = list.keys.indexOf(fn); + if (index == -1) return this; + var value = list.values[index]; + delete list.keys[index]; + delete list.values[index]; + var custom = Element.Events[type]; + if (custom){ + if (custom.onRemove) custom.onRemove.call(this, fn); + type = custom.base || type; + } + return (Element.NativeEvents[type]) ? this.removeListener(type, value, arguments[2]) : this; + }, + + addEvents: function(events){ + for (var event in events) this.addEvent(event, events[event]); + return this; + }, + + removeEvents: function(events){ + var type; + if (typeOf(events) == 'object'){ + for (type in events) this.removeEvent(type, events[type]); + return this; + } + var attached = this.retrieve('events'); + if (!attached) return this; + if (!events){ + for (type in attached) this.removeEvents(type); + this.eliminate('events'); + } else if (attached[events]){ + attached[events].keys.each(function(fn){ + this.removeEvent(events, fn); + }, this); + delete attached[events]; + } + return this; + }, + + fireEvent: function(type, args, delay){ + var events = this.retrieve('events'); + if (!events || !events[type]) return this; + args = Array.from(args); + + events[type].keys.each(function(fn){ + if (delay) fn.delay(delay, this, args); + else fn.apply(this, args); + }, this); + return this; + }, + + cloneEvents: function(from, type){ + from = document.id(from); + var events = from.retrieve('events'); + if (!events) return this; + if (!type){ + for (var eventType in events) this.cloneEvents(from, eventType); + } else if (events[type]){ + events[type].keys.each(function(fn){ + this.addEvent(type, fn); + }, this); + } + return this; + } + +}); + +Element.NativeEvents = { + click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons + mousewheel: 2, DOMMouseScroll: 2, //mouse wheel + mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement + keydown: 2, keypress: 2, keyup: 2, //keyboard + orientationchange: 2, // mobile + touchstart: 2, touchmove: 2, touchend: 2, touchcancel: 2, // touch + gesturestart: 2, gesturechange: 2, gestureend: 2, // gesture + focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements + load: 2, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window + error: 1, abort: 1, scroll: 1 //misc +}; + +var check = function(event){ + var related = event.relatedTarget; + if (related == null) return true; + if (!related) return false; + return (related != this && related.prefix != 'xul' && typeOf(this) != 'document' && !this.contains(related)); +}; + +Element.Events = { + + mouseenter: { + base: 'mouseover', + condition: check + }, + + mouseleave: { + base: 'mouseout', + condition: check + }, + + mousewheel: { + base: (Browser.firefox) ? 'DOMMouseScroll' : 'mousewheel' + } + +}; + +//<1.2compat> + +Element.Events = new Hash(Element.Events); + +// + +})(); + + +/* +--- + +name: Element.Dimensions + +description: Contains methods to work with size, scroll, or positioning of Elements and the window object. + +license: MIT-style license. + +credits: + - Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html). + - Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html). + +requires: [Element, Element.Style] + +provides: [Element.Dimensions] + +... +*/ + +(function(){ + +var element = document.createElement('div'), + child = document.createElement('div'); +element.style.height = '0'; +element.appendChild(child); +var brokenOffsetParent = (child.offsetParent === element); +element = child = null; + +var isOffset = function(el){ + return styleString(el, 'position') != 'static' || isBody(el); +}; + +var isOffsetStatic = function(el){ + return isOffset(el) || (/^(?:table|td|th)$/i).test(el.tagName); +}; + +Element.implement({ + + scrollTo: function(x, y){ + if (isBody(this)){ + this.getWindow().scrollTo(x, y); + } else { + this.scrollLeft = x; + this.scrollTop = y; + } + return this; + }, + + getSize: function(){ + if (isBody(this)) return this.getWindow().getSize(); + return {x: this.offsetWidth, y: this.offsetHeight}; + }, + + getScrollSize: function(){ + if (isBody(this)) return this.getWindow().getScrollSize(); + return {x: this.scrollWidth, y: this.scrollHeight}; + }, + + getScroll: function(){ + if (isBody(this)) return this.getWindow().getScroll(); + return {x: this.scrollLeft, y: this.scrollTop}; + }, + + getScrolls: function(){ + var element = this.parentNode, position = {x: 0, y: 0}; + while (element && !isBody(element)){ + position.x += element.scrollLeft; + position.y += element.scrollTop; + element = element.parentNode; + } + return position; + }, + + getOffsetParent: brokenOffsetParent ? function(){ + var element = this; + if (isBody(element) || styleString(element, 'position') == 'fixed') return null; + + var isOffsetCheck = (styleString(element, 'position') == 'static') ? isOffsetStatic : isOffset; + while ((element = element.parentNode)){ + if (isOffsetCheck(element)) return element; + } + return null; + } : function(){ + var element = this; + if (isBody(element) || styleString(element, 'position') == 'fixed') return null; + + try { + return element.offsetParent; + } catch(e) {} + return null; + }, + + getOffsets: function(){ + if (this.getBoundingClientRect && !Browser.Platform.ios){ + var bound = this.getBoundingClientRect(), + html = document.id(this.getDocument().documentElement), + htmlScroll = html.getScroll(), + elemScrolls = this.getScrolls(), + isFixed = (styleString(this, 'position') == 'fixed'); + + return { + x: bound.left.toInt() + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft, + y: bound.top.toInt() + elemScrolls.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop + }; + } + + var element = this, position = {x: 0, y: 0}; + if (isBody(this)) return position; + + while (element && !isBody(element)){ + position.x += element.offsetLeft; + position.y += element.offsetTop; + + if (Browser.firefox){ + if (!borderBox(element)){ + position.x += leftBorder(element); + position.y += topBorder(element); + } + var parent = element.parentNode; + if (parent && styleString(parent, 'overflow') != 'visible'){ + position.x += leftBorder(parent); + position.y += topBorder(parent); + } + } else if (element != this && Browser.safari){ + position.x += leftBorder(element); + position.y += topBorder(element); + } + + element = element.offsetParent; + } + if (Browser.firefox && !borderBox(this)){ + position.x -= leftBorder(this); + position.y -= topBorder(this); + } + return position; + }, + + getPosition: function(relative){ + if (isBody(this)) return {x: 0, y: 0}; + var offset = this.getOffsets(), + scroll = this.getScrolls(); + var position = { + x: offset.x - scroll.x, + y: offset.y - scroll.y + }; + + if (relative && (relative = document.id(relative))){ + var relativePosition = relative.getPosition(); + return {x: position.x - relativePosition.x - leftBorder(relative), y: position.y - relativePosition.y - topBorder(relative)}; + } + return position; + }, + + getCoordinates: function(element){ + if (isBody(this)) return this.getWindow().getCoordinates(); + var position = this.getPosition(element), + size = this.getSize(); + var obj = { + left: position.x, + top: position.y, + width: size.x, + height: size.y + }; + obj.right = obj.left + obj.width; + obj.bottom = obj.top + obj.height; + return obj; + }, + + computePosition: function(obj){ + return { + left: obj.x - styleNumber(this, 'margin-left'), + top: obj.y - styleNumber(this, 'margin-top') + }; + }, + + setPosition: function(obj){ + return this.setStyles(this.computePosition(obj)); + } + +}); + + +[Document, Window].invoke('implement', { + + getSize: function(){ + var doc = getCompatElement(this); + return {x: doc.clientWidth, y: doc.clientHeight}; + }, + + getScroll: function(){ + var win = this.getWindow(), doc = getCompatElement(this); + return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop}; + }, + + getScrollSize: function(){ + var doc = getCompatElement(this), + min = this.getSize(), + body = this.getDocument().body; + + return {x: Math.max(doc.scrollWidth, body.scrollWidth, min.x), y: Math.max(doc.scrollHeight, body.scrollHeight, min.y)}; + }, + + getPosition: function(){ + return {x: 0, y: 0}; + }, + + getCoordinates: function(){ + var size = this.getSize(); + return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x}; + } + +}); + +// private methods + +var styleString = Element.getComputedStyle; + +function styleNumber(element, style){ + return styleString(element, style).toInt() || 0; +} + +function borderBox(element){ + return styleString(element, '-moz-box-sizing') == 'border-box'; +} + +function topBorder(element){ + return styleNumber(element, 'border-top-width'); +} + +function leftBorder(element){ + return styleNumber(element, 'border-left-width'); +} + +function isBody(element){ + return (/^(?:body|html)$/i).test(element.tagName); +} + +function getCompatElement(element){ + var doc = element.getDocument(); + return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body; +} + +})(); + +//aliases +Element.alias({position: 'setPosition'}); //compatability + +[Window, Document, Element].invoke('implement', { + + getHeight: function(){ + return this.getSize().y; + }, + + getWidth: function(){ + return this.getSize().x; + }, + + getScrollTop: function(){ + return this.getScroll().y; + }, + + getScrollLeft: function(){ + return this.getScroll().x; + }, + + getScrollHeight: function(){ + return this.getScrollSize().y; + }, + + getScrollWidth: function(){ + return this.getScrollSize().x; + }, + + getTop: function(){ + return this.getPosition().y; + }, + + getLeft: function(){ + return this.getPosition().x; + } + +}); + + +/* +--- + +name: Fx + +description: Contains the basic animation logic to be extended by all other Fx Classes. + +license: MIT-style license. + +requires: [Chain, Events, Options] + +provides: Fx + +... +*/ + +(function(){ + +var Fx = this.Fx = new Class({ + + Implements: [Chain, Events, Options], + + options: { + /* + onStart: nil, + onCancel: nil, + onComplete: nil, + */ + fps: 60, + unit: false, + duration: 500, + frames: null, + frameSkip: true, + link: 'ignore' + }, + + initialize: function(options){ + this.subject = this.subject || this; + this.setOptions(options); + }, + + getTransition: function(){ + return function(p){ + return -(Math.cos(Math.PI * p) - 1) / 2; + }; + }, + + step: function(now){ + if (this.options.frameSkip){ + var diff = (this.time != null) ? (now - this.time) : 0, frames = diff / this.frameInterval; + this.time = now; + this.frame += frames; + } else { + this.frame++; + } + + if (this.frame < this.frames){ + var delta = this.transition(this.frame / this.frames); + this.set(this.compute(this.from, this.to, delta)); + } else { + this.frame = this.frames; + this.set(this.compute(this.from, this.to, 1)); + this.stop(); + } + }, + + set: function(now){ + return now; + }, + + compute: function(from, to, delta){ + return Fx.compute(from, to, delta); + }, + + check: function(){ + if (!this.isRunning()) return true; + switch (this.options.link){ + case 'cancel': this.cancel(); return true; + case 'chain': this.chain(this.caller.pass(arguments, this)); return false; + } + return false; + }, + + start: function(from, to){ + if (!this.check(from, to)) return this; + this.from = from; + this.to = to; + this.frame = (this.options.frameSkip) ? 0 : -1; + this.time = null; + this.transition = this.getTransition(); + var frames = this.options.frames, fps = this.options.fps, duration = this.options.duration; + this.duration = Fx.Durations[duration] || duration.toInt(); + this.frameInterval = 1000 / fps; + this.frames = frames || Math.round(this.duration / this.frameInterval); + this.fireEvent('start', this.subject); + pushInstance.call(this, fps); + return this; + }, + + stop: function(){ + if (this.isRunning()){ + this.time = null; + pullInstance.call(this, this.options.fps); + if (this.frames == this.frame){ + this.fireEvent('complete', this.subject); + if (!this.callChain()) this.fireEvent('chainComplete', this.subject); + } else { + this.fireEvent('stop', this.subject); + } + } + return this; + }, + + cancel: function(){ + if (this.isRunning()){ + this.time = null; + pullInstance.call(this, this.options.fps); + this.frame = this.frames; + this.fireEvent('cancel', this.subject).clearChain(); + } + return this; + }, + + pause: function(){ + if (this.isRunning()){ + this.time = null; + pullInstance.call(this, this.options.fps); + } + return this; + }, + + resume: function(){ + if ((this.frame < this.frames) && !this.isRunning()) pushInstance.call(this, this.options.fps); + return this; + }, + + isRunning: function(){ + var list = instances[this.options.fps]; + return list && list.contains(this); + } + +}); + +Fx.compute = function(from, to, delta){ + return (to - from) * delta + from; +}; + +Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000}; + +// global timers + +var instances = {}, timers = {}; + +var loop = function(){ + var now = Date.now(); + for (var i = this.length; i--;){ + var instance = this[i]; + if (instance) instance.step(now); + } +}; + +var pushInstance = function(fps){ + var list = instances[fps] || (instances[fps] = []); + list.push(this); + if (!timers[fps]) timers[fps] = loop.periodical(Math.round(1000 / fps), list); +}; + +var pullInstance = function(fps){ + var list = instances[fps]; + if (list){ + list.erase(this); + if (!list.length && timers[fps]){ + delete instances[fps]; + timers[fps] = clearInterval(timers[fps]); + } + } +}; + +})(); + + +/* +--- + +name: Fx.CSS + +description: Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements. + +license: MIT-style license. + +requires: [Fx, Element.Style] + +provides: Fx.CSS + +... +*/ + +Fx.CSS = new Class({ + + Extends: Fx, + + //prepares the base from/to object + + prepare: function(element, property, values){ + values = Array.from(values); + if (values[1] == null){ + values[1] = values[0]; + values[0] = element.getStyle(property); + } + var parsed = values.map(this.parse); + return {from: parsed[0], to: parsed[1]}; + }, + + //parses a value into an array + + parse: function(value){ + value = Function.from(value)(); + value = (typeof value == 'string') ? value.split(' ') : Array.from(value); + return value.map(function(val){ + val = String(val); + var found = false; + Object.each(Fx.CSS.Parsers, function(parser, key){ + if (found) return; + var parsed = parser.parse(val); + if (parsed || parsed === 0) found = {value: parsed, parser: parser}; + }); + found = found || {value: val, parser: Fx.CSS.Parsers.String}; + return found; + }); + }, + + //computes by a from and to prepared objects, using their parsers. + + compute: function(from, to, delta){ + var computed = []; + (Math.min(from.length, to.length)).times(function(i){ + computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser}); + }); + computed.$family = Function.from('fx:css:value'); + return computed; + }, + + //serves the value as settable + + serve: function(value, unit){ + if (typeOf(value) != 'fx:css:value') value = this.parse(value); + var returned = []; + value.each(function(bit){ + returned = returned.concat(bit.parser.serve(bit.value, unit)); + }); + return returned; + }, + + //renders the change to an element + + render: function(element, property, value, unit){ + element.setStyle(property, this.serve(value, unit)); + }, + + //searches inside the page css to find the values for a selector + + search: function(selector){ + if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector]; + var to = {}, selectorTest = new RegExp('^' + selector.escapeRegExp() + '$'); + Array.each(document.styleSheets, function(sheet, j){ + var href = sheet.href; + if (href && href.contains('://') && !href.contains(document.domain)) return; + var rules = sheet.rules || sheet.cssRules; + Array.each(rules, function(rule, i){ + if (!rule.style) return; + var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){ + return m.toLowerCase(); + }) : null; + if (!selectorText || !selectorTest.test(selectorText)) return; + Object.each(Element.Styles, function(value, style){ + if (!rule.style[style] || Element.ShortStyles[style]) return; + value = String(rule.style[style]); + to[style] = ((/^rgb/).test(value)) ? value.rgbToHex() : value; + }); + }); + }); + return Fx.CSS.Cache[selector] = to; + } + +}); + +Fx.CSS.Cache = {}; + +Fx.CSS.Parsers = { + + Color: { + parse: function(value){ + if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true); + return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false; + }, + compute: function(from, to, delta){ + return from.map(function(value, i){ + return Math.round(Fx.compute(from[i], to[i], delta)); + }); + }, + serve: function(value){ + return value.map(Number); + } + }, + + Number: { + parse: parseFloat, + compute: Fx.compute, + serve: function(value, unit){ + return (unit) ? value + unit : value; + } + }, + + String: { + parse: Function.from(false), + compute: function(zero, one){ + return one; + }, + serve: function(zero){ + return zero; + } + } + +}; + +//<1.2compat> + +Fx.CSS.Parsers = new Hash(Fx.CSS.Parsers); + +// + + +/* +--- + +name: Fx.Tween + +description: Formerly Fx.Style, effect to transition any CSS property for an element. + +license: MIT-style license. + +requires: Fx.CSS + +provides: [Fx.Tween, Element.fade, Element.highlight] + +... +*/ + +Fx.Tween = new Class({ + + Extends: Fx.CSS, + + initialize: function(element, options){ + this.element = this.subject = document.id(element); + this.parent(options); + }, + + set: function(property, now){ + if (arguments.length == 1){ + now = property; + property = this.property || this.options.property; + } + this.render(this.element, property, now, this.options.unit); + return this; + }, + + start: function(property, from, to){ + if (!this.check(property, from, to)) return this; + var args = Array.flatten(arguments); + this.property = this.options.property || args.shift(); + var parsed = this.prepare(this.element, this.property, args); + return this.parent(parsed.from, parsed.to); + } + +}); + +Element.Properties.tween = { + + set: function(options){ + this.get('tween').cancel().setOptions(options); + return this; + }, + + get: function(){ + var tween = this.retrieve('tween'); + if (!tween){ + tween = new Fx.Tween(this, {link: 'cancel'}); + this.store('tween', tween); + } + return tween; + } + +}; + +Element.implement({ + + tween: function(property, from, to){ + this.get('tween').start(arguments); + return this; + }, + + fade: function(how){ + var fade = this.get('tween'), o = 'opacity', toggle; + how = [how, 'toggle'].pick(); + switch (how){ + case 'in': fade.start(o, 1); break; + case 'out': fade.start(o, 0); break; + case 'show': fade.set(o, 1); break; + case 'hide': fade.set(o, 0); break; + case 'toggle': + var flag = this.retrieve('fade:flag', this.get('opacity') == 1); + fade.start(o, (flag) ? 0 : 1); + this.store('fade:flag', !flag); + toggle = true; + break; + default: fade.start(o, arguments); + } + if (!toggle) this.eliminate('fade:flag'); + return this; + }, + + highlight: function(start, end){ + if (!end){ + end = this.retrieve('highlight:original', this.getStyle('background-color')); + end = (end == 'transparent') ? '#fff' : end; + } + var tween = this.get('tween'); + tween.start('background-color', start || '#ffff88', end).chain(function(){ + this.setStyle('background-color', this.retrieve('highlight:original')); + tween.callChain(); + }.bind(this)); + return this; + } + +}); + + +/* +--- + +name: Fx.Morph + +description: Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules. + +license: MIT-style license. + +requires: Fx.CSS + +provides: Fx.Morph + +... +*/ + +Fx.Morph = new Class({ + + Extends: Fx.CSS, + + initialize: function(element, options){ + this.element = this.subject = document.id(element); + this.parent(options); + }, + + set: function(now){ + if (typeof now == 'string') now = this.search(now); + for (var p in now) this.render(this.element, p, now[p], this.options.unit); + return this; + }, + + compute: function(from, to, delta){ + var now = {}; + for (var p in from) now[p] = this.parent(from[p], to[p], delta); + return now; + }, + + start: function(properties){ + if (!this.check(properties)) return this; + if (typeof properties == 'string') properties = this.search(properties); + var from = {}, to = {}; + for (var p in properties){ + var parsed = this.prepare(this.element, p, properties[p]); + from[p] = parsed.from; + to[p] = parsed.to; + } + return this.parent(from, to); + } + +}); + +Element.Properties.morph = { + + set: function(options){ + this.get('morph').cancel().setOptions(options); + return this; + }, + + get: function(){ + var morph = this.retrieve('morph'); + if (!morph){ + morph = new Fx.Morph(this, {link: 'cancel'}); + this.store('morph', morph); + } + return morph; + } + +}; + +Element.implement({ + + morph: function(props){ + this.get('morph').start(props); + return this; + } + +}); + + +/* +--- + +name: Fx.Transitions + +description: Contains a set of advanced transitions to be used with any of the Fx Classes. + +license: MIT-style license. + +credits: + - Easing Equations by Robert Penner, , modified and optimized to be used with MooTools. + +requires: Fx + +provides: Fx.Transitions + +... +*/ + +Fx.implement({ + + getTransition: function(){ + var trans = this.options.transition || Fx.Transitions.Sine.easeInOut; + if (typeof trans == 'string'){ + var data = trans.split(':'); + trans = Fx.Transitions; + trans = trans[data[0]] || trans[data[0].capitalize()]; + if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')]; + } + return trans; + } + +}); + +Fx.Transition = function(transition, params){ + params = Array.from(params); + var easeIn = function(pos){ + return transition(pos, params); + }; + return Object.append(easeIn, { + easeIn: easeIn, + easeOut: function(pos){ + return 1 - transition(1 - pos, params); + }, + easeInOut: function(pos){ + return (pos <= 0.5 ? transition(2 * pos, params) : (2 - transition(2 * (1 - pos), params))) / 2; + } + }); +}; + +Fx.Transitions = { + + linear: function(zero){ + return zero; + } + +}; + +//<1.2compat> + +Fx.Transitions = new Hash(Fx.Transitions); + +// + +Fx.Transitions.extend = function(transitions){ + for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]); +}; + +Fx.Transitions.extend({ + + Pow: function(p, x){ + return Math.pow(p, x && x[0] || 6); + }, + + Expo: function(p){ + return Math.pow(2, 8 * (p - 1)); + }, + + Circ: function(p){ + return 1 - Math.sin(Math.acos(p)); + }, + + Sine: function(p){ + return 1 - Math.cos(p * Math.PI / 2); + }, + + Back: function(p, x){ + x = x && x[0] || 1.618; + return Math.pow(p, 2) * ((x + 1) * p - x); + }, + + Bounce: function(p){ + var value; + for (var a = 0, b = 1; 1; a += b, b /= 2){ + if (p >= (7 - 4 * a) / 11){ + value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2); + break; + } + } + return value; + }, + + Elastic: function(p, x){ + return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x && x[0] || 1) / 3); + } + +}); + +['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){ + Fx.Transitions[transition] = new Fx.Transition(function(p){ + return Math.pow(p, i + 2); + }); +}); + + +/* +--- + +name: Request + +description: Powerful all purpose Request Class. Uses XMLHTTPRequest. + +license: MIT-style license. + +requires: [Object, Element, Chain, Events, Options, Browser] + +provides: Request + +... +*/ + +(function(){ + +var empty = function(){}, + progressSupport = ('onprogress' in new Browser.Request); + +var Request = this.Request = new Class({ + + Implements: [Chain, Events, Options], + + options: {/* + onRequest: function(){}, + onLoadstart: function(event, xhr){}, + onProgress: function(event, xhr){}, + onComplete: function(){}, + onCancel: function(){}, + onSuccess: function(responseText, responseXML){}, + onFailure: function(xhr){}, + onException: function(headerName, value){}, + onTimeout: function(){}, + user: '', + password: '',*/ + url: '', + data: '', + headers: { + 'X-Requested-With': 'XMLHttpRequest', + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }, + async: true, + format: false, + method: 'post', + link: 'ignore', + isSuccess: null, + emulation: true, + urlEncoded: true, + encoding: 'utf-8', + evalScripts: false, + evalResponse: false, + timeout: 0, + noCache: false + }, + + initialize: function(options){ + this.xhr = new Browser.Request(); + this.setOptions(options); + this.headers = this.options.headers; + }, + + onStateChange: function(){ + var xhr = this.xhr; + if (xhr.readyState != 4 || !this.running) return; + this.running = false; + this.status = 0; + Function.attempt(function(){ + var status = xhr.status; + this.status = (status == 1223) ? 204 : status; + }.bind(this)); + xhr.onreadystatechange = empty; + if (progressSupport) xhr.onprogress = xhr.onloadstart = empty; + clearTimeout(this.timer); + + this.response = {text: this.xhr.responseText || '', xml: this.xhr.responseXML}; + if (this.options.isSuccess.call(this, this.status)) + this.success(this.response.text, this.response.xml); + else + this.failure(); + }, + + isSuccess: function(){ + var status = this.status; + return (status >= 200 && status < 300); + }, + + isRunning: function(){ + return !!this.running; + }, + + processScripts: function(text){ + if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return Browser.exec(text); + return text.stripScripts(this.options.evalScripts); + }, + + success: function(text, xml){ + this.onSuccess(this.processScripts(text), xml); + }, + + onSuccess: function(){ + this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain(); + }, + + failure: function(){ + this.onFailure(); + }, + + onFailure: function(){ + this.fireEvent('complete').fireEvent('failure', this.xhr); + }, + + loadstart: function(event){ + this.fireEvent('loadstart', [event, this.xhr]); + }, + + progress: function(event){ + this.fireEvent('progress', [event, this.xhr]); + }, + + timeout: function(){ + this.fireEvent('timeout', this.xhr); + }, + + setHeader: function(name, value){ + this.headers[name] = value; + return this; + }, + + getHeader: function(name){ + return Function.attempt(function(){ + return this.xhr.getResponseHeader(name); + }.bind(this)); + }, + + check: function(){ + if (!this.running) return true; + switch (this.options.link){ + case 'cancel': this.cancel(); return true; + case 'chain': this.chain(this.caller.pass(arguments, this)); return false; + } + return false; + }, + + send: function(options){ + if (!this.check(options)) return this; + + this.options.isSuccess = this.options.isSuccess || this.isSuccess; + this.running = true; + + var type = typeOf(options); + if (type == 'string' || type == 'element') options = {data: options}; + + var old = this.options; + options = Object.append({data: old.data, url: old.url, method: old.method}, options); + var data = options.data, url = String(options.url), method = options.method.toLowerCase(); + + switch (typeOf(data)){ + case 'element': data = document.id(data).toQueryString(); break; + case 'object': case 'hash': data = Object.toQueryString(data); + } + + if (this.options.format){ + var format = 'format=' + this.options.format; + data = (data) ? format + '&' + data : format; + } + + if (this.options.emulation && !['get', 'post'].contains(method)){ + var _method = '_method=' + method; + data = (data) ? _method + '&' + data : _method; + method = 'post'; + } + + if (this.options.urlEncoded && ['post', 'put'].contains(method)){ + var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : ''; + this.headers['Content-type'] = 'application/x-www-form-urlencoded' + encoding; + } + + if (!url) url = document.location.pathname; + + var trimPosition = url.lastIndexOf('/'); + if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition); + + if (this.options.noCache) + url += (url.contains('?') ? '&' : '?') + String.uniqueID(); + + if (data && method == 'get'){ + url += (url.contains('?') ? '&' : '?') + data; + data = null; + } + + var xhr = this.xhr; + if (progressSupport){ + xhr.onloadstart = this.loadstart.bind(this); + xhr.onprogress = this.progress.bind(this); + } + + xhr.open(method.toUpperCase(), url, this.options.async, this.options.user, this.options.password); + if (this.options.user && 'withCredentials' in xhr) xhr.withCredentials = true; + + xhr.onreadystatechange = this.onStateChange.bind(this); + + Object.each(this.headers, function(value, key){ + try { + xhr.setRequestHeader(key, value); + } catch (e){ + this.fireEvent('exception', [key, value]); + } + }, this); + + this.fireEvent('request'); + xhr.send(data); + if (!this.options.async) this.onStateChange(); + if (this.options.timeout) this.timer = this.timeout.delay(this.options.timeout, this); + return this; + }, + + cancel: function(){ + if (!this.running) return this; + this.running = false; + var xhr = this.xhr; + xhr.abort(); + clearTimeout(this.timer); + xhr.onreadystatechange = empty; + if (progressSupport) xhr.onprogress = xhr.onloadstart = empty; + this.xhr = new Browser.Request(); + this.fireEvent('cancel'); + return this; + } + +}); + +var methods = {}; +['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){ + methods[method] = function(data){ + var object = { + method: method + }; + if (data != null) object.data = data; + return this.send(object); + }; +}); + +Request.implement(methods); + +Element.Properties.send = { + + set: function(options){ + var send = this.get('send').cancel(); + send.setOptions(options); + return this; + }, + + get: function(){ + var send = this.retrieve('send'); + if (!send){ + send = new Request({ + data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action') + }); + this.store('send', send); + } + return send; + } + +}; + +Element.implement({ + + send: function(url){ + var sender = this.get('send'); + sender.send({data: this, url: url || sender.options.url}); + return this; + } + +}); + +})(); + +/* +--- + +name: Request.HTML + +description: Extends the basic Request Class with additional methods for interacting with HTML responses. + +license: MIT-style license. + +requires: [Element, Request] + +provides: Request.HTML + +... +*/ + +Request.HTML = new Class({ + + Extends: Request, + + options: { + update: false, + append: false, + evalScripts: true, + filter: false, + headers: { + Accept: 'text/html, application/xml, text/xml, */*' + } + }, + + success: function(text){ + var options = this.options, response = this.response; + + response.html = text.stripScripts(function(script){ + response.javascript = script; + }); + + var match = response.html.match(/]*>([\s\S]*?)<\/body>/i); + if (match) response.html = match[1]; + var temp = new Element('div').set('html', response.html); + + response.tree = temp.childNodes; + response.elements = temp.getElements('*'); + + if (options.filter) response.tree = response.elements.filter(options.filter); + if (options.update) document.id(options.update).empty().set('html', response.html); + else if (options.append) document.id(options.append).adopt(temp.getChildren()); + if (options.evalScripts) Browser.exec(response.javascript); + + this.onSuccess(response.tree, response.elements, response.html, response.javascript); + } + +}); + +Element.Properties.load = { + + set: function(options){ + var load = this.get('load').cancel(); + load.setOptions(options); + return this; + }, + + get: function(){ + var load = this.retrieve('load'); + if (!load){ + load = new Request.HTML({data: this, link: 'cancel', update: this, method: 'get'}); + this.store('load', load); + } + return load; + } + +}; + +Element.implement({ + + load: function(){ + this.get('load').send(Array.link(arguments, {data: Type.isObject, url: Type.isString})); + return this; + } + +}); + + +/* +--- + +name: JSON + +description: JSON encoder and decoder. + +license: MIT-style license. + +See Also: + +requires: [Array, String, Number, Function] + +provides: JSON + +... +*/ + +if (typeof JSON == 'undefined') this.JSON = {}; + +//<1.2compat> + +JSON = new Hash({ + stringify: JSON.stringify, + parse: JSON.parse +}); + +// + +(function(){ + +var special = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'}; + +var escape = function(chr){ + return special[chr] || '\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4); +}; + +JSON.validate = function(string){ + string = string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'). + replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). + replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + + return (/^[\],:{}\s]*$/).test(string); +}; + +JSON.encode = JSON.stringify ? function(obj){ + return JSON.stringify(obj); +} : function(obj){ + if (obj && obj.toJSON) obj = obj.toJSON(); + + switch (typeOf(obj)){ + case 'string': + return '"' + obj.replace(/[\x00-\x1f\\"]/g, escape) + '"'; + case 'array': + return '[' + obj.map(JSON.encode).clean() + ']'; + case 'object': case 'hash': + var string = []; + Object.each(obj, function(value, key){ + var json = JSON.encode(value); + if (json) string.push(JSON.encode(key) + ':' + json); + }); + return '{' + string + '}'; + case 'number': case 'boolean': return '' + obj; + case 'null': return 'null'; + } + + return null; +}; + +JSON.decode = function(string, secure){ + if (!string || typeOf(string) != 'string') return null; + + if (secure || JSON.secure){ + if (JSON.parse) return JSON.parse(string); + if (!JSON.validate(string)) throw new Error('JSON could not decode the input; security is enabled and the value is not secure.'); + } + + return eval('(' + string + ')'); +}; + +})(); + + +/* +--- + +name: Request.JSON + +description: Extends the basic Request Class with additional methods for sending and receiving JSON data. + +license: MIT-style license. + +requires: [Request, JSON] + +provides: Request.JSON + +... +*/ + +Request.JSON = new Class({ + + Extends: Request, + + options: { + /*onError: function(text, error){},*/ + secure: true + }, + + initialize: function(options){ + this.parent(options); + Object.append(this.headers, { + 'Accept': 'application/json', + 'X-Request': 'JSON' + }); + }, + + success: function(text){ + var json; + try { + json = this.response.json = JSON.decode(text, this.options.secure); + } catch (error){ + this.fireEvent('error', [text, error]); + return; + } + if (json == null) this.onFailure(); + else this.onSuccess(json, text); + } + +}); + + +/* +--- + +name: Cookie + +description: Class for creating, reading, and deleting browser Cookies. + +license: MIT-style license. + +credits: + - Based on the functions by Peter-Paul Koch (http://quirksmode.org). + +requires: [Options, Browser] + +provides: Cookie + +... +*/ + +var Cookie = new Class({ + + Implements: Options, + + options: { + path: '/', + domain: false, + duration: false, + secure: false, + document: document, + encode: true + }, + + initialize: function(key, options){ + this.key = key; + this.setOptions(options); + }, + + write: function(value){ + if (this.options.encode) value = encodeURIComponent(value); + if (this.options.domain) value += '; domain=' + this.options.domain; + if (this.options.path) value += '; path=' + this.options.path; + if (this.options.duration){ + var date = new Date(); + date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000); + value += '; expires=' + date.toGMTString(); + } + if (this.options.secure) value += '; secure'; + this.options.document.cookie = this.key + '=' + value; + return this; + }, + + read: function(){ + var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)'); + return (value) ? decodeURIComponent(value[1]) : null; + }, + + dispose: function(){ + new Cookie(this.key, Object.merge({}, this.options, {duration: -1})).write(''); + return this; + } + +}); + +Cookie.write = function(key, value, options){ + return new Cookie(key, options).write(value); +}; + +Cookie.read = function(key){ + return new Cookie(key).read(); +}; + +Cookie.dispose = function(key, options){ + return new Cookie(key, options).dispose(); +}; + + +/* +--- + +name: DOMReady + +description: Contains the custom event domready. + +license: MIT-style license. + +requires: [Browser, Element, Element.Event] + +provides: [DOMReady, DomReady] + +... +*/ + +(function(window, document){ + +var ready, + loaded, + checks = [], + shouldPoll, + timer, + testElement = document.createElement('div'); + +var domready = function(){ + clearTimeout(timer); + if (ready) return; + Browser.loaded = ready = true; + document.removeListener('DOMContentLoaded', domready).removeListener('readystatechange', check); + + document.fireEvent('domready'); + window.fireEvent('domready'); +}; + +var check = function(){ + for (var i = checks.length; i--;) if (checks[i]()){ + domready(); + return true; + } + return false; +}; + +var poll = function(){ + clearTimeout(timer); + if (!check()) timer = setTimeout(poll, 10); +}; + +document.addListener('DOMContentLoaded', domready); + +/**/ +// doScroll technique by Diego Perini http://javascript.nwbox.com/IEContentLoaded/ +// testElement.doScroll() throws when the DOM is not ready, only in the top window +var doScrollWorks = function(){ + try { + testElement.doScroll(); + return true; + } catch (e){} + return false; +} +// If doScroll works already, it can't be used to determine domready +// e.g. in an iframe +if (testElement.doScroll && !doScrollWorks()){ + checks.push(doScrollWorks); + shouldPoll = true; +} +/**/ + +if (document.readyState) checks.push(function(){ + var state = document.readyState; + return (state == 'loaded' || state == 'complete'); +}); + +if ('onreadystatechange' in document) document.addListener('readystatechange', check); +else shouldPoll = true; + +if (shouldPoll) poll(); + +Element.Events.domready = { + onAdd: function(fn){ + if (ready) fn.call(this); + } +}; + +// Make sure that domready fires before load +Element.Events.load = { + base: 'load', + onAdd: function(fn){ + if (loaded && this == window) fn.call(this); + }, + condition: function(){ + if (this == window){ + domready(); + delete Element.Events.load; + } + return true; + } +}; + +// This is based on the custom load event +window.addEvent('load', function(){ + loaded = true; +}); + +})(window, document); + + +/* +--- + +name: Swiff + +description: Wrapper for embedding SWF movies. Supports External Interface Communication. + +license: MIT-style license. + +credits: + - Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject. + +requires: [Options, Object, Element] + +provides: Swiff + +... +*/ + +(function(){ + +var Swiff = this.Swiff = new Class({ + + Implements: Options, + + options: { + id: null, + height: 1, + width: 1, + container: null, + properties: {}, + params: { + quality: 'high', + allowScriptAccess: 'always', + wMode: 'window', + swLiveConnect: true + }, + callBacks: {}, + vars: {} + }, + + toElement: function(){ + return this.object; + }, + + initialize: function(path, options){ + this.instance = 'Swiff_' + String.uniqueID(); + + this.setOptions(options); + options = this.options; + var id = this.id = options.id || this.instance; + var container = document.id(options.container); + + Swiff.CallBacks[this.instance] = {}; + + var params = options.params, vars = options.vars, callBacks = options.callBacks; + var properties = Object.append({height: options.height, width: options.width}, options.properties); + + var self = this; + + for (var callBack in callBacks){ + Swiff.CallBacks[this.instance][callBack] = (function(option){ + return function(){ + return option.apply(self.object, arguments); + }; + })(callBacks[callBack]); + vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack; + } + + params.flashVars = Object.toQueryString(vars); + if (Browser.ie){ + properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; + params.movie = path; + } else { + properties.type = 'application/x-shockwave-flash'; + } + properties.data = path; + + var build = ''; + } + build += ''; + this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild; + }, + + replaces: function(element){ + element = document.id(element, true); + element.parentNode.replaceChild(this.toElement(), element); + return this; + }, + + inject: function(element){ + document.id(element, true).appendChild(this.toElement()); + return this; + }, + + remote: function(){ + return Swiff.remote.apply(Swiff, [this.toElement()].append(arguments)); + } + +}); + +Swiff.CallBacks = {}; + +Swiff.remote = function(obj, fn){ + var rs = obj.CallFunction('' + __flash__argumentsToXML(arguments, 2) + ''); + return eval(rs); +}; + +})(); + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-Core-1.6.0.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-Core-1.6.0.js new file mode 100644 index 0000000000..f35c54fca9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-Core-1.6.0.js @@ -0,0 +1,6382 @@ +/* MooTools: the javascript framework. license: MIT-style license. copyright: Copyright (c) 2006-2018 [Valerio Proietti](https://mootools.net/).*/ +/*! +Web Build: https://mootools.net/core/builder/e426a9ae7167c5807b173d5deff673fc +*/ +/* +--- + +name: Core + +description: The heart of MooTools. + +license: MIT-style license. + +copyright: Copyright (c) 2006-2015 [Valerio Proietti](https://github.com/kamicane/). + +authors: The MooTools production team (http://mootools.net/developers/) + +inspiration: + - Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php) + - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php) + +provides: [Core, MooTools, Type, typeOf, instanceOf, Native] + +... +*/ +/*! MooTools: the javascript framework. license: MIT-style license. copyright: Copyright (c) 2006-2015 [Valerio Proietti](https://github.com/kamicane/).*/ +(function(){ + +this.MooTools = { + version: '1.6.0', + build: '529422872adfff401b901b8b6c7ca5114ee95e2b' +}; + +// typeOf, instanceOf + +var typeOf = this.typeOf = function(item){ + if (item == null) return 'null'; + if (item.$family != null) return item.$family(); + + if (item.nodeName){ + if (item.nodeType == 1) return 'element'; + if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? 'textnode' : 'whitespace'; + } else if (typeof item.length == 'number'){ + if ('callee' in item) return 'arguments'; + if ('item' in item) return 'collection'; + } + + return typeof item; +}; + +var instanceOf = this.instanceOf = function(item, object){ + if (item == null) return false; + var constructor = item.$constructor || item.constructor; + while (constructor){ + if (constructor === object) return true; + constructor = constructor.parent; + } + /**/ + if (!item.hasOwnProperty) return false; + /**/ + return item instanceof object; +}; + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/**/ +var enumerables = true; +for (var i in {toString: 1}) enumerables = null; +if (enumerables) enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor']; +function forEachObjectEnumberableKey(object, fn, bind){ + if (enumerables) for (var i = enumerables.length; i--;){ + var k = enumerables[i]; + // signature has key-value, so overloadSetter can directly pass the + // method function, without swapping arguments. + if (hasOwnProperty.call(object, k)) fn.call(bind, k, object[k]); + } +} +/**/ + +// Function overloading + +var Function = this.Function; + +Function.prototype.overloadSetter = function(usePlural){ + var self = this; + return function(a, b){ + if (a == null) return this; + if (usePlural || typeof a != 'string'){ + for (var k in a) self.call(this, k, a[k]); + /**/ + forEachObjectEnumberableKey(a, self, this); + /**/ + } else { + self.call(this, a, b); + } + return this; + }; +}; + +Function.prototype.overloadGetter = function(usePlural){ + var self = this; + return function(a){ + var args, result; + if (typeof a != 'string') args = a; + else if (arguments.length > 1) args = arguments; + else if (usePlural) args = [a]; + if (args){ + result = {}; + for (var i = 0; i < args.length; i++) result[args[i]] = self.call(this, args[i]); + } else { + result = self.call(this, a); + } + return result; + }; +}; + +Function.prototype.extend = function(key, value){ + this[key] = value; +}.overloadSetter(); + +Function.prototype.implement = function(key, value){ + this.prototype[key] = value; +}.overloadSetter(); + +// From + +var slice = Array.prototype.slice; + +Array.convert = function(item){ + if (item == null) return []; + return (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : slice.call(item) : [item]; +}; + +Function.convert = function(item){ + return (typeOf(item) == 'function') ? item : function(){ + return item; + }; +}; + + +Number.convert = function(item){ + var number = parseFloat(item); + return isFinite(number) ? number : null; +}; + +String.convert = function(item){ + return item + ''; +}; + + + +Function.from = Function.convert; +Number.from = Number.convert; +String.from = String.convert; + +// hide, protect + +Function.implement({ + + hide: function(){ + this.$hidden = true; + return this; + }, + + protect: function(){ + this.$protected = true; + return this; + } + +}); + +// Type + +var Type = this.Type = function(name, object){ + if (name){ + var lower = name.toLowerCase(); + var typeCheck = function(item){ + return (typeOf(item) == lower); + }; + + Type['is' + name] = typeCheck; + if (object != null){ + object.prototype.$family = (function(){ + return lower; + }).hide(); + + } + } + + if (object == null) return null; + + object.extend(this); + object.$constructor = Type; + object.prototype.$constructor = object; + + return object; +}; + +var toString = Object.prototype.toString; + +Type.isEnumerable = function(item){ + return (item != null && typeof item.length == 'number' && toString.call(item) != '[object Function]' ); +}; + +var hooks = {}; + +var hooksOf = function(object){ + var type = typeOf(object.prototype); + return hooks[type] || (hooks[type] = []); +}; + +var implement = function(name, method){ + if (method && method.$hidden) return; + + var hooks = hooksOf(this); + + for (var i = 0; i < hooks.length; i++){ + var hook = hooks[i]; + if (typeOf(hook) == 'type') implement.call(hook, name, method); + else hook.call(this, name, method); + } + + var previous = this.prototype[name]; + if (previous == null || !previous.$protected) this.prototype[name] = method; + + if (this[name] == null && typeOf(method) == 'function') extend.call(this, name, function(item){ + return method.apply(item, slice.call(arguments, 1)); + }); +}; + +var extend = function(name, method){ + if (method && method.$hidden) return; + var previous = this[name]; + if (previous == null || !previous.$protected) this[name] = method; +}; + +Type.implement({ + + implement: implement.overloadSetter(), + + extend: extend.overloadSetter(), + + alias: function(name, existing){ + implement.call(this, name, this.prototype[existing]); + }.overloadSetter(), + + mirror: function(hook){ + hooksOf(this).push(hook); + return this; + } + +}); + +new Type('Type', Type); + +// Default Types + +var force = function(name, object, methods){ + var isType = (object != Object), + prototype = object.prototype; + + if (isType) object = new Type(name, object); + + for (var i = 0, l = methods.length; i < l; i++){ + var key = methods[i], + generic = object[key], + proto = prototype[key]; + + if (generic) generic.protect(); + if (isType && proto) object.implement(key, proto.protect()); + } + + if (isType){ + var methodsEnumerable = prototype.propertyIsEnumerable(methods[0]); + object.forEachMethod = function(fn){ + if (!methodsEnumerable) for (var i = 0, l = methods.length; i < l; i++){ + fn.call(prototype, prototype[methods[i]], methods[i]); + } + for (var key in prototype) fn.call(prototype, prototype[key], key); + }; + } + + return force; +}; + +force('String', String, [ + 'charAt', 'charCodeAt', 'concat', 'contains', 'indexOf', 'lastIndexOf', 'match', 'quote', 'replace', 'search', + 'slice', 'split', 'substr', 'substring', 'trim', 'toLowerCase', 'toUpperCase' +])('Array', Array, [ + 'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice', + 'indexOf', 'lastIndexOf', 'filter', 'forEach', 'every', 'map', 'some', 'reduce', 'reduceRight', 'contains' +])('Number', Number, [ + 'toExponential', 'toFixed', 'toLocaleString', 'toPrecision' +])('Function', Function, [ + 'apply', 'call', 'bind' +])('RegExp', RegExp, [ + 'exec', 'test' +])('Object', Object, [ + 'create', 'defineProperty', 'defineProperties', 'keys', + 'getPrototypeOf', 'getOwnPropertyDescriptor', 'getOwnPropertyNames', + 'preventExtensions', 'isExtensible', 'seal', 'isSealed', 'freeze', 'isFrozen' +])('Date', Date, ['now']); + +Object.extend = extend.overloadSetter(); + +Date.extend('now', function(){ + return +(new Date); +}); + +new Type('Boolean', Boolean); + +// fixes NaN returning as Number + +Number.prototype.$family = function(){ + return isFinite(this) ? 'number' : 'null'; +}.hide(); + +// Number.random + +Number.extend('random', function(min, max){ + return Math.floor(Math.random() * (max - min + 1) + min); +}); + +// forEach, each, keys + +Array.implement({ + + /**/ + forEach: function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++){ + if (i in this) fn.call(bind, this[i], i, this); + } + }, + /**/ + + each: function(fn, bind){ + Array.forEach(this, fn, bind); + return this; + } + +}); + +Object.extend({ + + keys: function(object){ + var keys = []; + for (var k in object){ + if (hasOwnProperty.call(object, k)) keys.push(k); + } + /**/ + forEachObjectEnumberableKey(object, function(k){ + keys.push(k); + }); + /**/ + return keys; + }, + + forEach: function(object, fn, bind){ + Object.keys(object).forEach(function(key){ + fn.call(bind, object[key], key, object); + }); + } + +}); + +Object.each = Object.forEach; + + +// Array & Object cloning, Object merging and appending + +var cloneOf = function(item){ + switch (typeOf(item)){ + case 'array': return item.clone(); + case 'object': return Object.clone(item); + default: return item; + } +}; + +Array.implement('clone', function(){ + var i = this.length, clone = new Array(i); + while (i--) clone[i] = cloneOf(this[i]); + return clone; +}); + +var mergeOne = function(source, key, current){ + switch (typeOf(current)){ + case 'object': + if (typeOf(source[key]) == 'object') Object.merge(source[key], current); + else source[key] = Object.clone(current); + break; + case 'array': source[key] = current.clone(); break; + default: source[key] = current; + } + return source; +}; + +Object.extend({ + + merge: function(source, k, v){ + if (typeOf(k) == 'string') return mergeOne(source, k, v); + for (var i = 1, l = arguments.length; i < l; i++){ + var object = arguments[i]; + for (var key in object) mergeOne(source, key, object[key]); + } + return source; + }, + + clone: function(object){ + var clone = {}; + for (var key in object) clone[key] = cloneOf(object[key]); + return clone; + }, + + append: function(original){ + for (var i = 1, l = arguments.length; i < l; i++){ + var extended = arguments[i] || {}; + for (var key in extended) original[key] = extended[key]; + } + return original; + } + +}); + +// Object-less types + +['Object', 'WhiteSpace', 'TextNode', 'Collection', 'Arguments'].each(function(name){ + new Type(name); +}); + +// Unique ID + +var UID = Date.now(); + +String.extend('uniqueID', function(){ + return (UID++).toString(36); +}); + + + +})(); + +/* +--- + +name: Array + +description: Contains Array Prototypes like each, contains, and erase. + +license: MIT-style license. + +requires: [Type] + +provides: Array + +... +*/ + +Array.implement({ + + /**/ + every: function(fn, bind){ + for (var i = 0, l = this.length >>> 0; i < l; i++){ + if ((i in this) && !fn.call(bind, this[i], i, this)) return false; + } + return true; + }, + + filter: function(fn, bind){ + var results = []; + for (var value, i = 0, l = this.length >>> 0; i < l; i++) if (i in this){ + value = this[i]; + if (fn.call(bind, value, i, this)) results.push(value); + } + return results; + }, + + indexOf: function(item, from){ + var length = this.length >>> 0; + for (var i = (from < 0) ? Math.max(0, length + from) : from || 0; i < length; i++){ + if (this[i] === item) return i; + } + return -1; + }, + + map: function(fn, bind){ + var length = this.length >>> 0, results = Array(length); + for (var i = 0; i < length; i++){ + if (i in this) results[i] = fn.call(bind, this[i], i, this); + } + return results; + }, + + some: function(fn, bind){ + for (var i = 0, l = this.length >>> 0; i < l; i++){ + if ((i in this) && fn.call(bind, this[i], i, this)) return true; + } + return false; + }, + /**/ + + clean: function(){ + return this.filter(function(item){ + return item != null; + }); + }, + + invoke: function(methodName){ + var args = Array.slice(arguments, 1); + return this.map(function(item){ + return item[methodName].apply(item, args); + }); + }, + + associate: function(keys){ + var obj = {}, length = Math.min(this.length, keys.length); + for (var i = 0; i < length; i++) obj[keys[i]] = this[i]; + return obj; + }, + + link: function(object){ + var result = {}; + for (var i = 0, l = this.length; i < l; i++){ + for (var key in object){ + if (object[key](this[i])){ + result[key] = this[i]; + delete object[key]; + break; + } + } + } + return result; + }, + + contains: function(item, from){ + return this.indexOf(item, from) != -1; + }, + + append: function(array){ + this.push.apply(this, array); + return this; + }, + + getLast: function(){ + return (this.length) ? this[this.length - 1] : null; + }, + + getRandom: function(){ + return (this.length) ? this[Number.random(0, this.length - 1)] : null; + }, + + include: function(item){ + if (!this.contains(item)) this.push(item); + return this; + }, + + combine: function(array){ + for (var i = 0, l = array.length; i < l; i++) this.include(array[i]); + return this; + }, + + erase: function(item){ + for (var i = this.length; i--;){ + if (this[i] === item) this.splice(i, 1); + } + return this; + }, + + empty: function(){ + this.length = 0; + return this; + }, + + flatten: function(){ + var array = []; + for (var i = 0, l = this.length; i < l; i++){ + var type = typeOf(this[i]); + if (type == 'null') continue; + array = array.concat((type == 'array' || type == 'collection' || type == 'arguments' || instanceOf(this[i], Array)) ? Array.flatten(this[i]) : this[i]); + } + return array; + }, + + pick: function(){ + for (var i = 0, l = this.length; i < l; i++){ + if (this[i] != null) return this[i]; + } + return null; + }, + + hexToRgb: function(array){ + if (this.length != 3) return null; + var rgb = this.map(function(value){ + if (value.length == 1) value += value; + return parseInt(value, 16); + }); + return (array) ? rgb : 'rgb(' + rgb + ')'; + }, + + rgbToHex: function(array){ + if (this.length < 3) return null; + if (this.length == 4 && this[3] == 0 && !array) return 'transparent'; + var hex = []; + for (var i = 0; i < 3; i++){ + var bit = (this[i] - 0).toString(16); + hex.push((bit.length == 1) ? '0' + bit : bit); + } + return (array) ? hex : '#' + hex.join(''); + } + +}); + + + +/* +--- + +name: Function + +description: Contains Function Prototypes like create, bind, pass, and delay. + +license: MIT-style license. + +requires: Type + +provides: Function + +... +*/ + +Function.extend({ + + attempt: function(){ + for (var i = 0, l = arguments.length; i < l; i++){ + try { + return arguments[i](); + } catch (e){} + } + return null; + } + +}); + +Function.implement({ + + attempt: function(args, bind){ + try { + return this.apply(bind, Array.convert(args)); + } catch (e){} + + return null; + }, + + /**/ + bind: function(that){ + var self = this, + args = arguments.length > 1 ? Array.slice(arguments, 1) : null, + F = function(){}; + + var bound = function(){ + var context = that, length = arguments.length; + if (this instanceof bound){ + F.prototype = self.prototype; + context = new F; + } + var result = (!args && !length) + ? self.call(context) + : self.apply(context, args && length ? args.concat(Array.slice(arguments)) : args || arguments); + return context == that ? result : context; + }; + return bound; + }, + /**/ + + pass: function(args, bind){ + var self = this; + if (args != null) args = Array.convert(args); + return function(){ + return self.apply(bind, args || arguments); + }; + }, + + delay: function(delay, bind, args){ + return setTimeout(this.pass((args == null ? [] : args), bind), delay); + }, + + periodical: function(periodical, bind, args){ + return setInterval(this.pass((args == null ? [] : args), bind), periodical); + } + +}); + + + +/* +--- + +name: Number + +description: Contains Number Prototypes like limit, round, times, and ceil. + +license: MIT-style license. + +requires: Type + +provides: Number + +... +*/ + +Number.implement({ + + limit: function(min, max){ + return Math.min(max, Math.max(min, this)); + }, + + round: function(precision){ + precision = Math.pow(10, precision || 0).toFixed(precision < 0 ? -precision : 0); + return Math.round(this * precision) / precision; + }, + + times: function(fn, bind){ + for (var i = 0; i < this; i++) fn.call(bind, i, this); + }, + + toFloat: function(){ + return parseFloat(this); + }, + + toInt: function(base){ + return parseInt(this, base || 10); + } + +}); + +Number.alias('each', 'times'); + +(function(math){ + +var methods = {}; + +math.each(function(name){ + if (!Number[name]) methods[name] = function(){ + return Math[name].apply(null, [this].concat(Array.convert(arguments))); + }; +}); + +Number.implement(methods); + +})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']); + +/* +--- + +name: String + +description: Contains String Prototypes like camelCase, capitalize, test, and toInt. + +license: MIT-style license. + +requires: [Type, Array] + +provides: String + +... +*/ + +String.implement({ + + // + contains: function(string, index){ + return (index ? String(this).slice(index) : String(this)).indexOf(string) > -1; + }, + // + + test: function(regex, params){ + return ((typeOf(regex) == 'regexp') ? regex : new RegExp('' + regex, params)).test(this); + }, + + trim: function(){ + return String(this).replace(/^\s+|\s+$/g, ''); + }, + + clean: function(){ + return String(this).replace(/\s+/g, ' ').trim(); + }, + + camelCase: function(){ + return String(this).replace(/-\D/g, function(match){ + return match.charAt(1).toUpperCase(); + }); + }, + + hyphenate: function(){ + return String(this).replace(/[A-Z]/g, function(match){ + return ('-' + match.charAt(0).toLowerCase()); + }); + }, + + capitalize: function(){ + return String(this).replace(/\b[a-z]/g, function(match){ + return match.toUpperCase(); + }); + }, + + escapeRegExp: function(){ + return String(this).replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1'); + }, + + toInt: function(base){ + return parseInt(this, base || 10); + }, + + toFloat: function(){ + return parseFloat(this); + }, + + hexToRgb: function(array){ + var hex = String(this).match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/); + return (hex) ? hex.slice(1).hexToRgb(array) : null; + }, + + rgbToHex: function(array){ + var rgb = String(this).match(/\d{1,3}/g); + return (rgb) ? rgb.rgbToHex(array) : null; + }, + + substitute: function(object, regexp){ + return String(this).replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){ + if (match.charAt(0) == '\\') return match.slice(1); + return (object[name] != null) ? object[name] : ''; + }); + } + +}); + + + +/* +--- + +name: Browser + +description: The Browser Object. Contains Browser initialization, Window and Document, and the Browser Hash. + +license: MIT-style license. + +requires: [Array, Function, Number, String] + +provides: [Browser, Window, Document] + +... +*/ + +(function(){ + +var document = this.document; +var window = document.window = this; + +var parse = function(ua, platform){ + ua = ua.toLowerCase(); + platform = (platform ? platform.toLowerCase() : ''); + + // chrome is included in the edge UA, so need to check for edge first, + // before checking if it's chrome. + var UA = ua.match(/(edge)[\s\/:]([\w\d\.]+)/); + if (!UA){ + UA = ua.match(/(opera|ie|firefox|chrome|trident|crios|version)[\s\/:]([\w\d\.]+)?.*?(safari|(?:rv[\s\/:]|version[\s\/:])([\w\d\.]+)|$)/) || [null, 'unknown', 0]; + } + + if (UA[1] == 'trident'){ + UA[1] = 'ie'; + if (UA[4]) UA[2] = UA[4]; + } else if (UA[1] == 'crios'){ + UA[1] = 'chrome'; + } + + platform = ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || ua.match(/mac|win|linux/) || ['other'])[0]; + if (platform == 'win') platform = 'windows'; + + return { + extend: Function.prototype.extend, + name: (UA[1] == 'version') ? UA[3] : UA[1], + version: parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : UA[2]), + platform: platform + }; +}; + +var Browser = this.Browser = parse(navigator.userAgent, navigator.platform); + +if (Browser.name == 'ie' && document.documentMode){ + Browser.version = document.documentMode; +} + +Browser.extend({ + Features: { + xpath: !!(document.evaluate), + air: !!(window.runtime), + query: !!(document.querySelector), + json: !!(window.JSON) + }, + parseUA: parse +}); + + + +// Request + +Browser.Request = (function(){ + + var XMLHTTP = function(){ + return new XMLHttpRequest(); + }; + + var MSXML2 = function(){ + return new ActiveXObject('MSXML2.XMLHTTP'); + }; + + var MSXML = function(){ + return new ActiveXObject('Microsoft.XMLHTTP'); + }; + + return Function.attempt(function(){ + XMLHTTP(); + return XMLHTTP; + }, function(){ + MSXML2(); + return MSXML2; + }, function(){ + MSXML(); + return MSXML; + }); + +})(); + +Browser.Features.xhr = !!(Browser.Request); + + + +// String scripts + +Browser.exec = function(text){ + if (!text) return text; + if (window.execScript){ + window.execScript(text); + } else { + var script = document.createElement('script'); + script.setAttribute('type', 'text/javascript'); + script.text = text; + document.head.appendChild(script); + document.head.removeChild(script); + } + return text; +}; + +String.implement('stripScripts', function(exec){ + var scripts = ''; + var text = this.replace(/]*>([\s\S]*?)<\/script>/gi, function(all, code){ + scripts += code + '\n'; + return ''; + }); + if (exec === true) Browser.exec(scripts); + else if (typeOf(exec) == 'function') exec(scripts, text); + return text; +}); + +// Window, Document + +Browser.extend({ + Document: this.Document, + Window: this.Window, + Element: this.Element, + Event: this.Event +}); + +this.Window = this.$constructor = new Type('Window', function(){}); + +this.$family = Function.convert('window').hide(); + +Window.mirror(function(name, method){ + window[name] = method; +}); + +this.Document = document.$constructor = new Type('Document', function(){}); + +document.$family = Function.convert('document').hide(); + +Document.mirror(function(name, method){ + document[name] = method; +}); + +document.html = document.documentElement; +if (!document.head) document.head = document.getElementsByTagName('head')[0]; + +if (document.execCommand) try { + document.execCommand('BackgroundImageCache', false, true); +} catch (e){} + +/**/ +if (this.attachEvent && !this.addEventListener){ + var unloadEvent = function(){ + this.detachEvent('onunload', unloadEvent); + document.head = document.html = document.window = null; + window = this.Window = document = null; + }; + this.attachEvent('onunload', unloadEvent); +} + +// IE fails on collections and ) +var arrayFrom = Array.convert; +try { + arrayFrom(document.html.childNodes); +} catch (e){ + Array.convert = function(item){ + if (typeof item != 'string' && Type.isEnumerable(item) && typeOf(item) != 'array'){ + var i = item.length, array = new Array(i); + while (i--) array[i] = item[i]; + return array; + } + return arrayFrom(item); + }; + + var prototype = Array.prototype, + slice = prototype.slice; + ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice'].each(function(name){ + var method = prototype[name]; + Array[name] = function(item){ + return method.apply(Array.convert(item), slice.call(arguments, 1)); + }; + }); +} +/**/ + + + +})(); + +/* +--- + +name: Class + +description: Contains the Class Function for easily creating, extending, and implementing reusable Classes. + +license: MIT-style license. + +requires: [Array, String, Function, Number] + +provides: Class + +... +*/ + +(function(){ + +var Class = this.Class = new Type('Class', function(params){ + if (instanceOf(params, Function)) params = {initialize: params}; + + var newClass = function(){ + reset(this); + if (newClass.$prototyping) return this; + this.$caller = null; + this.$family = null; + var value = (this.initialize) ? this.initialize.apply(this, arguments) : this; + this.$caller = this.caller = null; + return value; + }.extend(this).implement(params); + + newClass.$constructor = Class; + newClass.prototype.$constructor = newClass; + newClass.prototype.parent = parent; + + return newClass; +}); + +var parent = function(){ + if (!this.$caller) throw new Error('The method "parent" cannot be called.'); + var name = this.$caller.$name, + parent = this.$caller.$owner.parent, + previous = (parent) ? parent.prototype[name] : null; + if (!previous) throw new Error('The method "' + name + '" has no parent.'); + return previous.apply(this, arguments); +}; + +var reset = function(object){ + for (var key in object){ + var value = object[key]; + switch (typeOf(value)){ + case 'object': + var F = function(){}; + F.prototype = value; + object[key] = reset(new F); + break; + case 'array': object[key] = value.clone(); break; + } + } + return object; +}; + +var wrap = function(self, key, method){ + if (method.$origin) method = method.$origin; + var wrapper = function(){ + if (method.$protected && this.$caller == null) throw new Error('The method "' + key + '" cannot be called.'); + var caller = this.caller, current = this.$caller; + this.caller = current; this.$caller = wrapper; + var result = method.apply(this, arguments); + this.$caller = current; this.caller = caller; + return result; + }.extend({$owner: self, $origin: method, $name: key}); + return wrapper; +}; + +var implement = function(key, value, retain){ + if (Class.Mutators.hasOwnProperty(key)){ + value = Class.Mutators[key].call(this, value); + if (value == null) return this; + } + + if (typeOf(value) == 'function'){ + if (value.$hidden) return this; + this.prototype[key] = (retain) ? value : wrap(this, key, value); + } else { + Object.merge(this.prototype, key, value); + } + + return this; +}; + +var getInstance = function(klass){ + klass.$prototyping = true; + var proto = new klass; + delete klass.$prototyping; + return proto; +}; + +Class.implement('implement', implement.overloadSetter()); + +Class.Mutators = { + + Extends: function(parent){ + this.parent = parent; + this.prototype = getInstance(parent); + }, + + Implements: function(items){ + Array.convert(items).each(function(item){ + var instance = new item; + for (var key in instance) implement.call(this, key, instance[key], true); + }, this); + } +}; + +})(); + +/* +--- + +name: Class.Extras + +description: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks. + +license: MIT-style license. + +requires: Class + +provides: [Class.Extras, Chain, Events, Options] + +... +*/ + +(function(){ + +this.Chain = new Class({ + + $chain: [], + + chain: function(){ + this.$chain.append(Array.flatten(arguments)); + return this; + }, + + callChain: function(){ + return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false; + }, + + clearChain: function(){ + this.$chain.empty(); + return this; + } + +}); + +var removeOn = function(string){ + return string.replace(/^on([A-Z])/, function(full, first){ + return first.toLowerCase(); + }); +}; + +this.Events = new Class({ + + $events: {}, + + addEvent: function(type, fn, internal){ + type = removeOn(type); + + + + this.$events[type] = (this.$events[type] || []).include(fn); + if (internal) fn.internal = true; + return this; + }, + + addEvents: function(events){ + for (var type in events) this.addEvent(type, events[type]); + return this; + }, + + fireEvent: function(type, args, delay){ + type = removeOn(type); + var events = this.$events[type]; + if (!events) return this; + args = Array.convert(args); + events.each(function(fn){ + if (delay) fn.delay(delay, this, args); + else fn.apply(this, args); + }, this); + return this; + }, + + removeEvent: function(type, fn){ + type = removeOn(type); + var events = this.$events[type]; + if (events && !fn.internal){ + var index = events.indexOf(fn); + if (index != -1) delete events[index]; + } + return this; + }, + + removeEvents: function(events){ + var type; + if (typeOf(events) == 'object'){ + for (type in events) this.removeEvent(type, events[type]); + return this; + } + if (events) events = removeOn(events); + for (type in this.$events){ + if (events && events != type) continue; + var fns = this.$events[type]; + for (var i = fns.length; i--;) if (i in fns){ + this.removeEvent(type, fns[i]); + } + } + return this; + } + +}); + +this.Options = new Class({ + + setOptions: function(){ + var options = this.options = Object.merge.apply(null, [{}, this.options].append(arguments)); + if (this.addEvent) for (var option in options){ + if (typeOf(options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue; + this.addEvent(option, options[option]); + delete options[option]; + } + return this; + } + +}); + +})(); + +/* +--- + +name: Class.Thenable + +description: Contains a Utility Class that can be implemented into your own Classes to make them "thenable". + +license: MIT-style license. + +requires: Class + +provides: [Class.Thenable] + +... +*/ + +(function(){ + +var STATE_PENDING = 0, + STATE_FULFILLED = 1, + STATE_REJECTED = 2; + +var Thenable = Class.Thenable = new Class({ + + $thenableState: STATE_PENDING, + $thenableResult: null, + $thenableReactions: [], + + resolve: function(value){ + resolve(this, value); + return this; + }, + + reject: function(reason){ + reject(this, reason); + return this; + }, + + getThenableState: function(){ + switch (this.$thenableState){ + case STATE_PENDING: + return 'pending'; + + case STATE_FULFILLED: + return 'fulfilled'; + + case STATE_REJECTED: + return 'rejected'; + } + }, + + resetThenable: function(reason){ + reject(this, reason); + reset(this); + return this; + }, + + then: function(onFulfilled, onRejected){ + if (typeof onFulfilled !== 'function') onFulfilled = 'Identity'; + if (typeof onRejected !== 'function') onRejected = 'Thrower'; + + var thenable = new Thenable(); + + this.$thenableReactions.push({ + thenable: thenable, + fulfillHandler: onFulfilled, + rejectHandler: onRejected + }); + + if (this.$thenableState !== STATE_PENDING){ + react(this); + } + + return thenable; + }, + + 'catch': function(onRejected){ + return this.then(null, onRejected); + } + +}); + +Thenable.extend({ + resolve: function(value){ + var thenable; + if (value instanceof Thenable){ + thenable = value; + } else { + thenable = new Thenable(); + resolve(thenable, value); + } + return thenable; + }, + reject: function(reason){ + var thenable = new Thenable(); + reject(thenable, reason); + return thenable; + } +}); + +// Private functions + +function resolve(thenable, value){ + if (thenable.$thenableState === STATE_PENDING){ + if (thenable === value){ + reject(thenable, new TypeError('Tried to resolve a thenable with itself.')); + } else if (value && (typeof value === 'object' || typeof value === 'function')){ + var then; + try { + then = value.then; + } catch (exception){ + reject(thenable, exception); + } + if (typeof then === 'function'){ + var resolved = false; + defer(function(){ + try { + then.call( + value, + function(nextValue){ + if (!resolved){ + resolved = true; + resolve(thenable, nextValue); + } + }, + function(reason){ + if (!resolved){ + resolved = true; + reject(thenable, reason); + } + } + ); + } catch (exception){ + if (!resolved){ + resolved = true; + reject(thenable, exception); + } + } + }); + } else { + fulfill(thenable, value); + } + } else { + fulfill(thenable, value); + } + } +} + +function fulfill(thenable, value){ + if (thenable.$thenableState === STATE_PENDING){ + thenable.$thenableResult = value; + thenable.$thenableState = STATE_FULFILLED; + + react(thenable); + } +} + +function reject(thenable, reason){ + if (thenable.$thenableState === STATE_PENDING){ + thenable.$thenableResult = reason; + thenable.$thenableState = STATE_REJECTED; + + react(thenable); + } +} + +function reset(thenable){ + if (thenable.$thenableState !== STATE_PENDING){ + thenable.$thenableResult = null; + thenable.$thenableState = STATE_PENDING; + } +} + +function react(thenable){ + var state = thenable.$thenableState, + result = thenable.$thenableResult, + reactions = thenable.$thenableReactions, + type; + + if (state === STATE_FULFILLED){ + thenable.$thenableReactions = []; + type = 'fulfillHandler'; + } else if (state == STATE_REJECTED){ + thenable.$thenableReactions = []; + type = 'rejectHandler'; + } + + if (type){ + defer(handle.pass([result, reactions, type])); + } +} + +function handle(result, reactions, type){ + for (var i = 0, l = reactions.length; i < l; ++i){ + var reaction = reactions[i], + handler = reaction[type]; + + if (handler === 'Identity'){ + resolve(reaction.thenable, result); + } else if (handler === 'Thrower'){ + reject(reaction.thenable, result); + } else { + try { + resolve(reaction.thenable, handler(result)); + } catch (exception){ + reject(reaction.thenable, exception); + } + } + } +} + +var defer; +if (typeof process !== 'undefined' && typeof process.nextTick === 'function'){ + defer = process.nextTick; +} else if (typeof setImmediate !== 'undefined'){ + defer = setImmediate; +} else { + defer = function(fn){ + setTimeout(fn, 0); + }; +} + +})(); + +/* +--- + +name: Object + +description: Object generic methods + +license: MIT-style license. + +requires: Type + +provides: [Object, Hash] + +... +*/ + +(function(){ + +Object.extend({ + + subset: function(object, keys){ + var results = {}; + for (var i = 0, l = keys.length; i < l; i++){ + var k = keys[i]; + if (k in object) results[k] = object[k]; + } + return results; + }, + + map: function(object, fn, bind){ + var results = {}; + var keys = Object.keys(object); + for (var i = 0; i < keys.length; i++){ + var key = keys[i]; + results[key] = fn.call(bind, object[key], key, object); + } + return results; + }, + + filter: function(object, fn, bind){ + var results = {}; + var keys = Object.keys(object); + for (var i = 0; i < keys.length; i++){ + var key = keys[i], value = object[key]; + if (fn.call(bind, value, key, object)) results[key] = value; + } + return results; + }, + + every: function(object, fn, bind){ + var keys = Object.keys(object); + for (var i = 0; i < keys.length; i++){ + var key = keys[i]; + if (!fn.call(bind, object[key], key)) return false; + } + return true; + }, + + some: function(object, fn, bind){ + var keys = Object.keys(object); + for (var i = 0; i < keys.length; i++){ + var key = keys[i]; + if (fn.call(bind, object[key], key)) return true; + } + return false; + }, + + values: function(object){ + var values = []; + var keys = Object.keys(object); + for (var i = 0; i < keys.length; i++){ + var k = keys[i]; + values.push(object[k]); + } + return values; + }, + + getLength: function(object){ + return Object.keys(object).length; + }, + + keyOf: function(object, value){ + var keys = Object.keys(object); + for (var i = 0; i < keys.length; i++){ + var key = keys[i]; + if (object[key] === value) return key; + } + return null; + }, + + contains: function(object, value){ + return Object.keyOf(object, value) != null; + }, + + toQueryString: function(object, base){ + var queryString = []; + + Object.each(object, function(value, key){ + if (base) key = base + '[' + key + ']'; + var result; + switch (typeOf(value)){ + case 'object': result = Object.toQueryString(value, key); break; + case 'array': + var qs = {}; + value.each(function(val, i){ + qs[i] = val; + }); + result = Object.toQueryString(qs, key); + break; + default: result = key + '=' + encodeURIComponent(value); + } + if (value != null) queryString.push(result); + }); + + return queryString.join('&'); + } + +}); + +})(); + + + +/* +--- +name: Slick.Parser +description: Standalone CSS3 Selector parser +provides: Slick.Parser +... +*/ + +;(function(){ + +var parsed, + separatorIndex, + combinatorIndex, + reversed, + cache = {}, + reverseCache = {}, + reUnescape = /\\/g; + +var parse = function(expression, isReversed){ + if (expression == null) return null; + if (expression.Slick === true) return expression; + expression = ('' + expression).replace(/^\s+|\s+$/g, ''); + reversed = !!isReversed; + var currentCache = (reversed) ? reverseCache : cache; + if (currentCache[expression]) return currentCache[expression]; + parsed = { + Slick: true, + expressions: [], + raw: expression, + reverse: function(){ + return parse(this.raw, true); + } + }; + separatorIndex = -1; + while (expression != (expression = expression.replace(regexp, parser))); + parsed.length = parsed.expressions.length; + return currentCache[parsed.raw] = (reversed) ? reverse(parsed) : parsed; +}; + +var reverseCombinator = function(combinator){ + if (combinator === '!') return ' '; + else if (combinator === ' ') return '!'; + else if ((/^!/).test(combinator)) return combinator.replace(/^!/, ''); + else return '!' + combinator; +}; + +var reverse = function(expression){ + var expressions = expression.expressions; + for (var i = 0; i < expressions.length; i++){ + var exp = expressions[i]; + var last = {parts: [], tag: '*', combinator: reverseCombinator(exp[0].combinator)}; + + for (var j = 0; j < exp.length; j++){ + var cexp = exp[j]; + if (!cexp.reverseCombinator) cexp.reverseCombinator = ' '; + cexp.combinator = cexp.reverseCombinator; + delete cexp.reverseCombinator; + } + + exp.reverse().push(last); + } + return expression; +}; + +var escapeRegExp = function(string){// Credit: XRegExp 0.6.1 (c) 2007-2008 Steven Levithan MIT License + return string.replace(/[-[\]{}()*+?.\\^$|,#\s]/g, function(match){ + return '\\' + match; + }); +}; + +var regexp = new RegExp( +/* +#!/usr/bin/env ruby +puts "\t\t" + DATA.read.gsub(/\(\?x\)|\s+#.*$|\s+|\\$|\\n/,'') +__END__ + "(?x)^(?:\ + \\s* ( , ) \\s* # Separator \n\ + | \\s* ( + ) \\s* # Combinator \n\ + | ( \\s+ ) # CombinatorChildren \n\ + | ( + | \\* ) # Tag \n\ + | \\# ( + ) # ID \n\ + | \\. ( + ) # ClassName \n\ + | # Attribute \n\ + \\[ \ + \\s* (+) (?: \ + \\s* ([*^$!~|]?=) (?: \ + \\s* (?:\ + ([\"']?)(.*?)\\9 \ + )\ + ) \ + )? \\s* \ + \\](?!\\]) \n\ + | :+ ( + )(?:\ + \\( (?:\ + (?:([\"'])([^\\12]*)\\12)|((?:\\([^)]+\\)|[^()]*)+)\ + ) \\)\ + )?\ + )" +*/ + "^(?:\\s*(,)\\s*|\\s*(+)\\s*|(\\s+)|(+|\\*)|\\#(+)|\\.(+)|\\[\\s*(+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)" + .replace(//, '[' + escapeRegExp('>+~`!@$%^&={}\\;/g, '(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])') + .replace(//g, '(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])') +); + +function parser( + rawMatch, + + separator, + combinator, + combinatorChildren, + + tagName, + id, + className, + + attributeKey, + attributeOperator, + attributeQuote, + attributeValue, + + pseudoMarker, + pseudoClass, + pseudoQuote, + pseudoClassQuotedValue, + pseudoClassValue +){ + if (separator || separatorIndex === -1){ + parsed.expressions[++separatorIndex] = []; + combinatorIndex = -1; + if (separator) return ''; + } + + if (combinator || combinatorChildren || combinatorIndex === -1){ + combinator = combinator || ' '; + var currentSeparator = parsed.expressions[separatorIndex]; + if (reversed && currentSeparator[combinatorIndex]) + currentSeparator[combinatorIndex].reverseCombinator = reverseCombinator(combinator); + currentSeparator[++combinatorIndex] = {combinator: combinator, tag: '*'}; + } + + var currentParsed = parsed.expressions[separatorIndex][combinatorIndex]; + + if (tagName){ + currentParsed.tag = tagName.replace(reUnescape, ''); + + } else if (id){ + currentParsed.id = id.replace(reUnescape, ''); + + } else if (className){ + className = className.replace(reUnescape, ''); + + if (!currentParsed.classList) currentParsed.classList = []; + if (!currentParsed.classes) currentParsed.classes = []; + currentParsed.classList.push(className); + currentParsed.classes.push({ + value: className, + regexp: new RegExp('(^|\\s)' + escapeRegExp(className) + '(\\s|$)') + }); + + } else if (pseudoClass){ + pseudoClassValue = pseudoClassValue || pseudoClassQuotedValue; + pseudoClassValue = pseudoClassValue ? pseudoClassValue.replace(reUnescape, '') : null; + + if (!currentParsed.pseudos) currentParsed.pseudos = []; + currentParsed.pseudos.push({ + key: pseudoClass.replace(reUnescape, ''), + value: pseudoClassValue, + type: pseudoMarker.length == 1 ? 'class' : 'element' + }); + + } else if (attributeKey){ + attributeKey = attributeKey.replace(reUnescape, ''); + attributeValue = (attributeValue || '').replace(reUnescape, ''); + + var test, regexp; + + switch (attributeOperator){ + case '^=' : regexp = new RegExp( '^'+ escapeRegExp(attributeValue) ); break; + case '$=' : regexp = new RegExp( escapeRegExp(attributeValue) +'$' ); break; + case '~=' : regexp = new RegExp( '(^|\\s)'+ escapeRegExp(attributeValue) +'(\\s|$)' ); break; + case '|=' : regexp = new RegExp( '^'+ escapeRegExp(attributeValue) +'(-|$)' ); break; + case '=' : test = function(value){ + return attributeValue == value; + }; break; + case '*=' : test = function(value){ + return value && value.indexOf(attributeValue) > -1; + }; break; + case '!=' : test = function(value){ + return attributeValue != value; + }; break; + default : test = function(value){ + return !!value; + }; + } + + if (attributeValue == '' && (/^[*$^]=$/).test(attributeOperator)) test = function(){ + return false; + }; + + if (!test) test = function(value){ + return value && regexp.test(value); + }; + + if (!currentParsed.attributes) currentParsed.attributes = []; + currentParsed.attributes.push({ + key: attributeKey, + operator: attributeOperator, + value: attributeValue, + test: test + }); + + } + + return ''; +}; + +// Slick NS + +var Slick = (this.Slick || {}); + +Slick.parse = function(expression){ + return parse(expression); +}; + +Slick.escapeRegExp = escapeRegExp; + +if (!this.Slick) this.Slick = Slick; + +}).apply(/**/(typeof exports != 'undefined') ? exports : /**/this); + +/* +--- +name: Slick.Finder +description: The new, superfast css selector engine. +provides: Slick.Finder +requires: Slick.Parser +... +*/ + +;(function(){ + +var local = {}, + featuresCache = {}, + toString = Object.prototype.toString; + +// Feature / Bug detection + +local.isNativeCode = function(fn){ + return (/\{\s*\[native code\]\s*\}/).test('' + fn); +}; + +local.isXML = function(document){ + return (!!document.xmlVersion) || (!!document.xml) || (toString.call(document) == '[object XMLDocument]') || + (document.nodeType == 9 && document.documentElement.nodeName != 'HTML'); +}; + +local.setDocument = function(document){ + + // convert elements / window arguments to document. if document cannot be extrapolated, the function returns. + var nodeType = document.nodeType; + if (nodeType == 9); // document + else if (nodeType) document = document.ownerDocument; // node + else if (document.navigator) document = document.document; // window + else return; + + // check if it's the old document + + if (this.document === document) return; + this.document = document; + + // check if we have done feature detection on this document before + + var root = document.documentElement, + rootUid = this.getUIDXML(root), + features = featuresCache[rootUid], + feature; + + if (features){ + for (feature in features){ + this[feature] = features[feature]; + } + return; + } + + features = featuresCache[rootUid] = {}; + + features.root = root; + features.isXMLDocument = this.isXML(document); + + features.brokenStarGEBTN + = features.starSelectsClosedQSA + = features.idGetsName + = features.brokenMixedCaseQSA + = features.brokenGEBCN + = features.brokenCheckedQSA + = features.brokenEmptyAttributeQSA + = features.isHTMLDocument + = features.nativeMatchesSelector + = false; + + var starSelectsClosed, starSelectsComments, + brokenSecondClassNameGEBCN, cachedGetElementsByClassName, + brokenFormAttributeGetter; + + var selected, id = 'slick_uniqueid'; + var testNode = document.createElement('div'); + + var testRoot = document.body || document.getElementsByTagName('body')[0] || root; + testRoot.appendChild(testNode); + + // on non-HTML documents innerHTML and getElementsById doesnt work properly + try { + testNode.innerHTML = ''; + features.isHTMLDocument = !!document.getElementById(id); + } catch (e){} + + if (features.isHTMLDocument){ + + testNode.style.display = 'none'; + + // IE returns comment nodes for getElementsByTagName('*') for some documents + testNode.appendChild(document.createComment('')); + starSelectsComments = (testNode.getElementsByTagName('*').length > 1); + + // IE returns closed nodes (EG:"") for getElementsByTagName('*') for some documents + try { + testNode.innerHTML = 'foo'; + selected = testNode.getElementsByTagName('*'); + starSelectsClosed = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/'); + } catch (e){}; + + features.brokenStarGEBTN = starSelectsComments || starSelectsClosed; + + // IE returns elements with the name instead of just id for getElementsById for some documents + try { + testNode.innerHTML = ''; + features.idGetsName = document.getElementById(id) === testNode.firstChild; + } catch (e){} + + if (testNode.getElementsByClassName){ + + // Safari 3.2 getElementsByClassName caches results + try { + testNode.innerHTML = ''; + testNode.getElementsByClassName('b').length; + testNode.firstChild.className = 'b'; + cachedGetElementsByClassName = (testNode.getElementsByClassName('b').length != 2); + } catch (e){}; + + // Opera 9.6 getElementsByClassName doesnt detects the class if its not the first one + try { + testNode.innerHTML = ''; + brokenSecondClassNameGEBCN = (testNode.getElementsByClassName('a').length != 2); + } catch (e){} + + features.brokenGEBCN = cachedGetElementsByClassName || brokenSecondClassNameGEBCN; + } + + if (testNode.querySelectorAll){ + // IE 8 returns closed nodes (EG:"") for querySelectorAll('*') for some documents + try { + testNode.innerHTML = 'foo'; + selected = testNode.querySelectorAll('*'); + features.starSelectsClosedQSA = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/'); + } catch (e){} + + // Safari 3.2 querySelectorAll doesnt work with mixedcase on quirksmode + try { + testNode.innerHTML = ''; + features.brokenMixedCaseQSA = !testNode.querySelectorAll('.MiX').length; + } catch (e){} + + // Webkit and Opera dont return selected options on querySelectorAll + try { + testNode.innerHTML = ''; + features.brokenCheckedQSA = (testNode.querySelectorAll(':checked').length == 0); + } catch (e){}; + + // IE returns incorrect results for attr[*^$]="" selectors on querySelectorAll + try { + testNode.innerHTML = ''; + features.brokenEmptyAttributeQSA = (testNode.querySelectorAll('[class*=""]').length != 0); + } catch (e){} + + } + + // IE6-7, if a form has an input of id x, form.getAttribute(x) returns a reference to the input + try { + testNode.innerHTML = '
'; + brokenFormAttributeGetter = (testNode.firstChild.getAttribute('action') != 's'); + } catch (e){} + + // native matchesSelector function + + features.nativeMatchesSelector = root.matches || /*root.msMatchesSelector ||*/ root.mozMatchesSelector || root.webkitMatchesSelector; + if (features.nativeMatchesSelector) try { + // if matchesSelector trows errors on incorrect sintaxes we can use it + features.nativeMatchesSelector.call(root, ':slick'); + features.nativeMatchesSelector = null; + } catch (e){} + + } + + try { + root.slick_expando = 1; + delete root.slick_expando; + features.getUID = this.getUIDHTML; + } catch (e){ + features.getUID = this.getUIDXML; + } + + testRoot.removeChild(testNode); + testNode = selected = testRoot = null; + + // getAttribute + + features.getAttribute = (features.isHTMLDocument && brokenFormAttributeGetter) ? function(node, name){ + var method = this.attributeGetters[name]; + if (method) return method.call(node); + var attributeNode = node.getAttributeNode(name); + return (attributeNode) ? attributeNode.nodeValue : null; + } : function(node, name){ + var method = this.attributeGetters[name]; + return (method) ? method.call(node) : node.getAttribute(name); + }; + + // hasAttribute + + features.hasAttribute = (root && this.isNativeCode(root.hasAttribute)) ? function(node, attribute){ + return node.hasAttribute(attribute); + } : function(node, attribute){ + node = node.getAttributeNode(attribute); + return !!(node && (node.specified || node.nodeValue)); + }; + + // contains + // FIXME: Add specs: local.contains should be different for xml and html documents? + var nativeRootContains = root && this.isNativeCode(root.contains), + nativeDocumentContains = document && this.isNativeCode(document.contains); + + features.contains = (nativeRootContains && nativeDocumentContains) ? function(context, node){ + return context.contains(node); + } : (nativeRootContains && !nativeDocumentContains) ? function(context, node){ + // IE8 does not have .contains on document. + return context === node || ((context === document) ? document.documentElement : context).contains(node); + } : (root && root.compareDocumentPosition) ? function(context, node){ + return context === node || !!(context.compareDocumentPosition(node) & 16); + } : function(context, node){ + if (node) do { + if (node === context) return true; + } while ((node = node.parentNode)); + return false; + }; + + // document order sorting + // credits to Sizzle (http://sizzlejs.com/) + + features.documentSorter = (root.compareDocumentPosition) ? function(a, b){ + if (!a.compareDocumentPosition || !b.compareDocumentPosition) return 0; + return a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; + } : ('sourceIndex' in root) ? function(a, b){ + if (!a.sourceIndex || !b.sourceIndex) return 0; + return a.sourceIndex - b.sourceIndex; + } : (document.createRange) ? function(a, b){ + if (!a.ownerDocument || !b.ownerDocument) return 0; + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.setStart(a, 0); + aRange.setEnd(a, 0); + bRange.setStart(b, 0); + bRange.setEnd(b, 0); + return aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + } : null; + + root = null; + + for (feature in features){ + this[feature] = features[feature]; + } +}; + +// Main Method + +var reSimpleSelector = /^([#.]?)((?:[\w-]+|\*))$/, + reEmptyAttribute = /\[.+[*$^]=(?:""|'')?\]/, + qsaFailExpCache = {}; + +local.search = function(context, expression, append, first){ + + var found = this.found = (first) ? null : (append || []); + + if (!context) return found; + else if (context.navigator) context = context.document; // Convert the node from a window to a document + else if (!context.nodeType) return found; + + // setup + + var parsed, i, node, nodes, + uniques = this.uniques = {}, + hasOthers = !!(append && append.length), + contextIsDocument = (context.nodeType == 9); + + if (this.document !== (contextIsDocument ? context : context.ownerDocument)) this.setDocument(context); + + // avoid duplicating items already in the append array + if (hasOthers) for (i = found.length; i--;) uniques[this.getUID(found[i])] = true; + + // expression checks + + if (typeof expression == 'string'){ // expression is a string + + /**/ + var simpleSelector = expression.match(reSimpleSelector); + simpleSelectors: if (simpleSelector){ + + var symbol = simpleSelector[1], + name = simpleSelector[2]; + + if (!symbol){ + + if (name == '*' && this.brokenStarGEBTN) break simpleSelectors; + nodes = context.getElementsByTagName(name); + if (first) return nodes[0] || null; + for (i = 0; node = nodes[i++];){ + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + + } else if (symbol == '#'){ + + if (!this.isHTMLDocument || !contextIsDocument) break simpleSelectors; + node = context.getElementById(name); + if (!node) return found; + if (this.idGetsName && node.getAttributeNode('id').nodeValue != name) break simpleSelectors; + if (first) return node || null; + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + + } else if (symbol == '.'){ + + if (!this.isHTMLDocument || ((!context.getElementsByClassName || this.brokenGEBCN) && context.querySelectorAll)) break simpleSelectors; + if (context.getElementsByClassName && !this.brokenGEBCN){ + nodes = context.getElementsByClassName(name); + if (first) return nodes[0] || null; + for (i = 0; node = nodes[i++];){ + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + } else { + var matchClass = new RegExp('(^|\\s)'+ Slick.escapeRegExp(name) +'(\\s|$)'); + nodes = context.getElementsByTagName('*'); + for (i = 0; node = nodes[i++];){ + className = node.className; + if (!(className && matchClass.test(className))) continue; + if (first) return node; + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + } + + } + + if (hasOthers) this.sort(found); + return (first) ? null : found; + + } + /**/ + + /**/ + querySelector: if (context.querySelectorAll){ + + if (!this.isHTMLDocument + || qsaFailExpCache[expression] + //TODO: only skip when expression is actually mixed case + || this.brokenMixedCaseQSA + || (this.brokenCheckedQSA && expression.indexOf(':checked') > -1) + || (this.brokenEmptyAttributeQSA && reEmptyAttribute.test(expression)) + || (!contextIsDocument //Abort when !contextIsDocument and... + // there are multiple expressions in the selector + // since we currently only fix non-document rooted QSA for single expression selectors + && expression.indexOf(',') > -1 + ) + || Slick.disableQSA + ) break querySelector; + + var _expression = expression, _context = context, currentId; + if (!contextIsDocument){ + // non-document rooted QSA + // credits to Andrew Dupont + currentId = _context.getAttribute('id'), slickid = 'slickid__'; + _context.setAttribute('id', slickid); + _expression = '#' + slickid + ' ' + _expression; + context = _context.parentNode; + } + + try { + if (first) return context.querySelector(_expression) || null; + else nodes = context.querySelectorAll(_expression); + } catch (e){ + qsaFailExpCache[expression] = 1; + break querySelector; + } finally { + if (!contextIsDocument){ + if (currentId) _context.setAttribute('id', currentId); + else _context.removeAttribute('id'); + context = _context; + } + } + + if (this.starSelectsClosedQSA) for (i = 0; node = nodes[i++];){ + if (node.nodeName > '@' && !(hasOthers && uniques[this.getUID(node)])) found.push(node); + } else for (i = 0; node = nodes[i++];){ + if (!(hasOthers && uniques[this.getUID(node)])) found.push(node); + } + + if (hasOthers) this.sort(found); + return found; + + } + /**/ + + parsed = this.Slick.parse(expression); + if (!parsed.length) return found; + } else if (expression == null){ // there is no expression + return found; + } else if (expression.Slick){ // expression is a parsed Slick object + parsed = expression; + } else if (this.contains(context.documentElement || context, expression)){ // expression is a node + (found) ? found.push(expression) : found = expression; + return found; + } else { // other junk + return found; + } + + /**//**/ + + // cache elements for the nth selectors + + this.posNTH = {}; + this.posNTHLast = {}; + this.posNTHType = {}; + this.posNTHTypeLast = {}; + + /**//**/ + + // if append is null and there is only a single selector with one expression use pushArray, else use pushUID + this.push = (!hasOthers && (first || (parsed.length == 1 && parsed.expressions[0].length == 1))) ? this.pushArray : this.pushUID; + + if (found == null) found = []; + + // default engine + + var j, m, n; + var combinator, tag, id, classList, classes, attributes, pseudos; + var currentItems, currentExpression, currentBit, lastBit, expressions = parsed.expressions; + + search: for (i = 0; (currentExpression = expressions[i]); i++) for (j = 0; (currentBit = currentExpression[j]); j++){ + + combinator = 'combinator:' + currentBit.combinator; + if (!this[combinator]) continue search; + + tag = (this.isXMLDocument) ? currentBit.tag : currentBit.tag.toUpperCase(); + id = currentBit.id; + classList = currentBit.classList; + classes = currentBit.classes; + attributes = currentBit.attributes; + pseudos = currentBit.pseudos; + lastBit = (j === (currentExpression.length - 1)); + + this.bitUniques = {}; + + if (lastBit){ + this.uniques = uniques; + this.found = found; + } else { + this.uniques = {}; + this.found = []; + } + + if (j === 0){ + this[combinator](context, tag, id, classes, attributes, pseudos, classList); + if (first && lastBit && found.length) break search; + } else { + if (first && lastBit) for (m = 0, n = currentItems.length; m < n; m++){ + this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList); + if (found.length) break search; + } else for (m = 0, n = currentItems.length; m < n; m++) this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList); + } + + currentItems = this.found; + } + + // should sort if there are nodes in append and if you pass multiple expressions. + if (hasOthers || (parsed.expressions.length > 1)) this.sort(found); + + return (first) ? (found[0] || null) : found; +}; + +// Utils + +local.uidx = 1; +local.uidk = 'slick-uniqueid'; + +local.getUIDXML = function(node){ + var uid = node.getAttribute(this.uidk); + if (!uid){ + uid = this.uidx++; + node.setAttribute(this.uidk, uid); + } + return uid; +}; + +local.getUIDHTML = function(node){ + return node.uniqueNumber || (node.uniqueNumber = this.uidx++); +}; + +// sort based on the setDocument documentSorter method. + +local.sort = function(results){ + if (!this.documentSorter) return results; + results.sort(this.documentSorter); + return results; +}; + +/**//**/ + +local.cacheNTH = {}; + +local.matchNTH = /^([+-]?\d*)?([a-z]+)?([+-]\d+)?$/; + +local.parseNTHArgument = function(argument){ + var parsed = argument.match(this.matchNTH); + if (!parsed) return false; + var special = parsed[2] || false; + var a = parsed[1] || 1; + if (a == '-') a = -1; + var b = +parsed[3] || 0; + parsed = + (special == 'n') ? {a: a, b: b} : + (special == 'odd') ? {a: 2, b: 1} : + (special == 'even') ? {a: 2, b: 0} : {a: 0, b: a}; + + return (this.cacheNTH[argument] = parsed); +}; + +local.createNTHPseudo = function(child, sibling, positions, ofType){ + return function(node, argument){ + var uid = this.getUID(node); + if (!this[positions][uid]){ + var parent = node.parentNode; + if (!parent) return false; + var el = parent[child], count = 1; + if (ofType){ + var nodeName = node.nodeName; + do { + if (el.nodeName != nodeName) continue; + this[positions][this.getUID(el)] = count++; + } while ((el = el[sibling])); + } else { + do { + if (el.nodeType != 1) continue; + this[positions][this.getUID(el)] = count++; + } while ((el = el[sibling])); + } + } + argument = argument || 'n'; + var parsed = this.cacheNTH[argument] || this.parseNTHArgument(argument); + if (!parsed) return false; + var a = parsed.a, b = parsed.b, pos = this[positions][uid]; + if (a == 0) return b == pos; + if (a > 0){ + if (pos < b) return false; + } else { + if (b < pos) return false; + } + return ((pos - b) % a) == 0; + }; +}; + +/**//**/ + +local.pushArray = function(node, tag, id, classes, attributes, pseudos){ + if (this.matchSelector(node, tag, id, classes, attributes, pseudos)) this.found.push(node); +}; + +local.pushUID = function(node, tag, id, classes, attributes, pseudos){ + var uid = this.getUID(node); + if (!this.uniques[uid] && this.matchSelector(node, tag, id, classes, attributes, pseudos)){ + this.uniques[uid] = true; + this.found.push(node); + } +}; + +local.matchNode = function(node, selector){ + if (this.isHTMLDocument && this.nativeMatchesSelector){ + try { + return this.nativeMatchesSelector.call(node, selector.replace(/\[([^=]+)=\s*([^'"\]]+?)\s*\]/g, '[$1="$2"]')); + } catch (matchError){} + } + + var parsed = this.Slick.parse(selector); + if (!parsed) return true; + + // simple (single) selectors + var expressions = parsed.expressions, simpleExpCounter = 0, i, currentExpression; + for (i = 0; (currentExpression = expressions[i]); i++){ + if (currentExpression.length == 1){ + var exp = currentExpression[0]; + if (this.matchSelector(node, (this.isXMLDocument) ? exp.tag : exp.tag.toUpperCase(), exp.id, exp.classes, exp.attributes, exp.pseudos)) return true; + simpleExpCounter++; + } + } + + if (simpleExpCounter == parsed.length) return false; + + var nodes = this.search(this.document, parsed), item; + for (i = 0; item = nodes[i++];){ + if (item === node) return true; + } + return false; +}; + +local.matchPseudo = function(node, name, argument){ + var pseudoName = 'pseudo:' + name; + if (this[pseudoName]) return this[pseudoName](node, argument); + var attribute = this.getAttribute(node, name); + return (argument) ? argument == attribute : !!attribute; +}; + +local.matchSelector = function(node, tag, id, classes, attributes, pseudos){ + if (tag){ + var nodeName = (this.isXMLDocument) ? node.nodeName : node.nodeName.toUpperCase(); + if (tag == '*'){ + if (nodeName < '@') return false; // Fix for comment nodes and closed nodes + } else { + if (nodeName != tag) return false; + } + } + + if (id && node.getAttribute('id') != id) return false; + + var i, part, cls; + if (classes) for (i = classes.length; i--;){ + cls = this.getAttribute(node, 'class'); + if (!(cls && classes[i].regexp.test(cls))) return false; + } + if (attributes) for (i = attributes.length; i--;){ + part = attributes[i]; + if (part.operator ? !part.test(this.getAttribute(node, part.key)) : !this.hasAttribute(node, part.key)) return false; + } + if (pseudos) for (i = pseudos.length; i--;){ + part = pseudos[i]; + if (!this.matchPseudo(node, part.key, part.value)) return false; + } + return true; +}; + +var combinators = { + + ' ': function(node, tag, id, classes, attributes, pseudos, classList){ // all child nodes, any level + + var i, item, children; + + if (this.isHTMLDocument){ + getById: if (id){ + item = this.document.getElementById(id); + if ((!item && node.all) || (this.idGetsName && item && item.getAttributeNode('id').nodeValue != id)){ + // all[id] returns all the elements with that name or id inside node + // if theres just one it will return the element, else it will be a collection + children = node.all[id]; + if (!children) return; + if (!children[0]) children = [children]; + for (i = 0; item = children[i++];){ + var idNode = item.getAttributeNode('id'); + if (idNode && idNode.nodeValue == id){ + this.push(item, tag, null, classes, attributes, pseudos); + break; + } + } + return; + } + if (!item){ + // if the context is in the dom we return, else we will try GEBTN, breaking the getById label + if (this.contains(this.root, node)) return; + else break getById; + } else if (this.document !== node && !this.contains(node, item)) return; + this.push(item, tag, null, classes, attributes, pseudos); + return; + } + getByClass: if (classes && node.getElementsByClassName && !this.brokenGEBCN){ + children = node.getElementsByClassName(classList.join(' ')); + if (!(children && children.length)) break getByClass; + for (i = 0; item = children[i++];) this.push(item, tag, id, null, attributes, pseudos); + return; + } + } + getByTag: { + children = node.getElementsByTagName(tag); + if (!(children && children.length)) break getByTag; + if (!this.brokenStarGEBTN) tag = null; + for (i = 0; item = children[i++];) this.push(item, tag, id, classes, attributes, pseudos); + } + }, + + '>': function(node, tag, id, classes, attributes, pseudos){ // direct children + if ((node = node.firstChild)) do { + if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos); + } while ((node = node.nextSibling)); + }, + + '+': function(node, tag, id, classes, attributes, pseudos){ // next sibling + while ((node = node.nextSibling)) if (node.nodeType == 1){ + this.push(node, tag, id, classes, attributes, pseudos); + break; + } + }, + + '^': function(node, tag, id, classes, attributes, pseudos){ // first child + node = node.firstChild; + if (node){ + if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos); + else this['combinator:+'](node, tag, id, classes, attributes, pseudos); + } + }, + + '~': function(node, tag, id, classes, attributes, pseudos){ // next siblings + while ((node = node.nextSibling)){ + if (node.nodeType != 1) continue; + var uid = this.getUID(node); + if (this.bitUniques[uid]) break; + this.bitUniques[uid] = true; + this.push(node, tag, id, classes, attributes, pseudos); + } + }, + + '++': function(node, tag, id, classes, attributes, pseudos){ // next sibling and previous sibling + this['combinator:+'](node, tag, id, classes, attributes, pseudos); + this['combinator:!+'](node, tag, id, classes, attributes, pseudos); + }, + + '~~': function(node, tag, id, classes, attributes, pseudos){ // next siblings and previous siblings + this['combinator:~'](node, tag, id, classes, attributes, pseudos); + this['combinator:!~'](node, tag, id, classes, attributes, pseudos); + }, + + '!': function(node, tag, id, classes, attributes, pseudos){ // all parent nodes up to document + while ((node = node.parentNode)) if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos); + }, + + '!>': function(node, tag, id, classes, attributes, pseudos){ // direct parent (one level) + node = node.parentNode; + if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos); + }, + + '!+': function(node, tag, id, classes, attributes, pseudos){ // previous sibling + while ((node = node.previousSibling)) if (node.nodeType == 1){ + this.push(node, tag, id, classes, attributes, pseudos); + break; + } + }, + + '!^': function(node, tag, id, classes, attributes, pseudos){ // last child + node = node.lastChild; + if (node){ + if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos); + else this['combinator:!+'](node, tag, id, classes, attributes, pseudos); + } + }, + + '!~': function(node, tag, id, classes, attributes, pseudos){ // previous siblings + while ((node = node.previousSibling)){ + if (node.nodeType != 1) continue; + var uid = this.getUID(node); + if (this.bitUniques[uid]) break; + this.bitUniques[uid] = true; + this.push(node, tag, id, classes, attributes, pseudos); + } + } + +}; + +for (var c in combinators) local['combinator:' + c] = combinators[c]; + +var pseudos = { + + /**/ + + 'empty': function(node){ + var child = node.firstChild; + return !(child && child.nodeType == 1) && !(node.innerText || node.textContent || '').length; + }, + + 'not': function(node, expression){ + return !this.matchNode(node, expression); + }, + + 'contains': function(node, text){ + return (node.innerText || node.textContent || '').indexOf(text) > -1; + }, + + 'first-child': function(node){ + while ((node = node.previousSibling)) if (node.nodeType == 1) return false; + return true; + }, + + 'last-child': function(node){ + while ((node = node.nextSibling)) if (node.nodeType == 1) return false; + return true; + }, + + 'only-child': function(node){ + var prev = node; + while ((prev = prev.previousSibling)) if (prev.nodeType == 1) return false; + var next = node; + while ((next = next.nextSibling)) if (next.nodeType == 1) return false; + return true; + }, + + /**/ + + 'nth-child': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTH'), + + 'nth-last-child': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHLast'), + + 'nth-of-type': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTHType', true), + + 'nth-last-of-type': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHTypeLast', true), + + 'index': function(node, index){ + return this['pseudo:nth-child'](node, '' + (index + 1)); + }, + + 'even': function(node){ + return this['pseudo:nth-child'](node, '2n'); + }, + + 'odd': function(node){ + return this['pseudo:nth-child'](node, '2n+1'); + }, + + /**/ + + /**/ + + 'first-of-type': function(node){ + var nodeName = node.nodeName; + while ((node = node.previousSibling)) if (node.nodeName == nodeName) return false; + return true; + }, + + 'last-of-type': function(node){ + var nodeName = node.nodeName; + while ((node = node.nextSibling)) if (node.nodeName == nodeName) return false; + return true; + }, + + 'only-of-type': function(node){ + var prev = node, nodeName = node.nodeName; + while ((prev = prev.previousSibling)) if (prev.nodeName == nodeName) return false; + var next = node; + while ((next = next.nextSibling)) if (next.nodeName == nodeName) return false; + return true; + }, + + /**/ + + // custom pseudos + + 'enabled': function(node){ + return !node.disabled; + }, + + 'disabled': function(node){ + return node.disabled; + }, + + 'checked': function(node){ + return node.checked || node.selected; + }, + + 'focus': function(node){ + return this.isHTMLDocument && this.document.activeElement === node && (node.href || node.type || this.hasAttribute(node, 'tabindex')); + }, + + 'root': function(node){ + return (node === this.root); + }, + + 'selected': function(node){ + return node.selected; + } + + /**/ +}; + +for (var p in pseudos) local['pseudo:' + p] = pseudos[p]; + +// attributes methods + +var attributeGetters = local.attributeGetters = { + + 'for': function(){ + return ('htmlFor' in this) ? this.htmlFor : this.getAttribute('for'); + }, + + 'href': function(){ + return ('href' in this) ? this.getAttribute('href', 2) : this.getAttribute('href'); + }, + + 'style': function(){ + return (this.style) ? this.style.cssText : this.getAttribute('style'); + }, + + 'tabindex': function(){ + var attributeNode = this.getAttributeNode('tabindex'); + return (attributeNode && attributeNode.specified) ? attributeNode.nodeValue : null; + }, + + 'type': function(){ + return this.getAttribute('type'); + }, + + 'maxlength': function(){ + var attributeNode = this.getAttributeNode('maxLength'); + return (attributeNode && attributeNode.specified) ? attributeNode.nodeValue : null; + } + +}; + +attributeGetters.MAXLENGTH = attributeGetters.maxLength = attributeGetters.maxlength; + +// Slick + +var Slick = local.Slick = (this.Slick || {}); + +Slick.version = '1.1.7'; + +// Slick finder + +Slick.search = function(context, expression, append){ + return local.search(context, expression, append); +}; + +Slick.find = function(context, expression){ + return local.search(context, expression, null, true); +}; + +// Slick containment checker + +Slick.contains = function(container, node){ + local.setDocument(container); + return local.contains(container, node); +}; + +// Slick attribute getter + +Slick.getAttribute = function(node, name){ + local.setDocument(node); + return local.getAttribute(node, name); +}; + +Slick.hasAttribute = function(node, name){ + local.setDocument(node); + return local.hasAttribute(node, name); +}; + +// Slick matcher + +Slick.match = function(node, selector){ + if (!(node && selector)) return false; + if (!selector || selector === node) return true; + local.setDocument(node); + return local.matchNode(node, selector); +}; + +// Slick attribute accessor + +Slick.defineAttributeGetter = function(name, fn){ + local.attributeGetters[name] = fn; + return this; +}; + +Slick.lookupAttributeGetter = function(name){ + return local.attributeGetters[name]; +}; + +// Slick pseudo accessor + +Slick.definePseudo = function(name, fn){ + local['pseudo:' + name] = function(node, argument){ + return fn.call(node, argument); + }; + return this; +}; + +Slick.lookupPseudo = function(name){ + var pseudo = local['pseudo:' + name]; + if (pseudo) return function(argument){ + return pseudo.call(this, argument); + }; + return null; +}; + +// Slick overrides accessor + +Slick.override = function(regexp, fn){ + local.override(regexp, fn); + return this; +}; + +Slick.isXML = local.isXML; + +Slick.uidOf = function(node){ + return local.getUIDHTML(node); +}; + +if (!this.Slick) this.Slick = Slick; + +}).apply(/**/(typeof exports != 'undefined') ? exports : /**/this); + +/* +--- + +name: Element + +description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements. + +license: MIT-style license. + +requires: [Window, Document, Array, String, Function, Object, Number, Slick.Parser, Slick.Finder] + +provides: [Element, Elements, $, $$, IFrame, Selectors] + +... +*/ + +var Element = this.Element = function(tag, props){ + var konstructor = Element.Constructors[tag]; + if (konstructor) return konstructor(props); + if (typeof tag != 'string') return document.id(tag).set(props); + + if (!props) props = {}; + + if (!(/^[\w-]+$/).test(tag)){ + var parsed = Slick.parse(tag).expressions[0][0]; + tag = (parsed.tag == '*') ? 'div' : parsed.tag; + if (parsed.id && props.id == null) props.id = parsed.id; + + var attributes = parsed.attributes; + if (attributes) for (var attr, i = 0, l = attributes.length; i < l; i++){ + attr = attributes[i]; + if (props[attr.key] != null) continue; + + if (attr.value != null && attr.operator == '=') props[attr.key] = attr.value; + else if (!attr.value && !attr.operator) props[attr.key] = true; + } + + if (parsed.classList && props['class'] == null) props['class'] = parsed.classList.join(' '); + } + + return document.newElement(tag, props); +}; + + +if (Browser.Element){ + Element.prototype = Browser.Element.prototype; + // IE8 and IE9 require the wrapping. + Element.prototype._fireEvent = (function(fireEvent){ + return function(type, event){ + return fireEvent.call(this, type, event); + }; + })(Element.prototype.fireEvent); +} + +new Type('Element', Element).mirror(function(name){ + if (Array.prototype[name]) return; + + var obj = {}; + obj[name] = function(){ + var results = [], args = arguments, elements = true; + for (var i = 0, l = this.length; i < l; i++){ + var element = this[i], result = results[i] = element[name].apply(element, args); + elements = (elements && typeOf(result) == 'element'); + } + return (elements) ? new Elements(results) : results; + }; + + Elements.implement(obj); +}); + +if (!Browser.Element){ + Element.parent = Object; + + Element.Prototype = { + '$constructor': Element, + '$family': Function.convert('element').hide() + }; + + Element.mirror(function(name, method){ + Element.Prototype[name] = method; + }); +} + +Element.Constructors = {}; + + + +var IFrame = new Type('IFrame', function(){ + var params = Array.link(arguments, { + properties: Type.isObject, + iframe: function(obj){ + return (obj != null); + } + }); + + var props = params.properties || {}, iframe; + if (params.iframe) iframe = document.id(params.iframe); + var onload = props.onload || function(){}; + delete props.onload; + props.id = props.name = [props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + String.uniqueID()].pick(); + iframe = new Element(iframe || 'iframe', props); + + var onLoad = function(){ + onload.call(iframe.contentWindow); + }; + + if (window.frames[props.id]) onLoad(); + else iframe.addListener('load', onLoad); + return iframe; +}); + +var Elements = this.Elements = function(nodes){ + if (nodes && nodes.length){ + var uniques = {}, node; + for (var i = 0; node = nodes[i++];){ + var uid = Slick.uidOf(node); + if (!uniques[uid]){ + uniques[uid] = true; + this.push(node); + } + } + } +}; + +Elements.prototype = {length: 0}; +Elements.parent = Array; + +new Type('Elements', Elements).implement({ + + filter: function(filter, bind){ + if (!filter) return this; + return new Elements(Array.filter(this, (typeOf(filter) == 'string') ? function(item){ + return item.match(filter); + } : filter, bind)); + }.protect(), + + push: function(){ + var length = this.length; + for (var i = 0, l = arguments.length; i < l; i++){ + var item = document.id(arguments[i]); + if (item) this[length++] = item; + } + return (this.length = length); + }.protect(), + + unshift: function(){ + var items = []; + for (var i = 0, l = arguments.length; i < l; i++){ + var item = document.id(arguments[i]); + if (item) items.push(item); + } + return Array.prototype.unshift.apply(this, items); + }.protect(), + + concat: function(){ + var newElements = new Elements(this); + for (var i = 0, l = arguments.length; i < l; i++){ + var item = arguments[i]; + if (Type.isEnumerable(item)) newElements.append(item); + else newElements.push(item); + } + return newElements; + }.protect(), + + append: function(collection){ + for (var i = 0, l = collection.length; i < l; i++) this.push(collection[i]); + return this; + }.protect(), + + empty: function(){ + while (this.length) delete this[--this.length]; + return this; + }.protect() + +}); + + + +(function(){ + +// FF, IE +var splice = Array.prototype.splice, object = {'0': 0, '1': 1, length: 2}; + +splice.call(object, 1, 1); +if (object[1] == 1) Elements.implement('splice', function(){ + var length = this.length; + var result = splice.apply(this, arguments); + while (length >= this.length) delete this[length--]; + return result; +}.protect()); + +Array.forEachMethod(function(method, name){ + Elements.implement(name, method); +}); + +Array.mirror(Elements); + +/**/ +var createElementAcceptsHTML; +try { + createElementAcceptsHTML = (document.createElement('').name == 'x'); +} catch (e){} + +var escapeQuotes = function(html){ + return ('' + html).replace(/&/g, '&').replace(/"/g, '"'); +}; +/**/ + +/**/ +// #2479 - IE8 Cannot set HTML of style element +var canChangeStyleHTML = (function(){ + var div = document.createElement('style'), + flag = false; + try { + div.innerHTML = '#justTesing{margin: 0px;}'; + flag = !!div.innerHTML; + } catch (e){} + return flag; +})(); +/**/ + +Document.implement({ + + newElement: function(tag, props){ + if (props){ + if (props.checked != null) props.defaultChecked = props.checked; + if ((props.type == 'checkbox' || props.type == 'radio') && props.value == null) props.value = 'on'; + /**/ // IE needs the type to be set before changing content of style element + if (!canChangeStyleHTML && tag == 'style'){ + var styleElement = document.createElement('style'); + styleElement.setAttribute('type', 'text/css'); + if (props.type) delete props.type; + return this.id(styleElement).set(props); + } + /**/ + /**/// Fix for readonly name and type properties in IE < 8 + if (createElementAcceptsHTML){ + tag = '<' + tag; + if (props.name) tag += ' name="' + escapeQuotes(props.name) + '"'; + if (props.type) tag += ' type="' + escapeQuotes(props.type) + '"'; + tag += '>'; + delete props.name; + delete props.type; + } + /**/ + } + return this.id(this.createElement(tag)).set(props); + } + +}); + +})(); + +(function(){ + +Slick.uidOf(window); +Slick.uidOf(document); + +Document.implement({ + + newTextNode: function(text){ + return this.createTextNode(text); + }, + + getDocument: function(){ + return this; + }, + + getWindow: function(){ + return this.window; + }, + + id: (function(){ + + var types = { + + string: function(id, nocash, doc){ + id = Slick.find(doc, '#' + id.replace(/(\W)/g, '\\$1')); + return (id) ? types.element(id, nocash) : null; + }, + + element: function(el, nocash){ + Slick.uidOf(el); + if (!nocash && !el.$family && !(/^(?:object|embed)$/i).test(el.tagName)){ + var fireEvent = el.fireEvent; + // wrapping needed in IE7, or else crash + el._fireEvent = function(type, event){ + return fireEvent(type, event); + }; + Object.append(el, Element.Prototype); + } + return el; + }, + + object: function(obj, nocash, doc){ + if (obj.toElement) return types.element(obj.toElement(doc), nocash); + return null; + } + + }; + + types.textnode = types.whitespace = types.window = types.document = function(zero){ + return zero; + }; + + return function(el, nocash, doc){ + if (el && el.$family && el.uniqueNumber) return el; + var type = typeOf(el); + return (types[type]) ? types[type](el, nocash, doc || document) : null; + }; + + })() + +}); + +if (window.$ == null) Window.implement('$', function(el, nc){ + return document.id(el, nc, this.document); +}); + +Window.implement({ + + getDocument: function(){ + return this.document; + }, + + getWindow: function(){ + return this; + } + +}); + +[Document, Element].invoke('implement', { + + getElements: function(expression){ + return Slick.search(this, expression, new Elements); + }, + + getElement: function(expression){ + return document.id(Slick.find(this, expression)); + } + +}); + +var contains = {contains: function(element){ + return Slick.contains(this, element); +}}; + +if (!document.contains) Document.implement(contains); +if (!document.createElement('div').contains) Element.implement(contains); + + + +// tree walking + +var injectCombinator = function(expression, combinator){ + if (!expression) return combinator; + + expression = Object.clone(Slick.parse(expression)); + + var expressions = expression.expressions; + for (var i = expressions.length; i--;) + expressions[i][0].combinator = combinator; + + return expression; +}; + +Object.forEach({ + getNext: '~', + getPrevious: '!~', + getParent: '!' +}, function(combinator, method){ + Element.implement(method, function(expression){ + return this.getElement(injectCombinator(expression, combinator)); + }); +}); + +Object.forEach({ + getAllNext: '~', + getAllPrevious: '!~', + getSiblings: '~~', + getChildren: '>', + getParents: '!' +}, function(combinator, method){ + Element.implement(method, function(expression){ + return this.getElements(injectCombinator(expression, combinator)); + }); +}); + +Element.implement({ + + getFirst: function(expression){ + return document.id(Slick.search(this, injectCombinator(expression, '>'))[0]); + }, + + getLast: function(expression){ + return document.id(Slick.search(this, injectCombinator(expression, '>')).getLast()); + }, + + getWindow: function(){ + return this.ownerDocument.window; + }, + + getDocument: function(){ + return this.ownerDocument; + }, + + getElementById: function(id){ + return document.id(Slick.find(this, '#' + ('' + id).replace(/(\W)/g, '\\$1'))); + }, + + match: function(expression){ + return !expression || Slick.match(this, expression); + } + +}); + + + +if (window.$$ == null) Window.implement('$$', function(selector){ + if (arguments.length == 1){ + if (typeof selector == 'string') return Slick.search(this.document, selector, new Elements); + else if (Type.isEnumerable(selector)) return new Elements(selector); + } + return new Elements(arguments); +}); + +// Inserters + +var inserters = { + + before: function(context, element){ + var parent = element.parentNode; + if (parent) parent.insertBefore(context, element); + }, + + after: function(context, element){ + var parent = element.parentNode; + if (parent) parent.insertBefore(context, element.nextSibling); + }, + + bottom: function(context, element){ + element.appendChild(context); + }, + + top: function(context, element){ + element.insertBefore(context, element.firstChild); + } + +}; + +inserters.inside = inserters.bottom; + + + +// getProperty / setProperty + +var propertyGetters = {}, propertySetters = {}; + +// properties + +var properties = {}; +Array.forEach([ + 'type', 'value', 'defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', + 'frameBorder', 'rowSpan', 'tabIndex', 'useMap' +], function(property){ + properties[property.toLowerCase()] = property; +}); + +properties.html = 'innerHTML'; +properties.text = (document.createElement('div').textContent == null) ? 'innerText': 'textContent'; + +Object.forEach(properties, function(real, key){ + propertySetters[key] = function(node, value){ + node[real] = value; + }; + propertyGetters[key] = function(node){ + return node[real]; + }; +}); + +/**/ +propertySetters.text = (function(){ + return function(node, value){ + if (node.get('tag') == 'style') node.set('html', value); + else node[properties.text] = value; + }; +})(propertySetters.text); + +propertyGetters.text = (function(getter){ + return function(node){ + return (node.get('tag') == 'style') ? node.innerHTML : getter(node); + }; +})(propertyGetters.text); +/**/ + +// Booleans + +var bools = [ + 'compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', + 'disabled', 'readOnly', 'multiple', 'selected', 'noresize', + 'defer', 'defaultChecked', 'autofocus', 'controls', 'autoplay', + 'loop' +]; + +var booleans = {}; +Array.forEach(bools, function(bool){ + var lower = bool.toLowerCase(); + booleans[lower] = bool; + propertySetters[lower] = function(node, value){ + node[bool] = !!value; + }; + propertyGetters[lower] = function(node){ + return !!node[bool]; + }; +}); + +// Special cases + +Object.append(propertySetters, { + + 'class': function(node, value){ + ('className' in node) ? node.className = (value || '') : node.setAttribute('class', value); + }, + + 'for': function(node, value){ + ('htmlFor' in node) ? node.htmlFor = value : node.setAttribute('for', value); + }, + + 'style': function(node, value){ + (node.style) ? node.style.cssText = value : node.setAttribute('style', value); + }, + + 'value': function(node, value){ + node.value = (value != null) ? value : ''; + } + +}); + +propertyGetters['class'] = function(node){ + return ('className' in node) ? node.className || null : node.getAttribute('class'); +}; + +/* */ +var el = document.createElement('button'); +// IE sets type as readonly and throws +try { el.type = 'button'; } catch (e){} +if (el.type != 'button') propertySetters.type = function(node, value){ + node.setAttribute('type', value); +}; +el = null; +/* */ + +/**/ + +/**/ +// #2479 - IE8 Cannot set HTML of style element +var canChangeStyleHTML = (function(){ + var div = document.createElement('style'), + flag = false; + try { + div.innerHTML = '#justTesing{margin: 0px;}'; + flag = !!div.innerHTML; + } catch (e){} + return flag; +})(); +/**/ + +var input = document.createElement('input'), volatileInputValue, html5InputSupport; + +// #2178 +input.value = 't'; +input.type = 'submit'; +volatileInputValue = input.value != 't'; + +// #2443 - IE throws "Invalid Argument" when trying to use html5 input types +try { + input.value = ''; + input.type = 'email'; + html5InputSupport = input.type == 'email'; +} catch (e){} + +input = null; + +if (volatileInputValue || !html5InputSupport) propertySetters.type = function(node, type){ + try { + var value = node.value; + node.type = type; + node.value = value; + } catch (e){} +}; +/**/ + +/* getProperty, setProperty */ + +/* */ +var pollutesGetAttribute = (function(div){ + div.random = 'attribute'; + return (div.getAttribute('random') == 'attribute'); +})(document.createElement('div')); + +var hasCloneBug = (function(test){ + test.innerHTML = ''; + return test.cloneNode(true).firstChild.childNodes.length != 1; +})(document.createElement('div')); +/* */ + +var hasClassList = !!document.createElement('div').classList; + +var classes = function(className){ + var classNames = (className || '').clean().split(' '), uniques = {}; + return classNames.filter(function(className){ + if (className !== '' && !uniques[className]) return uniques[className] = className; + }); +}; + +var addToClassList = function(name){ + this.classList.add(name); +}; + +var removeFromClassList = function(name){ + this.classList.remove(name); +}; + +Element.implement({ + + setProperty: function(name, value){ + var setter = propertySetters[name.toLowerCase()]; + if (setter){ + setter(this, value); + } else { + /* */ + var attributeWhiteList; + if (pollutesGetAttribute) attributeWhiteList = this.retrieve('$attributeWhiteList', {}); + /* */ + + if (value == null){ + this.removeAttribute(name); + /* */ + if (pollutesGetAttribute) delete attributeWhiteList[name]; + /* */ + } else { + this.setAttribute(name, '' + value); + /* */ + if (pollutesGetAttribute) attributeWhiteList[name] = true; + /* */ + } + } + return this; + }, + + setProperties: function(attributes){ + for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]); + return this; + }, + + getProperty: function(name){ + var getter = propertyGetters[name.toLowerCase()]; + if (getter) return getter(this); + /* */ + if (pollutesGetAttribute){ + var attr = this.getAttributeNode(name), attributeWhiteList = this.retrieve('$attributeWhiteList', {}); + if (!attr) return null; + if (attr.expando && !attributeWhiteList[name]){ + var outer = this.outerHTML; + // segment by the opening tag and find mention of attribute name + if (outer.substr(0, outer.search(/\/?['"]?>(?![^<]*<['"])/)).indexOf(name) < 0) return null; + attributeWhiteList[name] = true; + } + } + /* */ + var result = Slick.getAttribute(this, name); + return (!result && !Slick.hasAttribute(this, name)) ? null : result; + }, + + getProperties: function(){ + var args = Array.convert(arguments); + return args.map(this.getProperty, this).associate(args); + }, + + removeProperty: function(name){ + return this.setProperty(name, null); + }, + + removeProperties: function(){ + Array.each(arguments, this.removeProperty, this); + return this; + }, + + set: function(prop, value){ + var property = Element.Properties[prop]; + (property && property.set) ? property.set.call(this, value) : this.setProperty(prop, value); + }.overloadSetter(), + + get: function(prop){ + var property = Element.Properties[prop]; + return (property && property.get) ? property.get.apply(this) : this.getProperty(prop); + }.overloadGetter(), + + erase: function(prop){ + var property = Element.Properties[prop]; + (property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop); + return this; + }, + + hasClass: hasClassList ? function(className){ + return this.classList.contains(className); + } : function(className){ + return classes(this.className).contains(className); + }, + + addClass: hasClassList ? function(className){ + classes(className).forEach(addToClassList, this); + return this; + } : function(className){ + this.className = classes(className + ' ' + this.className).join(' '); + return this; + }, + + removeClass: hasClassList ? function(className){ + classes(className).forEach(removeFromClassList, this); + return this; + } : function(className){ + var classNames = classes(this.className); + classes(className).forEach(classNames.erase, classNames); + this.className = classNames.join(' '); + return this; + }, + + toggleClass: function(className, force){ + if (force == null) force = !this.hasClass(className); + return (force) ? this.addClass(className) : this.removeClass(className); + }, + + adopt: function(){ + var parent = this, fragment, elements = Array.flatten(arguments), length = elements.length; + if (length > 1) parent = fragment = document.createDocumentFragment(); + + for (var i = 0; i < length; i++){ + var element = document.id(elements[i], true); + if (element) parent.appendChild(element); + } + + if (fragment) this.appendChild(fragment); + + return this; + }, + + appendText: function(text, where){ + return this.grab(this.getDocument().newTextNode(text), where); + }, + + grab: function(el, where){ + inserters[where || 'bottom'](document.id(el, true), this); + return this; + }, + + inject: function(el, where){ + inserters[where || 'bottom'](this, document.id(el, true)); + return this; + }, + + replaces: function(el){ + el = document.id(el, true); + el.parentNode.replaceChild(this, el); + return this; + }, + + wraps: function(el, where){ + el = document.id(el, true); + return this.replaces(el).grab(el, where); + }, + + getSelected: function(){ + this.selectedIndex; // Safari 3.2.1 + return new Elements(Array.convert(this.options).filter(function(option){ + return option.selected; + })); + }, + + toQueryString: function(){ + var queryString = []; + this.getElements('input, select, textarea').each(function(el){ + var type = el.type; + if (!el.name || el.disabled || type == 'submit' || type == 'reset' || type == 'file' || type == 'image') return; + + var value = (el.get('tag') == 'select') ? el.getSelected().map(function(opt){ + // IE + return document.id(opt).get('value'); + }) : ((type == 'radio' || type == 'checkbox') && !el.checked) ? null : el.get('value'); + + Array.convert(value).each(function(val){ + if (typeof val != 'undefined') queryString.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(val)); + }); + }); + return queryString.join('&'); + } + +}); + + +// appendHTML + +var appendInserters = { + before: 'beforeBegin', + after: 'afterEnd', + bottom: 'beforeEnd', + top: 'afterBegin', + inside: 'beforeEnd' +}; + +Element.implement('appendHTML', ('insertAdjacentHTML' in document.createElement('div')) ? function(html, where){ + this.insertAdjacentHTML(appendInserters[where || 'bottom'], html); + return this; +} : function(html, where){ + var temp = new Element('div', {html: html}), + children = temp.childNodes, + fragment = temp.firstChild; + + if (!fragment) return this; + if (children.length > 1){ + fragment = document.createDocumentFragment(); + for (var i = 0, l = children.length; i < l; i++){ + fragment.appendChild(children[i]); + } + } + + inserters[where || 'bottom'](fragment, this); + return this; +}); + +var collected = {}, storage = {}; + +var get = function(uid){ + return (storage[uid] || (storage[uid] = {})); +}; + +var clean = function(item){ + var uid = item.uniqueNumber; + if (item.removeEvents) item.removeEvents(); + if (item.clearAttributes) item.clearAttributes(); + if (uid != null){ + delete collected[uid]; + delete storage[uid]; + } + return item; +}; + +var formProps = {input: 'checked', option: 'selected', textarea: 'value'}; + +Element.implement({ + + destroy: function(){ + var children = clean(this).getElementsByTagName('*'); + Array.each(children, clean); + Element.dispose(this); + return null; + }, + + empty: function(){ + Array.convert(this.childNodes).each(Element.dispose); + return this; + }, + + dispose: function(){ + return (this.parentNode) ? this.parentNode.removeChild(this) : this; + }, + + clone: function(contents, keepid){ + contents = contents !== false; + var clone = this.cloneNode(contents), ce = [clone], te = [this], i; + + if (contents){ + ce.append(Array.convert(clone.getElementsByTagName('*'))); + te.append(Array.convert(this.getElementsByTagName('*'))); + } + + for (i = ce.length; i--;){ + var node = ce[i], element = te[i]; + if (!keepid) node.removeAttribute('id'); + /**/ + if (node.clearAttributes){ + node.clearAttributes(); + node.mergeAttributes(element); + node.removeAttribute('uniqueNumber'); + if (node.options){ + var no = node.options, eo = element.options; + for (var j = no.length; j--;) no[j].selected = eo[j].selected; + } + } + /**/ + var prop = formProps[element.tagName.toLowerCase()]; + if (prop && element[prop]) node[prop] = element[prop]; + } + + /**/ + if (hasCloneBug){ + var co = clone.getElementsByTagName('object'), to = this.getElementsByTagName('object'); + for (i = co.length; i--;) co[i].outerHTML = to[i].outerHTML; + } + /**/ + return document.id(clone); + } + +}); + +[Element, Window, Document].invoke('implement', { + + addListener: function(type, fn){ + if (window.attachEvent && !window.addEventListener){ + collected[Slick.uidOf(this)] = this; + } + if (this.addEventListener) this.addEventListener(type, fn, !!arguments[2]); + else this.attachEvent('on' + type, fn); + return this; + }, + + removeListener: function(type, fn){ + if (this.removeEventListener) this.removeEventListener(type, fn, !!arguments[2]); + else this.detachEvent('on' + type, fn); + return this; + }, + + retrieve: function(property, dflt){ + var storage = get(Slick.uidOf(this)), prop = storage[property]; + if (dflt != null && prop == null) prop = storage[property] = dflt; + return prop != null ? prop : null; + }, + + store: function(property, value){ + var storage = get(Slick.uidOf(this)); + storage[property] = value; + return this; + }, + + eliminate: function(property){ + var storage = get(Slick.uidOf(this)); + delete storage[property]; + return this; + } + +}); + +/**/ +if (window.attachEvent && !window.addEventListener){ + var gc = function(){ + Object.each(collected, clean); + if (window.CollectGarbage) CollectGarbage(); + window.removeListener('unload', gc); + }; + window.addListener('unload', gc); +} +/**/ + +Element.Properties = {}; + + + +Element.Properties.style = { + + set: function(style){ + this.style.cssText = style; + }, + + get: function(){ + return this.style.cssText; + }, + + erase: function(){ + this.style.cssText = ''; + } + +}; + +Element.Properties.tag = { + + get: function(){ + return this.tagName.toLowerCase(); + } + +}; + +Element.Properties.html = { + + set: function(html){ + if (html == null) html = ''; + else if (typeOf(html) == 'array') html = html.join(''); + + /**/ + if (this.styleSheet && !canChangeStyleHTML) this.styleSheet.cssText = html; + else /**/this.innerHTML = html; + }, + erase: function(){ + this.set('html', ''); + } + +}; + +var supportsHTML5Elements = true, supportsTableInnerHTML = true, supportsTRInnerHTML = true; + +/**/ +// technique by jdbarlett - http://jdbartlett.com/innershiv/ +var div = document.createElement('div'); +var fragment; +div.innerHTML = ''; +supportsHTML5Elements = (div.childNodes.length == 1); +if (!supportsHTML5Elements){ + var tags = 'abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video'.split(' '); + fragment = document.createDocumentFragment(), l = tags.length; + while (l--) fragment.createElement(tags[l]); +} +div = null; +/**/ + +/**/ +supportsTableInnerHTML = Function.attempt(function(){ + var table = document.createElement('table'); + table.innerHTML = ''; + return true; +}); + +/**/ +var tr = document.createElement('tr'), html = ''; +tr.innerHTML = html; +supportsTRInnerHTML = (tr.innerHTML == html); +tr = null; +/**/ + +if (!supportsTableInnerHTML || !supportsTRInnerHTML || !supportsHTML5Elements){ + + Element.Properties.html.set = (function(set){ + + var translations = { + table: [1, '', '
'], + select: [1, ''], + tbody: [2, '', '
'], + tr: [3, '', '
'] + }; + + translations.thead = translations.tfoot = translations.tbody; + + return function(html){ + + /**/ + if (this.styleSheet) return set.call(this, html); + /**/ + var wrap = translations[this.get('tag')]; + if (!wrap && !supportsHTML5Elements) wrap = [0, '', '']; + if (!wrap) return set.call(this, html); + + var level = wrap[0], wrapper = document.createElement('div'), target = wrapper; + if (!supportsHTML5Elements) fragment.appendChild(wrapper); + wrapper.innerHTML = [wrap[1], html, wrap[2]].flatten().join(''); + while (level--) target = target.firstChild; + this.empty().adopt(target.childNodes); + if (!supportsHTML5Elements) fragment.removeChild(wrapper); + wrapper = null; + }; + + })(Element.Properties.html.set); +} +/*
*/ + +/**/ +var testForm = document.createElement('form'); +testForm.innerHTML = ''; + +if (testForm.firstChild.value != 's') Element.Properties.value = { + + set: function(value){ + var tag = this.get('tag'); + if (tag != 'select') return this.setProperty('value', value); + var options = this.getElements('option'); + value = String(value); + for (var i = 0; i < options.length; i++){ + var option = options[i], + attr = option.getAttributeNode('value'), + optionValue = (attr && attr.specified) ? option.value : option.get('text'); + if (optionValue === value) return option.selected = true; + } + }, + + get: function(){ + var option = this, tag = option.get('tag'); + + if (tag != 'select' && tag != 'option') return this.getProperty('value'); + + if (tag == 'select' && !(option = option.getSelected()[0])) return ''; + + var attr = option.getAttributeNode('value'); + return (attr && attr.specified) ? option.value : option.get('text'); + } + +}; +testForm = null; +/**/ + +/**/ +if (document.createElement('div').getAttributeNode('id')) Element.Properties.id = { + set: function(id){ + this.id = this.getAttributeNode('id').value = id; + }, + get: function(){ + return this.id || null; + }, + erase: function(){ + this.id = this.getAttributeNode('id').value = ''; + } +}; +/**/ + +})(); + +/* +--- + +name: Event + +description: Contains the Event Type, to make the event object cross-browser. + +license: MIT-style license. + +requires: [Window, Document, Array, Function, String, Object] + +provides: Event + +... +*/ + +(function(){ + +var _keys = {}; +var normalizeWheelSpeed = function(event){ + var normalized; + if (event.wheelDelta){ + normalized = event.wheelDelta % 120 == 0 ? event.wheelDelta / 120 : event.wheelDelta / 12; + } else { + var rawAmount = event.deltaY || event.detail || 0; + normalized = -(rawAmount % 3 == 0 ? rawAmount / 3 : rawAmount * 10); + } + return normalized; +}; + +var DOMEvent = this.DOMEvent = new Type('DOMEvent', function(event, win){ + if (!win) win = window; + event = event || win.event; + if (event.$extended) return event; + this.event = event; + this.$extended = true; + this.shift = event.shiftKey; + this.control = event.ctrlKey; + this.alt = event.altKey; + this.meta = event.metaKey; + var type = this.type = event.type; + var target = event.target || event.srcElement; + while (target && target.nodeType == 3) target = target.parentNode; + this.target = document.id(target); + + if (type.indexOf('key') == 0){ + var code = this.code = (event.which || event.keyCode); + if (!this.shift || type != 'keypress') this.key = _keys[code]; + if (type == 'keydown' || type == 'keyup'){ + if (code > 111 && code < 124) this.key = 'f' + (code - 111); + else if (code > 95 && code < 106) this.key = code - 96; + } + if (this.key == null) this.key = String.fromCharCode(code).toLowerCase(); + } else if (type == 'click' || type == 'dblclick' || type == 'contextmenu' || type == 'wheel' || type == 'DOMMouseScroll' || type.indexOf('mouse') == 0){ + var doc = win.document; + doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body; + this.page = { + x: (event.pageX != null) ? event.pageX : event.clientX + doc.scrollLeft, + y: (event.pageY != null) ? event.pageY : event.clientY + doc.scrollTop + }; + this.client = { + x: (event.pageX != null) ? event.pageX - win.pageXOffset : event.clientX, + y: (event.pageY != null) ? event.pageY - win.pageYOffset : event.clientY + }; + if (type == 'DOMMouseScroll' || type == 'wheel' || type == 'mousewheel') this.wheel = normalizeWheelSpeed(event); + this.rightClick = (event.which == 3 || event.button == 2); + if (type == 'mouseover' || type == 'mouseout' || type == 'mouseenter' || type == 'mouseleave'){ + var overTarget = type == 'mouseover' || type == 'mouseenter'; + var related = event.relatedTarget || event[(overTarget ? 'from' : 'to') + 'Element']; + while (related && related.nodeType == 3) related = related.parentNode; + this.relatedTarget = document.id(related); + } + } else if (type.indexOf('touch') == 0 || type.indexOf('gesture') == 0){ + this.rotation = event.rotation; + this.scale = event.scale; + this.targetTouches = event.targetTouches; + this.changedTouches = event.changedTouches; + var touches = this.touches = event.touches; + if (touches && touches[0]){ + var touch = touches[0]; + this.page = {x: touch.pageX, y: touch.pageY}; + this.client = {x: touch.clientX, y: touch.clientY}; + } + } + + if (!this.client) this.client = {}; + if (!this.page) this.page = {}; +}); + +DOMEvent.implement({ + + stop: function(){ + return this.preventDefault().stopPropagation(); + }, + + stopPropagation: function(){ + if (this.event.stopPropagation) this.event.stopPropagation(); + else this.event.cancelBubble = true; + return this; + }, + + preventDefault: function(){ + if (this.event.preventDefault) this.event.preventDefault(); + else this.event.returnValue = false; + return this; + } + +}); + +DOMEvent.defineKey = function(code, key){ + _keys[code] = key; + return this; +}; + +DOMEvent.defineKeys = DOMEvent.defineKey.overloadSetter(true); + +DOMEvent.defineKeys({ + '38': 'up', '40': 'down', '37': 'left', '39': 'right', + '27': 'esc', '32': 'space', '8': 'backspace', '9': 'tab', + '46': 'delete', '13': 'enter' +}); + +})(); + + + + + +/* +--- + +name: Element.Event + +description: Contains Element methods for dealing with events. This file also includes mouseenter and mouseleave custom Element Events, if necessary. + +license: MIT-style license. + +requires: [Element, Event] + +provides: Element.Event + +... +*/ + +(function(){ + +Element.Properties.events = {set: function(events){ + this.addEvents(events); +}}; + +[Element, Window, Document].invoke('implement', { + + addEvent: function(type, fn){ + var events = this.retrieve('events', {}); + if (!events[type]) events[type] = {keys: [], values: []}; + if (events[type].keys.contains(fn)) return this; + events[type].keys.push(fn); + var realType = type, + custom = Element.Events[type], + condition = fn, + self = this; + if (custom){ + if (custom.onAdd) custom.onAdd.call(this, fn, type); + if (custom.condition){ + condition = function(event){ + if (custom.condition.call(this, event, type)) return fn.call(this, event); + return true; + }; + } + if (custom.base) realType = Function.convert(custom.base).call(this, type); + } + var defn = function(){ + return fn.call(self); + }; + var nativeEvent = Element.NativeEvents[realType]; + if (nativeEvent){ + if (nativeEvent == 2){ + defn = function(event){ + event = new DOMEvent(event, self.getWindow()); + if (condition.call(self, event) === false) event.stop(); + }; + } + this.addListener(realType, defn, arguments[2]); + } + events[type].values.push(defn); + return this; + }, + + removeEvent: function(type, fn){ + var events = this.retrieve('events'); + if (!events || !events[type]) return this; + var list = events[type]; + var index = list.keys.indexOf(fn); + if (index == -1) return this; + var value = list.values[index]; + delete list.keys[index]; + delete list.values[index]; + var custom = Element.Events[type]; + if (custom){ + if (custom.onRemove) custom.onRemove.call(this, fn, type); + if (custom.base) type = Function.convert(custom.base).call(this, type); + } + return (Element.NativeEvents[type]) ? this.removeListener(type, value, arguments[2]) : this; + }, + + addEvents: function(events){ + for (var event in events) this.addEvent(event, events[event]); + return this; + }, + + removeEvents: function(events){ + var type; + if (typeOf(events) == 'object'){ + for (type in events) this.removeEvent(type, events[type]); + return this; + } + var attached = this.retrieve('events'); + if (!attached) return this; + if (!events){ + for (type in attached) this.removeEvents(type); + this.eliminate('events'); + } else if (attached[events]){ + attached[events].keys.each(function(fn){ + this.removeEvent(events, fn); + }, this); + delete attached[events]; + } + return this; + }, + + fireEvent: function(type, args, delay){ + var events = this.retrieve('events'); + if (!events || !events[type]) return this; + args = Array.convert(args); + + events[type].keys.each(function(fn){ + if (delay) fn.delay(delay, this, args); + else fn.apply(this, args); + }, this); + return this; + }, + + cloneEvents: function(from, type){ + from = document.id(from); + var events = from.retrieve('events'); + if (!events) return this; + if (!type){ + for (var eventType in events) this.cloneEvents(from, eventType); + } else if (events[type]){ + events[type].keys.each(function(fn){ + this.addEvent(type, fn); + }, this); + } + return this; + } + +}); + +Element.NativeEvents = { + click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons + wheel: 2, mousewheel: 2, DOMMouseScroll: 2, //mouse wheel + mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement + keydown: 2, keypress: 2, keyup: 2, //keyboard + orientationchange: 2, // mobile + touchstart: 2, touchmove: 2, touchend: 2, touchcancel: 2, // touch + gesturestart: 2, gesturechange: 2, gestureend: 2, // gesture + focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, paste: 2, input: 2, //form elements + load: 2, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window + hashchange: 1, popstate: 2, pageshow: 2, pagehide: 2, // history + error: 1, abort: 1, scroll: 1, message: 2 //misc +}; + +Element.Events = { + mousewheel: { + base: 'onwheel' in document ? 'wheel' : 'onmousewheel' in document ? 'mousewheel' : 'DOMMouseScroll' + } +}; + +var check = function(event){ + var related = event.relatedTarget; + if (related == null) return true; + if (!related) return false; + return (related != this && related.prefix != 'xul' && typeOf(this) != 'document' && !this.contains(related)); +}; + +if ('onmouseenter' in document.documentElement){ + Element.NativeEvents.mouseenter = Element.NativeEvents.mouseleave = 2; + Element.MouseenterCheck = check; +} else { + Element.Events.mouseenter = { + base: 'mouseover', + condition: check + }; + + Element.Events.mouseleave = { + base: 'mouseout', + condition: check + }; +} + +/**/ +if (!window.addEventListener){ + Element.NativeEvents.propertychange = 2; + Element.Events.change = { + base: function(){ + var type = this.type; + return (this.get('tag') == 'input' && (type == 'radio' || type == 'checkbox')) ? 'propertychange' : 'change'; + }, + condition: function(event){ + return event.type != 'propertychange' || event.event.propertyName == 'checked'; + } + }; +} +/**/ + + + +})(); + +/* +--- + +name: Element.Delegation + +description: Extends the Element native object to include the delegate method for more efficient event management. + +license: MIT-style license. + +requires: [Element.Event] + +provides: [Element.Delegation] + +... +*/ + +(function(){ + +var eventListenerSupport = !!window.addEventListener; + +Element.NativeEvents.focusin = Element.NativeEvents.focusout = 2; + +var bubbleUp = function(self, match, fn, event, target){ + while (target && target != self){ + if (match(target, event)) return fn.call(target, event, target); + target = document.id(target.parentNode); + } +}; + +var map = { + mouseenter: { + base: 'mouseover', + condition: Element.MouseenterCheck + }, + mouseleave: { + base: 'mouseout', + condition: Element.MouseenterCheck + }, + focus: { + base: 'focus' + (eventListenerSupport ? '' : 'in'), + capture: true + }, + blur: { + base: eventListenerSupport ? 'blur' : 'focusout', + capture: true + } +}; + +/**/ +var _key = '$delegation:'; +var formObserver = function(type){ + + return { + + base: 'focusin', + + remove: function(self, uid){ + var list = self.retrieve(_key + type + 'listeners', {})[uid]; + if (list && list.forms) for (var i = list.forms.length; i--;){ + // the form may have been destroyed, so it won't have the + // removeEvent method anymore. In that case the event was + // removed as well. + if (list.forms[i].removeEvent) list.forms[i].removeEvent(type, list.fns[i]); + } + }, + + listen: function(self, match, fn, event, target, uid){ + var form = (target.get('tag') == 'form') ? target : event.target.getParent('form'); + if (!form) return; + + var listeners = self.retrieve(_key + type + 'listeners', {}), + listener = listeners[uid] || {forms: [], fns: []}, + forms = listener.forms, fns = listener.fns; + + if (forms.indexOf(form) != -1) return; + forms.push(form); + + var _fn = function(event){ + bubbleUp(self, match, fn, event, target); + }; + form.addEvent(type, _fn); + fns.push(_fn); + + listeners[uid] = listener; + self.store(_key + type + 'listeners', listeners); + } + }; +}; + +var inputObserver = function(type){ + return { + base: 'focusin', + listen: function(self, match, fn, event, target){ + var events = {blur: function(){ + this.removeEvents(events); + }}; + events[type] = function(event){ + bubbleUp(self, match, fn, event, target); + }; + event.target.addEvents(events); + } + }; +}; + +if (!eventListenerSupport) Object.append(map, { + submit: formObserver('submit'), + reset: formObserver('reset'), + change: inputObserver('change'), + select: inputObserver('select') +}); +/**/ + +var proto = Element.prototype, + addEvent = proto.addEvent, + removeEvent = proto.removeEvent; + +var relay = function(old, method){ + return function(type, fn, useCapture){ + if (type.indexOf(':relay') == -1) return old.call(this, type, fn, useCapture); + var parsed = Slick.parse(type).expressions[0][0]; + if (parsed.pseudos[0].key != 'relay') return old.call(this, type, fn, useCapture); + var newType = parsed.tag; + parsed.pseudos.slice(1).each(function(pseudo){ + newType += ':' + pseudo.key + (pseudo.value ? '(' + pseudo.value + ')' : ''); + }); + old.call(this, type, fn); + return method.call(this, newType, parsed.pseudos[0].value, fn); + }; +}; + +var delegation = { + + addEvent: function(type, match, fn){ + var storage = this.retrieve('$delegates', {}), stored = storage[type]; + if (stored) for (var _uid in stored){ + if (stored[_uid].fn == fn && stored[_uid].match == match) return this; + } + + var _type = type, _match = match, _fn = fn, _map = map[type] || {}; + type = _map.base || _type; + + match = function(target){ + return Slick.match(target, _match); + }; + + var elementEvent = Element.Events[_type]; + if (_map.condition || elementEvent && elementEvent.condition){ + var __match = match, condition = _map.condition || elementEvent.condition; + match = function(target, event){ + return __match(target, event) && condition.call(target, event, type); + }; + } + + var self = this, uid = String.uniqueID(); + var delegator = _map.listen ? function(event, target){ + if (!target && event && event.target) target = event.target; + if (target) _map.listen(self, match, fn, event, target, uid); + } : function(event, target){ + if (!target && event && event.target) target = event.target; + if (target) bubbleUp(self, match, fn, event, target); + }; + + if (!stored) stored = {}; + stored[uid] = { + match: _match, + fn: _fn, + delegator: delegator + }; + storage[_type] = stored; + return addEvent.call(this, type, delegator, _map.capture); + }, + + removeEvent: function(type, match, fn, _uid){ + var storage = this.retrieve('$delegates', {}), stored = storage[type]; + if (!stored) return this; + + if (_uid){ + var _type = type, delegator = stored[_uid].delegator, _map = map[type] || {}; + type = _map.base || _type; + if (_map.remove) _map.remove(this, _uid); + delete stored[_uid]; + storage[_type] = stored; + return removeEvent.call(this, type, delegator, _map.capture); + } + + var __uid, s; + if (fn) for (__uid in stored){ + s = stored[__uid]; + if (s.match == match && s.fn == fn) return delegation.removeEvent.call(this, type, match, fn, __uid); + } else for (__uid in stored){ + s = stored[__uid]; + if (s.match == match) delegation.removeEvent.call(this, type, match, s.fn, __uid); + } + return this; + } + +}; + +[Element, Window, Document].invoke('implement', { + addEvent: relay(addEvent, delegation.addEvent), + removeEvent: relay(removeEvent, delegation.removeEvent) +}); + +})(); + +/* +--- + +name: Element.Style + +description: Contains methods for interacting with the styles of Elements in a fashionable way. + +license: MIT-style license. + +requires: Element + +provides: Element.Style + +... +*/ + +(function(){ + +var html = document.html, el; + +// +// Check for oldIE, which does not remove styles when they're set to null +el = document.createElement('div'); +el.style.color = 'red'; +el.style.color = null; +var doesNotRemoveStyles = el.style.color == 'red'; + +// check for oldIE, which returns border* shorthand styles in the wrong order (color-width-style instead of width-style-color) +var border = '1px solid #123abc'; +el.style.border = border; +var returnsBordersInWrongOrder = el.style.border != border; +el = null; +// + +var hasGetComputedStyle = !!window.getComputedStyle, + supportBorderRadius = document.createElement('div').style.borderRadius != null; + +Element.Properties.styles = {set: function(styles){ + this.setStyles(styles); +}}; + +var hasOpacity = (html.style.opacity != null), + hasFilter = (html.style.filter != null), + reAlpha = /alpha\(opacity=([\d.]+)\)/i; + +var setVisibility = function(element, opacity){ + element.store('$opacity', opacity); + element.style.visibility = opacity > 0 || opacity == null ? 'visible' : 'hidden'; +}; + +// +var setFilter = function(element, regexp, value){ + var style = element.style, + filter = style.filter || element.getComputedStyle('filter') || ''; + style.filter = (regexp.test(filter) ? filter.replace(regexp, value) : filter + ' ' + value).trim(); + if (!style.filter) style.removeAttribute('filter'); +}; +// + +var setOpacity = (hasOpacity ? function(element, opacity){ + element.style.opacity = opacity; +} : (hasFilter ? function(element, opacity){ + if (!element.currentStyle || !element.currentStyle.hasLayout) element.style.zoom = 1; + if (opacity == null || opacity == 1){ + setFilter(element, reAlpha, ''); + if (opacity == 1 && getOpacity(element) != 1) setFilter(element, reAlpha, 'alpha(opacity=100)'); + } else { + setFilter(element, reAlpha, 'alpha(opacity=' + (opacity * 100).limit(0, 100).round() + ')'); + } +} : setVisibility)); + +var getOpacity = (hasOpacity ? function(element){ + var opacity = element.style.opacity || element.getComputedStyle('opacity'); + return (opacity == '') ? 1 : opacity.toFloat(); +} : (hasFilter ? function(element){ + var filter = (element.style.filter || element.getComputedStyle('filter')), + opacity; + if (filter) opacity = filter.match(reAlpha); + return (opacity == null || filter == null) ? 1 : (opacity[1] / 100); +} : function(element){ + var opacity = element.retrieve('$opacity'); + if (opacity == null) opacity = (element.style.visibility == 'hidden' ? 0 : 1); + return opacity; +})); + +var floatName = (html.style.cssFloat == null) ? 'styleFloat' : 'cssFloat', + namedPositions = {left: '0%', top: '0%', center: '50%', right: '100%', bottom: '100%'}, + hasBackgroundPositionXY = (html.style.backgroundPositionX != null), + prefixPattern = /^-(ms)-/; + +var camelCase = function(property){ + return property.replace(prefixPattern, '$1-').camelCase(); +}; + +// +var removeStyle = function(style, property){ + if (property == 'backgroundPosition'){ + style.removeAttribute(property + 'X'); + property += 'Y'; + } + style.removeAttribute(property); +}; +// + +Element.implement({ + + getComputedStyle: function(property){ + if (!hasGetComputedStyle && this.currentStyle) return this.currentStyle[camelCase(property)]; + var defaultView = Element.getDocument(this).defaultView, + computed = defaultView ? defaultView.getComputedStyle(this, null) : null; + return (computed) ? computed.getPropertyValue((property == floatName) ? 'float' : property.hyphenate()) : ''; + }, + + setStyle: function(property, value){ + if (property == 'opacity'){ + if (value != null) value = parseFloat(value); + setOpacity(this, value); + return this; + } + property = camelCase(property == 'float' ? floatName : property); + if (typeOf(value) != 'string'){ + var map = (Element.Styles[property] || '@').split(' '); + value = Array.convert(value).map(function(val, i){ + if (!map[i]) return ''; + return (typeOf(val) == 'number') ? map[i].replace('@', Math.round(val)) : val; + }).join(' '); + } else if (value == String(Number(value))){ + value = Math.round(value); + } + this.style[property] = value; + // + if ((value == '' || value == null) && doesNotRemoveStyles && this.style.removeAttribute){ + removeStyle(this.style, property); + } + // + return this; + }, + + getStyle: function(property){ + if (property == 'opacity') return getOpacity(this); + property = camelCase(property == 'float' ? floatName : property); + if (supportBorderRadius && property.indexOf('borderRadius') != -1){ + return ['borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius'].map(function(corner){ + return this.style[corner] || '0px'; + }, this).join(' '); + } + var result = this.style[property]; + if (!result || property == 'zIndex'){ + if (Element.ShortStyles.hasOwnProperty(property)){ + result = []; + for (var s in Element.ShortStyles[property]) result.push(this.getStyle(s)); + return result.join(' '); + } + result = this.getComputedStyle(property); + } + if (hasBackgroundPositionXY && /^backgroundPosition[XY]?$/.test(property)){ + return result.replace(/(top|right|bottom|left)/g, function(position){ + return namedPositions[position]; + }) || '0px'; + } + if (!result && property == 'backgroundPosition') return '0px 0px'; + if (result){ + result = String(result); + var color = result.match(/rgba?\([\d\s,]+\)/); + if (color) result = result.replace(color[0], color[0].rgbToHex()); + } + if (!hasGetComputedStyle && !this.style[property]){ + if ((/^(height|width)$/).test(property) && !(/px$/.test(result))){ + var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0; + values.each(function(value){ + size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt(); + }, this); + return this['offset' + property.capitalize()] - size + 'px'; + } + if ((/^border(.+)Width|margin|padding/).test(property) && isNaN(parseFloat(result))){ + return '0px'; + } + } + // + if (returnsBordersInWrongOrder && /^border(Top|Right|Bottom|Left)?$/.test(property) && /^#/.test(result)){ + return result.replace(/^(.+)\s(.+)\s(.+)$/, '$2 $3 $1'); + } + // + + return result; + }, + + setStyles: function(styles){ + for (var style in styles) this.setStyle(style, styles[style]); + return this; + }, + + getStyles: function(){ + var result = {}; + Array.flatten(arguments).each(function(key){ + result[key] = this.getStyle(key); + }, this); + return result; + } + +}); + +Element.Styles = { + left: '@px', top: '@px', bottom: '@px', right: '@px', + width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px', + backgroundColor: 'rgb(@, @, @)', backgroundSize: '@px', backgroundPosition: '@px @px', color: 'rgb(@, @, @)', + fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)', + margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)', + borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)', + zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@', borderRadius: '@px @px @px @px' +}; + + + + + +Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}}; + +['Top', 'Right', 'Bottom', 'Left'].each(function(direction){ + var Short = Element.ShortStyles; + var All = Element.Styles; + ['margin', 'padding'].each(function(style){ + var sd = style + direction; + Short[style][sd] = All[sd] = '@px'; + }); + var bd = 'border' + direction; + Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)'; + var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color'; + Short[bd] = {}; + Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px'; + Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@'; + Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)'; +}); + +if (hasBackgroundPositionXY) Element.ShortStyles.backgroundPosition = {backgroundPositionX: '@', backgroundPositionY: '@'}; +})(); + +/* +--- + +name: Element.Dimensions + +description: Contains methods to work with size, scroll, or positioning of Elements and the window object. + +license: MIT-style license. + +credits: + - Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html). + - Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html). + +requires: [Element, Element.Style] + +provides: [Element.Dimensions] + +... +*/ + +(function(){ + +var element = document.createElement('div'), + child = document.createElement('div'); +element.style.height = '0'; +element.appendChild(child); +var brokenOffsetParent = (child.offsetParent === element); +element = child = null; + +var heightComponents = ['height', 'paddingTop', 'paddingBottom', 'borderTopWidth', 'borderBottomWidth'], + widthComponents = ['width', 'paddingLeft', 'paddingRight', 'borderLeftWidth', 'borderRightWidth']; + +var svgCalculateSize = function(el){ + + var gCS = window.getComputedStyle(el), + bounds = {x: 0, y: 0}; + + heightComponents.each(function(css){ + bounds.y += parseFloat(gCS[css]); + }); + widthComponents.each(function(css){ + bounds.x += parseFloat(gCS[css]); + }); + return bounds; +}; + +var isOffset = function(el){ + return styleString(el, 'position') != 'static' || isBody(el); +}; + +var isOffsetStatic = function(el){ + return isOffset(el) || (/^(?:table|td|th)$/i).test(el.tagName); +}; + +Element.implement({ + + scrollTo: function(x, y){ + if (isBody(this)){ + this.getWindow().scrollTo(x, y); + } else { + this.scrollLeft = x; + this.scrollTop = y; + } + return this; + }, + + getSize: function(){ + if (isBody(this)) return this.getWindow().getSize(); + + // + // This if clause is because IE8- cannot calculate getBoundingClientRect of elements with visibility hidden. + if (!window.getComputedStyle) return {x: this.offsetWidth, y: this.offsetHeight}; + // + + // This svg section under, calling `svgCalculateSize()`, can be removed when FF fixed the svg size bug. + // Bug info: https://bugzilla.mozilla.org/show_bug.cgi?id=530985 + if (this.get('tag') == 'svg') return svgCalculateSize(this); + + try { + var bounds = this.getBoundingClientRect(); + return {x: bounds.width, y: bounds.height}; + } catch (e){ + return {x: 0, y: 0}; + } + }, + + getScrollSize: function(){ + if (isBody(this)) return this.getWindow().getScrollSize(); + return {x: this.scrollWidth, y: this.scrollHeight}; + }, + + getScroll: function(){ + if (isBody(this)) return this.getWindow().getScroll(); + return {x: this.scrollLeft, y: this.scrollTop}; + }, + + getScrolls: function(){ + var element = this.parentNode, position = {x: 0, y: 0}; + while (element && !isBody(element)){ + position.x += element.scrollLeft; + position.y += element.scrollTop; + element = element.parentNode; + } + return position; + }, + + getOffsetParent: brokenOffsetParent ? function(){ + var element = this; + if (isBody(element) || styleString(element, 'position') == 'fixed') return null; + + var isOffsetCheck = (styleString(element, 'position') == 'static') ? isOffsetStatic : isOffset; + while ((element = element.parentNode)){ + if (isOffsetCheck(element)) return element; + } + return null; + } : function(){ + var element = this; + if (isBody(element) || styleString(element, 'position') == 'fixed') return null; + + try { + return element.offsetParent; + } catch (e){} + return null; + }, + + getOffsets: function(){ + var hasGetBoundingClientRect = this.getBoundingClientRect; + + if (hasGetBoundingClientRect){ + var bound = this.getBoundingClientRect(), + html = document.id(this.getDocument().documentElement), + htmlScroll = html.getScroll(), + elemScrolls = this.getScrolls(), + isFixed = (styleString(this, 'position') == 'fixed'); + + return { + x: bound.left.toFloat() + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft, + y: bound.top.toFloat() + elemScrolls.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop + }; + } + + var element = this, position = {x: 0, y: 0}; + if (isBody(this)) return position; + + while (element && !isBody(element)){ + position.x += element.offsetLeft; + position.y += element.offsetTop; + + element = element.offsetParent; + } + + return position; + }, + + getPosition: function(relative){ + var offset = this.getOffsets(), + scroll = this.getScrolls(); + var position = { + x: offset.x - scroll.x, + y: offset.y - scroll.y + }; + + if (relative && (relative = document.id(relative))){ + var relativePosition = relative.getPosition(); + return {x: position.x - relativePosition.x - leftBorder(relative), y: position.y - relativePosition.y - topBorder(relative)}; + } + return position; + }, + + getCoordinates: function(element){ + if (isBody(this)) return this.getWindow().getCoordinates(); + var position = this.getPosition(element), + size = this.getSize(); + var obj = { + left: position.x, + top: position.y, + width: size.x, + height: size.y + }; + obj.right = obj.left + obj.width; + obj.bottom = obj.top + obj.height; + return obj; + }, + + computePosition: function(obj){ + return { + left: obj.x - styleNumber(this, 'margin-left'), + top: obj.y - styleNumber(this, 'margin-top') + }; + }, + + setPosition: function(obj){ + return this.setStyles(this.computePosition(obj)); + } + +}); + + +[Document, Window].invoke('implement', { + + getSize: function(){ + var doc = getCompatElement(this); + return {x: doc.clientWidth, y: doc.clientHeight}; + }, + + getScroll: function(){ + var win = this.getWindow(), doc = getCompatElement(this); + return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop}; + }, + + getScrollSize: function(){ + var doc = getCompatElement(this), + min = this.getSize(), + body = this.getDocument().body; + + return {x: Math.max(doc.scrollWidth, body.scrollWidth, min.x), y: Math.max(doc.scrollHeight, body.scrollHeight, min.y)}; + }, + + getPosition: function(){ + return {x: 0, y: 0}; + }, + + getCoordinates: function(){ + var size = this.getSize(); + return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x}; + } + +}); + +// private methods + +var styleString = Element.getComputedStyle; + +function styleNumber(element, style){ + return styleString(element, style).toInt() || 0; +} + + + +function topBorder(element){ + return styleNumber(element, 'border-top-width'); +} + +function leftBorder(element){ + return styleNumber(element, 'border-left-width'); +} + +function isBody(element){ + return (/^(?:body|html)$/i).test(element.tagName); +} + +function getCompatElement(element){ + var doc = element.getDocument(); + return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body; +} + +})(); + +//aliases +Element.alias({position: 'setPosition'}); //compatability + +[Window, Document, Element].invoke('implement', { + + getHeight: function(){ + return this.getSize().y; + }, + + getWidth: function(){ + return this.getSize().x; + }, + + getScrollTop: function(){ + return this.getScroll().y; + }, + + getScrollLeft: function(){ + return this.getScroll().x; + }, + + getScrollHeight: function(){ + return this.getScrollSize().y; + }, + + getScrollWidth: function(){ + return this.getScrollSize().x; + }, + + getTop: function(){ + return this.getPosition().y; + }, + + getLeft: function(){ + return this.getPosition().x; + } + +}); + +/* +--- + +name: Fx + +description: Contains the basic animation logic to be extended by all other Fx Classes. + +license: MIT-style license. + +requires: [Chain, Events, Options, Class.Thenable] + +provides: Fx + +... +*/ + +(function(){ + +var Fx = this.Fx = new Class({ + + Implements: [Chain, Events, Options, Class.Thenable], + + options: { + /* + onStart: nil, + onCancel: nil, + onComplete: nil, + */ + fps: 60, + unit: false, + duration: 500, + frames: null, + frameSkip: true, + link: 'ignore' + }, + + initialize: function(options){ + this.subject = this.subject || this; + this.setOptions(options); + }, + + getTransition: function(){ + return function(p){ + return -(Math.cos(Math.PI * p) - 1) / 2; + }; + }, + + step: function(now){ + if (this.options.frameSkip){ + var diff = (this.time != null) ? (now - this.time) : 0, frames = diff / this.frameInterval; + this.time = now; + this.frame += frames; + } else { + this.frame++; + } + + if (this.frame < this.frames){ + var delta = this.transition(this.frame / this.frames); + this.set(this.compute(this.from, this.to, delta)); + } else { + this.frame = this.frames; + this.set(this.compute(this.from, this.to, 1)); + this.stop(); + } + }, + + set: function(now){ + return now; + }, + + compute: function(from, to, delta){ + return Fx.compute(from, to, delta); + }, + + check: function(){ + if (!this.isRunning()) return true; + switch (this.options.link){ + case 'cancel': this.cancel(); return true; + case 'chain': this.chain(this.caller.pass(arguments, this)); return false; + } + return false; + }, + + start: function(from, to){ + if (!this.check(from, to)) return this; + this.from = from; + this.to = to; + this.frame = (this.options.frameSkip) ? 0 : -1; + this.time = null; + this.transition = this.getTransition(); + var frames = this.options.frames, fps = this.options.fps, duration = this.options.duration; + this.duration = Fx.Durations[duration] || duration.toInt(); + this.frameInterval = 1000 / fps; + this.frames = frames || Math.round(this.duration / this.frameInterval); + if (this.getThenableState() !== 'pending'){ + this.resetThenable(this.subject); + } + this.fireEvent('start', this.subject); + pushInstance.call(this, fps); + return this; + }, + + stop: function(){ + if (this.isRunning()){ + this.time = null; + pullInstance.call(this, this.options.fps); + if (this.frames == this.frame){ + this.fireEvent('complete', this.subject); + if (!this.callChain()) this.fireEvent('chainComplete', this.subject); + } else { + this.fireEvent('stop', this.subject); + } + this.resolve(this.subject === this ? null : this.subject); + } + return this; + }, + + cancel: function(){ + if (this.isRunning()){ + this.time = null; + pullInstance.call(this, this.options.fps); + this.frame = this.frames; + this.fireEvent('cancel', this.subject).clearChain(); + this.reject(this.subject); + } + return this; + }, + + pause: function(){ + if (this.isRunning()){ + this.time = null; + pullInstance.call(this, this.options.fps); + } + return this; + }, + + resume: function(){ + if (this.isPaused()) pushInstance.call(this, this.options.fps); + return this; + }, + + isRunning: function(){ + var list = instances[this.options.fps]; + return list && list.contains(this); + }, + + isPaused: function(){ + return (this.frame < this.frames) && !this.isRunning(); + } + +}); + +Fx.compute = function(from, to, delta){ + return (to - from) * delta + from; +}; + +Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000}; + +// global timers + +var instances = {}, timers = {}; + +var loop = function(){ + var now = Date.now(); + for (var i = this.length; i--;){ + var instance = this[i]; + if (instance) instance.step(now); + } +}; + +var pushInstance = function(fps){ + var list = instances[fps] || (instances[fps] = []); + list.push(this); + if (!timers[fps]) timers[fps] = loop.periodical(Math.round(1000 / fps), list); +}; + +var pullInstance = function(fps){ + var list = instances[fps]; + if (list){ + list.erase(this); + if (!list.length && timers[fps]){ + delete instances[fps]; + timers[fps] = clearInterval(timers[fps]); + } + } +}; + +})(); + +/* +--- + +name: Fx.CSS + +description: Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements. + +license: MIT-style license. + +requires: [Fx, Element.Style] + +provides: Fx.CSS + +... +*/ + +Fx.CSS = new Class({ + + Extends: Fx, + + //prepares the base from/to object + + prepare: function(element, property, values){ + values = Array.convert(values); + var from = values[0], to = values[1]; + if (to == null){ + to = from; + from = element.getStyle(property); + var unit = this.options.unit; + // adapted from: https://github.com/ryanmorr/fx/blob/master/fx.js#L299 + if (unit && from && typeof from == 'string' && from.slice(-unit.length) != unit && parseFloat(from) != 0){ + element.setStyle(property, to + unit); + var value = element.getComputedStyle(property); + // IE and Opera support pixelLeft or pixelWidth + if (!(/px$/.test(value))){ + value = element.style[('pixel-' + property).camelCase()]; + if (value == null){ + // adapted from Dean Edwards' http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + var left = element.style.left; + element.style.left = to + unit; + value = element.style.pixelLeft; + element.style.left = left; + } + } + from = (to || 1) / (parseFloat(value) || 1) * (parseFloat(from) || 0); + element.setStyle(property, from + unit); + } + } + return {from: this.parse(from), to: this.parse(to)}; + }, + + //parses a value into an array + + parse: function(value){ + value = Function.convert(value)(); + value = (typeof value == 'string') ? value.split(' ') : Array.convert(value); + return value.map(function(val){ + val = String(val); + var found = false; + Object.each(Fx.CSS.Parsers, function(parser){ + if (found) return; + var parsed = parser.parse(val); + if (parsed || parsed === 0) found = {value: parsed, parser: parser}; + }); + found = found || {value: val, parser: Fx.CSS.Parsers.String}; + return found; + }); + }, + + //computes by a from and to prepared objects, using their parsers. + + compute: function(from, to, delta){ + var computed = []; + (Math.min(from.length, to.length)).times(function(i){ + computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser}); + }); + computed.$family = Function.convert('fx:css:value'); + return computed; + }, + + //serves the value as settable + + serve: function(value, unit){ + if (typeOf(value) != 'fx:css:value') value = this.parse(value); + var returned = []; + value.each(function(bit){ + returned = returned.concat(bit.parser.serve(bit.value, unit)); + }); + return returned; + }, + + //renders the change to an element + + render: function(element, property, value, unit){ + element.setStyle(property, this.serve(value, unit)); + }, + + //searches inside the page css to find the values for a selector + + search: function(selector){ + if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector]; + var to = {}, selectorTest = new RegExp('^' + selector.escapeRegExp() + '$'); + + var searchStyles = function(rules){ + Array.each(rules, function(rule){ + if (rule.media){ + searchStyles(rule.rules || rule.cssRules); + return; + } + if (!rule.style) return; + var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){ + return m.toLowerCase(); + }) : null; + if (!selectorText || !selectorTest.test(selectorText)) return; + Object.each(Element.Styles, function(value, style){ + if (!rule.style[style] || Element.ShortStyles[style]) return; + value = String(rule.style[style]); + to[style] = ((/^rgb/).test(value)) ? value.rgbToHex() : value; + }); + }); + }; + + Array.each(document.styleSheets, function(sheet){ + var href = sheet.href; + if (href && href.indexOf('://') > -1 && href.indexOf(document.domain) == -1) return; + var rules = sheet.rules || sheet.cssRules; + searchStyles(rules); + }); + return Fx.CSS.Cache[selector] = to; + } + +}); + +Fx.CSS.Cache = {}; + +Fx.CSS.Parsers = { + + Color: { + parse: function(value){ + if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true); + return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false; + }, + compute: function(from, to, delta){ + return from.map(function(value, i){ + return Math.round(Fx.compute(from[i], to[i], delta)); + }); + }, + serve: function(value){ + return value.map(Number); + } + }, + + Number: { + parse: parseFloat, + compute: Fx.compute, + serve: function(value, unit){ + return (unit) ? value + unit : value; + } + }, + + String: { + parse: Function.convert(false), + compute: function(zero, one){ + return one; + }, + serve: function(zero){ + return zero; + } + } + +}; + + + +/* +--- + +name: Fx.Morph + +description: Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules. + +license: MIT-style license. + +requires: Fx.CSS + +provides: Fx.Morph + +... +*/ + +Fx.Morph = new Class({ + + Extends: Fx.CSS, + + initialize: function(element, options){ + this.element = this.subject = document.id(element); + this.parent(options); + }, + + set: function(now){ + if (typeof now == 'string') now = this.search(now); + for (var p in now) this.render(this.element, p, now[p], this.options.unit); + return this; + }, + + compute: function(from, to, delta){ + var now = {}; + for (var p in from) now[p] = this.parent(from[p], to[p], delta); + return now; + }, + + start: function(properties){ + if (!this.check(properties)) return this; + if (typeof properties == 'string') properties = this.search(properties); + var from = {}, to = {}; + for (var p in properties){ + var parsed = this.prepare(this.element, p, properties[p]); + from[p] = parsed.from; + to[p] = parsed.to; + } + return this.parent(from, to); + } + +}); + +Element.Properties.morph = { + + set: function(options){ + this.get('morph').cancel().setOptions(options); + return this; + }, + + get: function(){ + var morph = this.retrieve('morph'); + if (!morph){ + morph = new Fx.Morph(this, {link: 'cancel'}); + this.store('morph', morph); + } + return morph; + } + +}; + +Element.implement({ + + morph: function(props){ + this.get('morph').start(props); + return this; + } + +}); + +/* +--- + +name: Fx.Transitions + +description: Contains a set of advanced transitions to be used with any of the Fx Classes. + +license: MIT-style license. + +credits: + - Easing Equations by Robert Penner, , modified and optimized to be used with MooTools. + +requires: Fx + +provides: Fx.Transitions + +... +*/ + +Fx.implement({ + + getTransition: function(){ + var trans = this.options.transition || Fx.Transitions.Sine.easeInOut; + if (typeof trans == 'string'){ + var data = trans.split(':'); + trans = Fx.Transitions; + trans = trans[data[0]] || trans[data[0].capitalize()]; + if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')]; + } + return trans; + } + +}); + +Fx.Transition = function(transition, params){ + params = Array.convert(params); + var easeIn = function(pos){ + return transition(pos, params); + }; + return Object.append(easeIn, { + easeIn: easeIn, + easeOut: function(pos){ + return 1 - transition(1 - pos, params); + }, + easeInOut: function(pos){ + return (pos <= 0.5 ? transition(2 * pos, params) : (2 - transition(2 * (1 - pos), params))) / 2; + } + }); +}; + +Fx.Transitions = { + + linear: function(zero){ + return zero; + } + +}; + + + +Fx.Transitions.extend = function(transitions){ + for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]); +}; + +Fx.Transitions.extend({ + + Pow: function(p, x){ + return Math.pow(p, x && x[0] || 6); + }, + + Expo: function(p){ + return Math.pow(2, 8 * (p - 1)); + }, + + Circ: function(p){ + return 1 - Math.sin(Math.acos(p)); + }, + + Sine: function(p){ + return 1 - Math.cos(p * Math.PI / 2); + }, + + Back: function(p, x){ + x = x && x[0] || 1.618; + return Math.pow(p, 2) * ((x + 1) * p - x); + }, + + Bounce: function(p){ + var value; + for (var a = 0, b = 1; 1; a += b, b /= 2){ + if (p >= (7 - 4 * a) / 11){ + value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2); + break; + } + } + return value; + }, + + Elastic: function(p, x){ + return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x && x[0] || 1) / 3); + } + +}); + +['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){ + Fx.Transitions[transition] = new Fx.Transition(function(p){ + return Math.pow(p, i + 2); + }); +}); + +/* +--- + +name: Fx.Tween + +description: Formerly Fx.Style, effect to transition any CSS property for an element. + +license: MIT-style license. + +requires: Fx.CSS + +provides: [Fx.Tween, Element.fade, Element.highlight] + +... +*/ + +Fx.Tween = new Class({ + + Extends: Fx.CSS, + + initialize: function(element, options){ + this.element = this.subject = document.id(element); + this.parent(options); + }, + + set: function(property, now){ + if (arguments.length == 1){ + now = property; + property = this.property || this.options.property; + } + this.render(this.element, property, now, this.options.unit); + return this; + }, + + start: function(property, from, to){ + if (!this.check(property, from, to)) return this; + var args = Array.flatten(arguments); + this.property = this.options.property || args.shift(); + var parsed = this.prepare(this.element, this.property, args); + return this.parent(parsed.from, parsed.to); + } + +}); + +Element.Properties.tween = { + + set: function(options){ + this.get('tween').cancel().setOptions(options); + return this; + }, + + get: function(){ + var tween = this.retrieve('tween'); + if (!tween){ + tween = new Fx.Tween(this, {link: 'cancel'}); + this.store('tween', tween); + } + return tween; + } + +}; + +Element.implement({ + + tween: function(property, from, to){ + this.get('tween').start(property, from, to); + return this; + }, + + fade: function(){ + var fade = this.get('tween'), method, args = ['opacity'].append(arguments), toggle; + if (args[1] == null) args[1] = 'toggle'; + switch (args[1]){ + case 'in': method = 'start'; args[1] = 1; break; + case 'out': method = 'start'; args[1] = 0; break; + case 'show': method = 'set'; args[1] = 1; break; + case 'hide': method = 'set'; args[1] = 0; break; + case 'toggle': + var flag = this.retrieve('fade:flag', this.getStyle('opacity') == 1); + method = 'start'; + args[1] = flag ? 0 : 1; + this.store('fade:flag', !flag); + toggle = true; + break; + default: method = 'start'; + } + if (!toggle) this.eliminate('fade:flag'); + fade[method].apply(fade, args); + var to = args[args.length - 1]; + + if (method == 'set'){ + this.setStyle('visibility', to == 0 ? 'hidden' : 'visible'); + } else if (to != 0){ + if (fade.$chain.length){ + fade.chain(function(){ + this.element.setStyle('visibility', 'visible'); + this.callChain(); + }); + } else { + this.setStyle('visibility', 'visible'); + } + } else { + fade.chain(function(){ + if (this.element.getStyle('opacity')) return; + this.element.setStyle('visibility', 'hidden'); + this.callChain(); + }); + } + + return this; + }, + + highlight: function(start, end){ + if (!end){ + end = this.retrieve('highlight:original', this.getStyle('background-color')); + end = (end == 'transparent') ? '#fff' : end; + } + var tween = this.get('tween'); + tween.start('background-color', start || '#ffff88', end).chain(function(){ + this.setStyle('background-color', this.retrieve('highlight:original')); + tween.callChain(); + }.bind(this)); + return this; + } + +}); + +/* +--- + +name: Request + +description: Powerful all purpose Request Class. Uses XMLHTTPRequest. + +license: MIT-style license. + +requires: [Object, Element, Chain, Events, Options, Class.Thenable, Browser] + +provides: Request + +... +*/ + +(function(){ + +var empty = function(){}, + progressSupport = ('onprogress' in new Browser.Request); + +var Request = this.Request = new Class({ + + Implements: [Chain, Events, Options, Class.Thenable], + + options: {/* + onRequest: function(){}, + onLoadstart: function(event, xhr){}, + onProgress: function(event, xhr){}, + onComplete: function(){}, + onCancel: function(){}, + onSuccess: function(responseText, responseXML){}, + onFailure: function(xhr){}, + onException: function(headerName, value){}, + onTimeout: function(){}, + user: '', + password: '', + withCredentials: false,*/ + url: '', + data: '', + headers: { + 'X-Requested-With': 'XMLHttpRequest', + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }, + async: true, + format: false, + method: 'post', + link: 'ignore', + isSuccess: null, + emulation: true, + urlEncoded: true, + encoding: 'utf-8', + evalScripts: false, + evalResponse: false, + timeout: 0, + noCache: false + }, + + initialize: function(options){ + this.xhr = new Browser.Request(); + this.setOptions(options); + this.headers = this.options.headers; + }, + + onStateChange: function(){ + var xhr = this.xhr; + if (xhr.readyState != 4 || !this.running) return; + this.running = false; + this.status = 0; + Function.attempt(function(){ + var status = xhr.status; + this.status = (status == 1223) ? 204 : status; + }.bind(this)); + xhr.onreadystatechange = empty; + if (progressSupport) xhr.onprogress = xhr.onloadstart = empty; + if (this.timer){ + clearTimeout(this.timer); + delete this.timer; + } + + this.response = {text: this.xhr.responseText || '', xml: this.xhr.responseXML}; + if (this.options.isSuccess.call(this, this.status)) + this.success(this.response.text, this.response.xml); + else + this.failure(); + }, + + isSuccess: function(){ + var status = this.status; + return (status >= 200 && status < 300); + }, + + isRunning: function(){ + return !!this.running; + }, + + processScripts: function(text){ + if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return Browser.exec(text); + return text.stripScripts(this.options.evalScripts); + }, + + success: function(text, xml){ + this.onSuccess(this.processScripts(text), xml); + this.resolve({text: text, xml: xml}); + }, + + onSuccess: function(){ + this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain(); + }, + + failure: function(){ + this.onFailure(); + this.reject({reason: 'failure', xhr: this.xhr}); + }, + + onFailure: function(){ + this.fireEvent('complete').fireEvent('failure', this.xhr); + }, + + loadstart: function(event){ + this.fireEvent('loadstart', [event, this.xhr]); + }, + + progress: function(event){ + this.fireEvent('progress', [event, this.xhr]); + }, + + timeout: function(){ + this.fireEvent('timeout', this.xhr); + this.reject({reason: 'timeout', xhr: this.xhr}); + }, + + setHeader: function(name, value){ + this.headers[name] = value; + return this; + }, + + getHeader: function(name){ + return Function.attempt(function(){ + return this.xhr.getResponseHeader(name); + }.bind(this)); + }, + + check: function(){ + if (!this.running) return true; + switch (this.options.link){ + case 'cancel': this.cancel(); return true; + case 'chain': this.chain(this.caller.pass(arguments, this)); return false; + } + return false; + }, + + send: function(options){ + if (!this.check(options)) return this; + + this.options.isSuccess = this.options.isSuccess || this.isSuccess; + this.running = true; + + var type = typeOf(options); + if (type == 'string' || type == 'element') options = {data: options}; + + var old = this.options; + options = Object.append({data: old.data, url: old.url, method: old.method}, options); + var data = options.data, url = String(options.url), method = options.method.toLowerCase(); + + switch (typeOf(data)){ + case 'element': data = document.id(data).toQueryString(); break; + case 'object': case 'hash': data = Object.toQueryString(data); + } + + if (this.options.format){ + var format = 'format=' + this.options.format; + data = (data) ? format + '&' + data : format; + } + + if (this.options.emulation && !['get', 'post'].contains(method)){ + var _method = '_method=' + method; + data = (data) ? _method + '&' + data : _method; + method = 'post'; + } + + if (this.options.urlEncoded && ['post', 'put'].contains(method)){ + var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : ''; + this.headers['Content-type'] = 'application/x-www-form-urlencoded' + encoding; + } + + if (!url) url = document.location.pathname; + + var trimPosition = url.lastIndexOf('/'); + if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition); + + if (this.options.noCache) + url += (url.indexOf('?') > -1 ? '&' : '?') + String.uniqueID(); + + if (data && (method == 'get' || method == 'delete')){ + url += (url.indexOf('?') > -1 ? '&' : '?') + data; + data = null; + } + + var xhr = this.xhr; + if (progressSupport){ + xhr.onloadstart = this.loadstart.bind(this); + xhr.onprogress = this.progress.bind(this); + } + + xhr.open(method.toUpperCase(), url, this.options.async, this.options.user, this.options.password); + if ((this.options.withCredentials) && 'withCredentials' in xhr) xhr.withCredentials = true; + + xhr.onreadystatechange = this.onStateChange.bind(this); + + Object.each(this.headers, function(value, key){ + try { + xhr.setRequestHeader(key, value); + } catch (e){ + this.fireEvent('exception', [key, value]); + this.reject({reason: 'exception', xhr: xhr, exception: e}); + } + }, this); + + if (this.getThenableState() !== 'pending'){ + this.resetThenable({reason: 'send'}); + } + this.fireEvent('request'); + xhr.send(data); + if (!this.options.async) this.onStateChange(); + else if (this.options.timeout) this.timer = this.timeout.delay(this.options.timeout, this); + return this; + }, + + cancel: function(){ + if (!this.running) return this; + this.running = false; + var xhr = this.xhr; + xhr.abort(); + if (this.timer){ + clearTimeout(this.timer); + delete this.timer; + } + xhr.onreadystatechange = empty; + if (progressSupport) xhr.onprogress = xhr.onloadstart = empty; + this.xhr = new Browser.Request(); + this.fireEvent('cancel'); + this.reject({reason: 'cancel', xhr: xhr}); + return this; + } + +}); + +var methods = {}; +['get', 'post', 'put', 'delete', 'patch', 'head', 'GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'].each(function(method){ + methods[method] = function(data){ + var object = { + method: method + }; + if (data != null) object.data = data; + return this.send(object); + }; +}); + +Request.implement(methods); + +Element.Properties.send = { + + set: function(options){ + var send = this.get('send').cancel(); + send.setOptions(options); + return this; + }, + + get: function(){ + var send = this.retrieve('send'); + if (!send){ + send = new Request({ + data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action') + }); + this.store('send', send); + } + return send; + } + +}; + +Element.implement({ + + send: function(url){ + var sender = this.get('send'); + sender.send({data: this, url: url || sender.options.url}); + return this; + } + +}); + +})(); + +/* +--- + +name: Request.HTML + +description: Extends the basic Request Class with additional methods for interacting with HTML responses. + +license: MIT-style license. + +requires: [Element, Request] + +provides: Request.HTML + +... +*/ + +Request.HTML = new Class({ + + Extends: Request, + + options: { + update: false, + append: false, + evalScripts: true, + filter: false, + headers: { + Accept: 'text/html, application/xml, text/xml, */*' + } + }, + + success: function(text){ + var options = this.options, response = this.response; + + response.html = text.stripScripts(function(script){ + response.javascript = script; + }); + + var match = response.html.match(/]*>([\s\S]*?)<\/body>/i); + if (match) response.html = match[1]; + var temp = new Element('div').set('html', response.html); + + response.tree = temp.childNodes; + response.elements = temp.getElements(options.filter || '*'); + + if (options.filter) response.tree = response.elements; + if (options.update){ + var update = document.id(options.update).empty(); + if (options.filter) update.adopt(response.elements); + else update.set('html', response.html); + } else if (options.append){ + var append = document.id(options.append); + if (options.filter) response.elements.reverse().inject(append); + else append.adopt(temp.getChildren()); + } + if (options.evalScripts) Browser.exec(response.javascript); + + this.onSuccess(response.tree, response.elements, response.html, response.javascript); + this.resolve({tree: response.tree, elements: response.elements, html: response.html, javascript: response.javascript}); + } + +}); + +Element.Properties.load = { + + set: function(options){ + var load = this.get('load').cancel(); + load.setOptions(options); + return this; + }, + + get: function(){ + var load = this.retrieve('load'); + if (!load){ + load = new Request.HTML({data: this, link: 'cancel', update: this, method: 'get'}); + this.store('load', load); + } + return load; + } + +}; + +Element.implement({ + + load: function(){ + this.get('load').send(Array.link(arguments, {data: Type.isObject, url: Type.isString})); + return this; + } + +}); + +/* +--- + +name: JSON + +description: JSON encoder and decoder. + +license: MIT-style license. + +SeeAlso: + +requires: [Array, String, Number, Function] + +provides: JSON + +... +*/ + +if (typeof JSON == 'undefined') this.JSON = {}; + + + +(function(){ + +var special = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'}; + +var escape = function(chr){ + return special[chr] || '\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4); +}; + +JSON.validate = function(string){ + string = string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'). + replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). + replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + + return (/^[\],:{}\s]*$/).test(string); +}; + +JSON.encode = JSON.stringify ? function(obj){ + return JSON.stringify(obj); +} : function(obj){ + if (obj && obj.toJSON) obj = obj.toJSON(); + + switch (typeOf(obj)){ + case 'string': + return '"' + obj.replace(/[\x00-\x1f\\"]/g, escape) + '"'; + case 'array': + return '[' + obj.map(JSON.encode).clean() + ']'; + case 'object': case 'hash': + var string = []; + Object.each(obj, function(value, key){ + var json = JSON.encode(value); + if (json) string.push(JSON.encode(key) + ':' + json); + }); + return '{' + string + '}'; + case 'number': case 'boolean': return '' + obj; + case 'null': return 'null'; + } + + return null; +}; + +JSON.secure = true; + + +JSON.decode = function(string, secure){ + if (!string || typeOf(string) != 'string') return null; + + if (secure == null) secure = JSON.secure; + if (secure){ + if (JSON.parse) return JSON.parse(string); + if (!JSON.validate(string)) throw new Error('JSON could not decode the input; security is enabled and the value is not secure.'); + } + + return eval('(' + string + ')'); +}; + +})(); + +/* +--- + +name: Request.JSON + +description: Extends the basic Request Class with additional methods for sending and receiving JSON data. + +license: MIT-style license. + +requires: [Request, JSON] + +provides: Request.JSON + +... +*/ + +Request.JSON = new Class({ + + Extends: Request, + + options: { + /*onError: function(text, error){},*/ + secure: true + }, + + initialize: function(options){ + this.parent(options); + Object.append(this.headers, { + 'Accept': 'application/json', + 'X-Request': 'JSON' + }); + }, + + success: function(text){ + var json; + try { + json = this.response.json = JSON.decode(text, this.options.secure); + } catch (error){ + this.fireEvent('error', [text, error]); + return; + } + if (json == null){ + this.failure(); + } else { + this.onSuccess(json, text); + this.resolve({json: json, text: text}); + } + } + +}); + +/* +--- + +name: Cookie + +description: Class for creating, reading, and deleting browser Cookies. + +license: MIT-style license. + +credits: + - Based on the functions by Peter-Paul Koch (http://quirksmode.org). + +requires: [Options, Browser] + +provides: Cookie + +... +*/ + +var Cookie = new Class({ + + Implements: Options, + + options: { + path: '/', + domain: false, + duration: false, + secure: false, + document: document, + encode: true, + httpOnly: false + }, + + initialize: function(key, options){ + this.key = key; + this.setOptions(options); + }, + + write: function(value){ + if (this.options.encode) value = encodeURIComponent(value); + if (this.options.domain) value += '; domain=' + this.options.domain; + if (this.options.path) value += '; path=' + this.options.path; + if (this.options.duration){ + var date = new Date(); + date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000); + value += '; expires=' + date.toGMTString(); + } + if (this.options.secure) value += '; secure'; + if (this.options.httpOnly) value += '; HttpOnly'; + this.options.document.cookie = this.key + '=' + value; + return this; + }, + + read: function(){ + var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)'); + return (value) ? decodeURIComponent(value[1]) : null; + }, + + dispose: function(){ + new Cookie(this.key, Object.merge({}, this.options, {duration: -1})).write(''); + return this; + } + +}); + +Cookie.write = function(key, value, options){ + return new Cookie(key, options).write(value); +}; + +Cookie.read = function(key){ + return new Cookie(key).read(); +}; + +Cookie.dispose = function(key, options){ + return new Cookie(key, options).dispose(); +}; + +/* +--- + +name: DOMReady + +description: Contains the custom event domready. + +license: MIT-style license. + +requires: [Browser, Element, Element.Event] + +provides: [DOMReady, DomReady] + +... +*/ + +(function(window, document){ + +var ready, + loaded, + checks = [], + shouldPoll, + timer, + testElement = document.createElement('div'); + +var domready = function(){ + clearTimeout(timer); + if (!ready){ + Browser.loaded = ready = true; + document.removeListener('DOMContentLoaded', domready).removeListener('readystatechange', check); + document.fireEvent('domready'); + window.fireEvent('domready'); + } + // cleanup scope vars + document = window = testElement = null; +}; + +var check = function(){ + for (var i = checks.length; i--;) if (checks[i]()){ + domready(); + return true; + } + return false; +}; + +var poll = function(){ + clearTimeout(timer); + if (!check()) timer = setTimeout(poll, 10); +}; + +document.addListener('DOMContentLoaded', domready); + +/**/ +// doScroll technique by Diego Perini http://javascript.nwbox.com/IEContentLoaded/ +// testElement.doScroll() throws when the DOM is not ready, only in the top window +var doScrollWorks = function(){ + try { + testElement.doScroll(); + return true; + } catch (e){} + return false; +}; +// If doScroll works already, it can't be used to determine domready +// e.g. in an iframe +if (testElement.doScroll && !doScrollWorks()){ + checks.push(doScrollWorks); + shouldPoll = true; +} +/**/ + +if (document.readyState) checks.push(function(){ + var state = document.readyState; + return (state == 'loaded' || state == 'complete'); +}); + +if ('onreadystatechange' in document) document.addListener('readystatechange', check); +else shouldPoll = true; + +if (shouldPoll) poll(); + +Element.Events.domready = { + onAdd: function(fn){ + if (ready) fn.call(this); + } +}; + +// Make sure that domready fires before load +Element.Events.load = { + base: 'load', + onAdd: function(fn){ + if (loaded && this == window) fn.call(this); + }, + condition: function(){ + if (this == window){ + domready(); + delete Element.Events.load; + } + return true; + } +}; + +// This is based on the custom load event +window.addEvent('load', function(){ + loaded = true; +}); + +})(window, document); diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-More-1.3.3dev.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-More-1.3.3dev.js new file mode 100644 index 0000000000..0d8df04ef8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-More-1.3.3dev.js @@ -0,0 +1,13543 @@ +/* +--- + +script: More.js + +name: More + +description: MooTools More + +license: MIT-style license + +authors: + - Guillermo Rauch + - Thomas Aylott + - Scott Kyle + - Arian Stolwijk + - Tim Wienk + - Christoph Pojer + - Aaron Newton + - Jacob Thornton + +requires: + - Core/MooTools + +provides: [MooTools.More] + +... +*/ + +MooTools.More = { + 'version': '1.3.2.2dev', + 'build': 'b6dcbdcc821fbf62404ef43f332f5c594ac76a3a' +}; + + +/* +--- + +name: Events.Pseudos + +description: Adds the functionality to add pseudo events + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: [Core/Class.Extras, Core/Slick.Parser, More/MooTools.More] + +provides: [Events.Pseudos] + +... +*/ + +Events.Pseudos = function(pseudos, addEvent, removeEvent){ + + var storeKey = 'monitorEvents:'; + + var storageOf = function(object){ + return { + store: object.store ? function(key, value){ + object.store(storeKey + key, value); + } : function(key, value){ + (object.$monitorEvents || (object.$monitorEvents = {}))[key] = value; + }, + retrieve: object.retrieve ? function(key, dflt){ + return object.retrieve(storeKey + key, dflt); + } : function(key, dflt){ + if (!object.$monitorEvents) return dflt; + return object.$monitorEvents[key] || dflt; + } + }; + }; + + var splitType = function(type){ + if (type.indexOf(':') == -1 || !pseudos) return null; + + var parsed = Slick.parse(type).expressions[0][0], + parsedPseudos = parsed.pseudos, + l = parsedPseudos.length, + splits = []; + + while (l--) if (pseudos[parsedPseudos[l].key]){ + splits.push({ + event: parsed.tag, + value: parsedPseudos[l].value, + pseudo: parsedPseudos[l].key, + original: type + }); + } + + return splits.length ? splits : null; + }; + + var mergePseudoOptions = function(split){ + return Object.merge.apply(this, split.map(function(item){ + return pseudos[item.pseudo].options || {}; + })); + }; + + return { + + addEvent: function(type, fn, internal){ + var split = splitType(type); + if (!split) return addEvent.call(this, type, fn, internal); + + var storage = storageOf(this), + events = storage.retrieve(type, []), + eventType = split[0].event, + options = mergePseudoOptions(split), + stack = fn, + eventOptions = options[eventType] || {}, + args = Array.slice(arguments, 2), + self = this, + monitor; + + if (eventOptions.args) args.append(Array.from(eventOptions.args)); + if (eventOptions.base) eventType = eventOptions.base; + if (eventOptions.onAdd) eventOptions.onAdd(this); + + split.each(function(item){ + var stackFn = stack; + stack = function(){ + (eventOptions.listener || pseudos[item.pseudo].listener).call(self, item, stackFn, arguments, monitor, options); + }; + }); + monitor = stack.bind(this); + + events.include({event: fn, monitor: monitor}); + storage.store(type, events); + + addEvent.apply(this, [type, fn].concat(args)); + return addEvent.apply(this, [eventType, monitor].concat(args)); + }, + + removeEvent: function(type, fn){ + var split = splitType(type); + if (!split) return removeEvent.call(this, type, fn); + + var storage = storageOf(this), + events = storage.retrieve(type); + if (!events) return this; + + var eventType = split[0].event, + options = mergePseudoOptions(split), + eventOptions = options[eventType] || {}, + args = Array.slice(arguments, 2); + + if (eventOptions.args) args.append(Array.from(eventOptions.args)); + if (eventOptions.base) eventType = eventOptions.base; + if (eventOptions.onRemove) eventOptions.onRemove(this); + + removeEvent.apply(this, [type, fn].concat(args)); + events.each(function(monitor, i){ + if (!fn || monitor.event == fn) removeEvent.apply(this, [eventType, monitor.monitor].concat(args)); + delete events[i]; + }, this); + + storage.store(type, events); + return this; + } + + }; + +}; + +(function(){ + +var pseudos = { + + once: { + listener: function(split, fn, args, monitor){ + fn.apply(this, args); + this.removeEvent(split.event, monitor) + .removeEvent(split.original, fn); + } + }, + + throttle: { + listener: function(split, fn, args){ + if (!fn._throttled){ + fn.apply(this, args); + fn._throttled = setTimeout(function(){ + fn._throttled = false; + }, split.value || 250); + } + } + }, + + pause: { + listener: function(split, fn, args){ + clearTimeout(fn._pause); + fn._pause = fn.delay(split.value || 250, this, args); + } + } + +}; + +Events.definePseudo = function(key, listener){ + pseudos[key] = Type.isFunction(listener) ? {listener: listener} : listener; + return this; +}; + +Events.lookupPseudo = function(key){ + return pseudos[key]; +}; + +var proto = Events.prototype; +Events.implement(Events.Pseudos(pseudos, proto.addEvent, proto.removeEvent)); + +['Request', 'Fx'].each(function(klass){ + if (this[klass]) this[klass].implement(Events.prototype); +}); + +})(); + + +/* +--- + +script: Class.Refactor.js + +name: Class.Refactor + +description: Extends a class onto itself with new property, preserving any items attached to the class's namespace. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Class + - /MooTools.More + +# Some modules declare themselves dependent on Class.Refactor +provides: [Class.refactor, Class.Refactor] + +... +*/ + +Class.refactor = function(original, refactors){ + + Object.each(refactors, function(item, name){ + var origin = original.prototype[name]; + origin = (origin && origin.$origin) || origin || function(){}; + original.implement(name, (typeof item == 'function') ? function(){ + var old = this.previous; + this.previous = origin; + var value = item.apply(this, arguments); + this.previous = old; + return value; + } : item); + }); + + return original; + +}; + + +/* +--- + +script: Class.Binds.js + +name: Class.Binds + +description: Automagically binds specified methods in a class to the instance of the class. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Class + - /MooTools.More + +provides: [Class.Binds] + +... +*/ + +Class.Mutators.Binds = function(binds){ + if (!this.prototype.initialize) this.implement('initialize', function(){}); + return Array.from(binds).concat(this.prototype.Binds || []); +}; + +Class.Mutators.initialize = function(initialize){ + return function(){ + Array.from(this.Binds).each(function(name){ + var original = this[name]; + if (original) this[name] = original.bind(this); + }, this); + return initialize.apply(this, arguments); + }; +}; + + +/* +--- + +script: Class.Occlude.js + +name: Class.Occlude + +description: Prevents a class from being applied to a DOM element twice. + +license: MIT-style license. + +authors: + - Aaron Newton + +requires: + - Core/Class + - Core/Element + - /MooTools.More + +provides: [Class.Occlude] + +... +*/ + +Class.Occlude = new Class({ + + occlude: function(property, element){ + element = document.id(element || this.element); + var instance = element.retrieve(property || this.property); + if (instance && !this.occluded) + return (this.occluded = instance); + + this.occluded = false; + element.store(property || this.property, this); + return this.occluded; + } + +}); + + +/* +--- + +script: Chain.Wait.js + +name: Chain.Wait + +description: value, Adds a method to inject pauses between chained events. + +license: MIT-style license. + +authors: + - Aaron Newton + +requires: + - Core/Chain + - Core/Element + - Core/Fx + - /MooTools.More + +provides: [Chain.Wait] + +... +*/ + +(function(){ + + var wait = { + wait: function(duration){ + return this.chain(function(){ + this.callChain.delay(duration == null ? 500 : duration, this); + return this; + }.bind(this)); + } + }; + + Chain.implement(wait); + + if (this.Fx) Fx.implement(wait); + + if (this.Element && Element.implement && this.Fx){ + Element.implement({ + + chains: function(effects){ + Array.from(effects || ['tween', 'morph', 'reveal']).each(function(effect){ + effect = this.get(effect); + if (!effect) return; + effect.setOptions({ + link:'chain' + }); + }, this); + return this; + }, + + pauseFx: function(duration, effect){ + this.chains(effect).get(effect || 'tween').wait(duration); + return this; + } + + }); + } + +})(); + + +/* +--- + +script: Array.Extras.js + +name: Array.Extras + +description: Extends the Array native object to include useful methods to work with arrays. + +license: MIT-style license + +authors: + - Christoph Pojer + - Sebastian Markbåge + +requires: + - Core/Array + - MooTools.More + +provides: [Array.Extras] + +... +*/ + +(function(nil){ + +Array.implement({ + + min: function(){ + return Math.min.apply(null, this); + }, + + max: function(){ + return Math.max.apply(null, this); + }, + + average: function(){ + return this.length ? this.sum() / this.length : 0; + }, + + sum: function(){ + var result = 0, l = this.length; + if (l){ + while (l--) result += this[l]; + } + return result; + }, + + unique: function(){ + return [].combine(this); + }, + + shuffle: function(){ + for (var i = this.length; i && --i;){ + var temp = this[i], r = Math.floor(Math.random() * ( i + 1 )); + this[i] = this[r]; + this[r] = temp; + } + return this; + }, + + reduce: function(fn, value){ + for (var i = 0, l = this.length; i < l; i++){ + if (i in this) value = value === nil ? this[i] : fn.call(null, value, this[i], i, this); + } + return value; + }, + + reduceRight: function(fn, value){ + var i = this.length; + while (i--){ + if (i in this) value = value === nil ? this[i] : fn.call(null, value, this[i], i, this); + } + return value; + } + +}); + +})(); + + +/* +--- + +script: Object.Extras.js + +name: Object.Extras + +description: Extra Object generics, like getFromPath which allows a path notation to child elements. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Object + - /MooTools.More + +provides: [Object.Extras] + +... +*/ + +(function(){ + +var defined = function(value){ + return value != null; +}; + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +Object.extend({ + + getFromPath: function(source, parts){ + if (typeof parts == 'string') parts = parts.split('.'); + for (var i = 0, l = parts.length; i < l; i++){ + if (hasOwnProperty.call(source, parts[i])) source = source[parts[i]]; + else return null; + } + return source; + }, + + cleanValues: function(object, method){ + method = method || defined; + for (var key in object) if (!method(object[key])){ + delete object[key]; + } + return object; + }, + + erase: function(object, key){ + if (hasOwnProperty.call(object, key)) delete object[key]; + return object; + }, + + run: function(object){ + var args = Array.slice(arguments, 1); + for (var key in object) if (object[key].apply){ + object[key].apply(object, args); + } + return object; + } + +}); + +})(); + + +/* +--- + +script: Locale.js + +name: Locale + +description: Provides methods for localization. + +license: MIT-style license + +authors: + - Aaron Newton + - Arian Stolwijk + +requires: + - Core/Events + - /Object.Extras + - /MooTools.More + +provides: [Locale, Lang] + +... +*/ + +(function(){ + +var current = null, + locales = {}, + inherits = {}; + +var getSet = function(set){ + if (instanceOf(set, Locale.Set)) return set; + else return locales[set]; +}; + +var Locale = this.Locale = { + + define: function(locale, set, key, value){ + var name; + if (instanceOf(locale, Locale.Set)){ + name = locale.name; + if (name) locales[name] = locale; + } else { + name = locale; + if (!locales[name]) locales[name] = new Locale.Set(name); + locale = locales[name]; + } + + if (set) locale.define(set, key, value); + + /*<1.2compat>*/ + if (set == 'cascade') return Locale.inherit(name, key); + /**/ + + if (!current) current = locale; + + return locale; + }, + + use: function(locale){ + locale = getSet(locale); + + if (locale){ + current = locale; + + this.fireEvent('change', locale); + + /*<1.2compat>*/ + this.fireEvent('langChange', locale.name); + /**/ + } + + return this; + }, + + getCurrent: function(){ + return current; + }, + + get: function(key, args){ + return (current) ? current.get(key, args) : ''; + }, + + inherit: function(locale, inherits, set){ + locale = getSet(locale); + + if (locale) locale.inherit(inherits, set); + return this; + }, + + list: function(){ + return Object.keys(locales); + } + +}; + +Object.append(Locale, new Events); + +Locale.Set = new Class({ + + sets: {}, + + inherits: { + locales: [], + sets: {} + }, + + initialize: function(name){ + this.name = name || ''; + }, + + define: function(set, key, value){ + var defineData = this.sets[set]; + if (!defineData) defineData = {}; + + if (key){ + if (typeOf(key) == 'object') defineData = Object.merge(defineData, key); + else defineData[key] = value; + } + this.sets[set] = defineData; + + return this; + }, + + get: function(key, args, _base){ + var value = Object.getFromPath(this.sets, key); + if (value != null){ + var type = typeOf(value); + if (type == 'function') value = value.apply(null, Array.from(args)); + else if (type == 'object') value = Object.clone(value); + return value; + } + + // get value of inherited locales + var index = key.indexOf('.'), + set = index < 0 ? key : key.substr(0, index), + names = (this.inherits.sets[set] || []).combine(this.inherits.locales).include('en-US'); + if (!_base) _base = []; + + for (var i = 0, l = names.length; i < l; i++){ + if (_base.contains(names[i])) continue; + _base.include(names[i]); + + var locale = locales[names[i]]; + if (!locale) continue; + + value = locale.get(key, args, _base); + if (value != null) return value; + } + + return ''; + }, + + inherit: function(names, set){ + names = Array.from(names); + + if (set && !this.inherits.sets[set]) this.inherits.sets[set] = []; + + var l = names.length; + while (l--) (set ? this.inherits.sets[set] : this.inherits.locales).unshift(names[l]); + + return this; + } + +}); + +/*<1.2compat>*/ +var lang = MooTools.lang = {}; + +Object.append(lang, Locale, { + setLanguage: Locale.use, + getCurrentLanguage: function(){ + var current = Locale.getCurrent(); + return (current) ? current.name : null; + }, + set: function(){ + Locale.define.apply(this, arguments); + return this; + }, + get: function(set, key, args){ + if (key) set += '.' + key; + return Locale.get(set, args); + } +}); +/**/ + +})(); + + +/* +--- + +name: Locale.en-US.Date + +description: Date messages for US English. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - /Locale + +provides: [Locale.en-US.Date] + +... +*/ + +Locale.define('en-US', 'Date', { + + months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + months_abbr: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + days_abbr: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + + // Culture's date order: MM/DD/YYYY + dateOrder: ['month', 'date', 'year'], + shortDate: '%m/%d/%Y', + shortTime: '%I:%M%p', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 0, + + // Date.Extras + ordinal: function(dayOfMonth){ + // 1st, 2nd, 3rd, etc. + return (dayOfMonth > 3 && dayOfMonth < 21) ? 'th' : ['th', 'st', 'nd', 'rd', 'th'][Math.min(dayOfMonth % 10, 4)]; + }, + + lessThanMinuteAgo: 'less than a minute ago', + minuteAgo: 'about a minute ago', + minutesAgo: '{delta} minutes ago', + hourAgo: 'about an hour ago', + hoursAgo: 'about {delta} hours ago', + dayAgo: '1 day ago', + daysAgo: '{delta} days ago', + weekAgo: '1 week ago', + weeksAgo: '{delta} weeks ago', + monthAgo: '1 month ago', + monthsAgo: '{delta} months ago', + yearAgo: '1 year ago', + yearsAgo: '{delta} years ago', + + lessThanMinuteUntil: 'less than a minute from now', + minuteUntil: 'about a minute from now', + minutesUntil: '{delta} minutes from now', + hourUntil: 'about an hour from now', + hoursUntil: 'about {delta} hours from now', + dayUntil: '1 day from now', + daysUntil: '{delta} days from now', + weekUntil: '1 week from now', + weeksUntil: '{delta} weeks from now', + monthUntil: '1 month from now', + monthsUntil: '{delta} months from now', + yearUntil: '1 year from now', + yearsUntil: '{delta} years from now' + +}); + + +/* +--- + +script: Date.js + +name: Date + +description: Extends the Date native object to include methods useful in managing dates. + +license: MIT-style license + +authors: + - Aaron Newton + - Nicholas Barthelemy - https://svn.nbarthelemy.com/date-js/ + - Harald Kirshner - mail [at] digitarald.de; http://digitarald.de + - Scott Kyle - scott [at] appden.com; http://appden.com + +requires: + - Core/Array + - Core/String + - Core/Number + - MooTools.More + - Locale + - Locale.en-US.Date + +provides: [Date] + +... +*/ + +(function(){ + +var Date = this.Date; + +var DateMethods = Date.Methods = { + ms: 'Milliseconds', + year: 'FullYear', + min: 'Minutes', + mo: 'Month', + sec: 'Seconds', + hr: 'Hours' +}; + +['Date', 'Day', 'FullYear', 'Hours', 'Milliseconds', 'Minutes', 'Month', 'Seconds', 'Time', 'TimezoneOffset', + 'Week', 'Timezone', 'GMTOffset', 'DayOfYear', 'LastMonth', 'LastDayOfMonth', 'UTCDate', 'UTCDay', 'UTCFullYear', + 'AMPM', 'Ordinal', 'UTCHours', 'UTCMilliseconds', 'UTCMinutes', 'UTCMonth', 'UTCSeconds', 'UTCMilliseconds'].each(function(method){ + Date.Methods[method.toLowerCase()] = method; +}); + +var pad = function(n, digits, string){ + if (digits == 1) return n; + return n < Math.pow(10, digits - 1) ? (string || '0') + pad(n, digits - 1, string) : n; +}; + +Date.implement({ + + set: function(prop, value){ + prop = prop.toLowerCase(); + var method = DateMethods[prop] && 'set' + DateMethods[prop]; + if (method && this[method]) this[method](value); + return this; + }.overloadSetter(), + + get: function(prop){ + prop = prop.toLowerCase(); + var method = DateMethods[prop] && 'get' + DateMethods[prop]; + if (method && this[method]) return this[method](); + return null; + }.overloadGetter(), + + clone: function(){ + return new Date(this.get('time')); + }, + + increment: function(interval, times){ + interval = interval || 'day'; + times = times != null ? times : 1; + + switch (interval){ + case 'year': + return this.increment('month', times * 12); + case 'month': + var d = this.get('date'); + this.set('date', 1).set('mo', this.get('mo') + times); + return this.set('date', d.min(this.get('lastdayofmonth'))); + case 'week': + return this.increment('day', times * 7); + case 'day': + return this.set('date', this.get('date') + times); + } + + if (!Date.units[interval]) throw new Error(interval + ' is not a supported interval'); + + return this.set('time', this.get('time') + times * Date.units[interval]()); + }, + + decrement: function(interval, times){ + return this.increment(interval, -1 * (times != null ? times : 1)); + }, + + isLeapYear: function(){ + return Date.isLeapYear(this.get('year')); + }, + + clearTime: function(){ + return this.set({hr: 0, min: 0, sec: 0, ms: 0}); + }, + + diff: function(date, resolution){ + if (typeOf(date) == 'string') date = Date.parse(date); + + return ((date - this) / Date.units[resolution || 'day'](3, 3)).round(); // non-leap year, 30-day month + }, + + getLastDayOfMonth: function(){ + return Date.daysInMonth(this.get('mo'), this.get('year')); + }, + + getDayOfYear: function(){ + return (Date.UTC(this.get('year'), this.get('mo'), this.get('date') + 1) + - Date.UTC(this.get('year'), 0, 1)) / Date.units.day(); + }, + + setDay: function(day, firstDayOfWeek){ + if (firstDayOfWeek == null){ + firstDayOfWeek = Date.getMsg('firstDayOfWeek'); + if (firstDayOfWeek === '') firstDayOfWeek = 1; + } + + day = (7 + Date.parseDay(day, true) - firstDayOfWeek) % 7; + var currentDay = (7 + this.get('day') - firstDayOfWeek) % 7; + + return this.increment('day', day - currentDay); + }, + + getWeek: function(firstDayOfWeek){ + if (firstDayOfWeek == null){ + firstDayOfWeek = Date.getMsg('firstDayOfWeek'); + if (firstDayOfWeek === '') firstDayOfWeek = 1; + } + + var date = this, + dayOfWeek = (7 + date.get('day') - firstDayOfWeek) % 7, + dividend = 0, + firstDayOfYear; + + if (firstDayOfWeek == 1){ + // ISO-8601, week belongs to year that has the most days of the week (i.e. has the thursday of the week) + var month = date.get('month'), + startOfWeek = date.get('date') - dayOfWeek; + + if (month == 11 && startOfWeek > 28) return 1; // Week 1 of next year + + if (month == 0 && startOfWeek < -2){ + // Use a date from last year to determine the week + date = new Date(date).decrement('day', dayOfWeek); + dayOfWeek = 0; + } + + firstDayOfYear = new Date(date.get('year'), 0, 1).get('day') || 7; + if (firstDayOfYear > 4) dividend = -7; // First week of the year is not week 1 + } else { + // In other cultures the first week of the year is always week 1 and the last week always 53 or 54. + // Days in the same week can have a different weeknumber if the week spreads across two years. + firstDayOfYear = new Date(date.get('year'), 0, 1).get('day'); + } + + dividend += date.get('dayofyear'); + dividend += 6 - dayOfWeek; // Add days so we calculate the current date's week as a full week + dividend += (7 + firstDayOfYear - firstDayOfWeek) % 7; // Make up for first week of the year not being a full week + + return (dividend / 7); + }, + + getOrdinal: function(day){ + return Date.getMsg('ordinal', day || this.get('date')); + }, + + getTimezone: function(){ + return this.toString() + .replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/, '$1') + .replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, '$1$2$3'); + }, + + getGMTOffset: function(){ + var off = this.get('timezoneOffset'); + return ((off > 0) ? '-' : '+') + pad((off.abs() / 60).floor(), 2) + pad(off % 60, 2); + }, + + setAMPM: function(ampm){ + ampm = ampm.toUpperCase(); + var hr = this.get('hr'); + if (hr > 11 && ampm == 'AM') return this.decrement('hour', 12); + else if (hr < 12 && ampm == 'PM') return this.increment('hour', 12); + return this; + }, + + getAMPM: function(){ + return (this.get('hr') < 12) ? 'AM' : 'PM'; + }, + + parse: function(str){ + this.set('time', Date.parse(str)); + return this; + }, + + isValid: function(date){ + return !isNaN((date || this).valueOf()); + }, + + format: function(f){ + if (!this.isValid()) return 'invalid date'; + if (!f) f = '%x %X'; + + var formatLower = f.toLowerCase(); + if (formatters[formatLower]) return formatters[formatLower](this); // it's a formatter! + f = formats[formatLower] || f; // replace short-hand with actual format + + var d = this; + return f.replace(/%([a-z%])/gi, + function($0, $1){ + switch ($1){ + case 'a': return Date.getMsg('days_abbr')[d.get('day')]; + case 'A': return Date.getMsg('days')[d.get('day')]; + case 'b': return Date.getMsg('months_abbr')[d.get('month')]; + case 'B': return Date.getMsg('months')[d.get('month')]; + case 'c': return d.format('%a %b %d %H:%M:%S %Y'); + case 'd': return pad(d.get('date'), 2); + case 'e': return pad(d.get('date'), 2, ' '); + case 'H': return pad(d.get('hr'), 2); + case 'I': return pad((d.get('hr') % 12) || 12, 2); + case 'j': return pad(d.get('dayofyear'), 3); + case 'k': return pad(d.get('hr'), 2, ' '); + case 'l': return pad((d.get('hr') % 12) || 12, 2, ' '); + case 'L': return pad(d.get('ms'), 3); + case 'm': return pad((d.get('mo') + 1), 2); + case 'M': return pad(d.get('min'), 2); + case 'o': return d.get('ordinal'); + case 'p': return Date.getMsg(d.get('ampm')); + case 's': return Math.round(d / 1000); + case 'S': return pad(d.get('seconds'), 2); + case 'T': return d.format('%H:%M:%S'); + case 'U': return pad(d.get('week'), 2); + case 'w': return d.get('day'); + case 'x': return d.format(Date.getMsg('shortDate')); + case 'X': return d.format(Date.getMsg('shortTime')); + case 'y': return d.get('year').toString().substr(2); + case 'Y': return d.get('year'); + case 'z': return d.get('GMTOffset'); + case 'Z': return d.get('Timezone'); + } + return $1; + } + ); + }, + + toISOString: function(){ + return this.format('iso8601'); + } + +}).alias({ + toJSON: 'toISOString', + compare: 'diff', + strftime: 'format' +}); + +var formats = { + db: '%Y-%m-%d %H:%M:%S', + compact: '%Y%m%dT%H%M%S', + 'short': '%d %b %H:%M', + 'long': '%B %d, %Y %H:%M' +}; + +// The day and month abbreviations are standardized, so we cannot use simply %a and %b because they will get localized +var rfcDayAbbr = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + rfcMonthAbbr = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + +var formatters = { + rfc822: function(date){ + return rfcDayAbbr[date.get('day')] + date.format(', %d ') + rfcMonthAbbr[date.get('month')] + date.format(' %Y %H:%M:%S %Z'); + }, + rfc2822: function(date){ + return rfcDayAbbr[date.get('day')] + date.format(', %d ') + rfcMonthAbbr[date.get('month')] + date.format(' %Y %H:%M:%S %z'); + }, + iso8601: function(date){ + return ( + date.getUTCFullYear() + '-' + + pad(date.getUTCMonth() + 1, 2) + '-' + + pad(date.getUTCDate(), 2) + 'T' + + pad(date.getUTCHours(), 2) + ':' + + pad(date.getUTCMinutes(), 2) + ':' + + pad(date.getUTCSeconds(), 2) + '.' + + pad(date.getUTCMilliseconds(), 3) + 'Z' + ); + } +}; + + +var parsePatterns = [], + nativeParse = Date.parse; + +var parseWord = function(type, word, num){ + var ret = -1, + translated = Date.getMsg(type + 's'); + switch (typeOf(word)){ + case 'object': + ret = translated[word.get(type)]; + break; + case 'number': + ret = translated[word]; + if (!ret) throw new Error('Invalid ' + type + ' index: ' + word); + break; + case 'string': + var match = translated.filter(function(name){ + return this.test(name); + }, new RegExp('^' + word, 'i')); + if (!match.length) throw new Error('Invalid ' + type + ' string'); + if (match.length > 1) throw new Error('Ambiguous ' + type); + ret = match[0]; + } + + return (num) ? translated.indexOf(ret) : ret; +}; + +var startCentury = 1900, + startYear = 70; + +Date.extend({ + + getMsg: function(key, args){ + return Locale.get('Date.' + key, args); + }, + + units: { + ms: Function.from(1), + second: Function.from(1000), + minute: Function.from(60000), + hour: Function.from(3600000), + day: Function.from(86400000), + week: Function.from(608400000), + month: function(month, year){ + var d = new Date; + return Date.daysInMonth(month != null ? month : d.get('mo'), year != null ? year : d.get('year')) * 86400000; + }, + year: function(year){ + year = year || new Date().get('year'); + return Date.isLeapYear(year) ? 31622400000 : 31536000000; + } + }, + + daysInMonth: function(month, year){ + return [31, Date.isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; + }, + + isLeapYear: function(year){ + return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0); + }, + + parse: function(from){ + var t = typeOf(from); + if (t == 'number') return new Date(from); + if (t != 'string') return from; + from = from.clean(); + if (!from.length) return null; + + var parsed; + parsePatterns.some(function(pattern){ + var bits = pattern.re.exec(from); + return (bits) ? (parsed = pattern.handler(bits)) : false; + }); + + if (!(parsed && parsed.isValid())){ + parsed = new Date(nativeParse(from)); + if (!(parsed && parsed.isValid())) parsed = new Date(from.toInt()); + } + return parsed; + }, + + parseDay: function(day, num){ + return parseWord('day', day, num); + }, + + parseMonth: function(month, num){ + return parseWord('month', month, num); + }, + + parseUTC: function(value){ + var localDate = new Date(value); + var utcSeconds = Date.UTC( + localDate.get('year'), + localDate.get('mo'), + localDate.get('date'), + localDate.get('hr'), + localDate.get('min'), + localDate.get('sec'), + localDate.get('ms') + ); + return new Date(utcSeconds); + }, + + orderIndex: function(unit){ + return Date.getMsg('dateOrder').indexOf(unit) + 1; + }, + + defineFormat: function(name, format){ + formats[name] = format; + return this; + }, + + defineFormats: function(formats){ + for (var name in formats) Date.defineFormat(name, formats[name]); + return this; + }, + + //<1.2compat> + parsePatterns: parsePatterns, + // + + defineParser: function(pattern){ + parsePatterns.push((pattern.re && pattern.handler) ? pattern : build(pattern)); + return this; + }, + + defineParsers: function(){ + Array.flatten(arguments).each(Date.defineParser); + return this; + }, + + define2DigitYearStart: function(year){ + startYear = year % 100; + startCentury = year - startYear; + return this; + } + +}); + +var regexOf = function(type){ + return new RegExp('(?:' + Date.getMsg(type).map(function(name){ + return name.substr(0, 3); + }).join('|') + ')[a-z]*'); +}; + +var replacers = function(key){ + switch (key){ + case 'T': + return '%H:%M:%S'; + case 'x': // iso8601 covers yyyy-mm-dd, so just check if month is first + return ((Date.orderIndex('month') == 1) ? '%m[-./]%d' : '%d[-./]%m') + '([-./]%y)?'; + case 'X': + return '%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%z?'; + } + return null; +}; + +var keys = { + d: /[0-2]?[0-9]|3[01]/, + H: /[01]?[0-9]|2[0-3]/, + I: /0?[1-9]|1[0-2]/, + M: /[0-5]?\d/, + s: /\d+/, + o: /[a-z]*/, + p: /[ap]\.?m\.?/, + y: /\d{2}|\d{4}/, + Y: /\d{4}/, + z: /Z|[+-]\d{2}(?::?\d{2})?/ +}; + +keys.m = keys.I; +keys.S = keys.M; + +var currentLanguage; + +var recompile = function(language){ + currentLanguage = language; + + keys.a = keys.A = regexOf('days'); + keys.b = keys.B = regexOf('months'); + + parsePatterns.each(function(pattern, i){ + if (pattern.format) parsePatterns[i] = build(pattern.format); + }); +}; + +var build = function(format){ + if (!currentLanguage) return {format: format}; + + var parsed = []; + var re = (format.source || format) // allow format to be regex + .replace(/%([a-z])/gi, + function($0, $1){ + return replacers($1) || $0; + } + ).replace(/\((?!\?)/g, '(?:') // make all groups non-capturing + .replace(/ (?!\?|\*)/g, ',? ') // be forgiving with spaces and commas + .replace(/%([a-z%])/gi, + function($0, $1){ + var p = keys[$1]; + if (!p) return $1; + parsed.push($1); + return '(' + p.source + ')'; + } + ).replace(/\[a-z\]/gi, '[a-z\\u00c0-\\uffff;\&]'); // handle unicode words + + return { + format: format, + re: new RegExp('^' + re + '$', 'i'), + handler: function(bits){ + bits = bits.slice(1).associate(parsed); + var date = new Date().clearTime(), + year = bits.y || bits.Y; + + if (year != null) handle.call(date, 'y', year); // need to start in the right year + if ('d' in bits) handle.call(date, 'd', 1); + if ('m' in bits || bits.b || bits.B) handle.call(date, 'm', 1); + + for (var key in bits) handle.call(date, key, bits[key]); + return date; + } + }; +}; + +var handle = function(key, value){ + if (!value) return this; + + switch (key){ + case 'a': case 'A': return this.set('day', Date.parseDay(value, true)); + case 'b': case 'B': return this.set('mo', Date.parseMonth(value, true)); + case 'd': return this.set('date', value); + case 'H': case 'I': return this.set('hr', value); + case 'm': return this.set('mo', value - 1); + case 'M': return this.set('min', value); + case 'p': return this.set('ampm', value.replace(/\./g, '')); + case 'S': return this.set('sec', value); + case 's': return this.set('ms', ('0.' + value) * 1000); + case 'w': return this.set('day', value); + case 'Y': return this.set('year', value); + case 'y': + value = +value; + if (value < 100) value += startCentury + (value < startYear ? 100 : 0); + return this.set('year', value); + case 'z': + if (value == 'Z') value = '+00'; + var offset = value.match(/([+-])(\d{2}):?(\d{2})?/); + offset = (offset[1] + '1') * (offset[2] * 60 + (+offset[3] || 0)) + this.getTimezoneOffset(); + return this.set('time', this - offset * 60000); + } + + return this; +}; + +Date.defineParsers( + '%Y([-./]%m([-./]%d((T| )%X)?)?)?', // "1999-12-31", "1999-12-31 11:59pm", "1999-12-31 23:59:59", ISO8601 + '%Y%m%d(T%H(%M%S?)?)?', // "19991231", "19991231T1159", compact + '%x( %X)?', // "12/31", "12.31.99", "12-31-1999", "12/31/2008 11:59 PM" + '%d%o( %b( %Y)?)?( %X)?', // "31st", "31st December", "31 Dec 1999", "31 Dec 1999 11:59pm" + '%b( %d%o)?( %Y)?( %X)?', // Same as above with month and day switched + '%Y %b( %d%o( %X)?)?', // Same as above with year coming first + '%o %b %d %X %z %Y', // "Thu Oct 22 08:11:23 +0000 2009" + '%T', // %H:%M:%S + '%H:%M( ?%p)?' // "11:05pm", "11:05 am" and "11:05" +); + +Locale.addEvent('change', function(language){ + if (Locale.get('Date')) recompile(language); +}).fireEvent('change', Locale.getCurrent()); + +})(); + + +/* +--- + +script: Date.Extras.js + +name: Date.Extras + +description: Extends the Date native object to include extra methods (on top of those in Date.js). + +license: MIT-style license + +authors: + - Aaron Newton + - Scott Kyle + +requires: + - /Date + +provides: [Date.Extras] + +... +*/ + +Date.implement({ + + timeDiffInWords: function(to){ + return Date.distanceOfTimeInWords(this, to || new Date); + }, + + timeDiff: function(to, separator){ + if (to == null) to = new Date; + var delta = ((to - this) / 1000).floor().abs(); + + var vals = [], + durations = [60, 60, 24, 365, 0], + names = ['s', 'm', 'h', 'd', 'y'], + value, duration; + + for (var item = 0; item < durations.length; item++){ + if (item && !delta) break; + value = delta; + if ((duration = durations[item])){ + value = (delta % duration); + delta = (delta / duration).floor(); + } + vals.unshift(value + (names[item] || '')); + } + + return vals.join(separator || ':'); + } + +}).extend({ + + distanceOfTimeInWords: function(from, to){ + return Date.getTimePhrase(((to - from) / 1000).toInt()); + }, + + getTimePhrase: function(delta){ + var suffix = (delta < 0) ? 'Until' : 'Ago'; + if (delta < 0) delta *= -1; + + var units = { + minute: 60, + hour: 60, + day: 24, + week: 7, + month: 52 / 12, + year: 12, + eon: Infinity + }; + + var msg = 'lessThanMinute'; + + for (var unit in units){ + var interval = units[unit]; + if (delta < 1.5 * interval){ + if (delta > 0.75 * interval) msg = unit; + break; + } + delta /= interval; + msg = unit + 's'; + } + + delta = delta.round(); + return Date.getMsg(msg + suffix, delta).substitute({delta: delta}); + } + +}).defineParsers( + + { + // "today", "tomorrow", "yesterday" + re: /^(?:tod|tom|yes)/i, + handler: function(bits){ + var d = new Date().clearTime(); + switch (bits[0]){ + case 'tom': return d.increment(); + case 'yes': return d.decrement(); + default: return d; + } + } + }, + + { + // "next Wednesday", "last Thursday" + re: /^(next|last) ([a-z]+)$/i, + handler: function(bits){ + var d = new Date().clearTime(); + var day = d.getDay(); + var newDay = Date.parseDay(bits[2], true); + var addDays = newDay - day; + if (newDay <= day) addDays += 7; + if (bits[1] == 'last') addDays -= 7; + return d.set('date', d.getDate() + addDays); + } + } + +).alias('timeAgoInWords', 'timeDiffInWords'); + + +/* +--- + +name: Locale.en-US.Number + +description: Number messages for US English. + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: + - /Locale + +provides: [Locale.en-US.Number] + +... +*/ + +Locale.define('en-US', 'Number', { + + decimal: '.', + group: ',', + +/* Commented properties are the defaults for Number.format + decimals: 0, + precision: 0, + scientific: null, + + prefix: null, + suffic: null, + + // Negative/Currency/percentage will mixin Number + negative: { + prefix: '-' + },*/ + + currency: { +// decimals: 2, + prefix: '$ ' + }/*, + + percentage: { + decimals: 2, + suffix: '%' + }*/ + +}); + + + + +/* +--- +name: Number.Format +description: Extends the Number Type object to include a number formatting method. +license: MIT-style license +authors: [Arian Stolwijk] +requires: [Core/Number, Locale.en-US.Number] +# Number.Extras is for compatibility +provides: [Number.Format, Number.Extras] +... +*/ + + +Number.implement({ + + format: function(options){ + // Thanks dojo and YUI for some inspiration + var value = this; + options = options ? Object.clone(options) : {}; + var getOption = function(key){ + if (options[key] != null) return options[key]; + return Locale.get('Number.' + key); + }; + + var negative = value < 0, + decimal = getOption('decimal'), + precision = getOption('precision'), + group = getOption('group'), + decimals = getOption('decimals'); + + if (negative){ + var negativeLocale = getOption('negative') || {}; + if (negativeLocale.prefix == null && negativeLocale.suffix == null) negativeLocale.prefix = '-'; + ['prefix', 'suffix'].each(function(key){ + if (negativeLocale[key]) options[key] = getOption(key) + negativeLocale[key]; + }); + + value = -value; + } + + var prefix = getOption('prefix'), + suffix = getOption('suffix'); + + if (decimals !== '' && decimals >= 0 && decimals <= 20) value = value.toFixed(decimals); + if (precision >= 1 && precision <= 21) value = (+value).toPrecision(precision); + + value += ''; + var index; + if (getOption('scientific') === false && value.indexOf('e') > -1){ + var match = value.split('e'), + zeros = +match[1]; + value = match[0].replace('.', ''); + + if (zeros < 0){ + zeros = -zeros - 1; + index = match[0].indexOf('.'); + if (index > -1) zeros -= index - 1; + while (zeros--) value = '0' + value; + value = '0.' + value; + } else { + index = match[0].lastIndexOf('.'); + if (index > -1) zeros -= match[0].length - index - 1; + while (zeros--) value += '0'; + } + } + + if (decimal != '.') value = value.replace('.', decimal); + + if (group){ + index = value.lastIndexOf(decimal); + index = (index > -1) ? index : value.length; + var newOutput = value.substring(index), + i = index; + + while (i--){ + if ((index - i - 1) % 3 == 0 && i != (index - 1)) newOutput = group + newOutput; + newOutput = value.charAt(i) + newOutput; + } + + value = newOutput; + } + + if (prefix) value = prefix + value; + if (suffix) value += suffix; + + return value; + }, + + formatCurrency: function(){ + var locale = Locale.get('Number.currency') || {}; + if (locale.scientific == null) locale.scientific = false; + if (locale.decimals == null) locale.decimals = 2; + + return this.format(locale); + }, + + formatPercentage: function(){ + var locale = Locale.get('Number.percentage') || {}; + if (locale.suffix == null) locale.suffix = '%'; + if (locale.decimals == null) locale.decimals = 2; + + return this.format(locale); + } + +}); + + +/* +--- + +script: String.Extras.js + +name: String.Extras + +description: Extends the String native object to include methods useful in managing various kinds of strings (query strings, urls, html, etc). + +license: MIT-style license + +authors: + - Aaron Newton + - Guillermo Rauch + - Christopher Pitt + +requires: + - Core/String + - Core/Array + - MooTools.More + +provides: [String.Extras] + +... +*/ + +(function(){ + +var special = { + 'a': /[àáâãäåăą]/g, + 'A': /[ÀÁÂÃÄÅĂĄ]/g, + 'c': /[ćčç]/g, + 'C': /[ĆČÇ]/g, + 'd': /[ďđ]/g, + 'D': /[ĎÐ]/g, + 'e': /[èéêëěę]/g, + 'E': /[ÈÉÊËĚĘ]/g, + 'g': /[ğ]/g, + 'G': /[Ğ]/g, + 'i': /[ìíîï]/g, + 'I': /[ÌÍÎÏ]/g, + 'l': /[ĺľł]/g, + 'L': /[ĹĽŁ]/g, + 'n': /[ñňń]/g, + 'N': /[ÑŇŃ]/g, + 'o': /[òóôõöøő]/g, + 'O': /[ÒÓÔÕÖØ]/g, + 'r': /[řŕ]/g, + 'R': /[ŘŔ]/g, + 's': /[ššş]/g, + 'S': /[ŠŞŚ]/g, + 't': /[ťţ]/g, + 'T': /[ŤŢ]/g, + 'ue': /[ü]/g, + 'UE': /[Ü]/g, + 'u': /[ùúûůµ]/g, + 'U': /[ÙÚÛŮ]/g, + 'y': /[ÿý]/g, + 'Y': /[ŸÝ]/g, + 'z': /[žźż]/g, + 'Z': /[ŽŹŻ]/g, + 'th': /[þ]/g, + 'TH': /[Þ]/g, + 'dh': /[ð]/g, + 'DH': /[Ð]/g, + 'ss': /[ß]/g, + 'oe': /[œ]/g, + 'OE': /[Œ]/g, + 'ae': /[æ]/g, + 'AE': /[Æ]/g +}, + +tidy = { + ' ': /[\xa0\u2002\u2003\u2009]/g, + '*': /[\xb7]/g, + '\'': /[\u2018\u2019]/g, + '"': /[\u201c\u201d]/g, + '...': /[\u2026]/g, + '-': /[\u2013]/g, +// '--': /[\u2014]/g, + '»': /[\uFFFD]/g +}; + +var walk = function(string, replacements){ + var result = string, key; + for (key in replacements) result = result.replace(replacements[key], key); + return result; +}; + +var getRegexForTag = function(tag, contents){ + tag = tag || ''; + var regstr = contents ? "<" + tag + "(?!\\w)[^>]*>([\\s\\S]*?)<\/" + tag + "(?!\\w)>" : "<\/?" + tag + "([^>]+)?>", + reg = new RegExp(regstr, "gi"); + return reg; +}; + +String.implement({ + + standardize: function(){ + return walk(this, special); + }, + + repeat: function(times){ + return new Array(times + 1).join(this); + }, + + pad: function(length, str, direction){ + if (this.length >= length) return this; + + var pad = (str == null ? ' ' : '' + str) + .repeat(length - this.length) + .substr(0, length - this.length); + + if (!direction || direction == 'right') return this + pad; + if (direction == 'left') return pad + this; + + return pad.substr(0, (pad.length / 2).floor()) + this + pad.substr(0, (pad.length / 2).ceil()); + }, + + getTags: function(tag, contents){ + return this.match(getRegexForTag(tag, contents)) || []; + }, + + stripTags: function(tag, contents){ + return this.replace(getRegexForTag(tag, contents), ''); + }, + + tidy: function(){ + return walk(this, tidy); + }, + + truncate: function(max, trail, atChar){ + var string = this; + if (trail == null && arguments.length == 1) trail = '…'; + if (string.length > max){ + string = string.substring(0, max); + if (atChar){ + var index = string.lastIndexOf(atChar); + if (index != -1) string = string.substr(0, index); + } + if (trail) string += trail; + } + return string; + } + +}); + +})(); + + +/* +--- + +script: String.QueryString.js + +name: String.QueryString + +description: Methods for dealing with URI query strings. + +license: MIT-style license + +authors: + - Sebastian Markbåge + - Aaron Newton + - Lennart Pilon + - Valerio Proietti + +requires: + - Core/Array + - Core/String + - /MooTools.More + +provides: [String.QueryString] + +... +*/ + +String.implement({ + + parseQueryString: function(decodeKeys, decodeValues){ + if (decodeKeys == null) decodeKeys = true; + if (decodeValues == null) decodeValues = true; + + var vars = this.split(/[&;]/), + object = {}; + if (!vars.length) return object; + + vars.each(function(val){ + var index = val.indexOf('=') + 1, + value = index ? val.substr(index) : '', + keys = index ? val.substr(0, index - 1).match(/([^\]\[]+|(\B)(?=\]))/g) : [val], + obj = object; + if (!keys) return; + if (decodeValues) value = decodeURIComponent(value); + keys.each(function(key, i){ + if (decodeKeys) key = decodeURIComponent(key); + var current = obj[key]; + + if (i < keys.length - 1) obj = obj[key] = current || {}; + else if (typeOf(current) == 'array') current.push(value); + else obj[key] = current != null ? [current, value] : value; + }); + }); + + return object; + }, + + cleanQueryString: function(method){ + return this.split('&').filter(function(val){ + var index = val.indexOf('='), + key = index < 0 ? '' : val.substr(0, index), + value = val.substr(index + 1); + + return method ? method.call(null, key, value) : (value || value === 0); + }).join('&'); + } + +}); + + +/* +--- + +script: URI.js + +name: URI + +description: Provides methods useful in managing the window location and uris. + +license: MIT-style license + +authors: + - Sebastian Markbåge + - Aaron Newton + +requires: + - Core/Object + - Core/Class + - Core/Class.Extras + - Core/Element + - /String.QueryString + +provides: [URI] + +... +*/ + +(function(){ + +var toString = function(){ + return this.get('value'); +}; + +var URI = this.URI = new Class({ + + Implements: Options, + + options: { + /*base: false*/ + }, + + regex: /^(?:(\w+):)?(?:\/\/(?:(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/, + parts: ['scheme', 'user', 'password', 'host', 'port', 'directory', 'file', 'query', 'fragment'], + schemes: {http: 80, https: 443, ftp: 21, rtsp: 554, mms: 1755, file: 0}, + + initialize: function(uri, options){ + this.setOptions(options); + var base = this.options.base || URI.base; + if (!uri) uri = base; + + if (uri && uri.parsed) this.parsed = Object.clone(uri.parsed); + else this.set('value', uri.href || uri.toString(), base ? new URI(base) : false); + }, + + parse: function(value, base){ + var bits = value.match(this.regex); + if (!bits) return false; + bits.shift(); + return this.merge(bits.associate(this.parts), base); + }, + + merge: function(bits, base){ + if ((!bits || !bits.scheme) && (!base || !base.scheme)) return false; + if (base){ + this.parts.every(function(part){ + if (bits[part]) return false; + bits[part] = base[part] || ''; + return true; + }); + } + bits.port = bits.port || this.schemes[bits.scheme.toLowerCase()]; + bits.directory = bits.directory ? this.parseDirectory(bits.directory, base ? base.directory : '') : '/'; + return bits; + }, + + parseDirectory: function(directory, baseDirectory){ + directory = (directory.substr(0, 1) == '/' ? '' : (baseDirectory || '/')) + directory; + if (!directory.test(URI.regs.directoryDot)) return directory; + var result = []; + directory.replace(URI.regs.endSlash, '').split('/').each(function(dir){ + if (dir == '..' && result.length > 0) result.pop(); + else if (dir != '.') result.push(dir); + }); + return result.join('/') + '/'; + }, + + combine: function(bits){ + return bits.value || bits.scheme + '://' + + (bits.user ? bits.user + (bits.password ? ':' + bits.password : '') + '@' : '') + + (bits.host || '') + (bits.port && bits.port != this.schemes[bits.scheme] ? ':' + bits.port : '') + + (bits.directory || '/') + (bits.file || '') + + (bits.query ? '?' + bits.query : '') + + (bits.fragment ? '#' + bits.fragment : ''); + }, + + set: function(part, value, base){ + if (part == 'value'){ + var scheme = value.match(URI.regs.scheme); + if (scheme) scheme = scheme[1]; + if (scheme && this.schemes[scheme.toLowerCase()] == null) this.parsed = { scheme: scheme, value: value }; + else this.parsed = this.parse(value, (base || this).parsed) || (scheme ? { scheme: scheme, value: value } : { value: value }); + } else if (part == 'data'){ + this.setData(value); + } else { + this.parsed[part] = value; + } + return this; + }, + + get: function(part, base){ + switch (part){ + case 'value': return this.combine(this.parsed, base ? base.parsed : false); + case 'data' : return this.getData(); + } + return this.parsed[part] || ''; + }, + + go: function(){ + document.location.href = this.toString(); + }, + + toURI: function(){ + return this; + }, + + getData: function(key, part){ + var qs = this.get(part || 'query'); + if (!(qs || qs === 0)) return key ? null : {}; + var obj = qs.parseQueryString(); + return key ? obj[key] : obj; + }, + + setData: function(values, merge, part){ + if (typeof values == 'string'){ + var data = this.getData(); + data[arguments[0]] = arguments[1]; + values = data; + } else if (merge){ + values = Object.merge(this.getData(), values); + } + return this.set(part || 'query', Object.toQueryString(values)); + }, + + clearData: function(part){ + return this.set(part || 'query', ''); + }, + + toString: toString, + valueOf: toString + +}); + +URI.regs = { + endSlash: /\/$/, + scheme: /^(\w+):/, + directoryDot: /\.\/|\.$/ +}; + +URI.base = new URI(Array.from(document.getElements('base[href]', true)).getLast(), {base: document.location}); + +String.implement({ + + toURI: function(options){ + return new URI(this, options); + } + +}); + +})(); + + +/* +--- + +script: URI.Relative.js + +name: URI.Relative + +description: Extends the URI class to add methods for computing relative and absolute urls. + +license: MIT-style license + +authors: + - Sebastian Markbåge + + +requires: + - /Class.refactor + - /URI + +provides: [URI.Relative] + +... +*/ + +URI = Class.refactor(URI, { + + combine: function(bits, base){ + if (!base || bits.scheme != base.scheme || bits.host != base.host || bits.port != base.port) + return this.previous.apply(this, arguments); + var end = bits.file + (bits.query ? '?' + bits.query : '') + (bits.fragment ? '#' + bits.fragment : ''); + + if (!base.directory) return (bits.directory || (bits.file ? '' : './')) + end; + + var baseDir = base.directory.split('/'), + relDir = bits.directory.split('/'), + path = '', + offset; + + var i = 0; + for (offset = 0; offset < baseDir.length && offset < relDir.length && baseDir[offset] == relDir[offset]; offset++); + for (i = 0; i < baseDir.length - offset - 1; i++) path += '../'; + for (i = offset; i < relDir.length - 1; i++) path += relDir[i] + '/'; + + return (path || (bits.file ? '' : './')) + end; + }, + + toAbsolute: function(base){ + base = new URI(base); + if (base) base.set('directory', '').set('file', ''); + return this.toRelative(base); + }, + + toRelative: function(base){ + return this.get('value', new URI(base)); + } + +}); + + +/* +--- + +name: Hash + +description: Contains Hash Prototypes. Provides a means for overcoming the JavaScript practical impossibility of extending native Objects. + +license: MIT-style license. + +requires: + - Core/Object + - /MooTools.More + +provides: [Hash] + +... +*/ + +(function(){ + +if (this.Hash) return; + +var Hash = this.Hash = new Type('Hash', function(object){ + if (typeOf(object) == 'hash') object = Object.clone(object.getClean()); + for (var key in object) this[key] = object[key]; + return this; +}); + +this.$H = function(object){ + return new Hash(object); +}; + +Hash.implement({ + + forEach: function(fn, bind){ + Object.forEach(this, fn, bind); + }, + + getClean: function(){ + var clean = {}; + for (var key in this){ + if (this.hasOwnProperty(key)) clean[key] = this[key]; + } + return clean; + }, + + getLength: function(){ + var length = 0; + for (var key in this){ + if (this.hasOwnProperty(key)) length++; + } + return length; + } + +}); + +Hash.alias('each', 'forEach'); + +Hash.implement({ + + has: Object.prototype.hasOwnProperty, + + keyOf: function(value){ + return Object.keyOf(this, value); + }, + + hasValue: function(value){ + return Object.contains(this, value); + }, + + extend: function(properties){ + Hash.each(properties || {}, function(value, key){ + Hash.set(this, key, value); + }, this); + return this; + }, + + combine: function(properties){ + Hash.each(properties || {}, function(value, key){ + Hash.include(this, key, value); + }, this); + return this; + }, + + erase: function(key){ + if (this.hasOwnProperty(key)) delete this[key]; + return this; + }, + + get: function(key){ + return (this.hasOwnProperty(key)) ? this[key] : null; + }, + + set: function(key, value){ + if (!this[key] || this.hasOwnProperty(key)) this[key] = value; + return this; + }, + + empty: function(){ + Hash.each(this, function(value, key){ + delete this[key]; + }, this); + return this; + }, + + include: function(key, value){ + if (this[key] == undefined) this[key] = value; + return this; + }, + + map: function(fn, bind){ + return new Hash(Object.map(this, fn, bind)); + }, + + filter: function(fn, bind){ + return new Hash(Object.filter(this, fn, bind)); + }, + + every: function(fn, bind){ + return Object.every(this, fn, bind); + }, + + some: function(fn, bind){ + return Object.some(this, fn, bind); + }, + + getKeys: function(){ + return Object.keys(this); + }, + + getValues: function(){ + return Object.values(this); + }, + + toQueryString: function(base){ + return Object.toQueryString(this, base); + } + +}); + +Hash.alias({indexOf: 'keyOf', contains: 'hasValue'}); + + +})(); + + + +/* +--- + +script: Hash.Extras.js + +name: Hash.Extras + +description: Extends the Hash Type to include getFromPath which allows a path notation to child elements. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - /Hash + - /Object.Extras + +provides: [Hash.Extras] + +... +*/ + +Hash.implement({ + + getFromPath: function(notation){ + return Object.getFromPath(this, notation); + }, + + cleanValues: function(method){ + return new Hash(Object.cleanValues(this, method)); + }, + + run: function(){ + Object.run(arguments); + } + +}); + + +/* +--- + +script: Element.Forms.js + +name: Element.Forms + +description: Extends the Element native object to include methods useful in managing inputs. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element + - /String.Extras + - /MooTools.More + +provides: [Element.Forms] + +... +*/ + +Element.implement({ + + tidy: function(){ + this.set('value', this.get('value').tidy()); + }, + + getTextInRange: function(start, end){ + return this.get('value').substring(start, end); + }, + + getSelectedText: function(){ + if (this.setSelectionRange) return this.getTextInRange(this.getSelectionStart(), this.getSelectionEnd()); + return document.selection.createRange().text; + }, + + getSelectedRange: function(){ + if (this.selectionStart != null){ + return { + start: this.selectionStart, + end: this.selectionEnd + }; + } + + var pos = { + start: 0, + end: 0 + }; + var range = this.getDocument().selection.createRange(); + if (!range || range.parentElement() != this) return pos; + var duplicate = range.duplicate(); + + if (this.type == 'text'){ + pos.start = 0 - duplicate.moveStart('character', -100000); + pos.end = pos.start + range.text.length; + } else { + var value = this.get('value'); + var offset = value.length; + duplicate.moveToElementText(this); + duplicate.setEndPoint('StartToEnd', range); + if (duplicate.text.length) offset -= value.match(/[\n\r]*$/)[0].length; + pos.end = offset - duplicate.text.length; + duplicate.setEndPoint('StartToStart', range); + pos.start = offset - duplicate.text.length; + } + return pos; + }, + + getSelectionStart: function(){ + return this.getSelectedRange().start; + }, + + getSelectionEnd: function(){ + return this.getSelectedRange().end; + }, + + setCaretPosition: function(pos){ + if (pos == 'end') pos = this.get('value').length; + this.selectRange(pos, pos); + return this; + }, + + getCaretPosition: function(){ + return this.getSelectedRange().start; + }, + + selectRange: function(start, end){ + if (this.setSelectionRange){ + this.focus(); + this.setSelectionRange(start, end); + } else { + var value = this.get('value'); + var diff = value.substr(start, end - start).replace(/\r/g, '').length; + start = value.substr(0, start).replace(/\r/g, '').length; + var range = this.createTextRange(); + range.collapse(true); + range.moveEnd('character', start + diff); + range.moveStart('character', start); + range.select(); + } + return this; + }, + + insertAtCursor: function(value, select){ + var pos = this.getSelectedRange(); + var text = this.get('value'); + this.set('value', text.substring(0, pos.start) + value + text.substring(pos.end, text.length)); + if (select !== false) this.selectRange(pos.start, pos.start + value.length); + else this.setCaretPosition(pos.start + value.length); + return this; + }, + + insertAroundCursor: function(options, select){ + options = Object.append({ + before: '', + defaultMiddle: '', + after: '' + }, options); + + var value = this.getSelectedText() || options.defaultMiddle; + var pos = this.getSelectedRange(); + var text = this.get('value'); + + if (pos.start == pos.end){ + this.set('value', text.substring(0, pos.start) + options.before + value + options.after + text.substring(pos.end, text.length)); + this.selectRange(pos.start + options.before.length, pos.end + options.before.length + value.length); + } else { + var current = text.substring(pos.start, pos.end); + this.set('value', text.substring(0, pos.start) + options.before + current + options.after + text.substring(pos.end, text.length)); + var selStart = pos.start + options.before.length; + if (select !== false) this.selectRange(selStart, selStart + current.length); + else this.setCaretPosition(selStart + text.length); + } + return this; + } + +}); + + +/* +--- + +script: Elements.From.js + +name: Elements.From + +description: Returns a collection of elements from a string of html. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/String + - Core/Element + - /MooTools.More + +provides: [Elements.from, Elements.From] + +... +*/ + +Elements.from = function(text, excludeScripts){ + if (excludeScripts || excludeScripts == null) text = text.stripScripts(); + + var container, match = text.match(/^\s*<(t[dhr]|tbody|tfoot|thead)/i); + + if (match){ + container = new Element('table'); + var tag = match[1].toLowerCase(); + if (['td', 'th', 'tr'].contains(tag)){ + container = new Element('tbody').inject(container); + if (tag != 'tr') container = new Element('tr').inject(container); + } + } + + return (container || new Element('div')).set('html', text).getChildren(); +}; + + +/* +--- + +name: Element.Event.Pseudos + +description: Adds the functionality to add pseudo events for Elements + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: [Core/Element.Event, Events.Pseudos] + +provides: [Element.Event.Pseudos] + +... +*/ + +(function(){ + +var pseudos = {}, + copyFromEvents = ['once', 'throttle', 'pause'], + count = copyFromEvents.length; + +while (count--) pseudos[copyFromEvents[count]] = Events.lookupPseudo(copyFromEvents[count]); + +Event.definePseudo = function(key, listener){ + pseudos[key] = Type.isFunction(listener) ? {listener: listener} : listener; + return this; +}; + +var proto = Element.prototype; +[Element, Window, Document].invoke('implement', Events.Pseudos(pseudos, proto.addEvent, proto.removeEvent)); + +})(); + + +/* +--- + +name: Element.Event.Pseudos.Keys + +description: Adds functionality fire events if certain keycombinations are pressed + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: [Element.Event.Pseudos] + +provides: [Element.Event.Pseudos.Keys] + +... +*/ + +(function(){ + +var keysStoreKey = '$moo:keys-pressed', + keysKeyupStoreKey = '$moo:keys-keyup'; + + +Event.definePseudo('keys', function(split, fn, args){ + + var event = args[0], + keys = [], + pressed = this.retrieve(keysStoreKey, []); + + keys.append(split.value.replace('++', function(){ + keys.push('+'); // shift++ and shift+++a + return ''; + }).split('+')); + + pressed.include(event.key); + + if (keys.every(function(key){ + return pressed.contains(key); + })) fn.apply(this, args); + + this.store(keysStoreKey, pressed); + + if (!this.retrieve(keysKeyupStoreKey)){ + var keyup = function(event){ + (function(){ + pressed = this.retrieve(keysStoreKey, []).erase(event.key); + this.store(keysStoreKey, pressed); + }).delay(0, this); // Fix for IE + }; + this.store(keysKeyupStoreKey, keyup).addEvent('keyup', keyup); + } + +}); + +Object.append(Event.Keys, { + 'shift': 16, + 'control': 17, + 'alt': 18, + 'capslock': 20, + 'pageup': 33, + 'pagedown': 34, + 'end': 35, + 'home': 36, + 'numlock': 144, + 'scrolllock': 145, + ';': 186, + '=': 187, + ',': 188, + '-': Browser.firefox ? 109 : 189, + '.': 190, + '/': 191, + '`': 192, + '[': 219, + '\\': 220, + ']': 221, + "'": 222, + '+': 107 +}); + +})(); + + +/* +--- + +script: Element.Delegation.js + +name: Element.Delegation + +description: Extends the Element native object to include the delegate method for more efficient event management. + +credits: + - "Event checking based on the work of Daniel Steigerwald. License: MIT-style license. Copyright: Copyright (c) 2008 Daniel Steigerwald, daniel.steigerwald.cz" + +license: MIT-style license + +authors: + - Aaron Newton + - Daniel Steigerwald + +requires: [/MooTools.More, Element.Event.Pseudos] + +provides: [Element.Delegation] + +... +*/ + +(function(){ + +var eventListenerSupport = !(window.attachEvent && !window.addEventListener), + nativeEvents = Element.NativeEvents; + +nativeEvents.focusin = 2; +nativeEvents.focusout = 2; + +var check = function(split, target, event){ + var elementEvent = Element.Events[split.event], condition; + if (elementEvent) condition = elementEvent.condition; + return Slick.match(target, split.value) && (!condition || condition.call(target, event)); +}; + +var bubbleUp = function(split, event, fn){ + for (var target = event.target; target && target != this; target = document.id(target.parentNode)){ + if (target && check(split, target, event)) return fn.call(target, event, target); + } +}; + +var formObserver = function(eventName){ + + var $delegationKey = '$delegation:'; + + return { + base: 'focusin', + + onRemove: function(element){ + element.retrieve($delegationKey + 'forms', []).each(function(el){ + el.retrieve($delegationKey + 'listeners', []).each(function(listener){ + el.removeEvent(eventName, listener); + }); + el.eliminate($delegationKey + eventName + 'listeners') + .eliminate($delegationKey + eventName + 'originalFn'); + }); + }, + + listener: function(split, fn, args, monitor, options){ + var event = args[0], + forms = this.retrieve($delegationKey + 'forms', []), + target = event.target, + form = (target.get('tag') == 'form') ? target : event.target.getParent('form'); + + if (!form) return; + + var formEvents = form.retrieve($delegationKey + 'originalFn', []), + formListeners = form.retrieve($delegationKey + 'listeners', []), + self = this; + + forms.include(form); + this.store($delegationKey + 'forms', forms); + + if (!formEvents.contains(fn)){ + var formListener = function(event){ + bubbleUp.call(self, split, event, fn); + }; + form.addEvent(eventName, formListener); + + formEvents.push(fn); + formListeners.push(formListener); + + form.store($delegationKey + eventName + 'originalFn', formEvents) + .store($delegationKey + eventName + 'listeners', formListeners); + } + } + }; +}; + +var inputObserver = function(eventName){ + return { + base: 'focusin', + listener: function(split, fn, args){ + var events = {blur: function(){ + this.removeEvents(events); + }}, self = this; + events[eventName] = function(event){ + bubbleUp.call(self, split, event, fn); + }; + args[0].target.addEvents(events); + } + }; +}; + +var eventOptions = { + mouseenter: { + base: 'mouseover' + }, + mouseleave: { + base: 'mouseout' + }, + focus: { + base: 'focus' + (eventListenerSupport ? '' : 'in'), + args: [true] + }, + blur: { + base: eventListenerSupport ? 'blur' : 'focusout', + args: [true] + } +}; + +if (!eventListenerSupport) Object.append(eventOptions, { + submit: formObserver('submit'), + reset: formObserver('reset'), + change: inputObserver('change'), + select: inputObserver('select') +}); + +Event.definePseudo('relay', { + listener: function(split, fn, args){ + bubbleUp.call(this, split, args[0], fn); + }, + options: eventOptions +}); + +})(); + + +/* +--- + +script: Element.Measure.js + +name: Element.Measure + +description: Extends the Element native object to include methods useful in measuring dimensions. + +credits: "Element.measure / .expose methods by Daniel Steigerwald License: MIT-style license. Copyright: Copyright (c) 2008 Daniel Steigerwald, daniel.steigerwald.cz" + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element.Style + - Core/Element.Dimensions + - /MooTools.More + +provides: [Element.Measure] + +... +*/ + +(function(){ + +var getStylesList = function(styles, planes){ + var list = []; + Object.each(planes, function(directions){ + Object.each(directions, function(edge){ + styles.each(function(style){ + list.push(style + '-' + edge + (style == 'border' ? '-width' : '')); + }); + }); + }); + return list; +}; + +var calculateEdgeSize = function(edge, styles){ + var total = 0; + Object.each(styles, function(value, style){ + if (style.test(edge)) total = total + value.toInt(); + }); + return total; +}; + +var isVisible = function(el){ + return !!(!el || el.offsetHeight || el.offsetWidth); +}; + + +Element.implement({ + + measure: function(fn){ + if (isVisible(this)) return fn.call(this); + var parent = this.getParent(), + toMeasure = []; + while (!isVisible(parent) && parent != document.body){ + toMeasure.push(parent.expose()); + parent = parent.getParent(); + } + var restore = this.expose(), + result = fn.call(this); + restore(); + toMeasure.each(function(restore){ + restore(); + }); + return result; + }, + + expose: function(){ + if (this.getStyle('display') != 'none') return function(){}; + var before = this.style.cssText; + this.setStyles({ + display: 'block', + position: 'absolute', + visibility: 'hidden' + }); + return function(){ + this.style.cssText = before; + }.bind(this); + }, + + getDimensions: function(options){ + options = Object.merge({computeSize: false}, options); + var dim = {x: 0, y: 0}; + + var getSize = function(el, options){ + return (options.computeSize) ? el.getComputedSize(options) : el.getSize(); + }; + + var parent = this.getParent('body'); + + if (parent && this.getStyle('display') == 'none'){ + dim = this.measure(function(){ + return getSize(this, options); + }); + } else if (parent){ + try { //safari sometimes crashes here, so catch it + dim = getSize(this, options); + }catch(e){} + } + + return Object.append(dim, (dim.x || dim.x === 0) ? { + width: dim.x, + height: dim.y + } : { + x: dim.width, + y: dim.height + } + ); + }, + + getComputedSize: function(options){ + //<1.2compat> + //legacy support for my stupid spelling error + if (options && options.plains) options.planes = options.plains; + // + + options = Object.merge({ + styles: ['padding','border'], + planes: { + height: ['top','bottom'], + width: ['left','right'] + }, + mode: 'both' + }, options); + + var styles = {}, + size = {width: 0, height: 0}, + dimensions; + + if (options.mode == 'vertical'){ + delete size.width; + delete options.planes.width; + } else if (options.mode == 'horizontal'){ + delete size.height; + delete options.planes.height; + } + + getStylesList(options.styles, options.planes).each(function(style){ + styles[style] = this.getStyle(style).toInt(); + }, this); + + Object.each(options.planes, function(edges, plane){ + + var capitalized = plane.capitalize(), + style = this.getStyle(plane); + + if (style == 'auto' && !dimensions) dimensions = this.getDimensions(); + + style = styles[plane] = (style == 'auto') ? dimensions[plane] : style.toInt(); + size['total' + capitalized] = style; + + edges.each(function(edge){ + var edgesize = calculateEdgeSize(edge, styles); + size['computed' + edge.capitalize()] = edgesize; + size['total' + capitalized] += edgesize; + }); + + }, this); + + return Object.append(size, styles); + } + +}); + +})(); + + +/* +--- + +script: Element.Pin.js + +name: Element.Pin + +description: Extends the Element native object to include the pin method useful for fixed positioning for elements. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element.Event + - Core/Element.Dimensions + - Core/Element.Style + - /MooTools.More + +provides: [Element.Pin] + +... +*/ + +(function(){ + var supportsPositionFixed = false, + supportTested = false; + + var testPositionFixed = function(){ + var test = new Element('div').setStyles({ + position: 'fixed', + top: 0, + right: 0 + }).inject(document.body); + supportsPositionFixed = (test.offsetTop === 0); + test.dispose(); + supportTested = true; + }; + + Element.implement({ + + pin: function(enable, forceScroll){ + if (!supportTested) testPositionFixed(); + if (this.getStyle('display') == 'none') return this; + + var pinnedPosition, + scroll = window.getScroll(), + parent, + scrollFixer; + + if (enable !== false){ + pinnedPosition = this.getPosition(supportsPositionFixed ? document.body : this.getOffsetParent()); + if (!this.retrieve('pin:_pinned')){ + var currentPosition = { + top: pinnedPosition.y - scroll.y, + left: pinnedPosition.x - scroll.x + }; + + if (supportsPositionFixed && !forceScroll){ + this.setStyle('position', 'fixed').setStyles(currentPosition); + } else { + + parent = this.getOffsetParent(); + var position = this.getPosition(parent), + styles = this.getStyles('left', 'top'); + + if (parent && styles.left == 'auto' || styles.top == 'auto') this.setPosition(position); + if (this.getStyle('position') == 'static') this.setStyle('position', 'absolute'); + + position = { + x: styles.left.toInt() - scroll.x, + y: styles.top.toInt() - scroll.y + }; + + scrollFixer = function(){ + if (!this.retrieve('pin:_pinned')) return; + var scroll = window.getScroll(); + this.setStyles({ + left: position.x + scroll.x, + top: position.y + scroll.y + }); + }.bind(this); + + this.store('pin:_scrollFixer', scrollFixer); + window.addEvent('scroll', scrollFixer); + } + this.store('pin:_pinned', true); + } + + } else { + if (!this.retrieve('pin:_pinned')) return this; + + parent = this.getParent(); + var offsetParent = (parent.getComputedStyle('position') != 'static' ? parent : parent.getOffsetParent()); + + pinnedPosition = this.getPosition(offsetParent); + + this.store('pin:_pinned', false); + scrollFixer = this.retrieve('pin:_scrollFixer'); + if (!scrollFixer){ + this.setStyles({ + position: 'absolute', + top: pinnedPosition.y + scroll.y, + left: pinnedPosition.x + scroll.x + }); + } else { + this.store('pin:_scrollFixer', null); + window.removeEvent('scroll', scrollFixer); + } + this.removeClass('isPinned'); + } + return this; + }, + + unpin: function(){ + return this.pin(false); + }, + + togglePin: function(){ + return this.pin(!this.retrieve('pin:_pinned')); + } + + }); + +//<1.2compat> +Element.alias('togglepin', 'togglePin'); +// + +})(); + + +/* +--- + +script: Element.Position.js + +name: Element.Position + +description: Extends the Element native object to include methods useful positioning elements relative to others. + +license: MIT-style license + +authors: + - Aaron Newton + - Jacob Thornton + +requires: + - Core/Options + - Core/Element.Dimensions + - Element.Measure + +provides: [Element.Position] + +... +*/ + +(function(original){ + +var local = Element.Position = { + + options: {/* + edge: false, + returnPos: false, + minimum: {x: 0, y: 0}, + maximum: {x: 0, y: 0}, + relFixedPosition: false, + ignoreMargins: false, + ignoreScroll: false, + allowNegative: false,*/ + relativeTo: document.body, + position: { + x: 'center', //left, center, right + y: 'center' //top, center, bottom + }, + offset: {x: 0, y: 0} + }, + + getOptions: function(element, options){ + options = Object.merge({}, local.options, options); + local.setPositionOption(options); + local.setEdgeOption(options); + local.setOffsetOption(element, options); + local.setDimensionsOption(element, options); + return options; + }, + + setPositionOption: function(options){ + options.position = local.getCoordinateFromValue(options.position); + }, + + setEdgeOption: function(options){ + var edgeOption = local.getCoordinateFromValue(options.edge); + options.edge = edgeOption ? edgeOption : + (options.position.x == 'center' && options.position.y == 'center') ? {x: 'center', y: 'center'} : + {x: 'left', y: 'top'}; + }, + + setOffsetOption: function(element, options){ + var parentOffset = {x: 0, y: 0}, + offsetParent = element.measure(function(){ + return document.id(this.getOffsetParent()); + }), + parentScroll = offsetParent.getScroll(); + + if (!offsetParent || offsetParent == element.getDocument().body) return; + parentOffset = offsetParent.measure(function(){ + var position = this.getPosition(); + if (this.getStyle('position') == 'fixed'){ + var scroll = window.getScroll(); + position.x += scroll.x; + position.y += scroll.y; + } + return position; + }); + + options.offset = { + parentPositioned: offsetParent != document.id(options.relativeTo), + x: options.offset.x - parentOffset.x + parentScroll.x, + y: options.offset.y - parentOffset.y + parentScroll.y + }; + }, + + setDimensionsOption: function(element, options){ + options.dimensions = element.getDimensions({ + computeSize: true, + styles: ['padding', 'border', 'margin'] + }); + }, + + getPosition: function(element, options){ + var position = {}; + options = local.getOptions(element, options); + var relativeTo = document.id(options.relativeTo) || document.body; + + local.setPositionCoordinates(options, position, relativeTo); + if (options.edge) local.toEdge(position, options); + + var offset = options.offset; + position.left = ((position.x >= 0 || offset.parentPositioned || options.allowNegative) ? position.x : 0).toInt(); + position.top = ((position.y >= 0 || offset.parentPositioned || options.allowNegative) ? position.y : 0).toInt(); + + local.toMinMax(position, options); + + if (options.relFixedPosition || relativeTo.getStyle('position') == 'fixed') local.toRelFixedPosition(relativeTo, position); + if (options.ignoreScroll) local.toIgnoreScroll(relativeTo, position); + if (options.ignoreMargins) local.toIgnoreMargins(position, options); + + position.left = Math.ceil(position.left); + position.top = Math.ceil(position.top); + delete position.x; + delete position.y; + + return position; + }, + + setPositionCoordinates: function(options, position, relativeTo){ + var offsetY = options.offset.y, + offsetX = options.offset.x, + calc = (relativeTo == document.body) ? window.getScroll() : relativeTo.getPosition(), + top = calc.y, + left = calc.x, + winSize = window.getSize(); + + switch(options.position.x){ + case 'left': position.x = left + offsetX; break; + case 'right': position.x = left + offsetX + relativeTo.offsetWidth; break; + default: position.x = left + ((relativeTo == document.body ? winSize.x : relativeTo.offsetWidth) / 2) + offsetX; break; + } + + switch(options.position.y){ + case 'top': position.y = top + offsetY; break; + case 'bottom': position.y = top + offsetY + relativeTo.offsetHeight; break; + default: position.y = top + ((relativeTo == document.body ? winSize.y : relativeTo.offsetHeight) / 2) + offsetY; break; + } + }, + + toMinMax: function(position, options){ + var xy = {left: 'x', top: 'y'}, value; + ['minimum', 'maximum'].each(function(minmax){ + ['left', 'top'].each(function(lr){ + value = options[minmax] ? options[minmax][xy[lr]] : null; + if (value != null && ((minmax == 'minimum') ? position[lr] < value : position[lr] > value)) position[lr] = value; + }); + }); + }, + + toRelFixedPosition: function(relativeTo, position){ + var winScroll = window.getScroll(); + position.top += winScroll.y; + position.left += winScroll.x; + }, + + toIgnoreScroll: function(relativeTo, position){ + var relScroll = relativeTo.getScroll(); + position.top -= relScroll.y; + position.left -= relScroll.x; + }, + + toIgnoreMargins: function(position, options){ + position.left += options.edge.x == 'right' + ? options.dimensions['margin-right'] + : (options.edge.x != 'center' + ? -options.dimensions['margin-left'] + : -options.dimensions['margin-left'] + ((options.dimensions['margin-right'] + options.dimensions['margin-left']) / 2)); + + position.top += options.edge.y == 'bottom' + ? options.dimensions['margin-bottom'] + : (options.edge.y != 'center' + ? -options.dimensions['margin-top'] + : -options.dimensions['margin-top'] + ((options.dimensions['margin-bottom'] + options.dimensions['margin-top']) / 2)); + }, + + toEdge: function(position, options){ + var edgeOffset = {}, + dimensions = options.dimensions, + edge = options.edge; + + switch(edge.x){ + case 'left': edgeOffset.x = 0; break; + case 'right': edgeOffset.x = -dimensions.x - dimensions.computedRight - dimensions.computedLeft; break; + // center + default: edgeOffset.x = -(Math.round(dimensions.totalWidth / 2)); break; + } + + switch(edge.y){ + case 'top': edgeOffset.y = 0; break; + case 'bottom': edgeOffset.y = -dimensions.y - dimensions.computedTop - dimensions.computedBottom; break; + // center + default: edgeOffset.y = -(Math.round(dimensions.totalHeight / 2)); break; + } + + position.x += edgeOffset.x; + position.y += edgeOffset.y; + }, + + getCoordinateFromValue: function(option){ + if (typeOf(option) != 'string') return option; + option = option.toLowerCase(); + + return { + x: option.test('left') ? 'left' + : (option.test('right') ? 'right' : 'center'), + y: option.test(/upper|top/) ? 'top' + : (option.test('bottom') ? 'bottom' : 'center') + }; + } + +}; + +Element.implement({ + + position: function(options){ + if (options && (options.x != null || options.y != null)) { + return (original ? original.apply(this, arguments) : this); + } + var position = this.setStyle('position', 'absolute').calculatePosition(options); + return (options && options.returnPos) ? position : this.setStyles(position); + }, + + calculatePosition: function(options){ + return local.getPosition(this, options); + } + +}); + +})(Element.prototype.position); + + +/* +--- + +script: Element.Shortcuts.js + +name: Element.Shortcuts + +description: Extends the Element native object to include some shortcut methods. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element.Style + - /MooTools.More + +provides: [Element.Shortcuts] + +... +*/ + +Element.implement({ + + isDisplayed: function(){ + return this.getStyle('display') != 'none'; + }, + + isVisible: function(){ + var w = this.offsetWidth, + h = this.offsetHeight; + return (w == 0 && h == 0) ? false : (w > 0 && h > 0) ? true : this.style.display != 'none'; + }, + + toggle: function(){ + return this[this.isDisplayed() ? 'hide' : 'show'](); + }, + + hide: function(){ + var d; + try { + //IE fails here if the element is not in the dom + d = this.getStyle('display'); + } catch(e){} + if (d == 'none') return this; + return this.store('element:_originalDisplay', d || '').setStyle('display', 'none'); + }, + + show: function(display){ + if (!display && this.isDisplayed()) return this; + display = display || this.retrieve('element:_originalDisplay') || 'block'; + return this.setStyle('display', (display == 'none') ? 'block' : display); + }, + + swapClass: function(remove, add){ + return this.removeClass(remove).addClass(add); + } + +}); + +Document.implement({ + + clearSelection: function(){ + if (window.getSelection){ + var selection = window.getSelection(); + if (selection && selection.removeAllRanges) selection.removeAllRanges(); + } else if (document.selection && document.selection.empty){ + try { + //IE fails here if selected element is not in dom + document.selection.empty(); + } catch(e){} + } + } + +}); + + +/* +--- + +script: IframeShim.js + +name: IframeShim + +description: Defines IframeShim, a class for obscuring select lists and flash objects in IE. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element.Event + - Core/Element.Style + - Core/Options + - Core/Events + - /Element.Position + - /Class.Occlude + +provides: [IframeShim] + +... +*/ + +var IframeShim = new Class({ + + Implements: [Options, Events, Class.Occlude], + + options: { + className: 'iframeShim', + src: 'javascript:false;document.write("");', + display: false, + zIndex: null, + margin: 0, + offset: {x: 0, y: 0}, + browsers: (Browser.ie6 || (Browser.firefox && Browser.version < 3 && Browser.Platform.mac)) + }, + + property: 'IframeShim', + + initialize: function(element, options){ + this.element = document.id(element); + if (this.occlude()) return this.occluded; + this.setOptions(options); + this.makeShim(); + return this; + }, + + makeShim: function(){ + if (this.options.browsers){ + var zIndex = this.element.getStyle('zIndex').toInt(); + + if (!zIndex){ + zIndex = 1; + var pos = this.element.getStyle('position'); + if (pos == 'static' || !pos) this.element.setStyle('position', 'relative'); + this.element.setStyle('zIndex', zIndex); + } + zIndex = ((this.options.zIndex != null || this.options.zIndex === 0) && zIndex > this.options.zIndex) ? this.options.zIndex : zIndex - 1; + if (zIndex < 0) zIndex = 1; + this.shim = new Element('iframe', { + src: this.options.src, + scrolling: 'no', + frameborder: 0, + styles: { + zIndex: zIndex, + position: 'absolute', + border: 'none', + filter: 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)' + }, + 'class': this.options.className + }).store('IframeShim', this); + var inject = (function(){ + this.shim.inject(this.element, 'after'); + this[this.options.display ? 'show' : 'hide'](); + this.fireEvent('inject'); + }).bind(this); + if (!IframeShim.ready) window.addEvent('load', inject); + else inject(); + } else { + this.position = this.hide = this.show = this.dispose = Function.from(this); + } + }, + + position: function(){ + if (!IframeShim.ready || !this.shim) return this; + var size = this.element.measure(function(){ + return this.getSize(); + }); + if (this.options.margin != undefined){ + size.x = size.x - (this.options.margin * 2); + size.y = size.y - (this.options.margin * 2); + this.options.offset.x += this.options.margin; + this.options.offset.y += this.options.margin; + } + this.shim.set({width: size.x, height: size.y}).position({ + relativeTo: this.element, + offset: this.options.offset + }); + return this; + }, + + hide: function(){ + if (this.shim) this.shim.setStyle('display', 'none'); + return this; + }, + + show: function(){ + if (this.shim) this.shim.setStyle('display', 'block'); + return this.position(); + }, + + dispose: function(){ + if (this.shim) this.shim.dispose(); + return this; + }, + + destroy: function(){ + if (this.shim) this.shim.destroy(); + return this; + } + +}); + +window.addEvent('load', function(){ + IframeShim.ready = true; +}); + + +/* +--- + +script: Mask.js + +name: Mask + +description: Creates a mask element to cover another. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Options + - Core/Events + - Core/Element.Event + - /Class.Binds + - /Element.Position + - /IframeShim + +provides: [Mask] + +... +*/ + +var Mask = new Class({ + + Implements: [Options, Events], + + Binds: ['position'], + + options: {/* + onShow: function(){}, + onHide: function(){}, + onDestroy: function(){}, + onClick: function(event){}, + inject: { + where: 'after', + target: null, + }, + hideOnClick: false, + id: null, + destroyOnHide: false,*/ + style: {}, + 'class': 'mask', + maskMargins: false, + useIframeShim: true, + iframeShimOptions: {} + }, + + initialize: function(target, options){ + this.target = document.id(target) || document.id(document.body); + this.target.store('mask', this); + this.setOptions(options); + this.render(); + this.inject(); + }, + + render: function(){ + this.element = new Element('div', { + 'class': this.options['class'], + id: this.options.id || 'mask-' + String.uniqueID(), + styles: Object.merge({}, this.options.style, { + display: 'none' + }), + events: { + click: function(event){ + this.fireEvent('click', event); + if (this.options.hideOnClick) this.hide(); + }.bind(this) + } + }); + + this.hidden = true; + }, + + toElement: function(){ + return this.element; + }, + + inject: function(target, where){ + where = where || (this.options.inject ? this.options.inject.where : '') || this.target == document.body ? 'inside' : 'after'; + target = target || (this.options.inject && this.options.inject.target) || this.target; + + this.element.inject(target, where); + + if (this.options.useIframeShim){ + this.shim = new IframeShim(this.element, this.options.iframeShimOptions); + + this.addEvents({ + show: this.shim.show.bind(this.shim), + hide: this.shim.hide.bind(this.shim), + destroy: this.shim.destroy.bind(this.shim) + }); + } + }, + + position: function(){ + this.resize(this.options.width, this.options.height); + + this.element.position({ + relativeTo: this.target, + position: 'topLeft', + ignoreMargins: !this.options.maskMargins, + ignoreScroll: this.target == document.body + }); + + return this; + }, + + resize: function(x, y){ + var opt = { + styles: ['padding', 'border'] + }; + if (this.options.maskMargins) opt.styles.push('margin'); + + var dim = this.target.getComputedSize(opt); + if (this.target == document.body){ + this.element.setStyles({width: 0, height: 0}); + var win = window.getScrollSize(); + if (dim.totalHeight < win.y) dim.totalHeight = win.y; + if (dim.totalWidth < win.x) dim.totalWidth = win.x; + } + this.element.setStyles({ + width: Array.pick([x, dim.totalWidth, dim.x]), + height: Array.pick([y, dim.totalHeight, dim.y]) + }); + + return this; + }, + + show: function(){ + if (!this.hidden) return this; + + window.addEvent('resize', this.position); + this.position(); + this.showMask.apply(this, arguments); + + return this; + }, + + showMask: function(){ + this.element.setStyle('display', 'block'); + this.hidden = false; + this.fireEvent('show'); + }, + + hide: function(){ + if (this.hidden) return this; + + window.removeEvent('resize', this.position); + this.hideMask.apply(this, arguments); + if (this.options.destroyOnHide) return this.destroy(); + + return this; + }, + + hideMask: function(){ + this.element.setStyle('display', 'none'); + this.hidden = true; + this.fireEvent('hide'); + }, + + toggle: function(){ + this[this.hidden ? 'show' : 'hide'](); + }, + + destroy: function(){ + this.hide(); + this.element.destroy(); + this.fireEvent('destroy'); + this.target.eliminate('mask'); + } + +}); + +Element.Properties.mask = { + + set: function(options){ + var mask = this.retrieve('mask'); + if (mask) mask.destroy(); + return this.eliminate('mask').store('mask:options', options); + }, + + get: function(){ + var mask = this.retrieve('mask'); + if (!mask){ + mask = new Mask(this, this.retrieve('mask:options')); + this.store('mask', mask); + } + return mask; + } + +}; + +Element.implement({ + + mask: function(options){ + if (options) this.set('mask', options); + this.get('mask').show(); + return this; + }, + + unmask: function(){ + this.get('mask').hide(); + return this; + } + +}); + + +/* +--- + +script: Spinner.js + +name: Spinner + +description: Adds a semi-transparent overlay over a dom element with a spinnin ajax icon. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Fx.Tween + - Core/Request + - /Class.refactor + - /Mask + +provides: [Spinner] + +... +*/ + +var Spinner = new Class({ + + Extends: Mask, + + Implements: Chain, + + options: {/* + message: false,*/ + 'class': 'spinner', + containerPosition: {}, + content: { + 'class': 'spinner-content' + }, + messageContainer: { + 'class': 'spinner-msg' + }, + img: { + 'class': 'spinner-img' + }, + fxOptions: { + link: 'chain' + } + }, + + initialize: function(target, options){ + this.target = document.id(target) || document.id(document.body); + this.target.store('spinner', this); + this.setOptions(options); + this.render(); + this.inject(); + + // Add this to events for when noFx is true; parent methods handle hide/show. + var deactivate = function(){ this.active = false; }.bind(this); + this.addEvents({ + hide: deactivate, + show: deactivate + }); + }, + + render: function(){ + this.parent(); + + this.element.set('id', this.options.id || 'spinner-' + String.uniqueID()); + + this.content = document.id(this.options.content) || new Element('div', this.options.content); + this.content.inject(this.element); + + if (this.options.message){ + this.msg = document.id(this.options.message) || new Element('p', this.options.messageContainer).appendText(this.options.message); + this.msg.inject(this.content); + } + + if (this.options.img){ + this.img = document.id(this.options.img) || new Element('div', this.options.img); + this.img.inject(this.content); + } + + this.element.set('tween', this.options.fxOptions); + }, + + show: function(noFx){ + if (this.active) return this.chain(this.show.bind(this)); + if (!this.hidden){ + this.callChain.delay(20, this); + return this; + } + + this.active = true; + + return this.parent(noFx); + }, + + showMask: function(noFx){ + var pos = function(){ + this.content.position(Object.merge({ + relativeTo: this.element + }, this.options.containerPosition)); + }.bind(this); + + if (noFx){ + this.parent(); + pos(); + } else { + if (!this.options.style.opacity) this.options.style.opacity = this.element.getStyle('opacity').toFloat(); + this.element.setStyles({ + display: 'block', + opacity: 0 + }).tween('opacity', this.options.style.opacity); + pos(); + this.hidden = false; + this.fireEvent('show'); + this.callChain(); + } + }, + + hide: function(noFx){ + if (this.active) return this.chain(this.hide.bind(this)); + if (this.hidden){ + this.callChain.delay(20, this); + return this; + } + this.active = true; + return this.parent(noFx); + }, + + hideMask: function(noFx){ + if (noFx) return this.parent(); + this.element.tween('opacity', 0).get('tween').chain(function(){ + this.element.setStyle('display', 'none'); + this.hidden = true; + this.fireEvent('hide'); + this.callChain(); + }.bind(this)); + }, + + destroy: function(){ + this.content.destroy(); + this.parent(); + this.target.eliminate('spinner'); + } + +}); + +Request = Class.refactor(Request, { + + options: { + useSpinner: false, + spinnerOptions: {}, + spinnerTarget: false + }, + + initialize: function(options){ + this._send = this.send; + this.send = function(options){ + var spinner = this.getSpinner(); + if (spinner) spinner.chain(this._send.pass(options, this)).show(); + else this._send(options); + return this; + }; + this.previous(options); + }, + + getSpinner: function(){ + if (!this.spinner){ + var update = document.id(this.options.spinnerTarget) || document.id(this.options.update); + if (this.options.useSpinner && update){ + update.set('spinner', this.options.spinnerOptions); + var spinner = this.spinner = update.get('spinner'); + ['complete', 'exception', 'cancel'].each(function(event){ + this.addEvent(event, spinner.hide.bind(spinner)); + }, this); + } + } + return this.spinner; + } + +}); + +Element.Properties.spinner = { + + set: function(options){ + var spinner = this.retrieve('spinner'); + if (spinner) spinner.destroy(); + return this.eliminate('spinner').store('spinner:options', options); + }, + + get: function(){ + var spinner = this.retrieve('spinner'); + if (!spinner){ + spinner = new Spinner(this, this.retrieve('spinner:options')); + this.store('spinner', spinner); + } + return spinner; + } + +}; + +Element.implement({ + + spin: function(options){ + if (options) this.set('spinner', options); + this.get('spinner').show(); + return this; + }, + + unspin: function(){ + this.get('spinner').hide(); + return this; + } + +}); + + +/* +--- + +script: Form.Request.js + +name: Form.Request + +description: Handles the basic functionality of submitting a form and updating a dom element with the result. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Request.HTML + - /Class.Binds + - /Class.Occlude + - /Spinner + - /String.QueryString + - /Element.Delegation + +provides: [Form.Request] + +... +*/ + +if (!window.Form) window.Form = {}; + +(function(){ + + Form.Request = new Class({ + + Binds: ['onSubmit', 'onFormValidate'], + + Implements: [Options, Events, Class.Occlude], + + options: {/* + onFailure: function(){}, + onSuccess: function(){}, // aliased to onComplete, + onSend: function(){}*/ + requestOptions: { + evalScripts: true, + useSpinner: true, + emulation: false, + link: 'ignore' + }, + sendButtonClicked: true, + extraData: {}, + resetForm: true + }, + + property: 'form.request', + + initialize: function(form, target, options){ + this.element = document.id(form); + if (this.occlude()) return this.occluded; + this.setOptions(options) + .setTarget(target) + .attach(); + }, + + setTarget: function(target){ + this.target = document.id(target); + if (!this.request){ + this.makeRequest(); + } else { + this.request.setOptions({ + update: this.target + }); + } + return this; + }, + + toElement: function(){ + return this.element; + }, + + makeRequest: function(){ + var self = this; + this.request = new Request.HTML(Object.merge({ + update: this.target, + emulation: false, + spinnerTarget: this.element, + method: this.element.get('method') || 'post' + }, this.options.requestOptions)).addEvents({ + success: function(tree, elements, html, javascript){ + ['complete', 'success'].each(function(evt){ + self.fireEvent(evt, [self.target, tree, elements, html, javascript]); + }); + }, + failure: function(){ + self.fireEvent('complete', arguments).fireEvent('failure', arguments); + }, + exception: function(){ + self.fireEvent('failure', arguments); + } + }); + return this.attachReset(); + }, + + attachReset: function(){ + if (!this.options.resetForm) return this; + this.request.addEvent('success', function(){ + Function.attempt(function(){ + this.element.reset(); + }.bind(this)); + if (window.OverText) OverText.update(); + }.bind(this)); + return this; + }, + + attach: function(attach){ + var method = (attach != false) ? 'addEvent' : 'removeEvent'; + this.element[method]('click:relay(button, input[type=submit])', this.saveClickedButton.bind(this)); + + var fv = this.element.retrieve('validator'); + if (fv) fv[method]('onFormValidate', this.onFormValidate); + else this.element[method]('submit', this.onSubmit); + + return this; + }, + + detach: function(){ + return this.attach(false); + }, + + //public method + enable: function(){ + return this.attach(); + }, + + //public method + disable: function(){ + return this.detach(); + }, + + onFormValidate: function(valid, form, event){ + //if there's no event, then this wasn't a submit event + if (!event) return; + var fv = this.element.retrieve('validator'); + if (valid || (fv && !fv.options.stopOnFailure)){ + event.stop(); + this.send(); + } + }, + + onSubmit: function(event){ + var fv = this.element.retrieve('validator'); + if (fv){ + //form validator was created after Form.Request + this.element.removeEvent('submit', this.onSubmit); + fv.addEvent('onFormValidate', this.onFormValidate); + this.element.validate(); + return; + } + if (event) event.stop(); + this.send(); + }, + + saveClickedButton: function(event, target){ + var targetName = target.get('name'); + if (!targetName || !this.options.sendButtonClicked) return; + this.options.extraData[targetName] = target.get('value') || true; + this.clickedCleaner = function(){ + delete this.options.extraData[targetName]; + this.clickedCleaner = function(){}; + }.bind(this); + }, + + clickedCleaner: function(){}, + + send: function(){ + var str = this.element.toQueryString().trim(), + data = Object.toQueryString(this.options.extraData); + + if (str) str += "&" + data; + else str = data; + + this.fireEvent('send', [this.element, str.parseQueryString()]); + this.request.send({ + data: str, + url: this.options.requestOptions.url || this.element.get('action') + }); + this.clickedCleaner(); + return this; + } + + }); + + Element.implement('formUpdate', function(update, options){ + var fq = this.retrieve('form.request'); + if (!fq) { + fq = new Form.Request(this, update, options); + } else { + if (update) fq.setTarget(update); + if (options) fq.setOptions(options).makeRequest(); + } + fq.send(); + return this; + }); + +})(); + + +/* +--- + +script: Fx.Reveal.js + +name: Fx.Reveal + +description: Defines Fx.Reveal, a class that shows and hides elements with a transition. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Fx.Morph + - /Element.Shortcuts + - /Element.Measure + +provides: [Fx.Reveal] + +... +*/ + +(function(){ + + +var hideTheseOf = function(object){ + var hideThese = object.options.hideInputs; + if (window.OverText){ + var otClasses = [null]; + OverText.each(function(ot){ + otClasses.include('.' + ot.options.labelClass); + }); + if (otClasses) hideThese += otClasses.join(', '); + } + return (hideThese) ? object.element.getElements(hideThese) : null; +}; + + +Fx.Reveal = new Class({ + + Extends: Fx.Morph, + + options: {/* + onShow: function(thisElement){}, + onHide: function(thisElement){}, + onComplete: function(thisElement){}, + heightOverride: null, + widthOverride: null,*/ + link: 'cancel', + styles: ['padding', 'border', 'margin'], + transitionOpacity: !Browser.ie6, + mode: 'vertical', + display: function(){ + return this.element.get('tag') != 'tr' ? 'block' : 'table-row'; + }, + opacity: 1, + hideInputs: Browser.ie ? 'select, input, textarea, object, embed' : null + }, + + dissolve: function(){ + if (!this.hiding && !this.showing){ + if (this.element.getStyle('display') != 'none'){ + this.hiding = true; + this.showing = false; + this.hidden = true; + this.cssText = this.element.style.cssText; + + var startStyles = this.element.getComputedSize({ + styles: this.options.styles, + mode: this.options.mode + }); + if (this.options.transitionOpacity) startStyles.opacity = this.options.opacity; + + var zero = {}; + Object.each(startStyles, function(style, name){ + zero[name] = [style, 0]; + }); + + this.element.setStyles({ + display: Function.from(this.options.display).call(this), + overflow: 'hidden' + }); + + var hideThese = hideTheseOf(this); + if (hideThese) hideThese.setStyle('visibility', 'hidden'); + + this.$chain.unshift(function(){ + if (this.hidden){ + this.hiding = false; + this.element.style.cssText = this.cssText; + this.element.setStyle('display', 'none'); + if (hideThese) hideThese.setStyle('visibility', 'visible'); + } + this.fireEvent('hide', this.element); + this.callChain(); + }.bind(this)); + + this.start(zero); + } else { + this.callChain.delay(10, this); + this.fireEvent('complete', this.element); + this.fireEvent('hide', this.element); + } + } else if (this.options.link == 'chain'){ + this.chain(this.dissolve.bind(this)); + } else if (this.options.link == 'cancel' && !this.hiding){ + this.cancel(); + this.dissolve(); + } + return this; + }, + + reveal: function(){ + if (!this.showing && !this.hiding){ + if (this.element.getStyle('display') == 'none'){ + this.hiding = false; + this.showing = true; + this.hidden = false; + this.cssText = this.element.style.cssText; + + var startStyles; + this.element.measure(function(){ + startStyles = this.element.getComputedSize({ + styles: this.options.styles, + mode: this.options.mode + }); + }.bind(this)); + if (this.options.heightOverride != null) startStyles.height = this.options.heightOverride.toInt(); + if (this.options.widthOverride != null) startStyles.width = this.options.widthOverride.toInt(); + if (this.options.transitionOpacity){ + this.element.setStyle('opacity', 0); + startStyles.opacity = this.options.opacity; + } + + var zero = { + height: 0, + display: Function.from(this.options.display).call(this) + }; + Object.each(startStyles, function(style, name){ + zero[name] = 0; + }); + zero.overflow = 'hidden'; + + this.element.setStyles(zero); + + var hideThese = hideTheseOf(this); + if (hideThese) hideThese.setStyle('visibility', 'hidden'); + + this.$chain.unshift(function(){ + this.element.style.cssText = this.cssText; + this.element.setStyle('display', Function.from(this.options.display).call(this)); + if (!this.hidden) this.showing = false; + if (hideThese) hideThese.setStyle('visibility', 'visible'); + this.callChain(); + this.fireEvent('show', this.element); + }.bind(this)); + + this.start(startStyles); + } else { + this.callChain(); + this.fireEvent('complete', this.element); + this.fireEvent('show', this.element); + } + } else if (this.options.link == 'chain'){ + this.chain(this.reveal.bind(this)); + } else if (this.options.link == 'cancel' && !this.showing){ + this.cancel(); + this.reveal(); + } + return this; + }, + + toggle: function(){ + if (this.element.getStyle('display') == 'none'){ + this.reveal(); + } else { + this.dissolve(); + } + return this; + }, + + cancel: function(){ + this.parent.apply(this, arguments); + if (this.cssText != null) this.element.style.cssText = this.cssText; + this.hiding = false; + this.showing = false; + return this; + } + +}); + +Element.Properties.reveal = { + + set: function(options){ + this.get('reveal').cancel().setOptions(options); + return this; + }, + + get: function(){ + var reveal = this.retrieve('reveal'); + if (!reveal){ + reveal = new Fx.Reveal(this); + this.store('reveal', reveal); + } + return reveal; + } + +}; + +Element.Properties.dissolve = Element.Properties.reveal; + +Element.implement({ + + reveal: function(options){ + this.get('reveal').setOptions(options).reveal(); + return this; + }, + + dissolve: function(options){ + this.get('reveal').setOptions(options).dissolve(); + return this; + }, + + nix: function(options){ + var params = Array.link(arguments, {destroy: Type.isBoolean, options: Type.isObject}); + this.get('reveal').setOptions(options).dissolve().chain(function(){ + this[params.destroy ? 'destroy' : 'dispose'](); + }.bind(this)); + return this; + }, + + wink: function(){ + var params = Array.link(arguments, {duration: Type.isNumber, options: Type.isObject}); + var reveal = this.get('reveal').setOptions(params.options); + reveal.reveal().chain(function(){ + (function(){ + reveal.dissolve(); + }).delay(params.duration || 2000); + }); + } + +}); + +})(); + + +/* +--- + +script: Form.Request.Append.js + +name: Form.Request.Append + +description: Handles the basic functionality of submitting a form and updating a dom element with the result. The result is appended to the DOM element instead of replacing its contents. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - /Form.Request + - /Fx.Reveal + - /Elements.from + +provides: [Form.Request.Append] + +... +*/ + +Form.Request.Append = new Class({ + + Extends: Form.Request, + + options: { + //onBeforeEffect: function(){}, + useReveal: true, + revealOptions: {}, + inject: 'bottom' + }, + + makeRequest: function(){ + this.request = new Request.HTML(Object.merge({ + url: this.element.get('action'), + method: this.element.get('method') || 'post', + spinnerTarget: this.element + }, this.options.requestOptions, { + evalScripts: false + }) + ).addEvents({ + success: function(tree, elements, html, javascript){ + var container; + var kids = Elements.from(html); + if (kids.length == 1){ + container = kids[0]; + } else { + container = new Element('div', { + styles: { + display: 'none' + } + }).adopt(kids); + } + container.inject(this.target, this.options.inject); + if (this.options.requestOptions.evalScripts) Browser.exec(javascript); + this.fireEvent('beforeEffect', container); + var finish = function(){ + this.fireEvent('success', [container, this.target, tree, elements, html, javascript]); + }.bind(this); + if (this.options.useReveal){ + container.set('reveal', this.options.revealOptions).get('reveal').chain(finish); + container.reveal(); + } else { + finish(); + } + }.bind(this), + failure: function(xhr){ + this.fireEvent('failure', xhr); + }.bind(this) + }); + this.attachReset(); + } + +}); + + +/* +--- + +name: Locale.en-US.Form.Validator + +description: Form Validator messages for English. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - /Locale + +provides: [Locale.en-US.Form.Validator] + +... +*/ + +Locale.define('en-US', 'FormValidator', { + + required: 'This field is required.', + minLength: 'Please enter at least {minLength} characters (you entered {length} characters).', + maxLength: 'Please enter no more than {maxLength} characters (you entered {length} characters).', + integer: 'Please enter an integer in this field. Numbers with decimals (e.g. 1.25) are not permitted.', + numeric: 'Please enter only numeric values in this field (i.e. "1" or "1.1" or "-1" or "-1.1").', + digits: 'Please use numbers and punctuation only in this field (for example, a phone number with dashes or dots is permitted).', + alpha: 'Please use only letters (a-z) within this field. No spaces or other characters are allowed.', + alphanum: 'Please use only letters (a-z) or numbers (0-9) in this field. No spaces or other characters are allowed.', + dateSuchAs: 'Please enter a valid date such as {date}', + dateInFormatMDY: 'Please enter a valid date such as MM/DD/YYYY (i.e. "12/31/1999")', + email: 'Please enter a valid email address. For example "fred@domain.com".', + url: 'Please enter a valid URL such as http://www.example.com.', + currencyDollar: 'Please enter a valid $ amount. For example $100.00 .', + oneRequired: 'Please enter something for at least one of these inputs.', + errorPrefix: 'Error: ', + warningPrefix: 'Warning: ', + + // Form.Validator.Extras + noSpace: 'There can be no spaces in this input.', + reqChkByNode: 'No items are selected.', + requiredChk: 'This field is required.', + reqChkByName: 'Please select a {label}.', + match: 'This field needs to match the {matchName} field', + startDate: 'the start date', + endDate: 'the end date', + currendDate: 'the current date', + afterDate: 'The date should be the same or after {label}.', + beforeDate: 'The date should be the same or before {label}.', + startMonth: 'Please select a start month', + sameMonth: 'These two dates must be in the same month - you must change one or the other.', + creditcard: 'The credit card number entered is invalid. Please check the number and try again. {length} digits entered.' + +}); + + +/* +--- + +script: Form.Validator.js + +name: Form.Validator + +description: A css-class based form validation system. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Options + - Core/Events + - Core/Slick.Finder + - Core/Element.Event + - Core/Element.Style + - Core/JSON + - /Locale + - /Class.Binds + - /Date + - /Element.Forms + - /Locale.en-US.Form.Validator + - /Element.Shortcuts + +provides: [Form.Validator, InputValidator, FormValidator.BaseValidators] + +... +*/ +if (!window.Form) window.Form = {}; + +var InputValidator = this.InputValidator = new Class({ + + Implements: [Options], + + options: { + errorMsg: 'Validation failed.', + test: Function.from(true) + }, + + initialize: function(className, options){ + this.setOptions(options); + this.className = className; + }, + + test: function(field, props){ + field = document.id(field); + return (field) ? this.options.test(field, props || this.getProps(field)) : false; + }, + + getError: function(field, props){ + field = document.id(field); + var err = this.options.errorMsg; + if (typeOf(err) == 'function') err = err(field, props || this.getProps(field)); + return err; + }, + + getProps: function(field){ + field = document.id(field); + return (field) ? field.get('validatorProps') : {}; + } + +}); + +Element.Properties.validators = { + + get: function(){ + return (this.get('data-validators') || this.className).clean().split(' '); + } + +}; + +Element.Properties.validatorProps = { + + set: function(props){ + return this.eliminate('$moo:validatorProps').store('$moo:validatorProps', props); + }, + + get: function(props){ + if (props) this.set(props); + if (this.retrieve('$moo:validatorProps')) return this.retrieve('$moo:validatorProps'); + if (this.getProperty('data-validator-properties') || this.getProperty('validatorProps')){ + try { + this.store('$moo:validatorProps', JSON.decode(this.getProperty('validatorProps') || this.getProperty('data-validator-properties'))); + }catch(e){ + return {}; + } + } else { + var vals = this.get('validators').filter(function(cls){ + return cls.test(':'); + }); + if (!vals.length){ + this.store('$moo:validatorProps', {}); + } else { + props = {}; + vals.each(function(cls){ + var split = cls.split(':'); + if (split[1]){ + try { + props[split[0]] = JSON.decode(split[1]); + } catch(e){} + } + }); + this.store('$moo:validatorProps', props); + } + } + return this.retrieve('$moo:validatorProps'); + } + +}; + +Form.Validator = new Class({ + + Implements: [Options, Events], + + Binds: ['onSubmit'], + + options: {/* + onFormValidate: function(isValid, form, event){}, + onElementValidate: function(isValid, field, className, warn){}, + onElementPass: function(field){}, + onElementFail: function(field, validatorsFailed){}, */ + fieldSelectors: 'input, select, textarea', + ignoreHidden: true, + ignoreDisabled: true, + useTitles: false, + evaluateOnSubmit: true, + evaluateFieldsOnBlur: true, + evaluateFieldsOnChange: true, + serial: true, + stopOnFailure: true, + warningPrefix: function(){ + return Form.Validator.getMsg('warningPrefix') || 'Warning: '; + }, + errorPrefix: function(){ + return Form.Validator.getMsg('errorPrefix') || 'Error: '; + } + }, + + initialize: function(form, options){ + this.setOptions(options); + this.element = document.id(form); + this.element.store('validator', this); + this.warningPrefix = Function.from(this.options.warningPrefix)(); + this.errorPrefix = Function.from(this.options.errorPrefix)(); + if (this.options.evaluateOnSubmit) this.element.addEvent('submit', this.onSubmit); + if (this.options.evaluateFieldsOnBlur || this.options.evaluateFieldsOnChange) this.watchFields(this.getFields()); + }, + + toElement: function(){ + return this.element; + }, + + getFields: function(){ + return (this.fields = this.element.getElements(this.options.fieldSelectors)); + }, + + watchFields: function(fields){ + fields.each(function(el){ + if (this.options.evaluateFieldsOnBlur) + el.addEvent('blur', this.validationMonitor.pass([el, false], this)); + if (this.options.evaluateFieldsOnChange) + el.addEvent('change', this.validationMonitor.pass([el, true], this)); + }, this); + }, + + validationMonitor: function(){ + clearTimeout(this.timer); + this.timer = this.validateField.delay(50, this, arguments); + }, + + onSubmit: function(event){ + if (this.validate(event)) this.reset(); + }, + + reset: function(){ + this.getFields().each(this.resetField, this); + return this; + }, + + validate: function(event){ + var result = this.getFields().map(function(field){ + return this.validateField(field, true); + }, this).every(function(v){ + return v; + }); + this.fireEvent('formValidate', [result, this.element, event]); + if (this.options.stopOnFailure && !result && event) event.preventDefault(); + return result; + }, + + validateField: function(field, force){ + if (this.paused) return true; + field = document.id(field); + var passed = !field.hasClass('validation-failed'); + var failed, warned; + if (this.options.serial && !force){ + failed = this.element.getElement('.validation-failed'); + warned = this.element.getElement('.warning'); + } + if (field && (!failed || force || field.hasClass('validation-failed') || (failed && !this.options.serial))){ + var validationTypes = field.get('validators'); + var validators = validationTypes.some(function(cn){ + return this.getValidator(cn); + }, this); + var validatorsFailed = []; + validationTypes.each(function(className){ + if (className && !this.test(className, field)) validatorsFailed.include(className); + }, this); + passed = validatorsFailed.length === 0; + if (validators && !this.hasValidator(field, 'warnOnly')){ + if (passed){ + field.addClass('validation-passed').removeClass('validation-failed'); + this.fireEvent('elementPass', [field]); + } else { + field.addClass('validation-failed').removeClass('validation-passed'); + this.fireEvent('elementFail', [field, validatorsFailed]); + } + } + if (!warned){ + var warnings = validationTypes.some(function(cn){ + if (cn.test('^warn')) + return this.getValidator(cn.replace(/^warn-/,'')); + else return null; + }, this); + field.removeClass('warning'); + var warnResult = validationTypes.map(function(cn){ + if (cn.test('^warn')) + return this.test(cn.replace(/^warn-/,''), field, true); + else return null; + }, this); + } + } + return passed; + }, + + test: function(className, field, warn){ + field = document.id(field); + if ((this.options.ignoreHidden && !field.isVisible()) || (this.options.ignoreDisabled && field.get('disabled'))) return true; + var validator = this.getValidator(className); + if (warn != null) warn = false; + if (this.hasValidator(field, 'warnOnly')) warn = true; + var isValid = this.hasValidator(field, 'ignoreValidation') || (validator ? validator.test(field) : true); + if (validator && field.isVisible()) this.fireEvent('elementValidate', [isValid, field, className, warn]); + if (warn) return true; + return isValid; + }, + + hasValidator: function(field, value){ + return field.get('validators').contains(value); + }, + + resetField: function(field){ + field = document.id(field); + if (field){ + field.get('validators').each(function(className){ + if (className.test('^warn-')) className = className.replace(/^warn-/, ''); + field.removeClass('validation-failed'); + field.removeClass('warning'); + field.removeClass('validation-passed'); + }, this); + } + return this; + }, + + stop: function(){ + this.paused = true; + return this; + }, + + start: function(){ + this.paused = false; + return this; + }, + + ignoreField: function(field, warn){ + field = document.id(field); + if (field){ + this.enforceField(field); + if (warn) field.addClass('warnOnly'); + else field.addClass('ignoreValidation'); + } + return this; + }, + + enforceField: function(field){ + field = document.id(field); + if (field) field.removeClass('warnOnly').removeClass('ignoreValidation'); + return this; + } + +}); + +Form.Validator.getMsg = function(key){ + return Locale.get('FormValidator.' + key); +}; + +Form.Validator.adders = { + + validators:{}, + + add : function(className, options){ + this.validators[className] = new InputValidator(className, options); + //if this is a class (this method is used by instances of Form.Validator and the Form.Validator namespace) + //extend these validators into it + //this allows validators to be global and/or per instance + if (!this.initialize){ + this.implement({ + validators: this.validators + }); + } + }, + + addAllThese : function(validators){ + Array.from(validators).each(function(validator){ + this.add(validator[0], validator[1]); + }, this); + }, + + getValidator: function(className){ + return this.validators[className.split(':')[0]]; + } + +}; + +Object.append(Form.Validator, Form.Validator.adders); + +Form.Validator.implement(Form.Validator.adders); + +Form.Validator.add('IsEmpty', { + + errorMsg: false, + test: function(element){ + if (element.type == 'select-one' || element.type == 'select') + return !(element.selectedIndex >= 0 && element.options[element.selectedIndex].value != ''); + else + return ((element.get('value') == null) || (element.get('value').length == 0)); + } + +}); + +Form.Validator.addAllThese([ + + ['required', { + errorMsg: function(){ + return Form.Validator.getMsg('required'); + }, + test: function(element){ + return !Form.Validator.getValidator('IsEmpty').test(element); + } + }], + + ['minLength', { + errorMsg: function(element, props){ + if (typeOf(props.minLength) != 'null') + return Form.Validator.getMsg('minLength').substitute({minLength:props.minLength,length:element.get('value').length }); + else return ''; + }, + test: function(element, props){ + if (typeOf(props.minLength) != 'null') return (element.get('value').length >= (props.minLength || 0)); + else return true; + } + }], + + ['maxLength', { + errorMsg: function(element, props){ + //props is {maxLength:10} + if (typeOf(props.maxLength) != 'null') + return Form.Validator.getMsg('maxLength').substitute({maxLength:props.maxLength,length:element.get('value').length }); + else return ''; + }, + test: function(element, props){ + return element.get('value').length <= (props.maxLength || 10000); + } + }], + + ['validate-integer', { + errorMsg: Form.Validator.getMsg.pass('integer'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^(-?[1-9]\d*|0)$/).test(element.get('value')); + } + }], + + ['validate-numeric', { + errorMsg: Form.Validator.getMsg.pass('numeric'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || + (/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(element.get('value')); + } + }], + + ['validate-digits', { + errorMsg: Form.Validator.getMsg.pass('digits'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^[\d() .:\-\+#]+$/.test(element.get('value'))); + } + }], + + ['validate-alpha', { + errorMsg: Form.Validator.getMsg.pass('alpha'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^[a-zA-Z]+$/).test(element.get('value')); + } + }], + + ['validate-alphanum', { + errorMsg: Form.Validator.getMsg.pass('alphanum'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || !(/\W/).test(element.get('value')); + } + }], + + ['validate-date', { + errorMsg: function(element, props){ + if (Date.parse){ + var format = props.dateFormat || '%x'; + return Form.Validator.getMsg('dateSuchAs').substitute({date: new Date().format(format)}); + } else { + return Form.Validator.getMsg('dateInFormatMDY'); + } + }, + test: function(element, props){ + if (Form.Validator.getValidator('IsEmpty').test(element)) return true; + var dateLocale = Locale.getCurrent().sets.Date, + dateNouns = new RegExp([dateLocale.days, dateLocale.days_abbr, dateLocale.months, dateLocale.months_abbr].flatten().join('|'), 'i'), + value = element.get('value'), + wordsInValue = value.match(/[a-z]+/gi); + + if (wordsInValue && !wordsInValue.every(dateNouns.exec, dateNouns)) return false; + + var date = Date.parse(value), + format = props.dateFormat || '%x', + formatted = date.format(format); + + if (formatted != 'invalid date') element.set('value', formatted); + return date.isValid(); + } + }], + + ['validate-email', { + errorMsg: Form.Validator.getMsg.pass('email'), + test: function(element){ + /* + var chars = "[a-z0-9!#$%&'*+/=?^_`{|}~-]", + local = '(?:' + chars + '\\.?){0,63}' + chars, + + label = '[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?', + hostname = '(?:' + label + '\\.)*' + label; + + octet = '(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)', + ipv4 = '\\[(?:' + octet + '\\.){3}' + octet + '\\]', + + domain = '(?:' + hostname + '|' + ipv4 + ')'; + + var regex = new RegExp('^' + local + '@' + domain + '$', 'i'); + */ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]\.?){0,63}[a-z0-9!#$%&'*+\/=?^_`{|}~-]@(?:(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\])$/i).test(element.get('value')); + } + }], + + ['validate-url', { + errorMsg: Form.Validator.getMsg.pass('url'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(element.get('value')); + } + }], + + ['validate-currency-dollar', { + errorMsg: Form.Validator.getMsg.pass('currencyDollar'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(element.get('value')); + } + }], + + ['validate-one-required', { + errorMsg: Form.Validator.getMsg.pass('oneRequired'), + test: function(element, props){ + var p = document.id(props['validate-one-required']) || element.getParent(props['validate-one-required']); + return p.getElements('input').some(function(el){ + if (['checkbox', 'radio'].contains(el.get('type'))) return el.get('checked'); + return el.get('value'); + }); + } + }] + +]); + +Element.Properties.validator = { + + set: function(options){ + this.get('validator').setOptions(options); + }, + + get: function(){ + var validator = this.retrieve('validator'); + if (!validator){ + validator = new Form.Validator(this); + this.store('validator', validator); + } + return validator; + } + +}; + +Element.implement({ + + validate: function(options){ + if (options) this.set('validator', options); + return this.get('validator').validate(); + } + +}); + + +//<1.2compat> +//legacy +var FormValidator = Form.Validator; +// + + + + +/* +--- + +script: Form.Validator.Inline.js + +name: Form.Validator.Inline + +description: Extends Form.Validator to add inline messages. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - /Form.Validator + +provides: [Form.Validator.Inline] + +... +*/ + +Form.Validator.Inline = new Class({ + + Extends: Form.Validator, + + options: { + showError: function(errorElement){ + if (errorElement.reveal) errorElement.reveal(); + else errorElement.setStyle('display', 'block'); + }, + hideError: function(errorElement){ + if (errorElement.dissolve) errorElement.dissolve(); + else errorElement.setStyle('display', 'none'); + }, + scrollToErrorsOnSubmit: true, + scrollToErrorsOnBlur: false, + scrollToErrorsOnChange: false, + scrollFxOptions: { + transition: 'quad:out', + offset: { + y: -20 + } + } + }, + + initialize: function(form, options){ + this.parent(form, options); + this.addEvent('onElementValidate', function(isValid, field, className, warn){ + var validator = this.getValidator(className); + if (!isValid && validator.getError(field)){ + if (warn) field.addClass('warning'); + var advice = this.makeAdvice(className, field, validator.getError(field), warn); + this.insertAdvice(advice, field); + this.showAdvice(className, field); + } else { + this.hideAdvice(className, field); + } + }); + }, + + makeAdvice: function(className, field, error, warn){ + var errorMsg = (warn) ? this.warningPrefix : this.errorPrefix; + errorMsg += (this.options.useTitles) ? field.title || error:error; + var cssClass = (warn) ? 'warning-advice' : 'validation-advice'; + var advice = this.getAdvice(className, field); + if (advice){ + advice = advice.set('html', errorMsg); + } else { + advice = new Element('div', { + html: errorMsg, + styles: { display: 'none' }, + id: 'advice-' + className.split(':')[0] + '-' + this.getFieldId(field) + }).addClass(cssClass); + } + field.store('$moo:advice-' + className, advice); + return advice; + }, + + getFieldId : function(field){ + return field.id ? field.id : field.id = 'input_' + field.name; + }, + + showAdvice: function(className, field){ + var advice = this.getAdvice(className, field); + if ( + advice && + !field.retrieve('$moo:' + this.getPropName(className)) && + ( + advice.getStyle('display') == 'none' || + advice.getStyle('visiblity') == 'hidden' || + advice.getStyle('opacity') == 0 + ) + ){ + field.store('$moo:' + this.getPropName(className), true); + this.options.showError(advice); + this.fireEvent('showAdvice', [field, advice, className]); + } + }, + + hideAdvice: function(className, field){ + var advice = this.getAdvice(className, field); + if (advice && field.retrieve('$moo:' + this.getPropName(className))){ + field.store('$moo:' + this.getPropName(className), false); + this.options.hideError(advice); + this.fireEvent('hideAdvice', [field, advice, className]); + } + }, + + getPropName: function(className){ + return 'advice' + className; + }, + + resetField: function(field){ + field = document.id(field); + if (!field) return this; + this.parent(field); + field.get('validators').each(function(className){ + this.hideAdvice(className, field); + }, this); + return this; + }, + + getAllAdviceMessages: function(field, force){ + var advice = []; + if (field.hasClass('ignoreValidation') && !force) return advice; + var validators = field.get('validators').some(function(cn){ + var warner = cn.test('^warn-') || field.hasClass('warnOnly'); + if (warner) cn = cn.replace(/^warn-/, ''); + var validator = this.getValidator(cn); + if (!validator) return; + advice.push({ + message: validator.getError(field), + warnOnly: warner, + passed: validator.test(), + validator: validator + }); + }, this); + return advice; + }, + + getAdvice: function(className, field){ + return field.retrieve('$moo:advice-' + className); + }, + + insertAdvice: function(advice, field){ + //Check for error position prop + var props = field.get('validatorProps'); + //Build advice + if (!props.msgPos || !document.id(props.msgPos)){ + if (field.type && field.type.toLowerCase() == 'radio') field.getParent().adopt(advice); + else advice.inject(document.id(field), 'after'); + } else { + document.id(props.msgPos).grab(advice); + } + }, + + validateField: function(field, force, scroll){ + var result = this.parent(field, force); + if (((this.options.scrollToErrorsOnSubmit && scroll == null) || scroll) && !result){ + var failed = document.id(this).getElement('.validation-failed'); + var par = document.id(this).getParent(); + while (par != document.body && par.getScrollSize().y == par.getSize().y){ + par = par.getParent(); + } + var fx = par.retrieve('$moo:fvScroller'); + if (!fx && window.Fx && Fx.Scroll){ + fx = new Fx.Scroll(par, this.options.scrollFxOptions); + par.store('$moo:fvScroller', fx); + } + if (failed){ + if (fx) fx.toElement(failed); + else par.scrollTo(par.getScroll().x, failed.getPosition(par).y - 20); + } + } + return result; + }, + + watchFields: function(fields){ + fields.each(function(el){ + if (this.options.evaluateFieldsOnBlur){ + el.addEvent('blur', this.validationMonitor.pass([el, false, this.options.scrollToErrorsOnBlur], this)); + } + if (this.options.evaluateFieldsOnChange){ + el.addEvent('change', this.validationMonitor.pass([el, true, this.options.scrollToErrorsOnChange], this)); + } + }, this); + } + +}); + + +/* +--- + +script: Form.Validator.Extras.js + +name: Form.Validator.Extras + +description: Additional validators for the Form.Validator class. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - /Form.Validator + +provides: [Form.Validator.Extras] + +... +*/ +Form.Validator.addAllThese([ + + ['validate-enforce-oncheck', { + test: function(element, props){ + var fv = element.getParent('form').retrieve('validator'); + if (!fv) return true; + (props.toEnforce || document.id(props.enforceChildrenOf).getElements('input, select, textarea')).map(function(item){ + if (element.checked){ + fv.enforceField(item); + } else { + fv.ignoreField(item); + fv.resetField(item); + } + }); + return true; + } + }], + + ['validate-ignore-oncheck', { + test: function(element, props){ + var fv = element.getParent('form').retrieve('validator'); + if (!fv) return true; + (props.toIgnore || document.id(props.ignoreChildrenOf).getElements('input, select, textarea')).each(function(item){ + if (element.checked){ + fv.ignoreField(item); + fv.resetField(item); + } else { + fv.enforceField(item); + } + }); + return true; + } + }], + + ['validate-nospace', { + errorMsg: function(){ + return Form.Validator.getMsg('noSpace'); + }, + test: function(element, props){ + return !element.get('value').test(/\s/); + } + }], + + ['validate-toggle-oncheck', { + test: function(element, props){ + var fv = element.getParent('form').retrieve('validator'); + if (!fv) return true; + var eleArr = props.toToggle || document.id(props.toToggleChildrenOf).getElements('input, select, textarea'); + if (!element.checked){ + eleArr.each(function(item){ + fv.ignoreField(item); + fv.resetField(item); + }); + } else { + eleArr.each(function(item){ + fv.enforceField(item); + }); + } + return true; + } + }], + + ['validate-reqchk-bynode', { + errorMsg: function(){ + return Form.Validator.getMsg('reqChkByNode'); + }, + test: function(element, props){ + return (document.id(props.nodeId).getElements(props.selector || 'input[type=checkbox], input[type=radio]')).some(function(item){ + return item.checked; + }); + } + }], + + ['validate-required-check', { + errorMsg: function(element, props){ + return props.useTitle ? element.get('title') : Form.Validator.getMsg('requiredChk'); + }, + test: function(element, props){ + return !!element.checked; + } + }], + + ['validate-reqchk-byname', { + errorMsg: function(element, props){ + return Form.Validator.getMsg('reqChkByName').substitute({label: props.label || element.get('type')}); + }, + test: function(element, props){ + var grpName = props.groupName || element.get('name'); + var oneCheckedItem = $$(document.getElementsByName(grpName)).some(function(item, index){ + return item.checked; + }); + var fv = element.getParent('form').retrieve('validator'); + if (oneCheckedItem && fv) fv.resetField(element); + return oneCheckedItem; + } + }], + + ['validate-match', { + errorMsg: function(element, props){ + return Form.Validator.getMsg('match').substitute({matchName: props.matchName || document.id(props.matchInput).get('name')}); + }, + test: function(element, props){ + var eleVal = element.get('value'); + var matchVal = document.id(props.matchInput) && document.id(props.matchInput).get('value'); + return eleVal && matchVal ? eleVal == matchVal : true; + } + }], + + ['validate-after-date', { + errorMsg: function(element, props){ + return Form.Validator.getMsg('afterDate').substitute({ + label: props.afterLabel || (props.afterElement ? Form.Validator.getMsg('startDate') : Form.Validator.getMsg('currentDate')) + }); + }, + test: function(element, props){ + var start = document.id(props.afterElement) ? Date.parse(document.id(props.afterElement).get('value')) : new Date(); + var end = Date.parse(element.get('value')); + return end && start ? end >= start : true; + } + }], + + ['validate-before-date', { + errorMsg: function(element, props){ + return Form.Validator.getMsg('beforeDate').substitute({ + label: props.beforeLabel || (props.beforeElement ? Form.Validator.getMsg('endDate') : Form.Validator.getMsg('currentDate')) + }); + }, + test: function(element, props){ + var start = Date.parse(element.get('value')); + var end = document.id(props.beforeElement) ? Date.parse(document.id(props.beforeElement).get('value')) : new Date(); + return end && start ? end >= start : true; + } + }], + + ['validate-custom-required', { + errorMsg: function(){ + return Form.Validator.getMsg('required'); + }, + test: function(element, props){ + return element.get('value') != props.emptyValue; + } + }], + + ['validate-same-month', { + errorMsg: function(element, props){ + var startMo = document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value'); + var eleVal = element.get('value'); + if (eleVal != '') return Form.Validator.getMsg(startMo ? 'sameMonth' : 'startMonth'); + }, + test: function(element, props){ + var d1 = Date.parse(element.get('value')); + var d2 = Date.parse(document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value')); + return d1 && d2 ? d1.format('%B') == d2.format('%B') : true; + } + }], + + + ['validate-cc-num', { + errorMsg: function(element){ + var ccNum = element.get('value').replace(/[^0-9]/g, ''); + return Form.Validator.getMsg('creditcard').substitute({length: ccNum.length}); + }, + test: function(element){ + // required is a different test + if (Form.Validator.getValidator('IsEmpty').test(element)) return true; + + // Clean number value + var ccNum = element.get('value'); + ccNum = ccNum.replace(/[^0-9]/g, ''); + + var valid_type = false; + + if (ccNum.test(/^4[0-9]{12}([0-9]{3})?$/)) valid_type = 'Visa'; + else if (ccNum.test(/^5[1-5]([0-9]{14})$/)) valid_type = 'Master Card'; + else if (ccNum.test(/^3[47][0-9]{13}$/)) valid_type = 'American Express'; + else if (ccNum.test(/^6011[0-9]{12}$/)) valid_type = 'Discover'; + + if (valid_type){ + var sum = 0; + var cur = 0; + + for (var i=ccNum.length-1; i>=0; --i){ + cur = ccNum.charAt(i).toInt(); + if (cur == 0) continue; + + if ((ccNum.length-i) % 2 == 0) cur += cur; + if (cur > 9){ + cur = cur.toString().charAt(0).toInt() + cur.toString().charAt(1).toInt(); + } + + sum += cur; + } + if ((sum % 10) == 0) return true; + } + + var chunks = ''; + while (ccNum != ''){ + chunks += ' ' + ccNum.substr(0,4); + ccNum = ccNum.substr(4); + } + + element.getParent('form').retrieve('validator').ignoreField(element); + element.set('value', chunks.clean()); + element.getParent('form').retrieve('validator').enforceField(element); + return false; + } + }] + + +]); + + +/* +--- + +script: OverText.js + +name: OverText + +description: Shows text over an input that disappears when the user clicks into it. The text remains hidden if the user adds a value. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Options + - Core/Events + - Core/Element.Event + - Class.Binds + - Class.Occlude + - Element.Position + - Element.Shortcuts + +provides: [OverText] + +... +*/ + +var OverText = new Class({ + + Implements: [Options, Events, Class.Occlude], + + Binds: ['reposition', 'assert', 'focus', 'hide'], + + options: {/* + textOverride: null, + onFocus: function(){}, + onTextHide: function(textEl, inputEl){}, + onTextShow: function(textEl, inputEl){}, */ + element: 'label', + labelClass: 'overTxtLabel', + positionOptions: { + position: 'upperLeft', + edge: 'upperLeft', + offset: { + x: 4, + y: 2 + } + }, + poll: false, + pollInterval: 250, + wrap: false + }, + + property: 'OverText', + + initialize: function(element, options){ + element = this.element = document.id(element); + + if (this.occlude()) return this.occluded; + this.setOptions(options); + + this.attach(element); + OverText.instances.push(this); + + if (this.options.poll) this.poll(); + }, + + toElement: function(){ + return this.element; + }, + + attach: function(){ + var element = this.element, + options = this.options, + value = options.textOverride || element.get('alt') || element.get('title'); + + if (!value) return this; + + var text = this.text = new Element(options.element, { + 'class': options.labelClass, + styles: { + lineHeight: 'normal', + position: 'absolute', + cursor: 'text' + }, + html: value, + events: { + click: this.hide.pass(options.element == 'label', this) + } + }).inject(element, 'after'); + + if (options.element == 'label'){ + if (!element.get('id')) element.set('id', 'input_' + String.uniqueID()); + text.set('for', element.get('id')); + } + + if (options.wrap){ + this.textHolder = new Element('div.overTxtWrapper', { + styles: { + lineHeight: 'normal', + position: 'relative' + } + }).grab(text).inject(element, 'before'); + } + + return this.enable(); + }, + + destroy: function(){ + this.element.eliminate(this.property); // Class.Occlude storage + this.disable(); + if (this.text) this.text.destroy(); + if (this.textHolder) this.textHolder.destroy(); + return this; + }, + + disable: function(){ + this.element.removeEvents({ + focus: this.focus, + blur: this.assert, + change: this.assert + }); + window.removeEvent('resize', this.reposition); + this.hide(true, true); + return this; + }, + + enable: function(){ + this.element.addEvents({ + focus: this.focus, + blur: this.assert, + change: this.assert + }); + window.addEvent('resize', this.reposition); + this.assert(true); + this.reposition(); + return this; + }, + + wrap: function(){ + if (this.options.element == 'label'){ + if (!this.element.get('id')) this.element.set('id', 'input_' + String.uniqueID()); + this.text.set('for', this.element.get('id')); + } + }, + + startPolling: function(){ + this.pollingPaused = false; + return this.poll(); + }, + + poll: function(stop){ + //start immediately + //pause on focus + //resumeon blur + if (this.poller && !stop) return this; + if (stop){ + clearInterval(this.poller); + } else { + this.poller = (function(){ + if (!this.pollingPaused) this.assert(true); + }).periodical(this.options.pollInterval, this); + } + + return this; + }, + + stopPolling: function(){ + this.pollingPaused = true; + return this.poll(true); + }, + + focus: function(){ + if (this.text && (!this.text.isDisplayed() || this.element.get('disabled'))) return this; + return this.hide(); + }, + + hide: function(suppressFocus, force){ + if (this.text && (this.text.isDisplayed() && (!this.element.get('disabled') || force))){ + this.text.hide(); + this.fireEvent('textHide', [this.text, this.element]); + this.pollingPaused = true; + if (!suppressFocus){ + try { + this.element.fireEvent('focus'); + this.element.focus(); + } catch(e){} //IE barfs if you call focus on hidden elements + } + } + return this; + }, + + show: function(){ + if (this.text && !this.text.isDisplayed()){ + this.text.show(); + this.reposition(); + this.fireEvent('textShow', [this.text, this.element]); + this.pollingPaused = false; + } + return this; + }, + + test: function(){ + return !this.element.get('value'); + }, + + assert: function(suppressFocus){ + return this[this.test() ? 'show' : 'hide'](suppressFocus); + }, + + reposition: function(){ + this.assert(true); + if (!this.element.isVisible()) return this.stopPolling().hide(); + if (this.text && this.test()){ + this.text.position(Object.merge(this.options.positionOptions, { + relativeTo: this.element + })); + } + return this; + } + +}); + +OverText.instances = []; + +Object.append(OverText, { + + each: function(fn){ + return OverText.instances.each(function(ot, i){ + if (ot.element && ot.text) fn.call(OverText, ot, i); + }); + }, + + update: function(){ + + return OverText.each(function(ot){ + return ot.reposition(); + }); + + }, + + hideAll: function(){ + + return OverText.each(function(ot){ + return ot.hide(true, true); + }); + + }, + + showAll: function(){ + return OverText.each(function(ot){ + return ot.show(); + }); + } + +}); + + + +/* +--- + +script: Fx.Elements.js + +name: Fx.Elements + +description: Effect to change any number of CSS properties of any number of Elements. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Fx.CSS + - /MooTools.More + +provides: [Fx.Elements] + +... +*/ + +Fx.Elements = new Class({ + + Extends: Fx.CSS, + + initialize: function(elements, options){ + this.elements = this.subject = $$(elements); + this.parent(options); + }, + + compute: function(from, to, delta){ + var now = {}; + + for (var i in from){ + var iFrom = from[i], iTo = to[i], iNow = now[i] = {}; + for (var p in iFrom) iNow[p] = this.parent(iFrom[p], iTo[p], delta); + } + + return now; + }, + + set: function(now){ + for (var i in now){ + if (!this.elements[i]) continue; + + var iNow = now[i]; + for (var p in iNow) this.render(this.elements[i], p, iNow[p], this.options.unit); + } + + return this; + }, + + start: function(obj){ + if (!this.check(obj)) return this; + var from = {}, to = {}; + + for (var i in obj){ + if (!this.elements[i]) continue; + + var iProps = obj[i], iFrom = from[i] = {}, iTo = to[i] = {}; + + for (var p in iProps){ + var parsed = this.prepare(this.elements[i], p, iProps[p]); + iFrom[p] = parsed.from; + iTo[p] = parsed.to; + } + } + + return this.parent(from, to); + } + +}); + + +/* +--- + +script: Fx.Accordion.js + +name: Fx.Accordion + +description: An Fx.Elements extension which allows you to easily create accordion type controls. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Element.Event + - /Fx.Elements + +provides: [Fx.Accordion] + +... +*/ + +Fx.Accordion = new Class({ + + Extends: Fx.Elements, + + options: {/* + onActive: function(toggler, section){}, + onBackground: function(toggler, section){},*/ + fixedHeight: false, + fixedWidth: false, + display: 0, + show: false, + height: true, + width: false, + opacity: true, + alwaysHide: false, + trigger: 'click', + initialDisplayFx: true, + resetHeight: true + }, + + initialize: function(){ + var defined = function(obj){ + return obj != null; + }; + + var params = Array.link(arguments, { + 'container': Type.isElement, //deprecated + 'options': Type.isObject, + 'togglers': defined, + 'elements': defined + }); + this.parent(params.elements, params.options); + + var options = this.options, + togglers = this.togglers = $$(params.togglers); + + this.previous = -1; + this.internalChain = new Chain(); + + if (options.alwaysHide) this.options.link = 'chain'; + + if (options.show || this.options.show === 0){ + options.display = false; + this.previous = options.show; + } + + if (options.start){ + options.display = false; + options.show = false; + } + + var effects = this.effects = {}; + + if (options.opacity) effects.opacity = 'fullOpacity'; + if (options.width) effects.width = options.fixedWidth ? 'fullWidth' : 'offsetWidth'; + if (options.height) effects.height = options.fixedHeight ? 'fullHeight' : 'scrollHeight'; + + for (var i = 0, l = togglers.length; i < l; i++) this.addSection(togglers[i], this.elements[i]); + + this.elements.each(function(el, i){ + if (options.show === i){ + this.fireEvent('active', [togglers[i], el]); + } else { + for (var fx in effects) el.setStyle(fx, 0); + } + }, this); + + if (options.display || options.display === 0 || options.initialDisplayFx === false){ + this.display(options.display, options.initialDisplayFx); + } + + if (options.fixedHeight !== false) options.resetHeight = false; + this.addEvent('complete', this.internalChain.callChain.bind(this.internalChain)); + }, + + addSection: function(toggler, element){ + toggler = document.id(toggler); + element = document.id(element); + this.togglers.include(toggler); + this.elements.include(element); + + var togglers = this.togglers, + options = this.options, + test = togglers.contains(toggler), + idx = togglers.indexOf(toggler), + displayer = this.display.pass(idx, this); + + toggler.store('accordion:display', displayer) + .addEvent(options.trigger, displayer); + + if (options.height) element.setStyles({'padding-top': 0, 'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'}); + if (options.width) element.setStyles({'padding-left': 0, 'border-left': 'none', 'padding-right': 0, 'border-right': 'none'}); + + element.fullOpacity = 1; + if (options.fixedWidth) element.fullWidth = options.fixedWidth; + if (options.fixedHeight) element.fullHeight = options.fixedHeight; + element.setStyle('overflow', 'hidden'); + + if (!test) for (var fx in this.effects){ + element.setStyle(fx, 0); + } + return this; + }, + + removeSection: function(toggler, displayIndex){ + var togglers = this.togglers, + idx = togglers.indexOf(toggler), + element = this.elements[idx]; + + var remover = function(){ + togglers.erase(toggler); + this.elements.erase(element); + this.detach(toggler); + }.bind(this); + + if (this.now == idx || displayIndex != null){ + this.display(displayIndex != null ? displayIndex : (idx - 1 >= 0 ? idx - 1 : 0)).chain(remover); + } else { + remover(); + } + return this; + }, + + detach: function(toggler){ + var remove = function(toggler){ + toggler.removeEvent(this.options.trigger, toggler.retrieve('accordion:display')); + }.bind(this); + + if (!toggler) this.togglers.each(remove); + else remove(toggler); + return this; + }, + + display: function(index, useFx){ + if (!this.check(index, useFx)) return this; + + var obj = {}, + elements = this.elements, + options = this.options, + effects = this.effects; + + if (useFx == null) useFx = true; + if (typeOf(index) == 'element') index = elements.indexOf(index); + if (index == this.previous && !options.alwaysHide) return this; + + if (options.resetHeight){ + var prev = elements[this.previous]; + if (prev && !this.selfHidden){ + for (var fx in effects) prev.setStyle(fx, prev[effects[fx]]); + } + } + + if ((this.timer && options.link == 'chain') || (index === this.previous && !options.alwaysHide)) return this; + + this.previous = index; + this.selfHidden = false; + + elements.each(function(el, i){ + obj[i] = {}; + var hide; + if (i != index){ + hide = true; + } else if (options.alwaysHide && ((el.offsetHeight > 0 && options.height) || el.offsetWidth > 0 && options.width)){ + hide = true; + this.selfHidden = true; + } + this.fireEvent(hide ? 'background' : 'active', [this.togglers[i], el]); + for (var fx in effects) obj[i][fx] = hide ? 0 : el[effects[fx]]; + if (!useFx && !hide && options.resetHeight) obj[i].height = 'auto'; + }, this); + + this.internalChain.clearChain(); + this.internalChain.chain(function(){ + if (options.resetHeight && !this.selfHidden){ + var el = elements[index]; + if (el) el.setStyle('height', 'auto'); + } + }.bind(this)); + + return useFx ? this.start(obj) : this.set(obj).internalChain.callChain(); + } + +}); + +/*<1.2compat>*/ +/* + Compatibility with 1.2.0 +*/ +var Accordion = new Class({ + + Extends: Fx.Accordion, + + initialize: function(){ + this.parent.apply(this, arguments); + var params = Array.link(arguments, {'container': Type.isElement}); + this.container = params.container; + }, + + addSection: function(toggler, element, pos){ + toggler = document.id(toggler); + element = document.id(element); + + var test = this.togglers.contains(toggler); + var len = this.togglers.length; + if (len && (!test || pos)){ + pos = pos != null ? pos : len - 1; + toggler.inject(this.togglers[pos], 'before'); + element.inject(toggler, 'after'); + } else if (this.container && !test){ + toggler.inject(this.container); + element.inject(this.container); + } + return this.parent.apply(this, arguments); + } + +}); +/**/ + + +/* +--- + +script: Fx.Move.js + +name: Fx.Move + +description: Defines Fx.Move, a class that works with Element.Position.js to transition an element from one location to another. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Fx.Morph + - /Element.Position + +provides: [Fx.Move] + +... +*/ + +Fx.Move = new Class({ + + Extends: Fx.Morph, + + options: { + relativeTo: document.body, + position: 'center', + edge: false, + offset: {x: 0, y: 0} + }, + + start: function(destination){ + var element = this.element, + topLeft = element.getStyles('top', 'left'); + if (topLeft.top == 'auto' || topLeft.left == 'auto'){ + element.setPosition(element.getPosition(element.getOffsetParent())); + } + return this.parent(element.position(Object.merge({}, this.options, destination, {returnPos: true}))); + } + +}); + +Element.Properties.move = { + + set: function(options){ + this.get('move').cancel().setOptions(options); + return this; + }, + + get: function(){ + var move = this.retrieve('move'); + if (!move){ + move = new Fx.Move(this, {link: 'cancel'}); + this.store('move', move); + } + return move; + } + +}; + +Element.implement({ + + move: function(options){ + this.get('move').start(options); + return this; + } + +}); + + +/* +--- + +script: Fx.Scroll.js + +name: Fx.Scroll + +description: Effect to smoothly scroll any element, including the window. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Fx + - Core/Element.Event + - Core/Element.Dimensions + - /MooTools.More + +provides: [Fx.Scroll] + +... +*/ + +(function(){ + +Fx.Scroll = new Class({ + + Extends: Fx, + + options: { + offset: {x: 0, y: 0}, + wheelStops: true + }, + + initialize: function(element, options){ + this.element = this.subject = document.id(element); + this.parent(options); + + if (typeOf(this.element) != 'element') this.element = document.id(this.element.getDocument().body); + + if (this.options.wheelStops){ + var stopper = this.element, + cancel = this.cancel.pass(false, this); + this.addEvent('start', function(){ + stopper.addEvent('mousewheel', cancel); + }, true); + this.addEvent('complete', function(){ + stopper.removeEvent('mousewheel', cancel); + }, true); + } + }, + + set: function(){ + var now = Array.flatten(arguments); + if (Browser.firefox) now = [Math.round(now[0]), Math.round(now[1])]; // not needed anymore in newer firefox versions + this.element.scrollTo(now[0], now[1]); + return this; + }, + + compute: function(from, to, delta){ + return [0, 1].map(function(i){ + return Fx.compute(from[i], to[i], delta); + }); + }, + + start: function(x, y){ + if (!this.check(x, y)) return this; + var scroll = this.element.getScroll(); + return this.parent([scroll.x, scroll.y], [x, y]); + }, + + calculateScroll: function(x, y){ + var element = this.element, + scrollSize = element.getScrollSize(), + scroll = element.getScroll(), + size = element.getSize(), + offset = this.options.offset, + values = {x: x, y: y}; + + for (var z in values){ + if (!values[z] && values[z] !== 0) values[z] = scroll[z]; + if (typeOf(values[z]) != 'number') values[z] = scrollSize[z] - size[z]; + values[z] += offset[z]; + } + + return [values.x, values.y]; + }, + + toTop: function(){ + return this.start.apply(this, this.calculateScroll(false, 0)); + }, + + toLeft: function(){ + return this.start.apply(this, this.calculateScroll(0, false)); + }, + + toRight: function(){ + return this.start.apply(this, this.calculateScroll('right', false)); + }, + + toBottom: function(){ + return this.start.apply(this, this.calculateScroll(false, 'bottom')); + }, + + toElement: function(el, axes){ + axes = axes ? Array.from(axes) : ['x', 'y']; + var scroll = isBody(this.element) ? {x: 0, y: 0} : this.element.getScroll(); + var position = Object.map(document.id(el).getPosition(this.element), function(value, axis){ + return axes.contains(axis) ? value + scroll[axis] : false; + }); + return this.start.apply(this, this.calculateScroll(position.x, position.y)); + }, + + toElementEdge: function(el, axes, offset){ + axes = axes ? Array.from(axes) : ['x', 'y']; + el = document.id(el); + var to = {}, + position = el.getPosition(this.element), + size = el.getSize(), + scroll = this.element.getScroll(), + containerSize = this.element.getSize(), + edge = { + x: position.x + size.x, + y: position.y + size.y + }; + + ['x', 'y'].each(function(axis){ + if (axes.contains(axis)){ + if (edge[axis] > scroll[axis] + containerSize[axis]) to[axis] = edge[axis] - containerSize[axis]; + if (position[axis] < scroll[axis]) to[axis] = position[axis]; + } + if (to[axis] == null) to[axis] = scroll[axis]; + if (offset && offset[axis]) to[axis] = to[axis] + offset[axis]; + }, this); + + if (to.x != scroll.x || to.y != scroll.y) this.start(to.x, to.y); + return this; + }, + + toElementCenter: function(el, axes, offset){ + axes = axes ? Array.from(axes) : ['x', 'y']; + el = document.id(el); + var to = {}, + position = el.getPosition(this.element), + size = el.getSize(), + scroll = this.element.getScroll(), + containerSize = this.element.getSize(); + + ['x', 'y'].each(function(axis){ + if (axes.contains(axis)){ + to[axis] = position[axis] - (containerSize[axis] - size[axis]) / 2; + } + if (to[axis] == null) to[axis] = scroll[axis]; + if (offset && offset[axis]) to[axis] = to[axis] + offset[axis]; + }, this); + + if (to.x != scroll.x || to.y != scroll.y) this.start(to.x, to.y); + return this; + } + +}); + +//<1.2compat> +Fx.Scroll.implement({ + scrollToCenter: function(){ + return this.toElementCenter.apply(this, arguments); + }, + scrollIntoView: function(){ + return this.toElementEdge.apply(this, arguments); + } +}); +// + +function isBody(element){ + return (/^(?:body|html)$/i).test(element.tagName); +} + +})(); + + +/* +--- + +script: Fx.Slide.js + +name: Fx.Slide + +description: Effect to slide an element in and out of view. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Fx + - Core/Element.Style + - /MooTools.More + +provides: [Fx.Slide] + +... +*/ + +Fx.Slide = new Class({ + + Extends: Fx, + + options: { + mode: 'vertical', + wrapper: false, + hideOverflow: true, + resetHeight: false + }, + + initialize: function(element, options){ + element = this.element = this.subject = document.id(element); + this.parent(options); + options = this.options; + + var wrapper = element.retrieve('wrapper'), + styles = element.getStyles('margin', 'position', 'overflow'); + + if (options.hideOverflow) styles = Object.append(styles, {overflow: 'hidden'}); + if (options.wrapper) wrapper = document.id(options.wrapper).setStyles(styles); + + if (!wrapper) wrapper = new Element('div', { + styles: styles + }).wraps(element); + + element.store('wrapper', wrapper).setStyle('margin', 0); + if (element.getStyle('overflow') == 'visible') element.setStyle('overflow', 'hidden'); + + this.now = []; + this.open = true; + this.wrapper = wrapper; + + this.addEvent('complete', function(){ + this.open = (wrapper['offset' + this.layout.capitalize()] != 0); + if (this.open && this.options.resetHeight) wrapper.setStyle('height', ''); + }, true); + }, + + vertical: function(){ + this.margin = 'margin-top'; + this.layout = 'height'; + this.offset = this.element.offsetHeight; + }, + + horizontal: function(){ + this.margin = 'margin-left'; + this.layout = 'width'; + this.offset = this.element.offsetWidth; + }, + + set: function(now){ + this.element.setStyle(this.margin, now[0]); + this.wrapper.setStyle(this.layout, now[1]); + return this; + }, + + compute: function(from, to, delta){ + return [0, 1].map(function(i){ + return Fx.compute(from[i], to[i], delta); + }); + }, + + start: function(how, mode){ + if (!this.check(how, mode)) return this; + this[mode || this.options.mode](); + + var margin = this.element.getStyle(this.margin).toInt(), + layout = this.wrapper.getStyle(this.layout).toInt(), + caseIn = [[margin, layout], [0, this.offset]], + caseOut = [[margin, layout], [-this.offset, 0]], + start; + + switch (how){ + case 'in': start = caseIn; break; + case 'out': start = caseOut; break; + case 'toggle': start = (layout == 0) ? caseIn : caseOut; + } + return this.parent(start[0], start[1]); + }, + + slideIn: function(mode){ + return this.start('in', mode); + }, + + slideOut: function(mode){ + return this.start('out', mode); + }, + + hide: function(mode){ + this[mode || this.options.mode](); + this.open = false; + return this.set([-this.offset, 0]); + }, + + show: function(mode){ + this[mode || this.options.mode](); + this.open = true; + return this.set([0, this.offset]); + }, + + toggle: function(mode){ + return this.start('toggle', mode); + } + +}); + +Element.Properties.slide = { + + set: function(options){ + this.get('slide').cancel().setOptions(options); + return this; + }, + + get: function(){ + var slide = this.retrieve('slide'); + if (!slide){ + slide = new Fx.Slide(this, {link: 'cancel'}); + this.store('slide', slide); + } + return slide; + } + +}; + +Element.implement({ + + slide: function(how, mode){ + how = how || 'toggle'; + var slide = this.get('slide'), toggle; + switch (how){ + case 'hide': slide.hide(mode); break; + case 'show': slide.show(mode); break; + case 'toggle': + var flag = this.retrieve('slide:flag', slide.open); + slide[flag ? 'slideOut' : 'slideIn'](mode); + this.store('slide:flag', !flag); + toggle = true; + break; + default: slide.start(how, mode); + } + if (!toggle) this.eliminate('slide:flag'); + return this; + } + +}); + + +/* +--- + +script: Fx.SmoothScroll.js + +name: Fx.SmoothScroll + +description: Class for creating a smooth scrolling effect to all internal links on the page. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Slick.Finder + - /Fx.Scroll + +provides: [Fx.SmoothScroll] + +... +*/ + +/*<1.2compat>*/var SmoothScroll = /**/Fx.SmoothScroll = new Class({ + + Extends: Fx.Scroll, + + options: { + axes: ['x', 'y'] + }, + + initialize: function(options, context){ + context = context || document; + this.doc = context.getDocument(); + this.parent(this.doc, options); + + var win = context.getWindow(), + location = win.location.href.match(/^[^#]*/)[0] + '#', + links = $$(this.options.links || this.doc.links); + + links.each(function(link){ + if (link.href.indexOf(location) != 0) return; + var anchor = link.href.substr(location.length); + if (anchor) this.useLink(link, anchor); + }, this); + + this.addEvent('complete', function(){ + win.location.hash = this.anchor; + this.element.scrollTo(this.to[0], this.to[1]); + }, true); + }, + + useLink: function(link, anchor){ + + link.addEvent('click', function(event){ + var el = document.id(anchor) || this.doc.getElement('a[name=' + anchor + ']'); + if (!el) return; + + event.preventDefault(); + this.toElement(el, this.options.axes).chain(function(){ + this.fireEvent('scrolledTo', [link, el]); + }.bind(this)); + + this.anchor = anchor; + + }.bind(this)); + + return this; + } +}); + + +/* +--- + +script: Fx.Sort.js + +name: Fx.Sort + +description: Defines Fx.Sort, a class that reorders lists with a transition. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element.Dimensions + - /Fx.Elements + - /Element.Measure + +provides: [Fx.Sort] + +... +*/ + +Fx.Sort = new Class({ + + Extends: Fx.Elements, + + options: { + mode: 'vertical' + }, + + initialize: function(elements, options){ + this.parent(elements, options); + this.elements.each(function(el){ + if (el.getStyle('position') == 'static') el.setStyle('position', 'relative'); + }); + this.setDefaultOrder(); + }, + + setDefaultOrder: function(){ + this.currentOrder = this.elements.map(function(el, index){ + return index; + }); + }, + + sort: function(){ + if (!this.check(arguments)) return this; + var newOrder = Array.flatten(arguments); + + var top = 0, + left = 0, + next = {}, + zero = {}, + vert = this.options.mode == 'vertical'; + + var current = this.elements.map(function(el, index){ + var size = el.getComputedSize({styles: ['border', 'padding', 'margin']}); + var val; + if (vert){ + val = { + top: top, + margin: size['margin-top'], + height: size.totalHeight + }; + top += val.height - size['margin-top']; + } else { + val = { + left: left, + margin: size['margin-left'], + width: size.totalWidth + }; + left += val.width; + } + var plane = vert ? 'top' : 'left'; + zero[index] = {}; + var start = el.getStyle(plane).toInt(); + zero[index][plane] = start || 0; + return val; + }, this); + + this.set(zero); + newOrder = newOrder.map(function(i){ return i.toInt(); }); + if (newOrder.length != this.elements.length){ + this.currentOrder.each(function(index){ + if (!newOrder.contains(index)) newOrder.push(index); + }); + if (newOrder.length > this.elements.length) + newOrder.splice(this.elements.length-1, newOrder.length - this.elements.length); + } + var margin = 0; + top = left = 0; + newOrder.each(function(item){ + var newPos = {}; + if (vert){ + newPos.top = top - current[item].top - margin; + top += current[item].height; + } else { + newPos.left = left - current[item].left; + left += current[item].width; + } + margin = margin + current[item].margin; + next[item]=newPos; + }, this); + var mapped = {}; + Array.clone(newOrder).sort().each(function(index){ + mapped[index] = next[index]; + }); + this.start(mapped); + this.currentOrder = newOrder; + + return this; + }, + + rearrangeDOM: function(newOrder){ + newOrder = newOrder || this.currentOrder; + var parent = this.elements[0].getParent(); + var rearranged = []; + this.elements.setStyle('opacity', 0); + //move each element and store the new default order + newOrder.each(function(index){ + rearranged.push(this.elements[index].inject(parent).setStyles({ + top: 0, + left: 0 + })); + }, this); + this.elements.setStyle('opacity', 1); + this.elements = $$(rearranged); + this.setDefaultOrder(); + return this; + }, + + getDefaultOrder: function(){ + return this.elements.map(function(el, index){ + return index; + }); + }, + + getCurrentOrder: function(){ + return this.currentOrder; + }, + + forward: function(){ + return this.sort(this.getDefaultOrder()); + }, + + backward: function(){ + return this.sort(this.getDefaultOrder().reverse()); + }, + + reverse: function(){ + return this.sort(this.currentOrder.reverse()); + }, + + sortByElements: function(elements){ + return this.sort(elements.map(function(el){ + return this.elements.indexOf(el); + }, this)); + }, + + swap: function(one, two){ + if (typeOf(one) == 'element') one = this.elements.indexOf(one); + if (typeOf(two) == 'element') two = this.elements.indexOf(two); + + var newOrder = Array.clone(this.currentOrder); + newOrder[this.currentOrder.indexOf(one)] = two; + newOrder[this.currentOrder.indexOf(two)] = one; + + return this.sort(newOrder); + } + +}); + + +/* +--- + +script: Drag.js + +name: Drag + +description: The base Drag Class. Can be used to drag and resize Elements using mouse events. + +license: MIT-style license + +authors: + - Valerio Proietti + - Tom Occhinno + - Jan Kassens + +requires: + - Core/Events + - Core/Options + - Core/Element.Event + - Core/Element.Style + - Core/Element.Dimensions + - /MooTools.More + +provides: [Drag] +... + +*/ + +var Drag = new Class({ + + Implements: [Events, Options], + + options: {/* + onBeforeStart: function(thisElement){}, + onStart: function(thisElement, event){}, + onSnap: function(thisElement){}, + onDrag: function(thisElement, event){}, + onCancel: function(thisElement){}, + onComplete: function(thisElement, event){},*/ + snap: 6, + unit: 'px', + grid: false, + style: true, + limit: false, + handle: false, + invert: false, + preventDefault: false, + stopPropagation: false, + modifiers: {x: 'left', y: 'top'} + }, + + initialize: function(){ + var params = Array.link(arguments, { + 'options': Type.isObject, + 'element': function(obj){ + return obj != null; + } + }); + + this.element = document.id(params.element); + this.document = this.element.getDocument(); + this.setOptions(params.options || {}); + var htype = typeOf(this.options.handle); + this.handles = ((htype == 'array' || htype == 'collection') ? $$(this.options.handle) : document.id(this.options.handle)) || this.element; + this.mouse = {'now': {}, 'pos': {}}; + this.value = {'start': {}, 'now': {}}; + + this.selection = (Browser.ie) ? 'selectstart' : 'mousedown'; + + + if (Browser.ie && !Drag.ondragstartFixed){ + document.ondragstart = Function.from(false); + Drag.ondragstartFixed = true; + } + + this.bound = { + start: this.start.bind(this), + check: this.check.bind(this), + drag: this.drag.bind(this), + stop: this.stop.bind(this), + cancel: this.cancel.bind(this), + eventStop: Function.from(false) + }; + this.attach(); + }, + + attach: function(){ + this.handles.addEvent('mousedown', this.bound.start); + return this; + }, + + detach: function(){ + this.handles.removeEvent('mousedown', this.bound.start); + return this; + }, + + start: function(event){ + var options = this.options; + + if (event.rightClick) return; + + if (options.preventDefault) event.preventDefault(); + if (options.stopPropagation) event.stopPropagation(); + this.mouse.start = event.page; + + this.fireEvent('beforeStart', this.element); + + var limit = options.limit; + this.limit = {x: [], y: []}; + + var z, coordinates; + for (z in options.modifiers){ + if (!options.modifiers[z]) continue; + + var style = this.element.getStyle(options.modifiers[z]); + + // Some browsers (IE and Opera) don't always return pixels. + if (style && !style.match(/px$/)){ + if (!coordinates) coordinates = this.element.getCoordinates(this.element.getOffsetParent()); + style = coordinates[options.modifiers[z]]; + } + + if (options.style) this.value.now[z] = (style || 0).toInt(); + else this.value.now[z] = this.element[options.modifiers[z]]; + + if (options.invert) this.value.now[z] *= -1; + + this.mouse.pos[z] = event.page[z] - this.value.now[z]; + + if (limit && limit[z]){ + var i = 2; + while (i--){ + var limitZI = limit[z][i]; + if (limitZI || limitZI === 0) this.limit[z][i] = (typeof limitZI == 'function') ? limitZI() : limitZI; + } + } + } + + if (typeOf(this.options.grid) == 'number') this.options.grid = { + x: this.options.grid, + y: this.options.grid + }; + + var events = { + mousemove: this.bound.check, + mouseup: this.bound.cancel + }; + events[this.selection] = this.bound.eventStop; + this.document.addEvents(events); + }, + + check: function(event){ + if (this.options.preventDefault) event.preventDefault(); + var distance = Math.round(Math.sqrt(Math.pow(event.page.x - this.mouse.start.x, 2) + Math.pow(event.page.y - this.mouse.start.y, 2))); + if (distance > this.options.snap){ + this.cancel(); + this.document.addEvents({ + mousemove: this.bound.drag, + mouseup: this.bound.stop + }); + this.fireEvent('start', [this.element, event]).fireEvent('snap', this.element); + } + }, + + drag: function(event){ + var options = this.options; + + if (options.preventDefault) event.preventDefault(); + this.mouse.now = event.page; + + for (var z in options.modifiers){ + if (!options.modifiers[z]) continue; + this.value.now[z] = this.mouse.now[z] - this.mouse.pos[z]; + + if (options.invert) this.value.now[z] *= -1; + + if (options.limit && this.limit[z]){ + if ((this.limit[z][1] || this.limit[z][1] === 0) && (this.value.now[z] > this.limit[z][1])){ + this.value.now[z] = this.limit[z][1]; + } else if ((this.limit[z][0] || this.limit[z][0] === 0) && (this.value.now[z] < this.limit[z][0])){ + this.value.now[z] = this.limit[z][0]; + } + } + + if (options.grid[z]) this.value.now[z] -= ((this.value.now[z] - (this.limit[z][0]||0)) % options.grid[z]); + + if (options.style) this.element.setStyle(options.modifiers[z], this.value.now[z] + options.unit); + else this.element[options.modifiers[z]] = this.value.now[z]; + } + + this.fireEvent('drag', [this.element, event]); + }, + + cancel: function(event){ + this.document.removeEvents({ + mousemove: this.bound.check, + mouseup: this.bound.cancel + }); + if (event){ + this.document.removeEvent(this.selection, this.bound.eventStop); + this.fireEvent('cancel', this.element); + } + }, + + stop: function(event){ + var events = { + mousemove: this.bound.drag, + mouseup: this.bound.stop + }; + events[this.selection] = this.bound.eventStop; + this.document.removeEvents(events); + if (event) this.fireEvent('complete', [this.element, event]); + } + +}); + +Element.implement({ + + makeResizable: function(options){ + var drag = new Drag(this, Object.merge({ + modifiers: { + x: 'width', + y: 'height' + } + }, options)); + + this.store('resizer', drag); + return drag.addEvent('drag', function(){ + this.fireEvent('resize', drag); + }.bind(this)); + } + +}); + + +/* +--- + +script: Drag.Move.js + +name: Drag.Move + +description: A Drag extension that provides support for the constraining of draggables to containers and droppables. + +license: MIT-style license + +authors: + - Valerio Proietti + - Tom Occhinno + - Jan Kassens + - Aaron Newton + - Scott Kyle + +requires: + - Core/Element.Dimensions + - /Drag + +provides: [Drag.Move] + +... +*/ + +Drag.Move = new Class({ + + Extends: Drag, + + options: {/* + onEnter: function(thisElement, overed){}, + onLeave: function(thisElement, overed){}, + onDrop: function(thisElement, overed, event){},*/ + droppables: [], + container: false, + precalculate: false, + includeMargins: true, + checkDroppables: true + }, + + initialize: function(element, options){ + this.parent(element, options); + element = this.element; + + this.droppables = $$(this.options.droppables); + this.container = document.id(this.options.container); + + if (this.container && typeOf(this.container) != 'element') + this.container = document.id(this.container.getDocument().body); + + if (this.options.style){ + if (this.options.modifiers.x == 'left' && this.options.modifiers.y == 'top'){ + var parent = element.getOffsetParent(), + styles = element.getStyles('left', 'top'); + if (parent && (styles.left == 'auto' || styles.top == 'auto')){ + element.setPosition(element.getPosition(parent)); + } + } + + if (element.getStyle('position') == 'static') element.setStyle('position', 'absolute'); + } + + this.addEvent('start', this.checkDroppables, true); + this.overed = null; + }, + + start: function(event){ + if (this.container) this.options.limit = this.calculateLimit(); + + if (this.options.precalculate){ + this.positions = this.droppables.map(function(el){ + return el.getCoordinates(); + }); + } + + this.parent(event); + }, + + calculateLimit: function(){ + var element = this.element, + container = this.container, + + offsetParent = document.id(element.getOffsetParent()) || document.body, + containerCoordinates = container.getCoordinates(offsetParent), + elementMargin = {}, + elementBorder = {}, + containerMargin = {}, + containerBorder = {}, + offsetParentPadding = {}; + + ['top', 'right', 'bottom', 'left'].each(function(pad){ + elementMargin[pad] = element.getStyle('margin-' + pad).toInt(); + elementBorder[pad] = element.getStyle('border-' + pad).toInt(); + containerMargin[pad] = container.getStyle('margin-' + pad).toInt(); + containerBorder[pad] = container.getStyle('border-' + pad).toInt(); + offsetParentPadding[pad] = offsetParent.getStyle('padding-' + pad).toInt(); + }, this); + + var width = element.offsetWidth + elementMargin.left + elementMargin.right, + height = element.offsetHeight + elementMargin.top + elementMargin.bottom, + left = 0, + top = 0, + right = containerCoordinates.right - containerBorder.right - width, + bottom = containerCoordinates.bottom - containerBorder.bottom - height; + + if (this.options.includeMargins){ + left += elementMargin.left; + top += elementMargin.top; + } else { + right += elementMargin.right; + bottom += elementMargin.bottom; + } + + if (element.getStyle('position') == 'relative'){ + var coords = element.getCoordinates(offsetParent); + coords.left -= element.getStyle('left').toInt(); + coords.top -= element.getStyle('top').toInt(); + + left -= coords.left; + top -= coords.top; + if (container.getStyle('position') != 'relative'){ + left += containerBorder.left; + top += containerBorder.top; + } + right += elementMargin.left - coords.left; + bottom += elementMargin.top - coords.top; + + if (container != offsetParent){ + left += containerMargin.left + offsetParentPadding.left; + top += ((Browser.ie6 || Browser.ie7) ? 0 : containerMargin.top) + offsetParentPadding.top; + } + } else { + left -= elementMargin.left; + top -= elementMargin.top; + if (container != offsetParent){ + left += containerCoordinates.left + containerBorder.left; + top += containerCoordinates.top + containerBorder.top; + } + } + + return { + x: [left, right], + y: [top, bottom] + }; + }, + + getDroppableCoordinates: function(element){ + var position = element.getCoordinates(); + if (element.getStyle('position') == 'fixed'){ + var scroll = window.getScroll(); + position.left += scroll.x; + position.right += scroll.x; + position.top += scroll.y; + position.bottom += scroll.y; + } + return position; + }, + + checkDroppables: function(){ + var overed = this.droppables.filter(function(el, i){ + el = this.positions ? this.positions[i] : this.getDroppableCoordinates(el); + var now = this.mouse.now; + return (now.x > el.left && now.x < el.right && now.y < el.bottom && now.y > el.top); + }, this).getLast(); + + if (this.overed != overed){ + if (this.overed) this.fireEvent('leave', [this.element, this.overed]); + if (overed) this.fireEvent('enter', [this.element, overed]); + this.overed = overed; + } + }, + + drag: function(event){ + this.parent(event); + if (this.options.checkDroppables && this.droppables.length) this.checkDroppables(); + }, + + stop: function(event){ + this.checkDroppables(); + this.fireEvent('drop', [this.element, this.overed, event]); + this.overed = null; + return this.parent(event); + } + +}); + +Element.implement({ + + makeDraggable: function(options){ + var drag = new Drag.Move(this, options); + this.store('dragger', drag); + return drag; + } + +}); + + +/* +--- + +script: Slider.js + +name: Slider + +description: Class for creating horizontal and vertical slider controls. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Element.Dimensions + - /Class.Binds + - /Drag + - /Element.Measure + +provides: [Slider] + +... +*/ + +var Slider = new Class({ + + Implements: [Events, Options], + + Binds: ['clickedElement', 'draggedKnob', 'scrolledElement'], + + options: {/* + onTick: function(intPosition){}, + onChange: function(intStep){}, + onComplete: function(strStep){},*/ + onTick: function(position){ + this.setKnobPosition(position); + }, + initialStep: 0, + snap: false, + offset: 0, + range: false, + wheel: false, + steps: 100, + mode: 'horizontal' + }, + + initialize: function(element, knob, options){ + this.setOptions(options); + options = this.options; + this.element = document.id(element); + knob = this.knob = document.id(knob); + this.previousChange = this.previousEnd = this.step = -1; + + var limit = {}, + modifiers = {x: false, y: false}; + + switch (options.mode){ + case 'vertical': + this.axis = 'y'; + this.property = 'top'; + this.offset = 'offsetHeight'; + break; + case 'horizontal': + this.axis = 'x'; + this.property = 'left'; + this.offset = 'offsetWidth'; + } + + this.setSliderDimensions(); + this.setRange(options.range); + + if (knob.getStyle('position') == 'static') knob.setStyle('position', 'relative'); + knob.setStyle(this.property, -options.offset); + modifiers[this.axis] = this.property; + limit[this.axis] = [-options.offset, this.full - options.offset]; + + var dragOptions = { + snap: 0, + limit: limit, + modifiers: modifiers, + onDrag: this.draggedKnob, + onStart: this.draggedKnob, + onBeforeStart: (function(){ + this.isDragging = true; + }).bind(this), + onCancel: function(){ + this.isDragging = false; + }.bind(this), + onComplete: function(){ + this.isDragging = false; + this.draggedKnob(); + this.end(); + }.bind(this) + }; + if (options.snap) this.setSnap(dragOptions); + + this.drag = new Drag(knob, dragOptions); + this.attach(); + if (options.initialStep != null) this.set(options.initialStep); + }, + + attach: function(){ + this.element.addEvent('mousedown', this.clickedElement); + if (this.options.wheel) this.element.addEvent('mousewheel', this.scrolledElement); + this.drag.attach(); + return this; + }, + + detach: function(){ + this.element.removeEvent('mousedown', this.clickedElement) + .removeEvent('mousewheel', this.scrolledElement); + this.drag.detach(); + return this; + }, + + autosize: function(){ + this.setSliderDimensions() + .setKnobPosition(this.toPosition(this.step)); + this.drag.options.limit[this.axis] = [-this.options.offset, this.full - this.options.offset]; + if (this.options.snap) this.setSnap(); + return this; + }, + + setSnap: function(options){ + if (!options) options = this.drag.options; + options.grid = Math.ceil(this.stepWidth); + options.limit[this.axis][1] = this.full; + return this; + }, + + setKnobPosition: function(position){ + if (this.options.snap) position = this.toPosition(this.step); + this.knob.setStyle(this.property, position); + return this; + }, + + setSliderDimensions: function(){ + this.full = this.element.measure(function(){ + this.half = this.knob[this.offset] / 2; + return this.element[this.offset] - this.knob[this.offset] + (this.options.offset * 2); + }.bind(this)); + return this; + }, + + set: function(step){ + if (!((this.range > 0) ^ (step < this.min))) step = this.min; + if (!((this.range > 0) ^ (step > this.max))) step = this.max; + + this.step = Math.round(step); + return this.checkStep() + .fireEvent('tick', this.toPosition(this.step)) + .end(); + }, + + setRange: function(range, pos){ + this.min = Array.pick([range[0], 0]); + this.max = Array.pick([range[1], this.options.steps]); + this.range = this.max - this.min; + this.steps = this.options.steps || this.full; + this.stepSize = Math.abs(this.range) / this.steps; + this.stepWidth = this.stepSize * this.full / Math.abs(this.range); + if (range) this.set(Array.pick([pos, this.step]).floor(this.min).max(this.max)); + return this; + }, + + clickedElement: function(event){ + if (this.isDragging || event.target == this.knob) return; + + var dir = this.range < 0 ? -1 : 1, + position = event.page[this.axis] - this.element.getPosition()[this.axis] - this.half; + + position = position.limit(-this.options.offset, this.full - this.options.offset); + + this.step = Math.round(this.min + dir * this.toStep(position)); + + this.checkStep() + .fireEvent('tick', position) + .end(); + }, + + scrolledElement: function(event){ + var mode = (this.options.mode == 'horizontal') ? (event.wheel < 0) : (event.wheel > 0); + this.set(this.step + (mode ? -1 : 1) * this.stepSize); + event.stop(); + }, + + draggedKnob: function(){ + var dir = this.range < 0 ? -1 : 1, + position = this.drag.value.now[this.axis]; + + position = position.limit(-this.options.offset, this.full -this.options.offset); + + this.step = Math.round(this.min + dir * this.toStep(position)); + this.checkStep(); + }, + + checkStep: function(){ + var step = this.step; + if (this.previousChange != step){ + this.previousChange = step; + this.fireEvent('change', step); + } + return this; + }, + + end: function(){ + var step = this.step; + if (this.previousEnd !== step){ + this.previousEnd = step; + this.fireEvent('complete', step + ''); + } + return this; + }, + + toStep: function(position){ + var step = (position + this.options.offset) * this.stepSize / this.full * this.steps; + return this.options.steps ? Math.round(step -= step % this.stepSize) : step; + }, + + toPosition: function(step){ + return (this.full * Math.abs(this.min - step)) / (this.steps * this.stepSize) - this.options.offset; + } + +}); + + +/* +--- + +script: Sortables.js + +name: Sortables + +description: Class for creating a drag and drop sorting interface for lists of items. + +license: MIT-style license + +authors: + - Tom Occhino + +requires: + - Core/Fx.Morph + - /Drag.Move + +provides: [Sortables] + +... +*/ + +var Sortables = new Class({ + + Implements: [Events, Options], + + options: {/* + onSort: function(element, clone){}, + onStart: function(element, clone){}, + onComplete: function(element){},*/ + opacity: 1, + clone: false, + revert: false, + handle: false, + dragOptions: {}/*<1.2compat>*/, + snap: 4, + constrain: false, + preventDefault: false + /**/ + }, + + initialize: function(lists, options){ + this.setOptions(options); + + this.elements = []; + this.lists = []; + this.idle = true; + + this.addLists($$(document.id(lists) || lists)); + + if (!this.options.clone) this.options.revert = false; + if (this.options.revert) this.effect = new Fx.Morph(null, Object.merge({ + duration: 250, + link: 'cancel' + }, this.options.revert)); + }, + + attach: function(){ + this.addLists(this.lists); + return this; + }, + + detach: function(){ + this.lists = this.removeLists(this.lists); + return this; + }, + + addItems: function(){ + Array.flatten(arguments).each(function(element){ + this.elements.push(element); + var start = element.retrieve('sortables:start', function(event){ + this.start.call(this, event, element); + }.bind(this)); + (this.options.handle ? element.getElement(this.options.handle) || element : element).addEvent('mousedown', start); + }, this); + return this; + }, + + addLists: function(){ + Array.flatten(arguments).each(function(list){ + this.lists.include(list); + this.addItems(list.getChildren()); + }, this); + return this; + }, + + removeItems: function(){ + return $$(Array.flatten(arguments).map(function(element){ + this.elements.erase(element); + var start = element.retrieve('sortables:start'); + (this.options.handle ? element.getElement(this.options.handle) || element : element).removeEvent('mousedown', start); + + return element; + }, this)); + }, + + removeLists: function(){ + return $$(Array.flatten(arguments).map(function(list){ + this.lists.erase(list); + this.removeItems(list.getChildren()); + + return list; + }, this)); + }, + + getClone: function(event, element){ + if (!this.options.clone) return new Element(element.tagName).inject(document.body); + if (typeOf(this.options.clone) == 'function') return this.options.clone.call(this, event, element, this.list); + var clone = element.clone(true).setStyles({ + margin: 0, + position: 'absolute', + visibility: 'hidden', + width: element.getStyle('width') + }).addEvent('mousedown', function(event){ + element.fireEvent('mousedown', event); + }); + //prevent the duplicated radio inputs from unchecking the real one + if (clone.get('html').test('radio')){ + clone.getElements('input[type=radio]').each(function(input, i){ + input.set('name', 'clone_' + i); + if (input.get('checked')) element.getElements('input[type=radio]')[i].set('checked', true); + }); + } + + return clone.inject(this.list).setPosition(element.getPosition(element.getOffsetParent())); + }, + + getDroppables: function(){ + var droppables = this.list.getChildren().erase(this.clone).erase(this.element); + if (!this.options.constrain) droppables.append(this.lists).erase(this.list); + return droppables; + }, + + insert: function(dragging, element){ + var where = 'inside'; + if (this.lists.contains(element)){ + this.list = element; + this.drag.droppables = this.getDroppables(); + } else { + where = this.element.getAllPrevious().contains(element) ? 'before' : 'after'; + } + this.element.inject(element, where); + this.fireEvent('sort', [this.element, this.clone]); + }, + + start: function(event, element){ + if ( + !this.idle || + event.rightClick || + ['button', 'input', 'a'].contains(event.target.get('tag')) + ) return; + + this.idle = false; + this.element = element; + this.opacity = element.get('opacity'); + this.list = element.getParent(); + this.clone = this.getClone(event, element); + + this.drag = new Drag.Move(this.clone, Object.merge({ + /*<1.2compat>*/ + preventDefault: this.options.preventDefault, + snap: this.options.snap, + container: this.options.constrain && this.element.getParent(), + /**/ + droppables: this.getDroppables() + }, this.options.dragOptions)).addEvents({ + onSnap: function(){ + event.stop(); + this.clone.setStyle('visibility', 'visible'); + this.element.set('opacity', this.options.opacity || 0); + this.fireEvent('start', [this.element, this.clone]); + }.bind(this), + onEnter: this.insert.bind(this), + onCancel: this.end.bind(this), + onComplete: this.end.bind(this) + }); + + this.clone.inject(this.element, 'before'); + this.drag.start(event); + }, + + end: function(){ + this.drag.detach(); + this.element.set('opacity', this.opacity); + if (this.effect){ + var dim = this.element.getStyles('width', 'height'), + clone = this.clone, + pos = clone.computePosition(this.element.getPosition(this.clone.getOffsetParent())); + + var destroy = function(){ + this.removeEvent('cancel', destroy); + clone.destroy(); + }; + + this.effect.element = clone; + this.effect.start({ + top: pos.top, + left: pos.left, + width: dim.width, + height: dim.height, + opacity: 0.25 + }).addEvent('cancel', destroy).chain(destroy); + } else { + this.clone.destroy(); + } + this.reset(); + }, + + reset: function(){ + this.idle = true; + this.fireEvent('complete', this.element); + }, + + serialize: function(){ + var params = Array.link(arguments, { + modifier: Type.isFunction, + index: function(obj){ + return obj != null; + } + }); + var serial = this.lists.map(function(list){ + return list.getChildren().map(params.modifier || function(element){ + return element.get('id'); + }, this); + }, this); + + var index = params.index; + if (this.lists.length == 1) index = 0; + return (index || index === 0) && index >= 0 && index < this.lists.length ? serial[index] : serial; + } + +}); + + +/* +--- + +script: Request.JSONP.js + +name: Request.JSONP + +description: Defines Request.JSONP, a class for cross domain javascript via script injection. + +license: MIT-style license + +authors: + - Aaron Newton + - Guillermo Rauch + - Arian Stolwijk + +requires: + - Core/Element + - Core/Request + - MooTools.More + +provides: [Request.JSONP] + +... +*/ + +Request.JSONP = new Class({ + + Implements: [Chain, Events, Options], + + options: {/* + onRequest: function(src, scriptElement){}, + onComplete: function(data){}, + onSuccess: function(data){}, + onCancel: function(){}, + onTimeout: function(){}, + onError: function(){}, */ + onRequest: function(src){ + if (this.options.log && window.console && console.log){ + console.log('JSONP retrieving script with url:' + src); + } + }, + onError: function(src){ + if (this.options.log && window.console && console.warn){ + console.warn('JSONP '+ src +' will fail in Internet Explorer, which enforces a 2083 bytes length limit on URIs'); + } + }, + url: '', + callbackKey: 'callback', + injectScript: document.head, + data: '', + link: 'ignore', + timeout: 0, + log: false + }, + + initialize: function(options){ + this.setOptions(options); + }, + + send: function(options){ + if (!Request.prototype.check.call(this, options)) return this; + this.running = true; + + var type = typeOf(options); + if (type == 'string' || type == 'element') options = {data: options}; + options = Object.merge(this.options, options || {}); + + var data = options.data; + switch (typeOf(data)){ + case 'element': data = document.id(data).toQueryString(); break; + case 'object': case 'hash': data = Object.toQueryString(data); + } + + var index = this.index = Request.JSONP.counter++; + + var src = options.url + + (options.url.test('\\?') ? '&' :'?') + + (options.callbackKey) + + '=Request.JSONP.request_map.request_'+ index + + (data ? '&' + data : ''); + + if (src.length > 2083) this.fireEvent('error', src); + + Request.JSONP.request_map['request_' + index] = function(){ + this.success(arguments, index); + }.bind(this); + + var script = this.getScript(src).inject(options.injectScript); + this.fireEvent('request', [src, script]); + + if (options.timeout) this.timeout.delay(options.timeout, this); + + return this; + }, + + getScript: function(src){ + if (!this.script) this.script = new Element('script', { + type: 'text/javascript', + async: true, + src: src + }); + return this.script; + }, + + success: function(args, index){ + if (!this.running) return; + this.clear() + .fireEvent('complete', args).fireEvent('success', args) + .callChain(); + }, + + cancel: function(){ + if (this.running) this.clear().fireEvent('cancel'); + return this; + }, + + isRunning: function(){ + return !!this.running; + }, + + clear: function(){ + this.running = false; + if (this.script){ + this.script.destroy(); + this.script = null; + } + return this; + }, + + timeout: function(){ + if (this.running){ + this.running = false; + this.fireEvent('timeout', [this.script.get('src'), this.script]).fireEvent('failure').cancel(); + } + return this; + } + +}); + +Request.JSONP.counter = 0; +Request.JSONP.request_map = {}; + + +/* +--- + +script: Request.Queue.js + +name: Request.Queue + +description: Controls several instances of Request and its variants to run only one request at a time. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element + - Core/Request + - /Class.Binds + +provides: [Request.Queue] + +... +*/ + +Request.Queue = new Class({ + + Implements: [Options, Events], + + Binds: ['attach', 'request', 'complete', 'cancel', 'success', 'failure', 'exception'], + + options: {/* + onRequest: function(argsPassedToOnRequest){}, + onSuccess: function(argsPassedToOnSuccess){}, + onComplete: function(argsPassedToOnComplete){}, + onCancel: function(argsPassedToOnCancel){}, + onException: function(argsPassedToOnException){}, + onFailure: function(argsPassedToOnFailure){}, + onEnd: function(){}, + */ + stopOnFailure: true, + autoAdvance: true, + concurrent: 1, + requests: {} + }, + + initialize: function(options){ + var requests; + if (options){ + requests = options.requests; + delete options.requests; + } + this.setOptions(options); + this.requests = {}; + this.queue = []; + this.reqBinders = {}; + + if (requests) this.addRequests(requests); + }, + + addRequest: function(name, request){ + this.requests[name] = request; + this.attach(name, request); + return this; + }, + + addRequests: function(obj){ + Object.each(obj, function(req, name){ + this.addRequest(name, req); + }, this); + return this; + }, + + getName: function(req){ + return Object.keyOf(this.requests, req); + }, + + attach: function(name, req){ + if (req._groupSend) return this; + ['request', 'complete', 'cancel', 'success', 'failure', 'exception'].each(function(evt){ + if (!this.reqBinders[name]) this.reqBinders[name] = {}; + this.reqBinders[name][evt] = function(){ + this['on' + evt.capitalize()].apply(this, [name, req].append(arguments)); + }.bind(this); + req.addEvent(evt, this.reqBinders[name][evt]); + }, this); + req._groupSend = req.send; + req.send = function(options){ + this.send(name, options); + return req; + }.bind(this); + return this; + }, + + removeRequest: function(req){ + var name = typeOf(req) == 'object' ? this.getName(req) : req; + if (!name && typeOf(name) != 'string') return this; + req = this.requests[name]; + if (!req) return this; + ['request', 'complete', 'cancel', 'success', 'failure', 'exception'].each(function(evt){ + req.removeEvent(evt, this.reqBinders[name][evt]); + }, this); + req.send = req._groupSend; + delete req._groupSend; + return this; + }, + + getRunning: function(){ + return Object.filter(this.requests, function(r){ + return r.running; + }); + }, + + isRunning: function(){ + return !!(Object.keys(this.getRunning()).length); + }, + + send: function(name, options){ + var q = function(){ + this.requests[name]._groupSend(options); + this.queue.erase(q); + }.bind(this); + + q.name = name; + if (Object.keys(this.getRunning()).length >= this.options.concurrent || (this.error && this.options.stopOnFailure)) this.queue.push(q); + else q(); + return this; + }, + + hasNext: function(name){ + return (!name) ? !!this.queue.length : !!this.queue.filter(function(q){ return q.name == name; }).length; + }, + + resume: function(){ + this.error = false; + (this.options.concurrent - Object.keys(this.getRunning()).length).times(this.runNext, this); + return this; + }, + + runNext: function(name){ + if (!this.queue.length) return this; + if (!name){ + this.queue[0](); + } else { + var found; + this.queue.each(function(q){ + if (!found && q.name == name){ + found = true; + q(); + } + }); + } + return this; + }, + + runAll: function(){ + this.queue.each(function(q){ + q(); + }); + return this; + }, + + clear: function(name){ + if (!name){ + this.queue.empty(); + } else { + this.queue = this.queue.map(function(q){ + if (q.name != name) return q; + else return false; + }).filter(function(q){ + return q; + }); + } + return this; + }, + + cancel: function(name){ + this.requests[name].cancel(); + return this; + }, + + onRequest: function(){ + this.fireEvent('request', arguments); + }, + + onComplete: function(){ + this.fireEvent('complete', arguments); + if (!this.queue.length) this.fireEvent('end'); + }, + + onCancel: function(){ + if (this.options.autoAdvance && !this.error) this.runNext(); + this.fireEvent('cancel', arguments); + }, + + onSuccess: function(){ + if (this.options.autoAdvance && !this.error) this.runNext(); + this.fireEvent('success', arguments); + }, + + onFailure: function(){ + this.error = true; + if (!this.options.stopOnFailure && this.options.autoAdvance) this.runNext(); + this.fireEvent('failure', arguments); + }, + + onException: function(){ + this.error = true; + if (!this.options.stopOnFailure && this.options.autoAdvance) this.runNext(); + this.fireEvent('exception', arguments); + } + +}); + + +/* +--- + +script: Request.Periodical.js + +name: Request.Periodical + +description: Requests the same URL to pull data from a server but increases the intervals if no data is returned to reduce the load + +license: MIT-style license + +authors: + - Christoph Pojer + +requires: + - Core/Request + - /MooTools.More + +provides: [Request.Periodical] + +... +*/ + +Request.implement({ + + options: { + initialDelay: 5000, + delay: 5000, + limit: 60000 + }, + + startTimer: function(data){ + var fn = function(){ + if (!this.running) this.send({data: data}); + }; + this.lastDelay = this.options.initialDelay; + this.timer = fn.delay(this.lastDelay, this); + this.completeCheck = function(response){ + clearTimeout(this.timer); + this.lastDelay = (response) ? this.options.delay : (this.lastDelay + this.options.delay).min(this.options.limit); + this.timer = fn.delay(this.lastDelay, this); + }; + return this.addEvent('complete', this.completeCheck); + }, + + stopTimer: function(){ + clearTimeout(this.timer); + return this.removeEvent('complete', this.completeCheck); + } + +}); + + +/* +--- + +script: Assets.js + +name: Assets + +description: Provides methods to dynamically load JavaScript, CSS, and Image files into the document. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Element.Event + - /MooTools.More + +provides: [Assets] + +... +*/ + +var Asset = { + + javascript: function(source, properties){ + if (!properties) properties = {}; + + var script = new Element('script', {src: source, type: 'text/javascript'}), + doc = properties.document || document, + loaded = 0, + loadEvent = properties.onload || properties.onLoad; + + var load = loadEvent ? function(){ // make sure we only call the event once + if (++loaded == 1) loadEvent.call(this); + } : function(){}; + + delete properties.onload; + delete properties.onLoad; + delete properties.document; + + return script.addEvents({ + load: load, + readystatechange: function(){ + if (['loaded', 'complete'].contains(this.readyState)) load.call(this); + } + }).set(properties).inject(doc.head); + }, + + css: function(source, properties){ + if (!properties) properties = {}; + + var link = new Element('link', { + rel: 'stylesheet', + media: 'screen', + type: 'text/css', + href: source + }); + + var load = properties.onload || properties.onLoad, + doc = properties.document || document; + + delete properties.onload; + delete properties.onLoad; + delete properties.document; + + if (load) link.addEvent('load', load); + return link.set(properties).inject(doc.head); + }, + + image: function(source, properties){ + if (!properties) properties = {}; + + var image = new Image(), + element = document.id(image) || new Element('img'); + + ['load', 'abort', 'error'].each(function(name){ + var type = 'on' + name, + cap = 'on' + name.capitalize(), + event = properties[type] || properties[cap] || function(){}; + + delete properties[cap]; + delete properties[type]; + + image[type] = function(){ + if (!image) return; + if (!element.parentNode){ + element.width = image.width; + element.height = image.height; + } + image = image.onload = image.onabort = image.onerror = null; + event.delay(1, element, element); + element.fireEvent(name, element, 1); + }; + }); + + image.src = element.src = source; + if (image && image.complete) image.onload.delay(1); + return element.set(properties); + }, + + images: function(sources, options){ + sources = Array.from(sources); + + var fn = function(){}, + counter = 0; + + options = Object.merge({ + onComplete: fn, + onProgress: fn, + onError: fn, + properties: {} + }, options); + + return new Elements(sources.map(function(source, index){ + return Asset.image(source, Object.append(options.properties, { + onload: function(){ + counter++; + options.onProgress.call(this, counter, index, source); + if (counter == sources.length) options.onComplete(); + }, + onerror: function(){ + counter++; + options.onError.call(this, counter, index, source); + if (counter == sources.length) options.onComplete(); + } + })); + })); + } + +}; + + +/* +--- + +script: Color.js + +name: Color + +description: Class for creating and manipulating colors in JavaScript. Supports HSB -> RGB Conversions and vice versa. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Array + - Core/String + - Core/Number + - Core/Hash + - Core/Function + - MooTools.More + +provides: [Color] + +... +*/ + +(function(){ + +var Color = this.Color = new Type('Color', function(color, type){ + if (arguments.length >= 3){ + type = 'rgb'; color = Array.slice(arguments, 0, 3); + } else if (typeof color == 'string'){ + if (color.match(/rgb/)) color = color.rgbToHex().hexToRgb(true); + else if (color.match(/hsb/)) color = color.hsbToRgb(); + else color = color.hexToRgb(true); + } + type = type || 'rgb'; + switch (type){ + case 'hsb': + var old = color; + color = color.hsbToRgb(); + color.hsb = old; + break; + case 'hex': color = color.hexToRgb(true); break; + } + color.rgb = color.slice(0, 3); + color.hsb = color.hsb || color.rgbToHsb(); + color.hex = color.rgbToHex(); + return Object.append(color, this); +}); + +Color.implement({ + + mix: function(){ + var colors = Array.slice(arguments); + var alpha = (typeOf(colors.getLast()) == 'number') ? colors.pop() : 50; + var rgb = this.slice(); + colors.each(function(color){ + color = new Color(color); + for (var i = 0; i < 3; i++) rgb[i] = Math.round((rgb[i] / 100 * (100 - alpha)) + (color[i] / 100 * alpha)); + }); + return new Color(rgb, 'rgb'); + }, + + invert: function(){ + return new Color(this.map(function(value){ + return 255 - value; + })); + }, + + setHue: function(value){ + return new Color([value, this.hsb[1], this.hsb[2]], 'hsb'); + }, + + setSaturation: function(percent){ + return new Color([this.hsb[0], percent, this.hsb[2]], 'hsb'); + }, + + setBrightness: function(percent){ + return new Color([this.hsb[0], this.hsb[1], percent], 'hsb'); + } + +}); + +this.$RGB = function(r, g, b){ + return new Color([r, g, b], 'rgb'); +}; + +this.$HSB = function(h, s, b){ + return new Color([h, s, b], 'hsb'); +}; + +this.$HEX = function(hex){ + return new Color(hex, 'hex'); +}; + +Array.implement({ + + rgbToHsb: function(){ + var red = this[0], + green = this[1], + blue = this[2], + hue = 0; + var max = Math.max(red, green, blue), + min = Math.min(red, green, blue); + var delta = max - min; + var brightness = max / 255, + saturation = (max != 0) ? delta / max : 0; + if (saturation != 0){ + var rr = (max - red) / delta; + var gr = (max - green) / delta; + var br = (max - blue) / delta; + if (red == max) hue = br - gr; + else if (green == max) hue = 2 + rr - br; + else hue = 4 + gr - rr; + hue /= 6; + if (hue < 0) hue++; + } + return [Math.round(hue * 360), Math.round(saturation * 100), Math.round(brightness * 100)]; + }, + + hsbToRgb: function(){ + var br = Math.round(this[2] / 100 * 255); + if (this[1] == 0){ + return [br, br, br]; + } else { + var hue = this[0] % 360; + var f = hue % 60; + var p = Math.round((this[2] * (100 - this[1])) / 10000 * 255); + var q = Math.round((this[2] * (6000 - this[1] * f)) / 600000 * 255); + var t = Math.round((this[2] * (6000 - this[1] * (60 - f))) / 600000 * 255); + switch (Math.floor(hue / 60)){ + case 0: return [br, t, p]; + case 1: return [q, br, p]; + case 2: return [p, br, t]; + case 3: return [p, q, br]; + case 4: return [t, p, br]; + case 5: return [br, p, q]; + } + } + return false; + } + +}); + +String.implement({ + + rgbToHsb: function(){ + var rgb = this.match(/\d{1,3}/g); + return (rgb) ? rgb.rgbToHsb() : null; + }, + + hsbToRgb: function(){ + var hsb = this.match(/\d{1,3}/g); + return (hsb) ? hsb.hsbToRgb() : null; + } + +}); + +})(); + + + +/* +--- + +script: Group.js + +name: Group + +description: Class for monitoring collections of events + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Events + - /MooTools.More + +provides: [Group] + +... +*/ + +(function(){ + +this.Group = new Class({ + + initialize: function(){ + this.instances = Array.flatten(arguments); + this.events = {}; + this.checker = {}; + }, + + addEvent: function(type, fn){ + this.checker[type] = this.checker[type] || {}; + this.events[type] = this.events[type] || []; + if (this.events[type].contains(fn)) return false; + else this.events[type].push(fn); + this.instances.each(function(instance, i){ + instance.addEvent(type, this.check.pass([type, instance, i], this)); + }, this); + return this; + }, + + check: function(type, instance, i){ + this.checker[type][i] = true; + var every = this.instances.every(function(current, j){ + return this.checker[type][j] || false; + }, this); + if (!every) return; + this.checker[type] = {}; + this.events[type].each(function(event){ + event.call(this, this.instances, instance); + }, this); + } + +}); + +})(); + + + +/* +--- + +script: Hash.Cookie.js + +name: Hash.Cookie + +description: Class for creating, reading, and deleting Cookies in JSON format. + +license: MIT-style license + +authors: + - Valerio Proietti + - Aaron Newton + +requires: + - Core/Cookie + - Core/JSON + - /MooTools.More + - /Hash + +provides: [Hash.Cookie] + +... +*/ + +Hash.Cookie = new Class({ + + Extends: Cookie, + + options: { + autoSave: true + }, + + initialize: function(name, options){ + this.parent(name, options); + this.load(); + }, + + save: function(){ + var value = JSON.encode(this.hash); + if (!value || value.length > 4096) return false; //cookie would be truncated! + if (value == '{}') this.dispose(); + else this.write(value); + return true; + }, + + load: function(){ + this.hash = new Hash(JSON.decode(this.read(), true)); + return this; + } + +}); + +Hash.each(Hash.prototype, function(method, name){ + if (typeof method == 'function') Hash.Cookie.implement(name, function(){ + var value = method.apply(this.hash, arguments); + if (this.options.autoSave) this.save(); + return value; + }); +}); + + +/* +--- +name: Table +description: LUA-Style table implementation. +license: MIT-style license +authors: + - Valerio Proietti +requires: [Core/Array] +provides: [Table] +... +*/ + +(function(){ + +var Table = this.Table = function(){ + + this.length = 0; + var keys = [], + values = []; + + this.set = function(key, value){ + var index = keys.indexOf(key); + if (index == -1){ + var length = keys.length; + keys[length] = key; + values[length] = value; + this.length++; + } else { + values[index] = value; + } + return this; + }; + + this.get = function(key){ + var index = keys.indexOf(key); + return (index == -1) ? null : values[index]; + }; + + this.erase = function(key){ + var index = keys.indexOf(key); + if (index != -1){ + this.length--; + keys.splice(index, 1); + return values.splice(index, 1)[0]; + } + return null; + }; + + this.each = this.forEach = function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++) fn.call(bind, keys[i], values[i], this); + }; + +}; + +if (this.Type) new Type('Table', Table); + +})(); + + +/* +--- + +script: HtmlTable.js + +name: HtmlTable + +description: Builds table elements with methods to add rows. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Options + - Core/Events + - /Class.Occlude + +provides: [HtmlTable] + +... +*/ + +var HtmlTable = new Class({ + + Implements: [Options, Events, Class.Occlude], + + options: { + properties: { + cellpadding: 0, + cellspacing: 0, + border: 0 + }, + rows: [], + headers: [], + footers: [] + }, + + property: 'HtmlTable', + + initialize: function(){ + var params = Array.link(arguments, {options: Type.isObject, table: Type.isElement, id: Type.isString}); + this.setOptions(params.options); + if (!params.table && params.id) params.table = document.id(params.id); + this.element = params.table || new Element('table', this.options.properties); + if (this.occlude()) return this.occluded; + this.build(); + }, + + build: function(){ + this.element.store('HtmlTable', this); + + this.body = document.id(this.element.tBodies[0]) || new Element('tbody').inject(this.element); + $$(this.body.rows); + + if (this.options.headers.length) this.setHeaders(this.options.headers); + else this.thead = document.id(this.element.tHead); + + if (this.thead) this.head = this.getHead(); + if (this.options.footers.length) this.setFooters(this.options.footers); + + this.tfoot = document.id(this.element.tFoot); + if (this.tfoot) this.foot = document.id(this.tfoot.rows[0]); + + this.options.rows.each(function(row){ + this.push(row); + }, this); + }, + + toElement: function(){ + return this.element; + }, + + empty: function(){ + this.body.empty(); + return this; + }, + + set: function(what, items){ + var target = (what == 'headers') ? 'tHead' : 'tFoot', + lower = target.toLowerCase(); + + this[lower] = (document.id(this.element[target]) || new Element(lower).inject(this.element, 'top')).empty(); + var data = this.push(items, {}, this[lower], what == 'headers' ? 'th' : 'td'); + + if (what == 'headers') this.head = this.getHead(); + else this.foot = this.getHead(); + + return data; + }, + + getHead: function(){ + var rows = this.thead.rows; + return rows.length > 1 ? $$(rows) : rows.length ? document.id(rows[0]) : false; + }, + + setHeaders: function(headers){ + this.set('headers', headers); + return this; + }, + + setFooters: function(footers){ + this.set('footers', footers); + return this; + }, + + push: function(row, rowProperties, target, tag, where){ + if (typeOf(row) == 'element' && row.get('tag') == 'tr'){ + row.inject(target || this.body, where); + return { + tr: row, + tds: row.getChildren('td') + }; + } + + var tds = row.map(function(data){ + var td = new Element(tag || 'td', data ? data.properties : {}), + content = (data ? data.content : '') || data, + type = typeOf(content); + + if (['element', 'array', 'collection', 'elements'].contains(type)) td.adopt(content); + else td.set('html', content); + + return td; + }); + + return { + tr: new Element('tr', rowProperties).inject(target || this.body, where).adopt(tds), + tds: tds + }; + } + +}); + + +['adopt', 'inject', 'wraps', 'grab', 'replaces', 'dispose'].each(function(method){ + HtmlTable.implement(method, function(){ + this.element[method].apply(this.element, arguments); + return this; + }); +}); + + + + +/* +--- + +script: HtmlTable.Zebra.js + +name: HtmlTable.Zebra + +description: Builds a stripy table with methods to add rows. + +license: MIT-style license + +authors: + - Harald Kirschner + - Aaron Newton + +requires: + - /HtmlTable + - /Class.refactor + +provides: [HtmlTable.Zebra] + +... +*/ + +HtmlTable = Class.refactor(HtmlTable, { + + options: { + classZebra: 'table-tr-odd', + zebra: true + }, + + initialize: function(){ + this.previous.apply(this, arguments); + if (this.occluded) return this.occluded; + if (this.options.zebra) this.updateZebras(); + }, + + updateZebras: function(){ + Array.each(this.body.rows, this.zebra, this); + }, + + setRowStyle: function(row, i){ + if (this.previous) this.previous(row, i); + this.zebra(row, i); + }, + + zebra: function(row, i){ + return row[((i % 2) ? 'remove' : 'add')+'Class'](this.options.classZebra); + }, + + push: function(){ + var pushed = this.previous.apply(this, arguments); + if (this.options.zebra) this.updateZebras(); + return pushed; + } + +}); + + +/* +--- + +script: HtmlTable.Sort.js + +name: HtmlTable.Sort + +description: Builds a stripy, sortable table with methods to add rows. + +license: MIT-style license + +authors: + - Harald Kirschner + - Aaron Newton + - Jacob Thornton + +requires: + - Core/Hash + - /HtmlTable + - /Class.refactor + - /Element.Delegation + - /String.Extras + - /Date + +provides: [HtmlTable.Sort] + +... +*/ + +HtmlTable = Class.refactor(HtmlTable, { + + options: {/* + onSort: function(){}, */ + sortIndex: 0, + sortReverse: false, + parsers: [], + defaultParser: 'string', + classSortable: 'table-sortable', + classHeadSort: 'table-th-sort', + classHeadSortRev: 'table-th-sort-rev', + classNoSort: 'table-th-nosort', + classGroupHead: 'table-tr-group-head', + classGroup: 'table-tr-group', + classCellSort: 'table-td-sort', + classSortSpan: 'table-th-sort-span', + sortable: false, + thSelector: 'th' + }, + + initialize: function (){ + this.previous.apply(this, arguments); + if (this.occluded) return this.occluded; + this.sorted = {index: null, dir: 1}; + this.bound = { + headClick: this.headClick.bind(this) + }; + this.sortSpans = new Elements(); + if (this.options.sortable){ + this.enableSort(); + if (this.options.sortIndex != null) this.sort(this.options.sortIndex, this.options.sortReverse); + } + }, + + attachSorts: function(attach){ + this.detachSorts(); + if (attach !== false) this.element.addEvent('click:relay(' + this.options.thSelector + ')', this.bound.headClick); + }, + + detachSorts: function(){ + this.element.removeEvents('click:relay(' + this.options.thSelector + ')'); + }, + + setHeaders: function(){ + this.previous.apply(this, arguments); + if (this.sortEnabled) this.setParsers(); + }, + + setParsers: function(){ + this.parsers = this.detectParsers(); + }, + + detectParsers: function(){ + return this.head && this.head.getElements(this.options.thSelector).flatten().map(this.detectParser, this); + }, + + detectParser: function(cell, index){ + if (cell.hasClass(this.options.classNoSort) || cell.retrieve('htmltable-parser')) return cell.retrieve('htmltable-parser'); + var thDiv = new Element('div'); + thDiv.adopt(cell.childNodes).inject(cell); + var sortSpan = new Element('span', {'class': this.options.classSortSpan}).inject(thDiv, 'top'); + this.sortSpans.push(sortSpan); + var parser = this.options.parsers[index], + rows = this.body.rows, + cancel; + switch (typeOf(parser)){ + case 'function': parser = {convert: parser}; cancel = true; break; + case 'string': parser = parser; cancel = true; break; + } + if (!cancel){ + HtmlTable.ParserPriority.some(function(parserName){ + var current = HtmlTable.Parsers[parserName], + match = current.match; + if (!match) return false; + for (var i = 0, j = rows.length; i < j; i++){ + var cell = document.id(rows[i].cells[index]), + text = cell ? cell.get('html').clean() : ''; + if (text && match.test(text)){ + parser = current; + return true; + } + } + }); + } + if (!parser) parser = this.options.defaultParser; + cell.store('htmltable-parser', parser); + return parser; + }, + + headClick: function(event, el){ + if (!this.head || el.hasClass(this.options.classNoSort)) return; + return this.sort(Array.indexOf(this.head.getElements(this.options.thSelector).flatten(), el) % this.body.rows[0].cells.length); + }, + + serialize: function() { + var previousSerialization = this.previous.apply(this, arguments) || {}; + if (this.options.sortable) { + previousSerialization.sortIndex = this.sorted.index; + previousSerialization.sortReverse = this.sorted.reverse; + } + return previousSerialization; + }, + + restore: function(tableState) { + if(this.options.sortable && tableState.sortIndex) { + this.sort(tableState.sortIndex, tableState.sortReverse); + } + this.previous.apply(this, arguments); + }, + + setSortedState: function(index, reverse){ + if (reverse != null) this.sorted.reverse = reverse; + else if (this.sorted.index == index) this.sorted.reverse = !this.sorted.reverse; + else this.sorted.reverse = this.sorted.index == null; + + if (index != null) this.sorted.index = index; + }, + + setHeadSort: function(sorted){ + var head = $$(!this.head.length ? this.head.cells[this.sorted.index] : this.head.map(function(row){ + return row.getElements(this.options.thSelector)[this.sorted.index]; + }, this).clean()); + if (!head.length) return; + if (sorted){ + head.addClass(this.options.classHeadSort); + if (this.sorted.reverse) head.addClass(this.options.classHeadSortRev); + else head.removeClass(this.options.classHeadSortRev); + } else { + head.removeClass(this.options.classHeadSort).removeClass(this.options.classHeadSortRev); + } + }, + + setRowSort: function(data, pre){ + var count = data.length, + body = this.body, + group, + rowIndex; + + while (count){ + var item = data[--count], + position = item.position, + row = body.rows[position]; + + if (row.disabled) continue; + if (!pre){ + group = this.setGroupSort(group, row, item); + this.setRowStyle(row, count); + } + body.appendChild(row); + + for (rowIndex = 0; rowIndex < count; rowIndex++){ + if (data[rowIndex].position > position) data[rowIndex].position--; + } + } + }, + + setRowStyle: function(row, i){ + this.previous(row, i); + row.cells[this.sorted.index].addClass(this.options.classCellSort); + }, + + setGroupSort: function(group, row, item){ + if (group == item.value) row.removeClass(this.options.classGroupHead).addClass(this.options.classGroup); + else row.removeClass(this.options.classGroup).addClass(this.options.classGroupHead); + return item.value; + }, + + getParser: function(){ + var parser = this.parsers[this.sorted.index]; + return typeOf(parser) == 'string' ? HtmlTable.Parsers[parser] : parser; + }, + + sort: function(index, reverse, pre){ + if (!this.head) return; + + if (!pre){ + this.clearSort(); + this.setSortedState(index, reverse); + this.setHeadSort(true); + } + + var parser = this.getParser(); + if (!parser) return; + + var rel; + if (!Browser.ie){ + rel = this.body.getParent(); + this.body.dispose(); + } + + var data = this.parseData(parser).sort(function(a, b){ + if (a.value === b.value) return 0; + return a.value > b.value ? 1 : -1; + }); + + if (this.sorted.reverse == (parser == HtmlTable.Parsers['input-checked'])) data.reverse(true); + this.setRowSort(data, pre); + + if (rel) rel.grab(this.body); + this.fireEvent('stateChanged'); + return this.fireEvent('sort', [this.body, this.sorted.index]); + }, + + parseData: function(parser){ + return Array.map(this.body.rows, function(row, i){ + var value = parser.convert.call(document.id(row.cells[this.sorted.index])); + return { + position: i, + value: value + }; + }, this); + }, + + clearSort: function(){ + this.setHeadSort(false); + this.body.getElements('td').removeClass(this.options.classCellSort); + }, + + reSort: function(){ + if (this.sortEnabled) this.sort.call(this, this.sorted.index, this.sorted.reverse); + return this; + }, + + enableSort: function(){ + this.element.addClass(this.options.classSortable); + this.attachSorts(true); + this.setParsers(); + this.sortEnabled = true; + return this; + }, + + disableSort: function(){ + this.element.removeClass(this.options.classSortable); + this.attachSorts(false); + this.sortSpans.each(function(span){ + span.destroy(); + }); + this.sortSpans.empty(); + this.sortEnabled = false; + return this; + } + +}); + +HtmlTable.ParserPriority = ['date', 'input-checked', 'input-value', 'float', 'number']; + +HtmlTable.Parsers = { + + 'date': { + match: /^\d{2}[-\/ ]\d{2}[-\/ ]\d{2,4}$/, + convert: function(){ + var d = Date.parse(this.get('text').stripTags()); + return (typeOf(d) == 'date') ? d.format('db') : ''; + }, + type: 'date' + }, + 'input-checked': { + match: / type="(radio|checkbox)" /, + convert: function(){ + return this.getElement('input').checked; + } + }, + 'input-value': { + match: / +HtmlTable.Parsers = new Hash(HtmlTable.Parsers); +// + +HtmlTable.defineParsers = function(parsers){ + HtmlTable.Parsers = Object.append(HtmlTable.Parsers, parsers); + for (var parser in parsers){ + HtmlTable.ParserPriority.unshift(parser); + } +}; + + +/* +--- + +script: Keyboard.js + +name: Keyboard + +description: KeyboardEvents used to intercept events on a class for keyboard and format modifiers in a specific order so as to make alt+shift+c the same as shift+alt+c. + +license: MIT-style license + +authors: + - Perrin Westrich + - Aaron Newton + - Scott Kyle + +requires: + - Core/Events + - Core/Options + - Core/Element.Event + - Element.Event.Pseudos.Keys + +provides: [Keyboard] + +... +*/ + +(function(){ + + var Keyboard = this.Keyboard = new Class({ + + Extends: Events, + + Implements: [Options], + + options: {/* + onActivate: function(){}, + onDeactivate: function(){},*/ + defaultEventType: 'keydown', + active: false, + manager: null, + events: {}, + nonParsedEvents: ['activate', 'deactivate', 'onactivate', 'ondeactivate', 'changed', 'onchanged'] + }, + + initialize: function(options){ + if (options && options.manager){ + this._manager = options.manager; + delete options.manager; + } + this.setOptions(options); + this._setup(); + }, + + addEvent: function(type, fn, internal){ + return this.parent(Keyboard.parse(type, this.options.defaultEventType, this.options.nonParsedEvents), fn, internal); + }, + + removeEvent: function(type, fn){ + return this.parent(Keyboard.parse(type, this.options.defaultEventType, this.options.nonParsedEvents), fn); + }, + + toggleActive: function(){ + return this[this.isActive() ? 'deactivate' : 'activate'](); + }, + + activate: function(instance){ + if (instance){ + if (instance.isActive()) return this; + //if we're stealing focus, store the last keyboard to have it so the relinquish command works + if (this._activeKB && instance != this._activeKB){ + this.previous = this._activeKB; + this.previous.fireEvent('deactivate'); + } + //if we're enabling a child, assign it so that events are now passed to it + this._activeKB = instance.fireEvent('activate'); + Keyboard.manager.fireEvent('changed'); + } else if (this._manager){ + //else we're enabling ourselves, we must ask our parent to do it for us + this._manager.activate(this); + } + return this; + }, + + isActive: function(){ + return this._manager ? (this._manager._activeKB == this) : (Keyboard.manager == this); + }, + + deactivate: function(instance){ + if (instance){ + if (instance === this._activeKB){ + this._activeKB = null; + instance.fireEvent('deactivate'); + Keyboard.manager.fireEvent('changed'); + } + } else if (this._manager){ + this._manager.deactivate(this); + } + return this; + }, + + relinquish: function(){ + if (this.isActive() && this._manager && this._manager.previous) this._manager.activate(this._manager.previous); + else this.deactivate(); + return this; + }, + + //management logic + manage: function(instance){ + if (instance._manager) instance._manager.drop(instance); + this._instances.push(instance); + instance._manager = this; + if (!this._activeKB) this.activate(instance); + return this; + }, + + drop: function(instance){ + instance.relinquish(); + this._instances.erase(instance); + if (this._activeKB == instance){ + if (this.previous && this._instances.contains(this.previous)) this.activate(this.previous); + else this._activeKB = this._instances[0]; + } + return this; + }, + + trace: function(){ + Keyboard.trace(this); + }, + + each: function(fn){ + Keyboard.each(this, fn); + }, + + /* + PRIVATE METHODS + */ + + _instances: [], + + _disable: function(instance){ + if (this._activeKB == instance) this._activeKB = null; + }, + + _setup: function(){ + this.addEvents(this.options.events); + //if this is the root manager, nothing manages it + if (Keyboard.manager && !this._manager) Keyboard.manager.manage(this); + if (this.options.active) this.activate(); + else this.relinquish(); + }, + + _handle: function(event, type){ + //Keyboard.stop(event) prevents key propagation + if (event.preventKeyboardPropagation) return; + + var bubbles = !!this._manager; + if (bubbles && this._activeKB){ + this._activeKB._handle(event, type); + if (event.preventKeyboardPropagation) return; + } + this.fireEvent(type, event); + + if (!bubbles && this._activeKB) this._activeKB._handle(event, type); + } + + }); + + var parsed = {}; + var modifiers = ['shift', 'control', 'alt', 'meta']; + var regex = /^(?:shift|control|ctrl|alt|meta)$/; + + Keyboard.parse = function(type, eventType, ignore){ + if (ignore && ignore.contains(type.toLowerCase())) return type; + + type = type.toLowerCase().replace(/^(keyup|keydown):/, function($0, $1){ + eventType = $1; + return ''; + }); + + if (!parsed[type]){ + var key, mods = {}; + type.split('+').each(function(part){ + if (regex.test(part)) mods[part] = true; + else key = part; + }); + + mods.control = mods.control || mods.ctrl; // allow both control and ctrl + + var keys = []; + modifiers.each(function(mod){ + if (mods[mod]) keys.push(mod); + }); + + if (key) keys.push(key); + parsed[type] = keys.join('+'); + } + + return eventType + ':keys(' + parsed[type] + ')'; + }; + + Keyboard.each = function(keyboard, fn){ + var current = keyboard || Keyboard.manager; + while (current){ + fn.run(current); + current = current._activeKB; + } + }; + + Keyboard.stop = function(event){ + event.preventKeyboardPropagation = true; + }; + + Keyboard.manager = new Keyboard({ + active: true + }); + + Keyboard.trace = function(keyboard){ + keyboard = keyboard || Keyboard.manager; + var hasConsole = window.console && console.log; + if (hasConsole) console.log('the following items have focus: '); + Keyboard.each(keyboard, function(current){ + if (hasConsole) console.log(document.id(current.widget) || current.wiget || current); + }); + }; + + var handler = function(event){ + var keys = []; + modifiers.each(function(mod){ + if (event[mod]) keys.push(mod); + }); + + if (!regex.test(event.key)) keys.push(event.key); + Keyboard.manager._handle(event, event.type + ':keys(' + keys.join('+') + ')'); + }; + + document.addEvents({ + 'keyup': handler, + 'keydown': handler + }); + +})(); + + +/* +--- + +script: Keyboard.Extras.js + +name: Keyboard.Extras + +description: Enhances Keyboard by adding the ability to name and describe keyboard shortcuts, and the ability to grab shortcuts by name and bind the shortcut to different keys. + +license: MIT-style license + +authors: + - Perrin Westrich + +requires: + - /Keyboard + - /MooTools.More + +provides: [Keyboard.Extras] + +... +*/ +Keyboard.prototype.options.nonParsedEvents.combine(['rebound', 'onrebound']); + +Keyboard.implement({ + + /* + shortcut should be in the format of: + { + 'keys': 'shift+s', // the default to add as an event. + 'description': 'blah blah blah', // a brief description of the functionality. + 'handler': function(){} // the event handler to run when keys are pressed. + } + */ + addShortcut: function(name, shortcut){ + this._shortcuts = this._shortcuts || []; + this._shortcutIndex = this._shortcutIndex || {}; + + shortcut.getKeyboard = Function.from(this); + shortcut.name = name; + this._shortcutIndex[name] = shortcut; + this._shortcuts.push(shortcut); + if (shortcut.keys) this.addEvent(shortcut.keys, shortcut.handler); + return this; + }, + + addShortcuts: function(obj){ + for (var name in obj) this.addShortcut(name, obj[name]); + return this; + }, + + removeShortcut: function(name){ + var shortcut = this.getShortcut(name); + if (shortcut && shortcut.keys){ + this.removeEvent(shortcut.keys, shortcut.handler); + delete this._shortcutIndex[name]; + this._shortcuts.erase(shortcut); + } + return this; + }, + + removeShortcuts: function(names){ + names.each(this.removeShortcut, this); + return this; + }, + + getShortcuts: function(){ + return this._shortcuts || []; + }, + + getShortcut: function(name){ + return (this._shortcutIndex || {})[name]; + } + +}); + +Keyboard.rebind = function(newKeys, shortcuts){ + Array.from(shortcuts).each(function(shortcut){ + shortcut.getKeyboard().removeEvent(shortcut.keys, shortcut.handler); + shortcut.getKeyboard().addEvent(newKeys, shortcut.handler); + shortcut.keys = newKeys; + shortcut.getKeyboard().fireEvent('rebound'); + }); +}; + + +Keyboard.getActiveShortcuts = function(keyboard){ + var activeKBS = [], activeSCS = []; + Keyboard.each(keyboard, [].push.bind(activeKBS)); + activeKBS.each(function(kb){ activeSCS.extend(kb.getShortcuts()); }); + return activeSCS; +}; + +Keyboard.getShortcut = function(name, keyboard, opts){ + opts = opts || {}; + var shortcuts = opts.many ? [] : null, + set = opts.many ? function(kb){ + var shortcut = kb.getShortcut(name); + if (shortcut) shortcuts.push(shortcut); + } : function(kb){ + if (!shortcuts) shortcuts = kb.getShortcut(name); + }; + Keyboard.each(keyboard, set); + return shortcuts; +}; + +Keyboard.getShortcuts = function(name, keyboard){ + return Keyboard.getShortcut(name, keyboard, { many: true }); +}; + + +/* +--- + +script: HtmlTable.Select.js + +name: HtmlTable.Select + +description: Builds a stripy, sortable table with methods to add rows. Rows can be selected with the mouse or keyboard navigation. + +license: MIT-style license + +authors: + - Harald Kirschner + - Aaron Newton + +requires: + - /Keyboard + - /Keyboard.Extras + - /HtmlTable + - /Class.refactor + - /Element.Delegation + - /Element.Shortcuts + +provides: [HtmlTable.Select] + +... +*/ + +HtmlTable = Class.refactor(HtmlTable, { + + options: { + /*onRowFocus: function(){}, + onRowUnfocus: function(){},*/ + useKeyboard: true, + classRowSelected: 'table-tr-selected', + classRowHovered: 'table-tr-hovered', + classSelectable: 'table-selectable', + shiftForMultiSelect: true, + allowMultiSelect: true, + selectable: false + }, + + initialize: function(){ + this.previous.apply(this, arguments); + if (this.occluded) return this.occluded; + + this.selectedRows = new Elements(); + + this.bound = { + mouseleave: this.mouseleave.bind(this), + clickRow: this.clickRow.bind(this), + activateKeyboard: function() { + if (this.keyboard && this.selectEnabled) this.keyboard.activate(); + }.bind(this) + }; + + if (this.options.selectable) this.enableSelect(); + }, + + empty: function(){ + this.selectNone(); + return this.previous(); + }, + + enableSelect: function(){ + this.selectEnabled = true; + this.attachSelects(); + this.element.addClass(this.options.classSelectable); + return this; + }, + + disableSelect: function(){ + this.selectEnabled = false; + this.attachSelects(false); + this.element.removeClass(this.options.classSelectable); + return this; + }, + + push: function(){ + var ret = this.previous.apply(this, arguments); + this.updateSelects(); + return ret; + }, + + isSelected: function(row){ + return this.selectedRows.contains(row); + }, + + toggleRow: function(row){ + return this[(this.isSelected(row) ? 'de' : '') + 'selectRow'](row); + }, + + selectRow: function(row, _nocheck){ + //private variable _nocheck: boolean whether or not to confirm the row is in the table body + //added here for optimization when selecting ranges + if (this.isSelected(row) || (!_nocheck && !this.body.getChildren().contains(row))) return; + if (!this.options.allowMultiSelect) this.selectNone(); + + if (!this.isSelected(row)){ + this.selectedRows.push(row); + row.addClass(this.options.classRowSelected); + this.fireEvent('rowFocus', [row, this.selectedRows]); + this.fireEvent('stateChanged'); + } + + this.focused = row; + document.clearSelection(); + + return this; + }, + + getSelected: function(){ + return this.selectedRows; + }, + + serialize: function() { + var previousSerialization = this.previous.apply(this, arguments) || {}; + if (this.options.selectable) { + previousSerialization.selectedRows = this.selectedRows.map(function(row) { + return Array.indexOf(this.body.rows, row); + }.bind(this)); + } + return previousSerialization; + }, + + restore: function(tableState) { + if(this.options.selectable && tableState.selectedRows) { + tableState.selectedRows.each(function(index) { + this.selectRow(this.body.rows[index]); + }.bind(this)); + } + this.previous.apply(this, arguments); + }, + + deselectRow: function(row, _nocheck){ + if (!this.isSelected(row) || (!_nocheck && !this.body.getChildren().contains(row))) return; + + this.selectedRows = new Elements(Array.from(this.selectedRows).erase(row)); + row.removeClass(this.options.classRowSelected); + this.fireEvent('rowUnfocus', [row, this.selectedRows]); + this.fireEvent('stateChanged'); + return this; + }, + + selectAll: function(selectNone){ + if (!selectNone && !this.options.allowMultiSelect) return; + this.selectRange(0, this.body.rows.length, selectNone); + return this; + }, + + selectNone: function(){ + return this.selectAll(true); + }, + + selectRange: function(startRow, endRow, _deselect){ + if (!this.options.allowMultiSelect && !_deselect) return; + var method = _deselect ? 'deselectRow' : 'selectRow', + rows = Array.clone(this.body.rows); + + if (typeOf(startRow) == 'element') startRow = rows.indexOf(startRow); + if (typeOf(endRow) == 'element') endRow = rows.indexOf(endRow); + endRow = endRow < rows.length - 1 ? endRow : rows.length - 1; + + if (endRow < startRow){ + var tmp = startRow; + startRow = endRow; + endRow = tmp; + } + + for (var i = startRow; i <= endRow; i++) this[method](rows[i], true); + + return this; + }, + + deselectRange: function(startRow, endRow){ + this.selectRange(startRow, endRow, true); + }, + + getSelected: function(){ + return this.selectedRows; + }, + +/* + Private methods: +*/ + + enterRow: function(row){ + if (this.hovered) this.hovered = this.leaveRow(this.hovered); + this.hovered = row.addClass(this.options.classRowHovered); + }, + + leaveRow: function(row){ + row.removeClass(this.options.classRowHovered); + }, + + updateSelects: function(){ + Array.each(this.body.rows, function(row){ + var binders = row.retrieve('binders'); + if (!binders && !this.selectEnabled) return; + if (!binders){ + binders = { + mouseenter: this.enterRow.pass([row], this), + mouseleave: this.leaveRow.pass([row], this) + }; + row.store('binders', binders); + } + if (this.selectEnabled) row.addEvents(binders); + else row.removeEvents(binders); + }, this); + }, + + shiftFocus: function(offset, event){ + if (!this.focused) return this.selectRow(this.body.rows[0], event); + var to = this.getRowByOffset(offset); + if (to === null || this.focused == this.body.rows[to]) return this; + this.toggleRow(this.body.rows[to], event); + }, + + clickRow: function(event, row){ + var selecting = (event.shift || event.meta || event.control) && this.options.shiftForMultiSelect; + if (!selecting && !(event.rightClick && this.isSelected(row) && this.options.allowMultiSelect)) this.selectNone(); + + if (event.rightClick) this.selectRow(row); + else this.toggleRow(row); + + if (event.shift){ + this.selectRange(this.rangeStart || this.body.rows[0], row, this.rangeStart ? !this.isSelected(row) : true); + this.focused = row; + } + this.rangeStart = row; + }, + + getRowByOffset: function(offset){ + if (!this.focused) return 0; + var rows = Array.clone(this.body.rows), + index = rows.indexOf(this.focused) + offset; + + if (index < 0) index = null; + if (index >= rows.length) index = null; + + return index; + }, + + attachSelects: function(attach){ + attach = attach != null ? attach : true; + + var method = attach ? 'addEvents' : 'removeEvents'; + this.element[method]({ + mouseleave: this.bound.mouseleave, + click: this.bound.activateKeyboard + }); + + this.body[method]({ + 'click:relay(tr)': this.bound.clickRow, + 'contextmenu:relay(tr)': this.bound.clickRow + }); + + if (this.options.useKeyboard || this.keyboard){ + if (!this.keyboard) this.keyboard = new Keyboard(); + if (!this.selectKeysDefined) { + this.selectKeysDefined = true; + var timer, held; + + var move = function(offset){ + var mover = function(e){ + clearTimeout(timer); + e.preventDefault(); + + var to = this.body.rows[this.getRowByOffset(offset)]; + if (e.shift && to && this.isSelected(to)){ + this.deselectRow(this.focused); + this.focused = to; + } else { + if (to && (!this.options.allowMultiSelect || !e.shift)){ + this.selectNone(); + } + this.shiftFocus(offset, e); + } + + if (held){ + timer = mover.delay(100, this, e); + } else { + timer = (function(){ + held = true; + mover(e); + }).delay(400); + } + }.bind(this); + return mover; + }.bind(this); + + var clear = function(){ + clearTimeout(timer); + held = false; + }; + + this.keyboard.addEvents({ + 'keydown:shift+up': move(-1), + 'keydown:shift+down': move(1), + 'keyup:shift+up': clear, + 'keyup:shift+down': clear, + 'keyup:up': clear, + 'keyup:down': clear + }); + + var shiftHint = ''; + if (this.options.allowMultiSelect && this.options.shiftForMultiSelect && this.options.useKeyboard){ + shiftHint = " (Shift multi-selects)."; + } + + this.keyboard.addShortcuts({ + 'Select Previous Row': { + keys: 'up', + shortcut: 'up arrow', + handler: move(-1), + description: 'Select the previous row in the table.' + shiftHint + }, + 'Select Next Row': { + keys: 'down', + shortcut: 'down arrow', + handler: move(1), + description: 'Select the next row in the table.' + shiftHint + } + }); + + } + this.keyboard[attach ? 'activate' : 'deactivate'](); + } + this.updateSelects(); + }, + + mouseleave: function(){ + if (this.hovered) this.leaveRow(this.hovered); + } + +}); + + +/* +--- + +script: Scroller.js + +name: Scroller + +description: Class which scrolls the contents of any Element (including the window) when the mouse reaches the Element's boundaries. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Events + - Core/Options + - Core/Element.Event + - Core/Element.Dimensions + - MooTools.More + +provides: [Scroller] + +... +*/ + +var Scroller = new Class({ + + Implements: [Events, Options], + + options: { + area: 20, + velocity: 1, + onChange: function(x, y){ + this.element.scrollTo(x, y); + }, + fps: 50 + }, + + initialize: function(element, options){ + this.setOptions(options); + this.element = document.id(element); + this.docBody = document.id(this.element.getDocument().body); + this.listener = (typeOf(this.element) != 'element') ? this.docBody : this.element; + this.timer = null; + this.bound = { + attach: this.attach.bind(this), + detach: this.detach.bind(this), + getCoords: this.getCoords.bind(this) + }; + }, + + start: function(){ + this.listener.addEvents({ + mouseover: this.bound.attach, + mouseleave: this.bound.detach + }); + return this; + }, + + stop: function(){ + this.listener.removeEvents({ + mouseover: this.bound.attach, + mouseleave: this.bound.detach + }); + this.detach(); + this.timer = clearInterval(this.timer); + return this; + }, + + attach: function(){ + this.listener.addEvent('mousemove', this.bound.getCoords); + }, + + detach: function(){ + this.listener.removeEvent('mousemove', this.bound.getCoords); + this.timer = clearInterval(this.timer); + }, + + getCoords: function(event){ + this.page = (this.listener.get('tag') == 'body') ? event.client : event.page; + if (!this.timer) this.timer = this.scroll.periodical(Math.round(1000 / this.options.fps), this); + }, + + scroll: function(){ + var size = this.element.getSize(), + scroll = this.element.getScroll(), + pos = this.element != this.docBody ? this.element.getOffsets() : {x: 0, y:0}, + scrollSize = this.element.getScrollSize(), + change = {x: 0, y: 0}, + top = this.options.area.top || this.options.area, + bottom = this.options.area.bottom || this.options.area; + for (var z in this.page){ + if (this.page[z] < (top + pos[z]) && scroll[z] != 0){ + change[z] = (this.page[z] - top - pos[z]) * this.options.velocity; + } else if (this.page[z] + bottom > (size[z] + pos[z]) && scroll[z] + size[z] != scrollSize[z]){ + change[z] = (this.page[z] - size[z] + bottom - pos[z]) * this.options.velocity; + } + change[z] = change[z].round(); + } + if (change.y || change.x) this.fireEvent('change', [scroll.x + change.x, scroll.y + change.y]); + } + +}); + + +/* +--- + +script: Tips.js + +name: Tips + +description: Class for creating nice tips that follow the mouse cursor when hovering an element. + +license: MIT-style license + +authors: + - Valerio Proietti + - Christoph Pojer + - Luis Merino + +requires: + - Core/Options + - Core/Events + - Core/Element.Event + - Core/Element.Style + - Core/Element.Dimensions + - /MooTools.More + +provides: [Tips] + +... +*/ + +(function(){ + +var read = function(option, element){ + return (option) ? (typeOf(option) == 'function' ? option(element) : element.get(option)) : ''; +}; + +this.Tips = new Class({ + + Implements: [Events, Options], + + options: {/* + onAttach: function(element){}, + onDetach: function(element){}, + onBound: function(coords){},*/ + onShow: function(){ + this.tip.setStyle('display', 'block'); + }, + onHide: function(){ + this.tip.setStyle('display', 'none'); + }, + title: 'title', + text: function(element){ + return element.get('rel') || element.get('href'); + }, + showDelay: 100, + hideDelay: 100, + className: 'tip-wrap', + offset: {x: 16, y: 16}, + windowPadding: {x:0, y:0}, + fixed: false + }, + + initialize: function(){ + var params = Array.link(arguments, { + options: Type.isObject, + elements: function(obj){ + return obj != null; + } + }); + this.setOptions(params.options); + if (params.elements) this.attach(params.elements); + this.container = new Element('div', {'class': 'tip'}); + }, + + toElement: function(){ + if (this.tip) return this.tip; + + this.tip = new Element('div', { + 'class': this.options.className, + styles: { + position: 'absolute', + top: 0, + left: 0 + } + }).adopt( + new Element('div', {'class': 'tip-top'}), + this.container, + new Element('div', {'class': 'tip-bottom'}) + ); + + return this.tip; + }, + + attach: function(elements){ + $$(elements).each(function(element){ + var title = read(this.options.title, element), + text = read(this.options.text, element); + + element.set('title', '').store('tip:native', title).retrieve('tip:title', title); + element.retrieve('tip:text', text); + this.fireEvent('attach', [element]); + + var events = ['enter', 'leave']; + if (!this.options.fixed) events.push('move'); + + events.each(function(value){ + var event = element.retrieve('tip:' + value); + if (!event) event = function(event){ + this['element' + value.capitalize()].apply(this, [event, element]); + }.bind(this); + + element.store('tip:' + value, event).addEvent('mouse' + value, event); + }, this); + }, this); + + return this; + }, + + detach: function(elements){ + $$(elements).each(function(element){ + ['enter', 'leave', 'move'].each(function(value){ + element.removeEvent('mouse' + value, element.retrieve('tip:' + value)).eliminate('tip:' + value); + }); + + this.fireEvent('detach', [element]); + + if (this.options.title == 'title'){ // This is necessary to check if we can revert the title + var original = element.retrieve('tip:native'); + if (original) element.set('title', original); + } + }, this); + + return this; + }, + + elementEnter: function(event, element){ + clearTimeout(this.timer); + this.timer = (function(){ + this.container.empty(); + + ['title', 'text'].each(function(value){ + var content = element.retrieve('tip:' + value); + var div = this['_' + value + 'Element'] = new Element('div', { + 'class': 'tip-' + value + }).inject(this.container); + if (content) this.fill(div, content); + }, this); + this.show(element); + this.position((this.options.fixed) ? {page: element.getPosition()} : event); + }).delay(this.options.showDelay, this); + }, + + elementLeave: function(event, element){ + clearTimeout(this.timer); + this.timer = this.hide.delay(this.options.hideDelay, this, element); + this.fireForParent(event, element); + }, + + setTitle: function(title){ + if (this._titleElement){ + this._titleElement.empty(); + this.fill(this._titleElement, title); + } + return this; + }, + + setText: function(text){ + if (this._textElement){ + this._textElement.empty(); + this.fill(this._textElement, text); + } + return this; + }, + + fireForParent: function(event, element){ + element = element.getParent(); + if (!element || element == document.body) return; + if (element.retrieve('tip:enter')) element.fireEvent('mouseenter', event); + else this.fireForParent(event, element); + }, + + elementMove: function(event, element){ + this.position(event); + }, + + position: function(event){ + if (!this.tip) document.id(this); + + var size = window.getSize(), scroll = window.getScroll(), + tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight}, + props = {x: 'left', y: 'top'}, + bounds = {y: false, x2: false, y2: false, x: false}, + obj = {}; + + for (var z in props){ + obj[props[z]] = event.page[z] + this.options.offset[z]; + if (obj[props[z]] < 0) bounds[z] = true; + if ((obj[props[z]] + tip[z] - scroll[z]) > size[z] - this.options.windowPadding[z]){ + obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z]; + bounds[z+'2'] = true; + } + } + + this.fireEvent('bound', bounds); + this.tip.setStyles(obj); + }, + + fill: function(element, contents){ + if (typeof contents == 'string') element.set('html', contents); + else element.adopt(contents); + }, + + show: function(element){ + if (!this.tip) document.id(this); + if (!this.tip.getParent()) this.tip.inject(document.body); + this.fireEvent('show', [this.tip, element]); + }, + + hide: function(element){ + if (!this.tip) document.id(this); + this.fireEvent('hide', [this.tip, element]); + } + +}); + +})(); + + +/* +--- + +script: Locale.Set.From.js + +name: Locale.Set.From + +description: Provides an alternative way to create Locale.Set objects. + +license: MIT-style license + +authors: + - Tim Wienk + +requires: + - Core/JSON + - /Locale + +provides: Locale.Set.From + +... +*/ + +(function(){ + +var parsers = { + 'json': JSON.decode +}; + +Locale.Set.defineParser = function(name, fn){ + parsers[name] = fn; +}; + +Locale.Set.from = function(set, type){ + if (instanceOf(set, Locale.Set)) return set; + + if (!type && typeOf(set) == 'string') type = 'json'; + if (parsers[type]) set = parsers[type](set); + + var locale = new Locale.Set; + + locale.sets = set.sets || {}; + + if (set.inherits){ + locale.inherits.locales = Array.from(set.inherits.locales); + locale.inherits.sets = set.inherits.sets || {}; + } + + return locale; +}; + +})(); + + +/* +--- + +name: Locale.ar.Date + +description: Date messages for Arabic. + +license: MIT-style license + +authors: + - Chafik Barbar + +requires: + - /Locale + +provides: [Locale.ar.Date] + +... +*/ + +Locale.define('ar', 'Date', { + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M' + +}); + + +/* +--- + +name: Locale.ar.Form.Validator + +description: Form Validator messages for Arabic. + +license: MIT-style license + +authors: + - Chafik Barbar + +requires: + - /Locale + +provides: [Locale.ar.Form.Validator] + +... +*/ + +Locale.define('ar', 'FormValidator', { + + required: 'هذا الحقل مطلوب.', + minLength: 'رجاءً إدخال {minLength} أحرف على الأقل (تم إدخال {length} أحرف).', + maxLength: 'الرجاء عدم إدخال أكثر من {maxLength} أحرف (تم إدخال {length} أحرف).', + integer: 'الرجاء إدخال عدد صحيح في هذا الحقل. أي رقم ذو كسر عشري أو مئوي (مثال 1.25 ) غير مسموح.', + numeric: 'الرجاء إدخال قيم رقمية في هذا الحقل (مثال "1" أو "1.1" أو "-1" أو "-1.1").', + digits: 'الرجاء أستخدام قيم رقمية وعلامات ترقيمية فقط في هذا الحقل (مثال, رقم هاتف مع نقطة أو شحطة)', + alpha: 'الرجاء أستخدام أحرف فقط (ا-ي) في هذا الحقل. أي فراغات أو علامات غير مسموحة.', + alphanum: 'الرجاء أستخدام أحرف فقط (ا-ي) أو أرقام (0-9) فقط في هذا الحقل. أي فراغات أو علامات غير مسموحة.', + dateSuchAs: 'الرجاء إدخال تاريخ صحيح كالتالي {date}', + dateInFormatMDY: 'الرجاء إدخال تاريخ صحيح (مثال, 31-12-1999)', + email: 'الرجاء إدخال بريد إلكتروني صحيح.', + url: 'الرجاء إدخال عنوان إلكتروني صحيح مثل http://www.example.com', + currencyDollar: 'الرجاء إدخال قيمة $ صحيحة. مثال, 100.00$', + oneRequired: 'الرجاء إدخال قيمة في أحد هذه الحقول على الأقل.', + errorPrefix: 'خطأ: ', + warningPrefix: 'تحذير: ' + +}); + + +/* +--- + +name: Locale.ca-CA.Date + +description: Date messages for Catalan. + +license: MIT-style license + +authors: + - Ãlfons Sanchez + +requires: + - /Locale + +provides: [Locale.ca-CA.Date] + +... +*/ + +Locale.define('ca-CA', 'Date', { + + months: ['Gener', 'Febrer', 'Març', 'Abril', 'Maig', 'Juny', 'Juli', 'Agost', 'Setembre', 'Octubre', 'Novembre', 'Desembre'], + months_abbr: ['gen.', 'febr.', 'març', 'abr.', 'maig', 'juny', 'jul.', 'ag.', 'set.', 'oct.', 'nov.', 'des.'], + days: ['Diumenge', 'Dilluns', 'Dimarts', 'Dimecres', 'Dijous', 'Divendres', 'Dissabte'], + days_abbr: ['dg', 'dl', 'dt', 'dc', 'dj', 'dv', 'ds'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 0, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'fa menys d`un minut', + minuteAgo: 'fa un minut', + minutesAgo: 'fa {delta} minuts', + hourAgo: 'fa un hora', + hoursAgo: 'fa unes {delta} hores', + dayAgo: 'fa un dia', + daysAgo: 'fa {delta} dies', + + lessThanMinuteUntil: 'menys d`un minut des d`ara', + minuteUntil: 'un minut des d`ara', + minutesUntil: '{delta} minuts des d`ara', + hourUntil: 'un hora des d`ara', + hoursUntil: 'unes {delta} hores des d`ara', + dayUntil: '1 dia des d`ara', + daysUntil: '{delta} dies des d`ara' + +}); + + +/* +--- + +name: Locale.ca-CA.Form.Validator + +description: Form Validator messages for Catalan. + +license: MIT-style license + +authors: + - Miquel Hudin + - Ãlfons Sanchez + +requires: + - /Locale + +provides: [Locale.ca-CA.Form.Validator] + +... +*/ + +Locale.define('ca-CA', 'FormValidator', { + + required: 'Aquest camp es obligatori.', + minLength: 'Per favor introdueix al menys {minLength} caracters (has introduit {length} caracters).', + maxLength: 'Per favor introdueix no mes de {maxLength} caracters (has introduit {length} caracters).', + integer: 'Per favor introdueix un nombre enter en aquest camp. Nombres amb decimals (p.e. 1,25) no estan permesos.', + numeric: 'Per favor introdueix sols valors numerics en aquest camp (p.e. "1" o "1,1" o "-1" o "-1,1").', + digits: 'Per favor usa sols numeros i puntuacio en aquest camp (per exemple, un nombre de telefon amb guions i punts no esta permes).', + alpha: 'Per favor utilitza lletres nomes (a-z) en aquest camp. No s´admiteixen espais ni altres caracters.', + alphanum: 'Per favor, utilitza nomes lletres (a-z) o numeros (0-9) en aquest camp. No s´admiteixen espais ni altres caracters.', + dateSuchAs: 'Per favor introdueix una data valida com {date}', + dateInFormatMDY: 'Per favor introdueix una data valida com DD/MM/YYYY (p.e. "31/12/1999")', + email: 'Per favor, introdueix una adreça de correu electronic valida. Per exemple, "fred@domain.com".', + url: 'Per favor introdueix una URL valida com http://www.example.com.', + currencyDollar: 'Per favor introdueix una quantitat valida de €. Per exemple €100,00 .', + oneRequired: 'Per favor introdueix alguna cosa per al menys una d´aquestes entrades.', + errorPrefix: 'Error: ', + warningPrefix: 'Avis: ', + + // Form.Validator.Extras + noSpace: 'No poden haver espais en aquesta entrada.', + reqChkByNode: 'No hi han elements seleccionats.', + requiredChk: 'Aquest camp es obligatori.', + reqChkByName: 'Per favor selecciona una {label}.', + match: 'Aquest camp necessita coincidir amb el camp {matchName}', + startDate: 'la data de inici', + endDate: 'la data de fi', + currendDate: 'la data actual', + afterDate: 'La data deu ser igual o posterior a {label}.', + beforeDate: 'La data deu ser igual o anterior a {label}.', + startMonth: 'Per favor selecciona un mes d´orige', + sameMonth: 'Aquestes dos dates deuen estar dins del mateix mes - deus canviar una o altra.' + +}); + + +/* +--- + +name: Locale.cs-CZ.Date + +description: Date messages for Czech. + +license: MIT-style license + +authors: + - Jan Černý chemiX + - Christopher Zukowski + +requires: + - /Locale + +provides: [Locale.cs-CZ.Date] + +... +*/ +(function(){ + +// Czech language pluralization rules, see http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html +// one -> n is 1; 1 +// few -> n in 2..4; 2-4 +// other -> everything else 0, 5-999, 1.31, 2.31, 5.31... +var pluralize = function (n, one, few, other){ + if (n == 1) return one; + else if (n == 2 || n == 3 || n == 4) return few; + else return other; +}; + +Locale.define('cs-CZ', 'Date', { + + months: ['Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'], + months_abbr: ['ledna', 'února', 'března', 'dubna', 'května', 'června', 'července', 'srpna', 'září', 'října', 'listopadu', 'prosince'], + days: ['Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'], + days_abbr: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'dop.', + PM: 'odp.', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'před chvílí', + minuteAgo: 'přibližně před minutou', + minutesAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'minutou', 'minutami', 'minutami'); }, + hourAgo: 'přibližně před hodinou', + hoursAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'hodinou', 'hodinami', 'hodinami'); }, + dayAgo: 'před dnem', + daysAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'dnem', 'dny', 'dny'); }, + weekAgo: 'před týdnem', + weeksAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'týdnem', 'týdny', 'týdny'); }, + monthAgo: 'před měsícem', + monthsAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'měsícem', 'měsíci', 'měsíci'); }, + yearAgo: 'před rokem', + yearsAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'rokem', 'lety', 'lety'); }, + + lessThanMinuteUntil: 'za chvíli', + minuteUntil: 'přibližně za minutu', + minutesUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'minutu', 'minuty', 'minut'); }, + hourUntil: 'přibližně za hodinu', + hoursUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'hodinu', 'hodiny', 'hodin'); }, + dayUntil: 'za den', + daysUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'den', 'dny', 'dnů'); }, + weekUntil: 'za týden', + weeksUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'týden', 'týdny', 'týdnů'); }, + monthUntil: 'za měsíc', + monthsUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'měsíc', 'měsíce', 'měsíců'); }, + yearUntil: 'za rok', + yearsUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'rok', 'roky', 'let'); } +}); + +})(); + + +/* +--- + +name: Locale.cs-CZ.Form.Validator + +description: Form Validator messages for Czech. + +license: MIT-style license + +authors: + - Jan Černý chemiX + +requires: + - /Locale + +provides: [Locale.cs-CZ.Form.Validator] + +... +*/ + +Locale.define('cs-CZ', 'FormValidator', { + + required: 'Tato položka je povinná.', + minLength: 'Zadejte prosím alespoň {minLength} znaků (napsáno {length} znaků).', + maxLength: 'Zadejte prosím méně než {maxLength} znaků (nápsáno {length} znaků).', + integer: 'Zadejte prosím celé číslo. Desetinná čísla (např. 1.25) nejsou povolena.', + numeric: 'Zadejte jen číselné hodnoty (tj. "1" nebo "1.1" nebo "-1" nebo "-1.1").', + digits: 'Zadejte prosím pouze čísla a interpunkční znaménka(například telefonní číslo s pomlčkami nebo tečkami je povoleno).', + alpha: 'Zadejte prosím pouze písmena (a-z). Mezery nebo jiné znaky nejsou povoleny.', + alphanum: 'Zadejte prosím pouze písmena (a-z) nebo číslice (0-9). Mezery nebo jiné znaky nejsou povoleny.', + dateSuchAs: 'Zadejte prosím platné datum jako {date}', + dateInFormatMDY: 'Zadejte prosím platné datum jako MM / DD / RRRR (tj. "12/31/1999")', + email: 'Zadejte prosím platnou e-mailovou adresu. Například "fred@domain.com".', + url: 'Zadejte prosím platnou URL adresu jako http://www.example.com.', + currencyDollar: 'Zadejte prosím platnou částku. Například $100.00.', + oneRequired: 'Zadejte prosím alespoň jednu hodnotu pro tyto položky.', + errorPrefix: 'Chyba: ', + warningPrefix: 'Upozornění: ', + + // Form.Validator.Extras + noSpace: 'V této položce nejsou povoleny mezery', + reqChkByNode: 'Nejsou vybrány žádné položky.', + requiredChk: 'Tato položka je vyžadována.', + reqChkByName: 'Prosím vyberte {label}.', + match: 'Tato položka se musí shodovat s položkou {matchName}', + startDate: 'datum zahájení', + endDate: 'datum ukončení', + currendDate: 'aktuální datum', + afterDate: 'Datum by mělo být stejné nebo větší než {label}.', + beforeDate: 'Datum by mělo být stejné nebo menší než {label}.', + startMonth: 'Vyberte počáteční měsíc.', + sameMonth: 'Tyto dva datumy musí být ve stejném měsíci - změňte jeden z nich.', + creditcard: 'Zadané číslo kreditní karty je neplatné. Prosím opravte ho. Bylo zadáno {length} čísel.' + +}); + + +/* +--- + +name: Locale.da-DK.Date + +description: Date messages for Danish. + +license: MIT-style license + +authors: + - Martin Overgaard + - Henrik Hansen + +requires: + - /Locale + +provides: [Locale.da-DK.Date] + +... +*/ + +Locale.define('da-DK', 'Date', { + + months: ['Januar', 'Februar', 'Marts', 'April', 'Maj', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'December'], + months_abbr: ['jan.', 'feb.', 'mar.', 'apr.', 'maj.', 'jun.', 'jul.', 'aug.', 'sep.', 'okt.', 'nov.', 'dec.'], + days: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'], + days_abbr: ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør'], + + // Culture's date order: DD-MM-YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d-%m-%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'mindre end et minut siden', + minuteAgo: 'omkring et minut siden', + minutesAgo: '{delta} minutter siden', + hourAgo: 'omkring en time siden', + hoursAgo: 'omkring {delta} timer siden', + dayAgo: '1 dag siden', + daysAgo: '{delta} dage siden', + weekAgo: '1 uge siden', + weeksAgo: '{delta} uger siden', + monthAgo: '1 måned siden', + monthsAgo: '{delta} måneder siden', + yearAgo: '1 år siden', + yearsAgo: '{delta} år siden', + + lessThanMinuteUntil: 'mindre end et minut fra nu', + minuteUntil: 'omkring et minut fra nu', + minutesUntil: '{delta} minutter fra nu', + hourUntil: 'omkring en time fra nu', + hoursUntil: 'omkring {delta} timer fra nu', + dayUntil: '1 dag fra nu', + daysUntil: '{delta} dage fra nu', + weekUntil: '1 uge fra nu', + weeksUntil: '{delta} uger fra nu', + monthUntil: '1 måned fra nu', + monthsUntil: '{delta} måneder fra nu', + yearUntil: '1 år fra nu', + yearsUntil: '{delta} år fra nu' + +}); + + +/* +--- + +name: Locale.da-DK.Form.Validator + +description: Form Validator messages for Danish. + +license: MIT-style license + +authors: + - Martin Overgaard + +requires: + - /Locale + +provides: [Locale.da-DK.Form.Validator] + +... +*/ + +Locale.define('da-DK', 'FormValidator', { + + required: 'Feltet skal udfyldes.', + minLength: 'Skriv mindst {minLength} tegn (du skrev {length} tegn).', + maxLength: 'Skriv maksimalt {maxLength} tegn (du skrev {length} tegn).', + integer: 'Skriv et tal i dette felt. Decimal tal (f.eks. 1.25) er ikke tilladt.', + numeric: 'Skriv kun tal i dette felt (i.e. "1" eller "1.1" eller "-1" eller "-1.1").', + digits: 'Skriv kun tal og tegnsætning i dette felt (eksempel, et telefon nummer med bindestreg eller punktum er tilladt).', + alpha: 'Skriv kun bogstaver (a-z) i dette felt. Mellemrum og andre tegn er ikke tilladt.', + alphanum: 'Skriv kun bogstaver (a-z) eller tal (0-9) i dette felt. Mellemrum og andre tegn er ikke tilladt.', + dateSuchAs: 'Skriv en gyldig dato som {date}', + dateInFormatMDY: 'Skriv dato i formatet DD-MM-YYYY (f.eks. "31-12-1999")', + email: 'Skriv en gyldig e-mail adresse. F.eks "fred@domain.com".', + url: 'Skriv en gyldig URL adresse. F.eks "http://www.example.com".', + currencyDollar: 'Skriv et gldigt beløb. F.eks Kr.100.00 .', + oneRequired: 'Et eller flere af felterne i denne formular skal udfyldes.', + errorPrefix: 'Fejl: ', + warningPrefix: 'Advarsel: ', + + // Form.Validator.Extras + noSpace: 'Der må ikke benyttes mellemrum i dette felt.', + reqChkByNode: 'Foretag et valg.', + requiredChk: 'Dette felt skal udfyldes.', + reqChkByName: 'Vælg en {label}.', + match: 'Dette felt skal matche {matchName} feltet', + startDate: 'start dato', + endDate: 'slut dato', + currendDate: 'dags dato', + afterDate: 'Datoen skal være større end eller lig med {label}.', + beforeDate: 'Datoen skal være mindre end eller lig med {label}.', + startMonth: 'Vælg en start måned', + sameMonth: 'De valgte datoer skal være i samme måned - skift en af dem.' + +}); + + +/* +--- + +name: Locale.de-DE.Date + +description: Date messages for German. + +license: MIT-style license + +authors: + - Christoph Pojer + - Frank Rossi + - Ulrich Petri + - Fabian Beiner + +requires: + - /Locale + +provides: [Locale.de-DE.Date] + +... +*/ + +Locale.define('de-DE', 'Date', { + + months: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'], + months_abbr: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'], + days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'], + days_abbr: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'], + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'vormittags', + PM: 'nachmittags', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'vor weniger als einer Minute', + minuteAgo: 'vor einer Minute', + minutesAgo: 'vor {delta} Minuten', + hourAgo: 'vor einer Stunde', + hoursAgo: 'vor {delta} Stunden', + dayAgo: 'vor einem Tag', + daysAgo: 'vor {delta} Tagen', + weekAgo: 'vor einer Woche', + weeksAgo: 'vor {delta} Wochen', + monthAgo: 'vor einem Monat', + monthsAgo: 'vor {delta} Monaten', + yearAgo: 'vor einem Jahr', + yearsAgo: 'vor {delta} Jahren', + + lessThanMinuteUntil: 'in weniger als einer Minute', + minuteUntil: 'in einer Minute', + minutesUntil: 'in {delta} Minuten', + hourUntil: 'in ca. einer Stunde', + hoursUntil: 'in ca. {delta} Stunden', + dayUntil: 'in einem Tag', + daysUntil: 'in {delta} Tagen', + weekUntil: 'in einer Woche', + weeksUntil: 'in {delta} Wochen', + monthUntil: 'in einem Monat', + monthsUntil: 'in {delta} Monaten', + yearUntil: 'in einem Jahr', + yearsUntil: 'in {delta} Jahren' + +}); + + +/* +--- + +name: Locale.de-CH.Date + +description: Date messages for German (Switzerland). + +license: MIT-style license + +authors: + - Michael van der Weg + +requires: + - /Locale + - /Locale.de-DE.Date + +provides: [Locale.de-CH.Date] + +... +*/ + +Locale.define('de-CH').inherit('de-DE', 'Date'); + + +/* +--- + +name: Locale.de-CH.Form.Validator + +description: Form Validator messages for German (Switzerland). + +license: MIT-style license + +authors: + - Michael van der Weg + +requires: + - /Locale + +provides: [Locale.de-CH.Form.Validator] + +... +*/ + +Locale.define('de-CH', 'FormValidator', { + + required: 'Dieses Feld ist obligatorisch.', + minLength: 'Geben Sie bitte mindestens {minLength} Zeichen ein (Sie haben {length} Zeichen eingegeben).', + maxLength: 'Bitte geben Sie nicht mehr als {maxLength} Zeichen ein (Sie haben {length} Zeichen eingegeben).', + integer: 'Geben Sie bitte eine ganze Zahl ein. Dezimalzahlen (z.B. 1.25) sind nicht erlaubt.', + numeric: 'Geben Sie bitte nur Zahlenwerte in dieses Eingabefeld ein (z.B. "1", "1.1", "-1" oder "-1.1").', + digits: 'Benutzen Sie bitte nur Zahlen und Satzzeichen in diesem Eingabefeld (erlaubt ist z.B. eine Telefonnummer mit Bindestrichen und Punkten).', + alpha: 'Benutzen Sie bitte nur Buchstaben (a-z) in diesem Feld. Leerzeichen und andere Zeichen sind nicht erlaubt.', + alphanum: 'Benutzen Sie bitte nur Buchstaben (a-z) und Zahlen (0-9) in diesem Eingabefeld. Leerzeichen und andere Zeichen sind nicht erlaubt.', + dateSuchAs: 'Geben Sie bitte ein gültiges Datum ein. Wie zum Beispiel {date}', + dateInFormatMDY: 'Geben Sie bitte ein gültiges Datum ein. Wie zum Beispiel TT.MM.JJJJ (z.B. "31.12.1999")', + email: 'Geben Sie bitte eine gültige E-Mail Adresse ein. Wie zum Beispiel "maria@bernasconi.ch".', + url: 'Geben Sie bitte eine gültige URL ein. Wie zum Beispiel http://www.example.com.', + currencyDollar: 'Geben Sie bitte einen gültigen Betrag in Schweizer Franken ein. Wie zum Beispiel 100.00 CHF .', + oneRequired: 'Machen Sie für mindestens eines der Eingabefelder einen Eintrag.', + errorPrefix: 'Fehler: ', + warningPrefix: 'Warnung: ', + + // Form.Validator.Extras + noSpace: 'In diesem Eingabefeld darf kein Leerzeichen sein.', + reqChkByNode: 'Es wurden keine Elemente gewählt.', + requiredChk: 'Dieses Feld ist obligatorisch.', + reqChkByName: 'Bitte wählen Sie ein {label}.', + match: 'Dieses Eingabefeld muss mit dem Feld {matchName} übereinstimmen.', + startDate: 'Das Anfangsdatum', + endDate: 'Das Enddatum', + currendDate: 'Das aktuelle Datum', + afterDate: 'Das Datum sollte zur gleichen Zeit oder später sein {label}.', + beforeDate: 'Das Datum sollte zur gleichen Zeit oder früher sein {label}.', + startMonth: 'Wählen Sie bitte einen Anfangsmonat', + sameMonth: 'Diese zwei Datumsangaben müssen im selben Monat sein - Sie müssen eine von beiden verändern.', + creditcard: 'Die eingegebene Kreditkartennummer ist ungültig. Bitte überprüfen Sie diese und versuchen Sie es erneut. {length} Zahlen eingegeben.' + +}); + + +/* +--- + +name: Locale.de-DE.Form.Validator + +description: Form Validator messages for German. + +license: MIT-style license + +authors: + - Frank Rossi + - Ulrich Petri + - Fabian Beiner + +requires: + - /Locale + +provides: [Locale.de-DE.Form.Validator] + +... +*/ + +Locale.define('de-DE', 'FormValidator', { + + required: 'Dieses Eingabefeld muss ausgefüllt werden.', + minLength: 'Geben Sie bitte mindestens {minLength} Zeichen ein (Sie haben nur {length} Zeichen eingegeben).', + maxLength: 'Geben Sie bitte nicht mehr als {maxLength} Zeichen ein (Sie haben {length} Zeichen eingegeben).', + integer: 'Geben Sie in diesem Eingabefeld bitte eine ganze Zahl ein. Dezimalzahlen (z.B. "1.25") sind nicht erlaubt.', + numeric: 'Geben Sie in diesem Eingabefeld bitte nur Zahlenwerte (z.B. "1", "1.1", "-1" oder "-1.1") ein.', + digits: 'Geben Sie in diesem Eingabefeld bitte nur Zahlen und Satzzeichen ein (z.B. eine Telefonnummer mit Bindestrichen und Punkten ist erlaubt).', + alpha: 'Geben Sie in diesem Eingabefeld bitte nur Buchstaben (a-z) ein. Leerzeichen und andere Zeichen sind nicht erlaubt.', + alphanum: 'Geben Sie in diesem Eingabefeld bitte nur Buchstaben (a-z) und Zahlen (0-9) ein. Leerzeichen oder andere Zeichen sind nicht erlaubt.', + dateSuchAs: 'Geben Sie bitte ein gültiges Datum ein (z.B. "{date}").', + dateInFormatMDY: 'Geben Sie bitte ein gültiges Datum im Format TT.MM.JJJJ ein (z.B. "31.12.1999").', + email: 'Geben Sie bitte eine gültige E-Mail-Adresse ein (z.B. "max@mustermann.de").', + url: 'Geben Sie bitte eine gültige URL ein (z.B. "http://www.example.com").', + currencyDollar: 'Geben Sie bitte einen gültigen Betrag in EURO ein (z.B. 100.00€).', + oneRequired: 'Bitte füllen Sie mindestens ein Eingabefeld aus.', + errorPrefix: 'Fehler: ', + warningPrefix: 'Warnung: ', + + // Form.Validator.Extras + noSpace: 'Es darf kein Leerzeichen in diesem Eingabefeld sein.', + reqChkByNode: 'Es wurden keine Elemente gewählt.', + requiredChk: 'Dieses Feld muss ausgefüllt werden.', + reqChkByName: 'Bitte wählen Sie ein {label}.', + match: 'Dieses Eingabefeld muss mit dem {matchName} Eingabefeld übereinstimmen.', + startDate: 'Das Anfangsdatum', + endDate: 'Das Enddatum', + currendDate: 'Das aktuelle Datum', + afterDate: 'Das Datum sollte zur gleichen Zeit oder später sein als {label}.', + beforeDate: 'Das Datum sollte zur gleichen Zeit oder früher sein als {label}.', + startMonth: 'Wählen Sie bitte einen Anfangsmonat', + sameMonth: 'Diese zwei Datumsangaben müssen im selben Monat sein - Sie müssen eines von beiden verändern.', + creditcard: 'Die eingegebene Kreditkartennummer ist ungültig. Bitte überprüfen Sie diese und versuchen Sie es erneut. {length} Zahlen eingegeben.' + +}); + + +/* +--- + +name: Locale.EU.Number + +description: Number messages for Europe. + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: + - /Locale + +provides: [Locale.EU.Number] + +... +*/ + +Locale.define('EU', 'Number', { + + decimal: ',', + group: '.', + + currency: { + prefix: '€ ' + } + +}); + + +/* +--- + +name: Locale.de-DE.Number + +description: Number messages for German. + +license: MIT-style license + +authors: + - Christoph Pojer + +requires: + - /Locale + - /Locale.EU.Number + +provides: [Locale.de-DE.Number] + +... +*/ + +Locale.define('de-DE').inherit('EU', 'Number'); + + +/* +--- + +name: Locale.en-GB.Date + +description: Date messages for British English. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - /Locale + - /Locale.en-US.Date + +provides: [Locale.en-GB.Date] + +... +*/ + +Locale.define('en-GB', 'Date', { + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M' + +}).inherit('en-US', 'Date'); + + +/* +--- + +name: Locale.es-ES.Date + +description: Date messages for Spanish. + +license: MIT-style license + +authors: + - Ãlfons Sanchez + +requires: + - /Locale + +provides: [Locale.es-ES.Date] + +... +*/ + +Locale.define('es-ES', 'Date', { + + months: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'], + months_abbr: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'], + days: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'], + days_abbr: ['dom', 'lun', 'mar', 'mié', 'juv', 'vie', 'sáb'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'hace menos de un minuto', + minuteAgo: 'hace un minuto', + minutesAgo: 'hace {delta} minutos', + hourAgo: 'hace una hora', + hoursAgo: 'hace unas {delta} horas', + dayAgo: 'hace un día', + daysAgo: 'hace {delta} días', + weekAgo: 'hace una semana', + weeksAgo: 'hace unas {delta} semanas', + monthAgo: 'hace un mes', + monthsAgo: 'hace {delta} meses', + yearAgo: 'hace un año', + yearsAgo: 'hace {delta} años', + + lessThanMinuteUntil: 'menos de un minuto desde ahora', + minuteUntil: 'un minuto desde ahora', + minutesUntil: '{delta} minutos desde ahora', + hourUntil: 'una hora desde ahora', + hoursUntil: 'unas {delta} horas desde ahora', + dayUntil: 'un día desde ahora', + daysUntil: '{delta} días desde ahora', + weekUntil: 'una semana desde ahora', + weeksUntil: 'unas {delta} semanas desde ahora', + monthUntil: 'un mes desde ahora', + monthsUntil: '{delta} meses desde ahora', + yearUntil: 'un año desde ahora', + yearsUntil: '{delta} años desde ahora' + +}); + + +/* +--- + +name: Locale.es-AR.Date + +description: Date messages for Spanish (Argentina). + +license: MIT-style license + +authors: + - Ãlfons Sanchez + - Diego Massanti + +requires: + - /Locale + - /Locale.es-ES.Date + +provides: [Locale.es-AR.Date] + +... +*/ + +Locale.define('es-AR').inherit('es-ES', 'Date'); + + +/* +--- + +name: Locale.es-AR.Form.Validator + +description: Form Validator messages for Spanish (Argentina). + +license: MIT-style license + +authors: + - Diego Massanti + +requires: + - /Locale + +provides: [Locale.es-AR.Form.Validator] + +... +*/ + +Locale.define('es-AR', 'FormValidator', { + + required: 'Este campo es obligatorio.', + minLength: 'Por favor ingrese al menos {minLength} caracteres (ha ingresado {length} caracteres).', + maxLength: 'Por favor no ingrese más de {maxLength} caracteres (ha ingresado {length} caracteres).', + integer: 'Por favor ingrese un número entero en este campo. Números con decimales (p.e. 1,25) no se permiten.', + numeric: 'Por favor ingrese solo valores numéricos en este campo (p.e. "1" o "1,1" o "-1" o "-1,1").', + digits: 'Por favor use sólo números y puntuación en este campo (por ejemplo, un número de teléfono con guiones y/o puntos no está permitido).', + alpha: 'Por favor use sólo letras (a-z) en este campo. No se permiten espacios ni otros caracteres.', + alphanum: 'Por favor, usa sólo letras (a-z) o números (0-9) en este campo. No se permiten espacios u otros caracteres.', + dateSuchAs: 'Por favor ingrese una fecha válida como {date}', + dateInFormatMDY: 'Por favor ingrese una fecha válida, utulizando el formato DD/MM/YYYY (p.e. "31/12/1999")', + email: 'Por favor, ingrese una dirección de e-mail válida. Por ejemplo, "fred@dominio.com".', + url: 'Por favor ingrese una URL válida como http://www.example.com.', + currencyDollar: 'Por favor ingrese una cantidad válida de pesos. Por ejemplo $100,00 .', + oneRequired: 'Por favor ingrese algo para por lo menos una de estas entradas.', + errorPrefix: 'Error: ', + warningPrefix: 'Advertencia: ', + + // Form.Validator.Extras + noSpace: 'No se permiten espacios en este campo.', + reqChkByNode: 'No hay elementos seleccionados.', + requiredChk: 'Este campo es obligatorio.', + reqChkByName: 'Por favor selecciona una {label}.', + match: 'Este campo necesita coincidir con el campo {matchName}', + startDate: 'la fecha de inicio', + endDate: 'la fecha de fin', + currendDate: 'la fecha actual', + afterDate: 'La fecha debe ser igual o posterior a {label}.', + beforeDate: 'La fecha debe ser igual o anterior a {label}.', + startMonth: 'Por favor selecciona un mes de origen', + sameMonth: 'Estas dos fechas deben estar en el mismo mes - debes cambiar una u otra.' + +}); + + +/* +--- + +name: Locale.es-ES.Form.Validator + +description: Form Validator messages for Spanish. + +license: MIT-style license + +authors: + - Ãlfons Sanchez + +requires: + - /Locale + +provides: [Locale.es-ES.Form.Validator] + +... +*/ + +Locale.define('es-ES', 'FormValidator', { + + required: 'Este campo es obligatorio.', + minLength: 'Por favor introduce al menos {minLength} caracteres (has introducido {length} caracteres).', + maxLength: 'Por favor introduce no más de {maxLength} caracteres (has introducido {length} caracteres).', + integer: 'Por favor introduce un número entero en este campo. Números con decimales (p.e. 1,25) no se permiten.', + numeric: 'Por favor introduce solo valores numéricos en este campo (p.e. "1" o "1,1" o "-1" o "-1,1").', + digits: 'Por favor usa solo números y puntuación en este campo (por ejemplo, un número de teléfono con guiones y puntos no esta permitido).', + alpha: 'Por favor usa letras solo (a-z) en este campo. No se admiten espacios ni otros caracteres.', + alphanum: 'Por favor, usa solo letras (a-z) o números (0-9) en este campo. No se admiten espacios ni otros caracteres.', + dateSuchAs: 'Por favor introduce una fecha válida como {date}', + dateInFormatMDY: 'Por favor introduce una fecha válida como DD/MM/YYYY (p.e. "31/12/1999")', + email: 'Por favor, introduce una dirección de email válida. Por ejemplo, "fred@domain.com".', + url: 'Por favor introduce una URL válida como http://www.example.com.', + currencyDollar: 'Por favor introduce una cantidad válida de €. Por ejemplo €100,00 .', + oneRequired: 'Por favor introduce algo para por lo menos una de estas entradas.', + errorPrefix: 'Error: ', + warningPrefix: 'Aviso: ', + + // Form.Validator.Extras + noSpace: 'No pueden haber espacios en esta entrada.', + reqChkByNode: 'No hay elementos seleccionados.', + requiredChk: 'Este campo es obligatorio.', + reqChkByName: 'Por favor selecciona una {label}.', + match: 'Este campo necesita coincidir con el campo {matchName}', + startDate: 'la fecha de inicio', + endDate: 'la fecha de fin', + currendDate: 'la fecha actual', + afterDate: 'La fecha debe ser igual o posterior a {label}.', + beforeDate: 'La fecha debe ser igual o anterior a {label}.', + startMonth: 'Por favor selecciona un mes de origen', + sameMonth: 'Estas dos fechas deben estar en el mismo mes - debes cambiar una u otra.' + +}); + + +/* +--- + +name: Locale.et-EE.Date + +description: Date messages for Estonian. + +license: MIT-style license + +authors: + - Kevin Valdek + +requires: + - /Locale + +provides: [Locale.et-EE.Date] + +... +*/ + +Locale.define('et-EE', 'Date', { + + months: ['jaanuar', 'veebruar', 'märts', 'aprill', 'mai', 'juuni', 'juuli', 'august', 'september', 'oktoober', 'november', 'detsember'], + months_abbr: ['jaan', 'veebr', 'märts', 'apr', 'mai', 'juuni', 'juuli', 'aug', 'sept', 'okt', 'nov', 'dets'], + days: ['pühapäev', 'esmaspäev', 'teisipäev', 'kolmapäev', 'neljapäev', 'reede', 'laupäev'], + days_abbr: ['pühap', 'esmasp', 'teisip', 'kolmap', 'neljap', 'reede', 'laup'], + + // Culture's date order: MM.DD.YYYY + dateOrder: ['month', 'date', 'year'], + shortDate: '%m.%d.%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'vähem kui minut aega tagasi', + minuteAgo: 'umbes minut aega tagasi', + minutesAgo: '{delta} minutit tagasi', + hourAgo: 'umbes tund aega tagasi', + hoursAgo: 'umbes {delta} tundi tagasi', + dayAgo: '1 päev tagasi', + daysAgo: '{delta} päeva tagasi', + weekAgo: '1 nädal tagasi', + weeksAgo: '{delta} nädalat tagasi', + monthAgo: '1 kuu tagasi', + monthsAgo: '{delta} kuud tagasi', + yearAgo: '1 aasta tagasi', + yearsAgo: '{delta} aastat tagasi', + + lessThanMinuteUntil: 'vähem kui minuti aja pärast', + minuteUntil: 'umbes minuti aja pärast', + minutesUntil: '{delta} minuti pärast', + hourUntil: 'umbes tunni aja pärast', + hoursUntil: 'umbes {delta} tunni pärast', + dayUntil: '1 päeva pärast', + daysUntil: '{delta} päeva pärast', + weekUntil: '1 nädala pärast', + weeksUntil: '{delta} nädala pärast', + monthUntil: '1 kuu pärast', + monthsUntil: '{delta} kuu pärast', + yearUntil: '1 aasta pärast', + yearsUntil: '{delta} aasta pärast' + +}); + + +/* +--- + +name: Locale.et-EE.Form.Validator + +description: Form Validator messages for Estonian. + +license: MIT-style license + +authors: + - Kevin Valdek + +requires: + - /Locale + +provides: [Locale.et-EE.Form.Validator] + +... +*/ + +Locale.define('et-EE', 'FormValidator', { + + required: 'Väli peab olema täidetud.', + minLength: 'Palun sisestage vähemalt {minLength} tähte (te sisestasite {length} tähte).', + maxLength: 'Palun ärge sisestage rohkem kui {maxLength} tähte (te sisestasite {length} tähte).', + integer: 'Palun sisestage väljale täisarv. Kümnendarvud (näiteks 1.25) ei ole lubatud.', + numeric: 'Palun sisestage ainult numbreid väljale (näiteks "1", "1.1", "-1" või "-1.1").', + digits: 'Palun kasutage ainult numbreid ja kirjavahemärke (telefoninumbri sisestamisel on lubatud kasutada kriipse ja punkte).', + alpha: 'Palun kasutage ainult tähti (a-z). Tühikud ja teised sümbolid on keelatud.', + alphanum: 'Palun kasutage ainult tähti (a-z) või numbreid (0-9). Tühikud ja teised sümbolid on keelatud.', + dateSuchAs: 'Palun sisestage kehtiv kuupäev kujul {date}', + dateInFormatMDY: 'Palun sisestage kehtiv kuupäev kujul MM.DD.YYYY (näiteks: "12.31.1999").', + email: 'Palun sisestage kehtiv e-maili aadress (näiteks: "fred@domain.com").', + url: 'Palun sisestage kehtiv URL (näiteks: http://www.example.com).', + currencyDollar: 'Palun sisestage kehtiv $ summa (näiteks: $100.00).', + oneRequired: 'Palun sisestage midagi vähemalt ühele antud väljadest.', + errorPrefix: 'Viga: ', + warningPrefix: 'Hoiatus: ', + + // Form.Validator.Extras + noSpace: 'Väli ei tohi sisaldada tühikuid.', + reqChkByNode: 'Ükski väljadest pole valitud.', + requiredChk: 'Välja täitmine on vajalik.', + reqChkByName: 'Palun valige üks {label}.', + match: 'Väli peab sobima {matchName} väljaga', + startDate: 'algkuupäev', + endDate: 'lõppkuupäev', + currendDate: 'praegune kuupäev', + afterDate: 'Kuupäev peab olema võrdne või pärast {label}.', + beforeDate: 'Kuupäev peab olema võrdne või enne {label}.', + startMonth: 'Palun valige algkuupäev.', + sameMonth: 'Antud kaks kuupäeva peavad olema samas kuus - peate muutma ühte kuupäeva.' + +}); + + +/* +--- + +name: Locale.fa.Date + +description: Date messages for Persian. + +license: MIT-style license + +authors: + - Amir Hossein Hodjaty Pour + +requires: + - /Locale + +provides: [Locale.fa.Date] + +... +*/ + +Locale.define('fa', 'Date', { + + months: ['ژانویه', 'فوریه', 'مارس', 'آپریل', 'مه', 'ژوئن', 'ژوئیه', 'آگوست', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر'], + months_abbr: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], + days: ['یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'], + days_abbr: ['ي', 'د', 'س', 'چ', 'پ', 'ج', 'ش'], + + // Culture's date order: MM/DD/YYYY + dateOrder: ['month', 'date', 'year'], + shortDate: '%m/%d/%Y', + shortTime: '%I:%M%p', + AM: 'ق.ظ', + PM: 'ب.ظ', + + // Date.Extras + ordinal: 'ام', + + lessThanMinuteAgo: 'کمتر از یک دقیقه پیش', + minuteAgo: 'حدود یک دقیقه پیش', + minutesAgo: '{delta} دقیقه پیش', + hourAgo: 'حدود یک ساعت پیش', + hoursAgo: 'حدود {delta} ساعت پیش', + dayAgo: '1 روز پیش', + daysAgo: '{delta} روز پیش', + weekAgo: '1 هفته پیش', + weeksAgo: '{delta} هفته پیش', + monthAgo: '1 ماه پیش', + monthsAgo: '{delta} ماه پیش', + yearAgo: '1 سال پیش', + yearsAgo: '{delta} سال پیش', + + lessThanMinuteUntil: 'کمتر از یک دقیقه از حالا', + minuteUntil: 'حدود یک دقیقه از حالا', + minutesUntil: '{delta} دقیقه از حالا', + hourUntil: 'حدود یک ساعت از حالا', + hoursUntil: 'حدود {delta} ساعت از حالا', + dayUntil: '1 روز از حالا', + daysUntil: '{delta} روز از حالا', + weekUntil: '1 هفته از حالا', + weeksUntil: '{delta} هفته از حالا', + monthUntil: '1 ماه از حالا', + monthsUntil: '{delta} ماه از حالا', + yearUntil: '1 سال از حالا', + yearsUntil: '{delta} سال از حالا' + +}); + + +/* +--- + +name: Locale.fa.Form.Validator + +description: Form Validator messages for Persian. + +license: MIT-style license + +authors: + - Amir Hossein Hodjaty Pour + +requires: + - /Locale + +provides: [Locale.fa.Form.Validator] + +... +*/ + +Locale.define('fa', 'FormValidator', { + + required: 'این فیلد الزامی است.', + minLength: 'شما باید حداقل {minLength} حرف وارد کنید ({length} حرف وارد کرده اید).', + maxLength: 'لطفا حداکثر {maxLength} حرف وارد کنید (شما {length} حرف وارد کرده اید).', + integer: 'لطفا از عدد صحیح استفاده کنید. اعداد اعشاری (مانند 1.25) مجاز نیستند.', + numeric: 'لطفا فقط داده عددی وارد کنید (مانند "1" یا "1.1" یا "1-" یا "1.1-").', + digits: 'لطفا فقط از اعداد و علامتها در این فیلد استفاده کنید (برای مثال شماره تلفن با خط تیره و نقطه قابل قبول است).', + alpha: 'لطفا فقط از حروف الفباء برای این بخش استفاده کنید. کاراکترهای دیگر و فاصله مجاز نیستند.', + alphanum: 'لطفا فقط از حروف الفباء و اعداد در این بخش استفاده کنید. کاراکترهای دیگر و فاصله مجاز نیستند.', + dateSuchAs: 'لطفا یک تاریخ معتبر مانند {date} وارد کنید.', + dateInFormatMDY: 'لطفا یک تاریخ معتبر به شکل MM/DD/YYYY وارد کنید (مانند "12/31/1999").', + email: 'لطفا یک آدرس ایمیل معتبر وارد کنید. برای مثال "fred@domain.com".', + url: 'لطفا یک URL معتبر مانند http://www.example.com وارد کنید.', + currencyDollar: 'لطفا یک محدوده معتبر برای این بخش وارد کنید مانند 100.00$ .', + oneRequired: 'لطفا حداقل یکی از فیلدها را پر کنید.', + errorPrefix: 'خطا: ', + warningPrefix: 'هشدار: ', + + // Form.Validator.Extras + noSpace: 'استفاده از فاصله در این بخش مجاز نیست.', + reqChkByNode: 'موردی انتخاب نشده است.', + requiredChk: 'این فیلد الزامی است.', + reqChkByName: 'لطفا یک {label} را انتخاب کنید.', + match: 'این فیلد باید با فیلد {matchName} مطابقت داشته باشد.', + startDate: 'تاریخ شروع', + endDate: 'تاریخ پایان', + currendDate: 'تاریخ کنونی', + afterDate: 'تاریخ میبایست برابر یا بعد از {label} باشد', + beforeDate: 'تاریخ میبایست برابر یا قبل از {label} باشد', + startMonth: 'لطفا ماه شروع را انتخاب کنید', + sameMonth: 'این دو تاریخ باید در یک ماه باشند - شما باید یکی یا هر دو را تغییر دهید.', + creditcard: 'شماره کارت اعتباری که وارد کرده اید معتبر نیست. لطفا شماره را بررسی کنید و مجددا تلاش کنید. {length} رقم وارد شده است.' + +}); + + +/* +--- + +name: Locale.fi-FI.Date + +description: Date messages for Finnish. + +license: MIT-style license + +authors: + - ksel + +requires: + - /Locale + +provides: [Locale.fi-FI.Date] + +... +*/ + +Locale.define('fi-FI', 'Date', { + + // NOTE: months and days are not capitalized in finnish + months: ['tammikuu', 'helmikuu', 'maaliskuu', 'huhtikuu', 'toukokuu', 'kesäkuu', 'heinäkuu', 'elokuu', 'syyskuu', 'lokakuu', 'marraskuu', 'joulukuu'], + + // these abbreviations are really not much used in finnish because they obviously won't abbreviate very much. ;) + // NOTE: sometimes one can see forms such as "tammi", "helmi", etc. but that is not proper finnish. + months_abbr: ['tammik.', 'helmik.', 'maalisk.', 'huhtik.', 'toukok.', 'kesäk.', 'heinäk.', 'elok.', 'syysk.', 'lokak.', 'marrask.', 'jouluk.'], + + days: ['sunnuntai', 'maanantai', 'tiistai', 'keskiviikko', 'torstai', 'perjantai', 'lauantai'], + days_abbr: ['su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'vajaa minuutti sitten', + minuteAgo: 'noin minuutti sitten', + minutesAgo: '{delta} minuuttia sitten', + hourAgo: 'noin tunti sitten', + hoursAgo: 'noin {delta} tuntia sitten', + dayAgo: 'päivä sitten', + daysAgo: '{delta} päivää sitten', + weekAgo: 'viikko sitten', + weeksAgo: '{delta} viikkoa sitten', + monthAgo: 'kuukausi sitten', + monthsAgo: '{delta} kuukautta sitten', + yearAgo: 'vuosi sitten', + yearsAgo: '{delta} vuotta sitten', + + lessThanMinuteUntil: 'vajaan minuutin kuluttua', + minuteUntil: 'noin minuutin kuluttua', + minutesUntil: '{delta} minuutin kuluttua', + hourUntil: 'noin tunnin kuluttua', + hoursUntil: 'noin {delta} tunnin kuluttua', + dayUntil: 'päivän kuluttua', + daysUntil: '{delta} päivän kuluttua', + weekUntil: 'viikon kuluttua', + weeksUntil: '{delta} viikon kuluttua', + monthUntil: 'kuukauden kuluttua', + monthsUntil: '{delta} kuukauden kuluttua', + yearUntil: 'vuoden kuluttua', + yearsUntil: '{delta} vuoden kuluttua' + +}); + + +/* +--- + +name: Locale.fi-FI.Form.Validator + +description: Form Validator messages for Finnish. + +license: MIT-style license + +authors: + - ksel + +requires: + - /Locale + +provides: [Locale.fi-FI.Form.Validator] + +... +*/ + +Locale.define('fi-FI', 'FormValidator', { + + required: 'Tämä kenttä on pakollinen.', + minLength: 'Ole hyvä ja anna vähintään {minLength} merkkiä (annoit {length} merkkiä).', + maxLength: 'Älä anna enempää kuin {maxLength} merkkiä (annoit {length} merkkiä).', + integer: 'Ole hyvä ja anna kokonaisluku. Luvut, joissa on desimaaleja (esim. 1.25) eivät ole sallittuja.', + numeric: 'Anna tähän kenttään lukuarvo (kuten "1" tai "1.1" tai "-1" tai "-1.1").', + digits: 'Käytä pelkästään numeroita ja välimerkkejä tässä kentässä (syötteet, kuten esim. puhelinnumero, jossa on väliviivoja, pilkkuja tai pisteitä, kelpaa).', + alpha: 'Anna tähän kenttään vain kirjaimia (a-z). Välilyönnit tai muut merkit eivät ole sallittuja.', + alphanum: 'Anna tähän kenttään vain kirjaimia (a-z) tai numeroita (0-9). Välilyönnit tai muut merkit eivät ole sallittuja.', + dateSuchAs: 'Ole hyvä ja anna kelvollinen päivmäärä, kuten esimerkiksi {date}', + dateInFormatMDY: 'Ole hyvä ja anna kelvollinen päivämäärä muodossa pp/kk/vvvv (kuten "12/31/1999")', + email: 'Ole hyvä ja anna kelvollinen sähköpostiosoite (kuten esimerkiksi "matti@meikalainen.com").', + url: 'Ole hyvä ja anna kelvollinen URL, kuten esimerkiksi http://www.example.com.', + currencyDollar: 'Ole hyvä ja anna kelvollinen eurosumma (kuten esimerkiksi 100,00 EUR) .', + oneRequired: 'Ole hyvä ja syötä jotakin ainakin johonkin näistä kentistä.', + errorPrefix: 'Virhe: ', + warningPrefix: 'Varoitus: ', + + // Form.Validator.Extras + noSpace: 'Tässä syötteessä ei voi olla välilyöntejä', + reqChkByNode: 'Ei valintoja.', + requiredChk: 'Tämä kenttä on pakollinen.', + reqChkByName: 'Ole hyvä ja valitse {label}.', + match: 'Tämän kentän tulee vastata kenttää {matchName}', + startDate: 'alkupäivämäärä', + endDate: 'loppupäivämäärä', + currendDate: 'nykyinen päivämäärä', + afterDate: 'Päivämäärän tulisi olla sama tai myöhäisempi ajankohta kuin {label}.', + beforeDate: 'Päivämäärän tulisi olla sama tai aikaisempi ajankohta kuin {label}.', + startMonth: 'Ole hyvä ja valitse aloituskuukausi', + sameMonth: 'Näiden kahden päivämäärän tulee olla saman kuun sisällä -- sinun pitää muuttaa jompaa kumpaa.', + creditcard: 'Annettu luottokortin numero ei kelpaa. Ole hyvä ja tarkista numero sekä yritä uudelleen. {length} numeroa syötetty.' + +}); + + +/* +--- + +name: Locale.fi-FI.Number + +description: Finnish number messages + +license: MIT-style license + +authors: + - ksel + +requires: + - /Locale + - /Locale.EU.Number + +provides: [Locale.fi-FI.Number] + +... +*/ + +Locale.define('fi-FI', 'Number', { + + group: ' ' // grouped by space + +}).inherit('EU', 'Number'); + + +/* +--- + +name: Locale.fr-FR.Date + +description: Date messages for French. + +license: MIT-style license + +authors: + - Nicolas Sorosac + - Antoine Abt + +requires: + - /Locale + +provides: [Locale.fr-FR.Date] + +... +*/ + +Locale.define('fr-FR', 'Date', { + + months: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'], + months_abbr: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'], + days: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'], + days_abbr: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: function(dayOfMonth){ + return (dayOfMonth > 1) ? '' : 'er'; + }, + + lessThanMinuteAgo: "il y a moins d'une minute", + minuteAgo: 'il y a une minute', + minutesAgo: 'il y a {delta} minutes', + hourAgo: 'il y a une heure', + hoursAgo: 'il y a {delta} heures', + dayAgo: 'il y a un jour', + daysAgo: 'il y a {delta} jours', + weekAgo: 'il y a une semaine', + weeksAgo: 'il y a {delta} semaines', + monthAgo: 'il y a 1 mois', + monthsAgo: 'il y a {delta} mois', + yearthAgo: 'il y a 1 an', + yearsAgo: 'il y a {delta} ans', + + lessThanMinuteUntil: "dans moins d'une minute", + minuteUntil: 'dans une minute', + minutesUntil: 'dans {delta} minutes', + hourUntil: 'dans une heure', + hoursUntil: 'dans {delta} heures', + dayUntil: 'dans un jour', + daysUntil: 'dans {delta} jours', + weekUntil: 'dans 1 semaine', + weeksUntil: 'dans {delta} semaines', + monthUntil: 'dans 1 mois', + monthsUntil: 'dans {delta} mois', + yearUntil: 'dans 1 an', + yearsUntil: 'dans {delta} ans' + +}); + + +/* +--- + +name: Locale.fr-FR.Form.Validator + +description: Form Validator messages for French. + +license: MIT-style license + +authors: + - Miquel Hudin + - Nicolas Sorosac + +requires: + - /Locale + +provides: [Locale.fr-FR.Form.Validator] + +... +*/ + +Locale.define('fr-FR', 'FormValidator', { + + required: 'Ce champ est obligatoire.', + minLength: 'Veuillez saisir un minimum de {minLength} caractère(s) (vous avez saisi {length} caractère(s)).', + maxLength: 'Veuillez saisir un maximum de {maxLength} caractère(s) (vous avez saisi {length} caractère(s)).', + integer: 'Veuillez saisir un nombre entier dans ce champ. Les nombres décimaux (ex : "1,25") ne sont pas autorisés.', + numeric: 'Veuillez saisir uniquement des chiffres dans ce champ (ex : "1" ou "1,1" ou "-1" ou "-1,1").', + digits: "Veuillez saisir uniquement des chiffres et des signes de ponctuation dans ce champ (ex : un numéro de téléphone avec des traits d'union est autorisé).", + alpha: 'Veuillez saisir uniquement des lettres (a-z) dans ce champ. Les espaces ou autres caractères ne sont pas autorisés.', + alphanum: 'Veuillez saisir uniquement des lettres (a-z) ou des chiffres (0-9) dans ce champ. Les espaces ou autres caractères ne sont pas autorisés.', + dateSuchAs: 'Veuillez saisir une date correcte comme {date}', + dateInFormatMDY: 'Veuillez saisir une date correcte, au format JJ/MM/AAAA (ex : "31/11/1999").', + email: 'Veuillez saisir une adresse de courrier électronique. Par example "fred@domaine.com".', + url: 'Veuillez saisir une URL, comme http://www.example.com.', + currencyDollar: 'Veuillez saisir une quantité correcte. Par example 100,00€.', + oneRequired: 'Veuillez sélectionner au moins une de ces options.', + errorPrefix: 'Erreur : ', + warningPrefix: 'Attention : ', + + // Form.Validator.Extras + noSpace: "Ce champ n'accepte pas les espaces.", + reqChkByNode: "Aucun élément n'est sélectionné.", + requiredChk: 'Ce champ est obligatoire.', + reqChkByName: 'Veuillez sélectionner un(e) {label}.', + match: 'Ce champ doit correspondre avec le champ {matchName}.', + startDate: 'date de début', + endDate: 'date de fin', + currendDate: 'date actuelle', + afterDate: 'La date doit être identique ou postérieure à {label}.', + beforeDate: 'La date doit être identique ou antérieure à {label}.', + startMonth: 'Veuillez sélectionner un mois de début.', + sameMonth: 'Ces deux dates doivent être dans le même mois - vous devez en modifier une.', + creditcard: 'Le numéro de carte de crédit est invalide. Merci de vérifier le numéro et de réessayer. Vous avez entré {length} chiffre(s).' + +}); + + +/* +--- + +name: Locale.fr-FR.Number + +description: Number messages for French. + +license: MIT-style license + +authors: + - Arian Stolwijk + - sv1l + +requires: + - /Locale + - /Locale.EU.Number + +provides: [Locale.fr-FR.Number] + +... +*/ + +Locale.define('fr-FR', 'Number', { + + group: ' ' // In fr-FR localization, group character is a blank space + +}).inherit('EU', 'Number'); + + +/* +--- + +name: Locale.he-IL.Date + +description: Date messages for Hebrew. + +license: MIT-style license + +authors: + - Elad Ossadon + +requires: + - /Locale + +provides: [Locale.he-IL.Date] + +... +*/ + +Locale.define('he-IL', 'Date', { + + months: ['ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'], + months_abbr: ['ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'], + days: ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'], + days_abbr: ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'], + + // Culture's date order: MM/DD/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 0, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'לפני פחות מדקה', + minuteAgo: 'לפני כדקה', + minutesAgo: 'לפני {delta} דקות', + hourAgo: 'לפני כשעה', + hoursAgo: 'לפני {delta} שעות', + dayAgo: 'לפני יום', + daysAgo: 'לפני {delta} ימים', + weekAgo: 'לפני שבוע', + weeksAgo: 'לפני {delta} שבועות', + monthAgo: 'לפני חודש', + monthsAgo: 'לפני {delta} חודשים', + yearAgo: 'לפני שנה', + yearsAgo: 'לפני {delta} שנים', + + lessThanMinuteUntil: 'בעוד פחות מדקה', + minuteUntil: 'בעוד כדקה', + minutesUntil: 'בעוד {delta} דקות', + hourUntil: 'בעוד כשעה', + hoursUntil: 'בעוד {delta} שעות', + dayUntil: 'בעוד יום', + daysUntil: 'בעוד {delta} ימים', + weekUntil: 'בעוד שבוע', + weeksUntil: 'בעוד {delta} שבועות', + monthUntil: 'בעוד חודש', + monthsUntil: 'בעוד {delta} חודשים', + yearUntil: 'בעוד שנה', + yearsUntil: 'בעוד {delta} שנים' + +}); + + +/* +--- + +name: Locale.he-IL.Form.Validator + +description: Form Validator messages for Hebrew. + +license: MIT-style license + +authors: + - Elad Ossadon + +requires: + - /Locale + +provides: [Locale.he-IL.Form.Validator] + +... +*/ + +Locale.define('he-IL', 'FormValidator', { + + required: 'נא למלא שדה זה.', + minLength: 'נא להזין לפחות {minLength} תווים (הזנת {length} תווים).', + maxLength: 'נא להזין עד {maxLength} תווים (הזנת {length} תווים).', + integer: 'נא להזין מספר שלם לשדה זה. מספרים עשרוניים (כמו 1.25) אינם חוקיים.', + numeric: 'נא להזין ערך מספרי בלבד בשדה זה (כמו "1", "1.1", "-1" או "-1.1").', + digits: 'נא להזין רק ספרות וסימני הפרדה בשדה זה (למשל, מספר טלפון עם מקפים או נקודות הוא חוקי).', + alpha: 'נא להזין רק אותיות באנגלית (a-z) בשדה זה. רווחים או תווים אחרים אינם חוקיים.', + alphanum: 'נא להזין רק אותריות באנגלית (a-z) או ספרות (0-9) בשדה זה. אווחרים או תווים אחרים אינם חוקיים.', + dateSuchAs: 'נא להזין תאריך חוקי, כמו {date}', + dateInFormatMDY: 'נא להזין תאריך חוקי בפורמט MM/DD/YYYY (כמו "12/31/1999")', + email: 'נא להזין כתובת אימייל חוקית. לדוגמה: "fred@domain.com".', + url: 'נא להזין כתובת אתר חוקית, כמו http://www.example.com.', + currencyDollar: 'נא להזין סכום דולרי חוקי. לדוגמה $100.00.', + oneRequired: 'נא לבחור לפחות בשדה אחד.', + errorPrefix: 'שגיאה: ', + warningPrefix: 'אזהרה: ', + + // Form.Validator.Extras + noSpace: 'אין להזין רווחים בשדה זה.', + reqChkByNode: 'נא לבחור אחת מהאפשרויות.', + requiredChk: 'שדה זה נדרש.', + reqChkByName: 'נא לבחור {label}.', + match: 'שדה זה צריך להתאים לשדה {matchName}', + startDate: 'תאריך ההתחלה', + endDate: 'תאריך הסיום', + currendDate: 'התאריך הנוכחי', + afterDate: 'התאריך צריך להיות זהה או אחרי {label}.', + beforeDate: 'התאריך צריך להיות זהה או לפני {label}.', + startMonth: 'נא לבחור חודש התחלה', + sameMonth: 'שני תאריכים אלה צריכים להיות באותו חודש - נא לשנות אחד התאריכים.', + creditcard: 'מספר כרטיס האשראי שהוזן אינו חוקי. נא לבדוק שנית. הוזנו {length} ספרות.' + +}); + + +/* +--- + +name: Locale.he-IL.Number + +description: Number messages for Hebrew. + +license: MIT-style license + +authors: + - Elad Ossadon + +requires: + - /Locale + +provides: [Locale.he-IL.Number] + +... +*/ + +Locale.define('he-IL', 'Number', { + + decimal: '.', + group: ',', + + currency: { + suffix: ' ₪' + } + +}); + + +/* +--- + +name: Locale.hu-HU.Date + +description: Date messages for Hungarian. + +license: MIT-style license + +authors: + - Zsolt Szegheő + +requires: + - /Locale + +provides: [Locale.hu-HU.Date] + +... +*/ + +Locale.define('hu-HU', 'Date', { + + months: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], + months_abbr: ['jan.', 'febr.', 'márc.', 'ápr.', 'máj.', 'jún.', 'júl.', 'aug.', 'szept.', 'okt.', 'nov.', 'dec.'], + days: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], + days_abbr: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], + + // Culture's date order: YYYY.MM.DD. + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y.%m.%d.', + shortTime: '%I:%M', + AM: 'de.', + PM: 'du.', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'alig egy perce', + minuteAgo: 'egy perce', + minutesAgo: '{delta} perce', + hourAgo: 'egy órája', + hoursAgo: '{delta} órája', + dayAgo: '1 napja', + daysAgo: '{delta} napja', + weekAgo: '1 hete', + weeksAgo: '{delta} hete', + monthAgo: '1 hónapja', + monthsAgo: '{delta} hónapja', + yearAgo: '1 éve', + yearsAgo: '{delta} éve', + + lessThanMinuteUntil: 'alig egy perc múlva', + minuteUntil: 'egy perc múlva', + minutesUntil: '{delta} perc múlva', + hourUntil: 'egy óra múlva', + hoursUntil: '{delta} óra múlva', + dayUntil: '1 nap múlva', + daysUntil: '{delta} nap múlva', + weekUntil: '1 hét múlva', + weeksUntil: '{delta} hét múlva', + monthUntil: '1 hónap múlva', + monthsUntil: '{delta} hónap múlva', + yearUntil: '1 év múlva', + yearsUntil: '{delta} év múlva' + +}); + + +/* +--- + +name: Locale.hu-HU.Form.Validator + +description: Form Validator messages for Hungarian. + +license: MIT-style license + +authors: + - Zsolt Szegheő + +requires: + - /Locale + +provides: [Locale.hu-HU.Form.Validator] + +... +*/ + +Locale.define('hu-HU', 'FormValidator', { + + required: 'A mező kitöltése kötelező.', + minLength: 'Legalább {minLength} karakter megadása szükséges (megadva {length} karakter).', + maxLength: 'Legfeljebb {maxLength} karakter megadása lehetséges (megadva {length} karakter).', + integer: 'Egész szám megadása szükséges. A tizedesjegyek (pl. 1.25) nem engedélyezettek.', + numeric: 'Szám megadása szükséges (pl. "1" vagy "1.1" vagy "-1" vagy "-1.1").', + digits: 'Csak számok és írásjelek megadása lehetséges (pl. telefonszám kötőjelek és/vagy perjelekkel).', + alpha: 'Csak betűk (a-z) megadása lehetséges. Szóköz és egyéb karakterek nem engedélyezettek.', + alphanum: 'Csak betűk (a-z) vagy számok (0-9) megadása lehetséges. Szóköz és egyéb karakterek nem engedélyezettek.', + dateSuchAs: 'Valós dátum megadása szükséges (pl. {date}).', + dateInFormatMDY: 'Valós dátum megadása szükséges ÉÉÉÉ.HH.NN. formában. (pl. "1999.12.31.")', + email: 'Valós e-mail cím megadása szükséges (pl. "fred@domain.hu").', + url: 'Valós URL megadása szükséges (pl. http://www.example.com).', + currencyDollar: 'Valós pénzösszeg megadása szükséges (pl. 100.00 Ft.).', + oneRequired: 'Az alábbi mezők legalább egyikének kitöltése kötelező.', + errorPrefix: 'Hiba: ', + warningPrefix: 'Figyelem: ', + + // Form.Validator.Extras + noSpace: 'A mező nem tartalmazhat szóközöket.', + reqChkByNode: 'Nincs egyetlen kijelölt elem sem.', + requiredChk: 'A mező kitöltése kötelező.', + reqChkByName: 'Egy {label} kiválasztása szükséges.', + match: 'A mezőnek egyeznie kell a(z) {matchName} mezővel.', + startDate: 'a kezdet dátuma', + endDate: 'a vég dátuma', + currendDate: 'jelenlegi dátum', + afterDate: 'A dátum nem lehet kisebb, mint {label}.', + beforeDate: 'A dátum nem lehet nagyobb, mint {label}.', + startMonth: 'Kezdeti hónap megadása szükséges.', + sameMonth: 'A két dátumnak ugyanazon hónapban kell lennie.', + creditcard: 'A megadott bankkártyaszám nem valódi (megadva {length} számjegy).' + +}); + + +/* +--- + +name: Locale.it-IT.Date + +description: Date messages for Italian. + +license: MIT-style license. + +authors: + - Andrea Novero + - Valerio Proietti + +requires: + - /Locale + +provides: [Locale.it-IT.Date] + +... +*/ + +Locale.define('it-IT', 'Date', { + + months: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'], + months_abbr: ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic'], + days: ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'], + days_abbr: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H.%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: 'º', + + lessThanMinuteAgo: 'meno di un minuto fa', + minuteAgo: 'circa un minuto fa', + minutesAgo: 'circa {delta} minuti fa', + hourAgo: "circa un'ora fa", + hoursAgo: 'circa {delta} ore fa', + dayAgo: 'circa 1 giorno fa', + daysAgo: 'circa {delta} giorni fa', + + lessThanMinuteUntil: 'tra meno di un minuto', + minuteUntil: 'tra circa un minuto', + minutesUntil: 'tra circa {delta} minuti', + hourUntil: "tra circa un'ora", + hoursUntil: 'tra circa {delta} ore', + dayUntil: 'tra circa un giorno', + daysUntil: 'tra circa {delta} giorni' + +}); + + +/* +--- + +name: Locale.it-IT.Form.Validator + +description: Form Validator messages for Italian. + +license: MIT-style license + +authors: + - Leonardo Laureti + - Andrea Novero + +requires: + - /Locale + +provides: [Locale.it-IT.Form.Validator] + +... +*/ + +Locale.define('it-IT', 'FormValidator', { + + required: 'Il campo è obbligatorio.', + minLength: 'Inserire almeno {minLength} caratteri (ne sono stati inseriti {length}).', + maxLength: 'Inserire al massimo {maxLength} caratteri (ne sono stati inseriti {length}).', + integer: 'Inserire un numero intero. Non sono consentiti decimali (es.: 1.25).', + numeric: 'Inserire solo valori numerici (es.: "1" oppure "1.1" oppure "-1" oppure "-1.1").', + digits: 'Inserire solo numeri e caratteri di punteggiatura. Per esempio è consentito un numero telefonico con trattini o punti.', + alpha: 'Inserire solo lettere (a-z). Non sono consentiti spazi o altri caratteri.', + alphanum: 'Inserire solo lettere (a-z) o numeri (0-9). Non sono consentiti spazi o altri caratteri.', + dateSuchAs: 'Inserire una data valida del tipo {date}', + dateInFormatMDY: 'Inserire una data valida nel formato MM/GG/AAAA (es.: "12/31/1999")', + email: 'Inserire un indirizzo email valido. Per esempio "nome@dominio.com".', + url: 'Inserire un indirizzo valido. Per esempio "http://www.example.com".', + currencyDollar: 'Inserire un importo valido. Per esempio "$100.00".', + oneRequired: 'Completare almeno uno dei campi richiesti.', + errorPrefix: 'Errore: ', + warningPrefix: 'Attenzione: ', + + // Form.Validator.Extras + noSpace: 'Non sono consentiti spazi.', + reqChkByNode: 'Nessuna voce selezionata.', + requiredChk: 'Il campo è obbligatorio.', + reqChkByName: 'Selezionare un(a) {label}.', + match: 'Il valore deve corrispondere al campo {matchName}', + startDate: "data d'inizio", + endDate: 'data di fine', + currendDate: 'data attuale', + afterDate: 'La data deve corrispondere o essere successiva al {label}.', + beforeDate: 'La data deve corrispondere o essere precedente al {label}.', + startMonth: "Selezionare un mese d'inizio", + sameMonth: 'Le due date devono essere dello stesso mese - occorre modificarne una.' + +}); + + +/* +--- + +name: Locale.ja-JP.Date + +description: Date messages for Japanese. + +license: MIT-style license + +authors: + - Noritaka Horio + +requires: + - /Locale + +provides: [Locale.ja-JP.Date] + +... +*/ + +Locale.define('ja-JP', 'Date', { + + months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + months_abbr: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + days: ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'], + days_abbr: ['日', '月', '火', '水', '木', '金', '土'], + + // Culture's date order: YYYY/MM/DD + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y/%m/%d', + shortTime: '%H:%M', + AM: '午前', + PM: '午後', + firstDayOfWeek: 0, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: '1分以内前', + minuteAgo: '約1分前', + minutesAgo: '約{delta}分前', + hourAgo: '約1時間前', + hoursAgo: '約{delta}時間前', + dayAgo: '1日前', + daysAgo: '{delta}日前', + weekAgo: '1週間前', + weeksAgo: '{delta}週間前', + monthAgo: '1ヶ月前', + monthsAgo: '{delta}ヶ月前', + yearAgo: '1年前', + yearsAgo: '{delta}年前', + + lessThanMinuteUntil: '今から約1分以内', + minuteUntil: '今から約1分', + minutesUntil: '今から約{delta}分', + hourUntil: '今から約1時間', + hoursUntil: '今から約{delta}時間', + dayUntil: '今から1日間', + daysUntil: '今から{delta}日間', + weekUntil: '今から1週間', + weeksUntil: '今から{delta}週間', + monthUntil: '今から1ヶ月', + monthsUntil: '今から{delta}ヶ月', + yearUntil: '今から1年', + yearsUntil: '今から{delta}年' + +}); + + +/* +--- + +name: Locale.ja-JP.Form.Validator + +description: Form Validator messages for Japanese. + +license: MIT-style license + +authors: + - Noritaka Horio + +requires: + - /Locale + +provides: [Locale.ja-JP.Form.Validator] + +... +*/ + +Locale.define("ja-JP", "FormValidator", { + + required: '入力は必須です。', + minLength: '入力文字数は{minLength}以上にしてください。({length}文字)', + maxLength: '入力文字数は{maxLength}以下にしてください。({length}文字)', + integer: '整数を入力してください。', + numeric: '入力できるのは数値だけです。(例: "1", "1.1", "-1", "-1.1"....)', + digits: '入力できるのは数値と句読記号です。 (例: -や+を含む電話番号など).', + alpha: '入力できるのは半角英字だけです。それ以外の文字は入力できません。', + alphanum: '入力できるのは半角英数字だけです。それ以外の文字は入力できません。', + dateSuchAs: '有効な日付を入力してください。{date}', + dateInFormatMDY: '日付の書式に誤りがあります。YYYY/MM/DD (i.e. "1999/12/31")', + email: 'メールアドレスに誤りがあります。', + url: 'URLアドレスに誤りがあります。', + currencyDollar: '金額に誤りがあります。', + oneRequired: 'ひとつ以上入力してください。', + errorPrefix: 'エラー: ', + warningPrefix: '警告: ', + + // FormValidator.Extras + noSpace: 'スペースは入力できません。', + reqChkByNode: '選択されていません。', + requiredChk: 'この項目は必須です。', + reqChkByName: '{label}を選択してください。', + match: '{matchName}が入力されている場合必須です。', + startDate: '開始日', + endDate: '終了日', + currendDate: '今日', + afterDate: '{label}以降の日付にしてください。', + beforeDate: '{label}以前の日付にしてください。', + startMonth: '開始月を選択してください。', + sameMonth: '日付が同一です。どちらかを変更してください。' + +}); + + +/* +--- + +name: Locale.ja-JP.Number + +description: Number messages for Japanese. + +license: MIT-style license + +authors: + - Noritaka Horio + +requires: + - /Locale + +provides: [Locale.ja-JP.Number] + +... +*/ + +Locale.define('ja-JP', 'Number', { + + decimal: '.', + group: ',', + + currency: { + decimals: 0, + prefix: '\\' + } + +}); + + +/* +--- + +name: Locale.nl-NL.Date + +description: Date messages for Dutch. + +license: MIT-style license + +authors: + - Lennart Pilon + - Tim Wienk + +requires: + - /Locale + +provides: [Locale.nl-NL.Date] + +... +*/ + +Locale.define('nl-NL', 'Date', { + + months: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], + months_abbr: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], + days: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], + days_abbr: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], + + // Culture's date order: DD-MM-YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d-%m-%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: 'e', + + lessThanMinuteAgo: 'minder dan een minuut geleden', + minuteAgo: 'ongeveer een minuut geleden', + minutesAgo: '{delta} minuten geleden', + hourAgo: 'ongeveer een uur geleden', + hoursAgo: 'ongeveer {delta} uur geleden', + dayAgo: 'een dag geleden', + daysAgo: '{delta} dagen geleden', + weekAgo: 'een week geleden', + weeksAgo: '{delta} weken geleden', + monthAgo: 'een maand geleden', + monthsAgo: '{delta} maanden geleden', + yearAgo: 'een jaar geleden', + yearsAgo: '{delta} jaar geleden', + + lessThanMinuteUntil: 'over minder dan een minuut', + minuteUntil: 'over ongeveer een minuut', + minutesUntil: 'over {delta} minuten', + hourUntil: 'over ongeveer een uur', + hoursUntil: 'over {delta} uur', + dayUntil: 'over ongeveer een dag', + daysUntil: 'over {delta} dagen', + weekUntil: 'over een week', + weeksUntil: 'over {delta} weken', + monthUntil: 'over een maand', + monthsUntil: 'over {delta} maanden', + yearUntil: 'over een jaar', + yearsUntil: 'over {delta} jaar' + +}); + + +/* +--- + +name: Locale.nl-NL.Form.Validator + +description: Form Validator messages for Dutch. + +license: MIT-style license + +authors: + - Lennart Pilon + - Arian Stolwijk + - Tim Wienk + +requires: + - /Locale + +provides: [Locale.nl-NL.Form.Validator] + +... +*/ + +Locale.define('nl-NL', 'FormValidator', { + + required: 'Dit veld is verplicht.', + minLength: 'Vul minimaal {minLength} karakters in (je hebt {length} karakters ingevoerd).', + maxLength: 'Vul niet meer dan {maxLength} karakters in (je hebt {length} karakters ingevoerd).', + integer: 'Vul een getal in. Getallen met decimalen (bijvoorbeeld 1.25) zijn niet toegestaan.', + numeric: 'Vul alleen numerieke waarden in (bijvoorbeeld "1" of "1.1" of "-1" of "-1.1").', + digits: 'Vul alleen nummers en leestekens in (bijvoorbeeld een telefoonnummer met streepjes is toegestaan).', + alpha: 'Vul alleen letters in (a-z). Spaties en andere karakters zijn niet toegestaan.', + alphanum: 'Vul alleen letters (a-z) of nummers (0-9) in. Spaties en andere karakters zijn niet toegestaan.', + dateSuchAs: 'Vul een geldige datum in, zoals {date}', + dateInFormatMDY: 'Vul een geldige datum, in het formaat MM/DD/YYYY (bijvoorbeeld "12/31/1999")', + email: 'Vul een geldig e-mailadres in. Bijvoorbeeld "fred@domein.nl".', + url: 'Vul een geldige URL in, zoals http://www.example.com.', + currencyDollar: 'Vul een geldig $ bedrag in. Bijvoorbeeld $100.00 .', + oneRequired: 'Vul iets in bij in ieder geval een van deze velden.', + warningPrefix: 'Waarschuwing: ', + errorPrefix: 'Fout: ', + + // Form.Validator.Extras + noSpace: 'Spaties zijn niet toegestaan in dit veld.', + reqChkByNode: 'Er zijn geen items geselecteerd.', + requiredChk: 'Dit veld is verplicht.', + reqChkByName: 'Selecteer een {label}.', + match: 'Dit veld moet overeen komen met het {matchName} veld', + startDate: 'de begin datum', + endDate: 'de eind datum', + currendDate: 'de huidige datum', + afterDate: 'De datum moet hetzelfde of na {label} zijn.', + beforeDate: 'De datum moet hetzelfde of voor {label} zijn.', + startMonth: 'Selecteer een begin maand', + sameMonth: 'Deze twee data moeten in dezelfde maand zijn - u moet een van beide aanpassen.', + creditcard: 'Het ingevulde creditcardnummer is niet geldig. Controleer het nummer en probeer opnieuw. {length} getallen ingevuld.' + +}); + + +/* +--- + +name: Locale.nl-NL.Number + +description: Number messages for Dutch. + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: + - /Locale + - /Locale.EU.Number + +provides: [Locale.nl-NL.Number] + +... +*/ + +Locale.define('nl-NL').inherit('EU', 'Number'); + + + + + +/* +--- + +name: Locale.no-NO.Date + +description: Date messages for Norwegian. + +license: MIT-style license + +authors: + - Espen 'Rexxars' Hovlandsdal + +requires: + - /Locale + +provides: [Locale.no-NO.Date] + +... +*/ + +Locale.define('no-NO', 'Date', { + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + lessThanMinuteAgo: 'kortere enn et minutt siden', + minuteAgo: 'omtrent et minutt siden', + minutesAgo: '{delta} minutter siden', + hourAgo: 'omtrent en time siden', + hoursAgo: 'omtrent {delta} timer siden', + dayAgo: '{delta} dag siden', + daysAgo: '{delta} dager siden' + +}); + + +/* +--- + +name: Locale.no-NO.Form.Validator + +description: Form Validator messages for Norwegian. + +license: MIT-style license + +authors: + - Espen 'Rexxars' Hovlandsdal + +requires: + - /Locale + +provides: [Locale.no-NO.Form.Validator] + +... +*/ + +Locale.define('no-NO', 'FormValidator', { + + required: 'Dette feltet er pÃ¥krevd.', + minLength: 'Vennligst skriv inn minst {minLength} tegn (du skrev {length} tegn).', + maxLength: 'Vennligst skriv inn maksimalt {maxLength} tegn (du skrev {length} tegn).', + integer: 'Vennligst skriv inn et tall i dette feltet. Tall med desimaler (for eksempel 1,25) er ikke tillat.', + numeric: 'Vennligst skriv inn kun numeriske verdier i dette feltet (for eksempel "1", "1.1", "-1" eller "-1.1").', + digits: 'Vennligst bruk kun nummer og skilletegn i dette feltet.', + alpha: 'Vennligst bruk kun bokstaver (a-z) i dette feltet. Ingen mellomrom eller andre tegn er tillat.', + alphanum: 'Vennligst bruk kun bokstaver (a-z) eller nummer (0-9) i dette feltet. Ingen mellomrom eller andre tegn er tillat.', + dateSuchAs: 'Vennligst skriv inn en gyldig dato, som {date}', + dateInFormatMDY: 'Vennligst skriv inn en gyldig dato, i formatet MM/DD/YYYY (for eksempel "12/31/1999")', + email: 'Vennligst skriv inn en gyldig epost-adresse. For eksempel "espen@domene.no".', + url: 'Vennligst skriv inn en gyldig URL, for eksempel http://www.example.com.', + currencyDollar: 'Vennligst fyll ut et gyldig $ beløp. For eksempel $100.00 .', + oneRequired: 'Vennligst fyll ut noe i minst ett av disse feltene.', + errorPrefix: 'Feil: ', + warningPrefix: 'Advarsel: ' + +}); + + +/* +--- + +name: Locale.pl-PL.Date + +description: Date messages for Polish. + +license: MIT-style license + +authors: + - Oskar Krawczyk + +requires: + - /Locale + +provides: [Locale.pl-PL.Date] + +... +*/ + +Locale.define('pl-PL', 'Date', { + + months: ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'], + months_abbr: ['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paź', 'lis', 'gru'], + days: ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'], + days_abbr: ['niedz.', 'pon.', 'wt.', 'śr.', 'czw.', 'pt.', 'sob.'], + + // Culture's date order: YYYY-MM-DD + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y-%m-%d', + shortTime: '%H:%M', + AM: 'nad ranem', + PM: 'po południu', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: function(dayOfMonth){ + return (dayOfMonth > 3 && dayOfMonth < 21) ? 'ty' : ['ty', 'szy', 'gi', 'ci', 'ty'][Math.min(dayOfMonth % 10, 4)]; + }, + + lessThanMinuteAgo: 'mniej niż minute temu', + minuteAgo: 'około minutę temu', + minutesAgo: '{delta} minut temu', + hourAgo: 'około godzinę temu', + hoursAgo: 'około {delta} godzin temu', + dayAgo: 'Wczoraj', + daysAgo: '{delta} dni temu', + + lessThanMinuteUntil: 'za niecałą minutę', + minuteUntil: 'za około minutę', + minutesUntil: 'za {delta} minut', + hourUntil: 'za około godzinę', + hoursUntil: 'za około {delta} godzin', + dayUntil: 'za 1 dzień', + daysUntil: 'za {delta} dni' + +}); + + +/* +--- + +name: Locale.pl-PL.Form.Validator + +description: Form Validator messages for Polish. + +license: MIT-style license + +authors: + - Oskar Krawczyk + +requires: + - /Locale + +provides: [Locale.pl-PL.Form.Validator] + +... +*/ + +Locale.define('pl-PL', 'FormValidator', { + + required: 'To pole jest wymagane.', + minLength: 'Wymagane jest przynajmniej {minLength} znaków (wpisanych zostało tylko {length}).', + maxLength: 'Dozwolone jest nie więcej niż {maxLength} znaków (wpisanych zostało {length})', + integer: 'To pole wymaga liczb całych. Liczby dziesiętne (np. 1.25) są niedozwolone.', + numeric: 'Prosimy używać tylko numerycznych wartości w tym polu (np. "1", "1.1", "-1" lub "-1.1").', + digits: 'Prosimy używać liczb oraz zankow punktuacyjnych w typ polu (dla przykładu, przy numerze telefonu myślniki i kropki są dozwolone).', + alpha: 'Prosimy używać tylko liter (a-z) w tym polu. Spacje oraz inne znaki są niedozwolone.', + alphanum: 'Prosimy używać tylko liter (a-z) lub liczb (0-9) w tym polu. Spacje oraz inne znaki są niedozwolone.', + dateSuchAs: 'Prosimy podać prawidłową datę w formacie: {date}', + dateInFormatMDY: 'Prosimy podać poprawną date w formacie DD.MM.RRRR (i.e. "12.01.2009")', + email: 'Prosimy podać prawidłowy adres e-mail, np. "jan@domena.pl".', + url: 'Prosimy podać prawidłowy adres URL, np. http://www.example.com.', + currencyDollar: 'Prosimy podać prawidłową sumę w PLN. Dla przykładu: 100.00 PLN.', + oneRequired: 'Prosimy wypełnić chociaż jedno z pól.', + errorPrefix: 'Błąd: ', + warningPrefix: 'Uwaga: ', + + // Form.Validator.Extras + noSpace: 'W tym polu nie mogą znajdować się spacje.', + reqChkByNode: 'Brak zaznaczonych elementów.', + requiredChk: 'To pole jest wymagane.', + reqChkByName: 'Prosimy wybrać z {label}.', + match: 'To pole musi być takie samo jak {matchName}', + startDate: 'data początkowa', + endDate: 'data końcowa', + currendDate: 'aktualna data', + afterDate: 'Podana data poinna być taka sama lub po {label}.', + beforeDate: 'Podana data poinna być taka sama lub przed {label}.', + startMonth: 'Prosimy wybrać początkowy miesiąc.', + sameMonth: 'Te dwie daty muszą być w zakresie tego samego miesiąca - wymagana jest zmiana któregoś z pól.' + +}); + + +/* +--- + +name: Locale.pt-PT.Date + +description: Date messages for Portuguese. + +license: MIT-style license + +authors: + - Fabio Miranda Costa + +requires: + - /Locale + +provides: [Locale.pt-PT.Date] + +... +*/ + +Locale.define('pt-PT', 'Date', { + + months: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'], + months_abbr: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'], + days: ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'], + days_abbr: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'], + + // Culture's date order: DD-MM-YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d-%m-%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: 'º', + + lessThanMinuteAgo: 'há menos de um minuto', + minuteAgo: 'há cerca de um minuto', + minutesAgo: 'há {delta} minutos', + hourAgo: 'há cerca de uma hora', + hoursAgo: 'há cerca de {delta} horas', + dayAgo: 'há um dia', + daysAgo: 'há {delta} dias', + weekAgo: 'há uma semana', + weeksAgo: 'há {delta} semanas', + monthAgo: 'há um mês', + monthsAgo: 'há {delta} meses', + yearAgo: 'há um ano', + yearsAgo: 'há {delta} anos', + + lessThanMinuteUntil: 'em menos de um minuto', + minuteUntil: 'em um minuto', + minutesUntil: 'em {delta} minutos', + hourUntil: 'em uma hora', + hoursUntil: 'em {delta} horas', + dayUntil: 'em um dia', + daysUntil: 'em {delta} dias', + weekUntil: 'em uma semana', + weeksUntil: 'em {delta} semanas', + monthUntil: 'em um mês', + monthsUntil: 'em {delta} meses', + yearUntil: 'em um ano', + yearsUntil: 'em {delta} anos' + +}); + + +/* +--- + +name: Locale.pt-BR.Date + +description: Date messages for Portuguese (Brazil). + +license: MIT-style license + +authors: + - Fabio Miranda Costa + +requires: + - /Locale + - /Locale.pt-PT.Date + +provides: [Locale.pt-BR.Date] + +... +*/ + +Locale.define('pt-BR', 'Date', { + + // Culture's date order: DD/MM/YYYY + shortDate: '%d/%m/%Y' + +}).inherit('pt-PT', 'Date'); + + +/* +--- + +name: Locale.pt-BR.Form.Validator + +description: Form Validator messages for Portuguese (Brazil). + +license: MIT-style license + +authors: + - Fábio Miranda Costa + +requires: + - /Locale + +provides: [Locale.pt-BR.Form.Validator] + +... +*/ + +Locale.define('pt-BR', 'FormValidator', { + + required: 'Este campo é obrigatório.', + minLength: 'Digite pelo menos {minLength} caracteres (tamanho atual: {length}).', + maxLength: 'Não digite mais de {maxLength} caracteres (tamanho atual: {length}).', + integer: 'Por favor digite apenas um número inteiro neste campo. Não são permitidos números decimais (por exemplo, 1,25).', + numeric: 'Por favor digite apenas valores numéricos neste campo (por exemplo, "1" ou "1.1" ou "-1" ou "-1,1").', + digits: 'Por favor use apenas números e pontuação neste campo (por exemplo, um número de telefone com traços ou pontos é permitido).', + alpha: 'Por favor use somente letras (a-z). Espaço e outros caracteres não são permitidos.', + alphanum: 'Use somente letras (a-z) ou números (0-9) neste campo. Espaço e outros caracteres não são permitidos.', + dateSuchAs: 'Digite uma data válida, como {date}', + dateInFormatMDY: 'Digite uma data válida, como DD/MM/YYYY (por exemplo, "31/12/1999")', + email: 'Digite um endereço de email válido. Por exemplo "nome@dominio.com".', + url: 'Digite uma URL válida. Exemplo: http://www.example.com.', + currencyDollar: 'Digite um valor em dinheiro válido. Exemplo: R$100,00 .', + oneRequired: 'Digite algo para pelo menos um desses campos.', + errorPrefix: 'Erro: ', + warningPrefix: 'Aviso: ', + + // Form.Validator.Extras + noSpace: 'Não é possível digitar espaços neste campo.', + reqChkByNode: 'Não foi selecionado nenhum item.', + requiredChk: 'Este campo é obrigatório.', + reqChkByName: 'Por favor digite um {label}.', + match: 'Este campo deve ser igual ao campo {matchName}.', + startDate: 'a data inicial', + endDate: 'a data final', + currendDate: 'a data atual', + afterDate: 'A data deve ser igual ou posterior a {label}.', + beforeDate: 'A data deve ser igual ou anterior a {label}.', + startMonth: 'Por favor selecione uma data inicial.', + sameMonth: 'Estas duas datas devem ter o mesmo mês - você deve modificar uma das duas.', + creditcard: 'O número do cartão de crédito informado é inválido. Por favor verifique o valor e tente novamente. {length} números informados.' + +}); + + +/* +--- + +name: Locale.pt-PT.Form.Validator + +description: Form Validator messages for Portuguese. + +license: MIT-style license + +authors: + - Miquel Hudin + +requires: + - /Locale + +provides: [Locale.pt-PT.Form.Validator] + +... +*/ + +Locale.define('pt-PT', 'FormValidator', { + + required: 'Este campo é necessário.', + minLength: 'Digite pelo menos{minLength} caracteres (comprimento {length} caracteres).', + maxLength: 'Não insira mais de {maxLength} caracteres (comprimento {length} caracteres).', + integer: 'Digite um número inteiro neste domínio. Com números decimais (por exemplo, 1,25), não são permitidas.', + numeric: 'Digite apenas valores numéricos neste domínio (p.ex., "1" ou "1.1" ou "-1" ou "-1,1").', + digits: 'Por favor, use números e pontuação apenas neste campo (p.ex., um número de telefone com traços ou pontos é permitida).', + alpha: 'Por favor use somente letras (a-z), com nesta área. Não utilize espaços nem outros caracteres são permitidos.', + alphanum: 'Use somente letras (a-z) ou números (0-9) neste campo. Não utilize espaços nem outros caracteres são permitidos.', + dateSuchAs: 'Digite uma data válida, como {date}', + dateInFormatMDY: 'Digite uma data válida, como DD/MM/YYYY (p.ex. "31/12/1999")', + email: 'Digite um endereço de email válido. Por exemplo "fred@domain.com".', + url: 'Digite uma URL válida, como http://www.example.com.', + currencyDollar: 'Digite um valor válido $. Por exemplo $ 100,00. ', + oneRequired: 'Digite algo para pelo menos um desses insumos.', + errorPrefix: 'Erro: ', + warningPrefix: 'Aviso: ' + +}); + + +/* +--- + +name: Locale.ru-RU-unicode.Date + +description: Date messages for Russian (utf-8). + +license: MIT-style license + +authors: + - Evstigneev Pavel + - Kuryanovich Egor + +requires: + - /Locale + +provides: [Locale.ru-RU.Date] + +... +*/ + +(function(){ + +// Russian language pluralization rules, taken from CLDR project, http://unicode.org/cldr/ +// one -> n mod 10 is 1 and n mod 100 is not 11; +// few -> n mod 10 in 2..4 and n mod 100 not in 12..14; +// many -> n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14; +// other -> everything else (example 3.14) +var pluralize = function (n, one, few, many, other){ + var modulo10 = n % 10, + modulo100 = n % 100; + + if (modulo10 == 1 && modulo100 != 11){ + return one; + } else if ((modulo10 == 2 || modulo10 == 3 || modulo10 == 4) && !(modulo100 == 12 || modulo100 == 13 || modulo100 == 14)){ + return few; + } else if (modulo10 == 0 || (modulo10 == 5 || modulo10 == 6 || modulo10 == 7 || modulo10 == 8 || modulo10 == 9) || (modulo100 == 11 || modulo100 == 12 || modulo100 == 13 || modulo100 == 14)){ + return many; + } else { + return other; + } +}; + +Locale.define('ru-RU', 'Date', { + + months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'], + months_abbr: ['янв', 'февр', 'март', 'апр', 'май','июнь','июль','авг','сент','окт','нояб','дек'], + days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'], + days_abbr: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'], + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'меньше минуты назад', + minuteAgo: 'минуту назад', + minutesAgo: function(delta){ return '{delta} ' + pluralize(delta, 'минуту', 'минуты', 'минут') + ' назад'; }, + hourAgo: 'час назад', + hoursAgo: function(delta){ return '{delta} ' + pluralize(delta, 'час', 'часа', 'часов') + ' назад'; }, + dayAgo: 'вчера', + daysAgo: function(delta){ return '{delta} ' + pluralize(delta, 'день', 'дня', 'дней') + ' назад'; }, + weekAgo: 'неделю назад', + weeksAgo: function(delta){ return '{delta} ' + pluralize(delta, 'неделя', 'недели', 'недель') + ' назад'; }, + monthAgo: 'месяц назад', + monthsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'месяц', 'месяца', 'месецев') + ' назад'; }, + yearAgo: 'год назад', + yearsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'год', 'года', 'лет') + ' назад'; }, + + lessThanMinuteUntil: 'меньше чем через минуту', + minuteUntil: 'через минуту', + minutesUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'час', 'часа', 'часов') + ''; }, + hourUntil: 'через час', + hoursUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'час', 'часа', 'часов') + ''; }, + dayUntil: 'завтра', + daysUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'день', 'дня', 'дней') + ''; }, + weekUntil: 'через неделю', + weeksUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'неделю', 'недели', 'недель') + ''; }, + monthUntil: 'через месяц', + monthsUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'месяц', 'месяца', 'месецев') + ''; }, + yearUntil: 'через', + yearsUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'год', 'года', 'лет') + ''; } + +}); + +//<1.2compat> + +Locale.define('ru-RU-unicode').inherit('ru-RU', 'Date'); + +// + +})(); + + +/* +--- + +name: Locale.ru-RU-unicode.Form.Validator + +description: Form Validator messages for Russian (utf-8). + +license: MIT-style license + +authors: + - Chernodarov Egor + +requires: + - /Locale + +provides: [Locale.ru-RU.Form.Validator] + +... +*/ + +Locale.define('ru-RU', 'FormValidator', { + + required: 'Это поле обязательно к заполнению.', + minLength: 'Пожалуйста, введите хотя бы {minLength} символов (Вы ввели {length}).', + maxLength: 'Пожалуйста, введите не больше {maxLength} символов (Вы ввели {length}).', + integer: 'Пожалуйста, введите в это поле число. Дробные числа (например 1.25) тут не разрешены.', + numeric: 'Пожалуйста, введите в это поле число (например "1" или "1.1", или "-1", или "-1.1").', + digits: 'В этом поле Вы можете использовать только цифры и знаки пунктуации (например, телефонный номер со знаками дефиса или с точками).', + alpha: 'В этом поле можно использовать только латинские буквы (a-z). Пробелы и другие символы запрещены.', + alphanum: 'В этом поле можно использовать только латинские буквы (a-z) и цифры (0-9). Пробелы и другие символы запрещены.', + dateSuchAs: 'Пожалуйста, введите корректную дату {date}', + dateInFormatMDY: 'Пожалуйста, введите дату в формате ММ/ДД/ГГГГ (например "12/31/1999")', + email: 'Пожалуйста, введите корректный емейл-адрес. Для примера "fred@domain.com".', + url: 'Пожалуйста, введите правильную ссылку вида http://www.example.com.', + currencyDollar: 'Пожалуйста, введите сумму в долларах. Например: $100.00 .', + oneRequired: 'Пожалуйста, выберите хоть что-нибудь в одном из этих полей.', + errorPrefix: 'Ошибка: ', + warningPrefix: 'Внимание: ' + +}); + +//<1.2compat> + +Locale.define('ru-RU-unicode').inherit('ru-RU', 'FormValidator'); + +// + + +/* +--- + +name: Locale.si-SI.Date + +description: Date messages for Slovenian. + +license: MIT-style license + +authors: + - Radovan Lozej + +requires: + - /Locale + +provides: [Locale.si-SI.Date] + +... +*/ + +(function(){ + +var pluralize = function(n, one, two, three, other){ + return (n >= 1 && n <= 3) ? arguments[n] : other; +}; + +Locale.define('si-SI', 'Date', { + + months: ['januar', 'februar', 'marec', 'april', 'maj', 'junij', 'julij', 'avgust', 'september', 'oktober', 'november', 'december'], + months_abbr: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'avg', 'sep', 'okt', 'nov', 'dec'], + days: ['nedelja', 'ponedeljek', 'torek', 'sreda', 'četrtek', 'petek', 'sobota'], + days_abbr: ['ned', 'pon', 'tor', 'sre', 'čet', 'pet', 'sob'], + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H.%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'manj kot minuto nazaj', + minuteAgo: 'minuto nazaj', + minutesAgo: function(delta){ return '{delta} ' + pluralize(delta, 'minuto', 'minuti', 'minute', 'minut') + ' nazaj'; }, + hourAgo: 'uro nazaj', + hoursAgo: function(delta){ return '{delta} ' + pluralize(delta, 'uro', 'uri', 'ure', 'ur') + ' nazaj'; }, + dayAgo: 'dan nazaj', + daysAgo: function(delta){ return '{delta} ' + pluralize(delta, 'dan', 'dneva', 'dni', 'dni') + ' nazaj'; }, + weekAgo: 'teden nazaj', + weeksAgo: function(delta){ return '{delta} ' + pluralize(delta, 'teden', 'tedna', 'tedne', 'tednov') + ' nazaj'; }, + monthAgo: 'mesec nazaj', + monthsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'mesec', 'meseca', 'mesece', 'mesecov') + ' nazaj'; }, + yearthAgo: 'leto nazaj', + yearsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'leto', 'leti', 'leta', 'let') + ' nazaj'; }, + + lessThanMinuteUntil: 'še manj kot minuto', + minuteUntil: 'še minuta', + minutesUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'minuta', 'minuti', 'minute', 'minut'); }, + hourUntil: 'še ura', + hoursUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'ura', 'uri', 'ure', 'ur'); }, + dayUntil: 'še dan', + daysUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'dan', 'dneva', 'dnevi', 'dni'); }, + weekUntil: 'še tedn', + weeksUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'teden', 'tedna', 'tedni', 'tednov'); }, + monthUntil: 'še mesec', + monthsUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'mesec', 'meseca', 'meseci', 'mesecov'); }, + yearUntil: 'še leto', + yearsUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'leto', 'leti', 'leta', 'let'); } + +}); + +})(); + + +/* +--- + +name: Locale.si-SI.Form.Validator + +description: Form Validator messages for Slovenian. + +license: MIT-style license + +authors: + - Radovan Lozej + +requires: + - /Locale + +provides: [Locale.si-SI.Form.Validator] + +... +*/ + +Locale.define('si-SI', 'FormValidator', { + + required: 'To polje je obvezno', + minLength: 'Prosim, vnesite vsaj {minLength} znakov (vnesli ste {length} znakov).', + maxLength: 'Prosim, ne vnesite več kot {maxLength} znakov (vnesli ste {length} znakov).', + integer: 'Prosim, vnesite celo število. Decimalna števila (kot 1,25) niso dovoljena.', + numeric: 'Prosim, vnesite samo numerične vrednosti (kot "1" ali "1.1" ali "-1" ali "-1.1").', + digits: 'Prosim, uporabite številke in ločila le na tem polju (na primer, dovoljena je telefonska številka z pomišlaji ali pikami).', + alpha: 'Prosim, uporabite le črke v tem plju. Presledki in drugi znaki niso dovoljeni.', + alphanum: 'Prosim, uporabite samo črke ali številke v tem polju. Presledki in drugi znaki niso dovoljeni.', + dateSuchAs: 'Prosim, vnesite pravilen datum kot {date}', + dateInFormatMDY: 'Prosim, vnesite pravilen datum kot MM.DD.YYYY (primer "12.31.1999")', + email: 'Prosim, vnesite pravilen email naslov. Na primer "fred@domain.com".', + url: 'Prosim, vnesite pravilen URL kot http://www.example.com.', + currencyDollar: 'Prosim, vnesit epravilno vrednost €. Primer 100,00€ .', + oneRequired: 'Prosimo, vnesite nekaj za vsaj eno izmed teh polj.', + errorPrefix: 'Napaka: ', + warningPrefix: 'Opozorilo: ', + + // Form.Validator.Extras + noSpace: 'To vnosno polje ne dopušča presledkov.', + reqChkByNode: 'Nič niste izbrali.', + requiredChk: 'To polje je obvezno', + reqChkByName: 'Prosim, izberite {label}.', + match: 'To polje se mora ujemati z poljem {matchName}', + startDate: 'datum začetka', + endDate: 'datum konca', + currendDate: 'trenuten datum', + afterDate: 'Datum bi moral biti isti ali po {label}.', + beforeDate: 'Datum bi moral biti isti ali pred {label}.', + startMonth: 'Prosim, vnesite začetni datum', + sameMonth: 'Ta dva datuma morata biti v istem mesecu - premeniti morate eno ali drugo.', + creditcard: 'Številka kreditne kartice ni pravilna. Preverite številko ali poskusite še enkrat. Vnešenih {length} znakov.' + +}); + + +/* +--- + +name: Locale.sv-SE.Date + +description: Date messages for Swedish. + +license: MIT-style license + +authors: + - Martin Lundgren + +requires: + - /Locale + +provides: [Locale.sv-SE.Date] + +... +*/ + +Locale.define('sv-SE', 'Date', { + + months: ['januari', 'februari', 'mars', 'april', 'maj', 'juni', 'juli', 'augusti', 'september', 'oktober', 'november', 'december'], + months_abbr: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], + days: ['söndag', 'måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag'], + days_abbr: ['sön', 'mån', 'tis', 'ons', 'tor', 'fre', 'lör'], + + // Culture's date order: YYYY-MM-DD + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y-%m-%d', + shortTime: '%H:%M', + AM: '', + PM: '', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'mindre än en minut sedan', + minuteAgo: 'ungefär en minut sedan', + minutesAgo: '{delta} minuter sedan', + hourAgo: 'ungefär en timme sedan', + hoursAgo: 'ungefär {delta} timmar sedan', + dayAgo: '1 dag sedan', + daysAgo: '{delta} dagar sedan', + + lessThanMinuteUntil: 'mindre än en minut sedan', + minuteUntil: 'ungefär en minut sedan', + minutesUntil: '{delta} minuter sedan', + hourUntil: 'ungefär en timme sedan', + hoursUntil: 'ungefär {delta} timmar sedan', + dayUntil: '1 dag sedan', + daysUntil: '{delta} dagar sedan' + +}); + + +/* +--- + +name: Locale.sv-SE.Form.Validator + +description: Form Validator messages for Swedish. + +license: MIT-style license + +authors: + - Martin Lundgren + +requires: + - /Locale + +provides: [Locale.sv-SE.Form.Validator] + +... +*/ + +Locale.define('sv-SE', 'FormValidator', { + + required: 'Fältet är obligatoriskt.', + minLength: 'Ange minst {minLength} tecken (du angav {length} tecken).', + maxLength: 'Ange högst {maxLength} tecken (du angav {length} tecken). ', + integer: 'Ange ett heltal i fältet. Tal med decimaler (t.ex. 1,25) är inte tillåtna.', + numeric: 'Ange endast numeriska värden i detta fält (t.ex. "1" eller "1.1" eller "-1" eller "-1,1").', + digits: 'Använd endast siffror och skiljetecken i detta fält (till exempel ett telefonnummer med bindestreck tillåtet).', + alpha: 'Använd endast bokstäver (a-ö) i detta fält. Inga mellanslag eller andra tecken är tillåtna.', + alphanum: 'Använd endast bokstäver (a-ö) och siffror (0-9) i detta fält. Inga mellanslag eller andra tecken är tillåtna.', + dateSuchAs: 'Ange ett giltigt datum som t.ex. {date}', + dateInFormatMDY: 'Ange ett giltigt datum som t.ex. YYYY-MM-DD (i.e. "1999-12-31")', + email: 'Ange en giltig e-postadress. Till exempel "erik@domain.com".', + url: 'Ange en giltig webbadress som http://www.example.com.', + currencyDollar: 'Ange en giltig belopp. Exempelvis 100,00.', + oneRequired: 'Vänligen ange minst ett av dessa alternativ.', + errorPrefix: 'Fel: ', + warningPrefix: 'Varning: ', + + // Form.Validator.Extras + noSpace: 'Det får inte finnas några mellanslag i detta fält.', + reqChkByNode: 'Inga objekt är valda.', + requiredChk: 'Detta är ett obligatoriskt fält.', + reqChkByName: 'Välj en {label}.', + match: 'Detta fält måste matcha {matchName}', + startDate: 'startdatumet', + endDate: 'slutdatum', + currendDate: 'dagens datum', + afterDate: 'Datumet bör vara samma eller senare än {label}.', + beforeDate: 'Datumet bör vara samma eller tidigare än {label}.', + startMonth: 'Välj en start månad', + sameMonth: 'Dessa två datum måste vara i samma månad - du måste ändra det ena eller det andra.' + +}); + + +/* +--- + +name: Locale.uk-UA.Date + +description: Date messages for Ukrainian (utf-8). + +license: MIT-style license + +authors: + - Slik + +requires: + - /Locale + +provides: [Locale.uk-UA.Date] + +... +*/ + +(function(){ + +var pluralize = function(n, one, few, many, other){ + var d = (n / 10).toInt(), + z = n % 10, + s = (n / 100).toInt(); + + if (d == 1 && n > 10) return many; + if (z == 1) return one; + if (z > 0 && z < 5) return few; + return many; +}; + +Locale.define('uk-UA', 'Date', { + + months: ['Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'], + months_abbr: ['Січ', 'Лют', 'Бер', 'Квіт', 'Трав', 'Черв', 'Лип', 'Серп', 'Вер', 'Жовт', 'Лист', 'Груд' ], + days: ['Неділя', 'Понеділок', 'Вівторок', 'Середа', 'Четвер', "П'ятниця", 'Субота'], + days_abbr: ['Нд', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M', + AM: 'до полудня', + PM: 'по полудню', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'меньше хвилини тому', + minuteAgo: 'хвилину тому', + minutesAgo: function(delta){ return '{delta} ' + pluralize(delta, 'хвилину', 'хвилини', 'хвилин') + ' тому'; }, + hourAgo: 'годину тому', + hoursAgo: function(delta){ return '{delta} ' + pluralize(delta, 'годину', 'години', 'годин') + ' тому'; }, + dayAgo: 'вчора', + daysAgo: function(delta){ return '{delta} ' + pluralize(delta, 'день', 'дня', 'днів') + ' тому'; }, + weekAgo: 'тиждень тому', + weeksAgo: function(delta){ return '{delta} ' + pluralize(delta, 'тиждень', 'тижні', 'тижнів') + ' тому'; }, + monthAgo: 'місяць тому', + monthsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'місяць', 'місяці', 'місяців') + ' тому'; }, + yearAgo: 'рік тому', + yearsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'рік', 'роки', 'років') + ' тому'; }, + + lessThanMinuteUntil: 'за мить', + minuteUntil: 'через хвилину', + minutesUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'хвилину', 'хвилини', 'хвилин'); }, + hourUntil: 'через годину', + hoursUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'годину', 'години', 'годин'); }, + dayUntil: 'завтра', + daysUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'день', 'дня', 'днів'); }, + weekUntil: 'через тиждень', + weeksUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'тиждень', 'тижні', 'тижнів'); }, + monthUntil: 'через місяць', + monthesUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'місяць', 'місяці', 'місяців'); }, + yearUntil: 'через рік', + yearsUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'рік', 'роки', 'років'); } + +}); + +})(); + + +/* +--- + +name: Locale.uk-UA.Form.Validator + +description: Form Validator messages for Ukrainian (utf-8). + +license: MIT-style license + +authors: + - Slik + +requires: + - /Locale + +provides: [Locale.uk-UA.Form.Validator] + +... +*/ + +Locale.define('uk-UA', 'FormValidator', { + + required: 'Це поле повинне бути заповненим.', + minLength: 'Введіть хоча б {minLength} символів (Ви ввели {length}).', + maxLength: 'Кількість символів не може бути більше {maxLength} (Ви ввели {length}).', + integer: 'Введіть в це поле число. Дробові числа (наприклад 1.25) не дозволені.', + numeric: 'Введіть в це поле число (наприклад "1" або "1.1", або "-1", або "-1.1").', + digits: 'В цьому полі ви можете використовувати лише цифри і знаки пунктіації (наприклад, телефонний номер з знаками дефізу або з крапками).', + alpha: 'В цьому полі можна використовувати лише латинські літери (a-z). Пробіли і інші символи заборонені.', + alphanum: 'В цьому полі можна використовувати лише латинські літери (a-z) і цифри (0-9). Пробіли і інші символи заборонені.', + dateSuchAs: 'Введіть коректну дату {date}.', + dateInFormatMDY: 'Введіть дату в форматі ММ/ДД/РРРР (наприклад "12/31/2009").', + email: 'Введіть коректну адресу електронної пошти (наприклад "name@domain.com").', + url: 'Введіть коректне інтернет-посилання (наприклад http://www.example.com).', + currencyDollar: 'Введіть суму в доларах (наприклад "$100.00").', + oneRequired: 'Заповніть одне з полів.', + errorPrefix: 'Помилка: ', + warningPrefix: 'Увага: ', + + noSpace: 'Пробіли заборонені.', + reqChkByNode: 'Не відмічено жодного варіанту.', + requiredChk: 'Це поле повинне бути віміченим.', + reqChkByName: 'Будь ласка, відмітьте {label}.', + match: 'Це поле повинно відповідати {matchName}', + startDate: 'початкова дата', + endDate: 'кінцева дата', + currendDate: 'сьогоднішня дата', + afterDate: 'Ця дата повинна бути такою ж, або пізнішою за {label}.', + beforeDate: 'Ця дата повинна бути такою ж, або ранішою за {label}.', + startMonth: 'Будь ласка, виберіть початковий місяць', + sameMonth: 'Ці дати повинні відноситись одного і того ж місяця. Будь ласка, змініть одну з них.', + creditcard: 'Номер кредитної карти введений неправильно. Будь ласка, перевірте його. Введено {length} символів.' + +}); + + +/* +--- + +name: Locale.zh-CH.Date + +description: Date messages for Chinese (simplified and traditional). + +license: MIT-style license + +authors: + - YMind Chan + +requires: + - /Locale + +provides: [Locale.zh-CH.Date] + +... +*/ + +// Simplified Chinese +Locale.define('zh-CHS', 'Date', { + + months: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], + months_abbr: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'], + days: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], + days_abbr: ['日', '一', '二', '三', '四', '五', '六'], + + // Culture's date order: YYYY-MM-DD + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y-%m-%d', + shortTime: '%I:%M%p', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: '不到1分钟前', + minuteAgo: '大约1分钟前', + minutesAgo: '{delta}分钟之前', + hourAgo: '大约1小时前', + hoursAgo: '大约{delta}小时前', + dayAgo: '1天前', + daysAgo: '{delta}天前', + weekAgo: '1星期前', + weeksAgo: '{delta}星期前', + monthAgo: '1个月前', + monthsAgo: '{delta}个月前', + yearAgo: '1年前', + yearsAgo: '{delta}年前', + + lessThanMinuteUntil: '从现在开始不到1分钟', + minuteUntil: '从现在开始約1分钟', + minutesUntil: '从现在开始约{delta}分钟', + hourUntil: '从现在开始1小时', + hoursUntil: '从现在开始约{delta}小时', + dayUntil: '从现在开始1天', + daysUntil: '从现在开始{delta}天', + weekUntil: '从现在开始1星期', + weeksUntil: '从现在开始{delta}星期', + monthUntil: '从现在开始一个月', + monthsUntil: '从现在开始{delta}个月', + yearUntil: '从现在开始1年', + yearsUntil: '从现在开始{delta}年' + +}); + +// Traditional Chinese +Locale.define('zh-CHT', 'Date', { + + months: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], + months_abbr: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'], + days: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], + days_abbr: ['日', '一', '二', '三', '四', '五', '六'], + + // Culture's date order: YYYY-MM-DD + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y-%m-%d', + shortTime: '%I:%M%p', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: '不到1分鐘前', + minuteAgo: '大約1分鐘前', + minutesAgo: '{delta}分鐘之前', + hourAgo: '大約1小時前', + hoursAgo: '大約{delta}小時前', + dayAgo: '1天前', + daysAgo: '{delta}天前', + weekAgo: '1星期前', + weeksAgo: '{delta}星期前', + monthAgo: '1个月前', + monthsAgo: '{delta}个月前', + yearAgo: '1年前', + yearsAgo: '{delta}年前', + + lessThanMinuteUntil: '從現在開始不到1分鐘', + minuteUntil: '從現在開始約1分鐘', + minutesUntil: '從現在開始約{delta}分鐘', + hourUntil: '從現在開始1小時', + hoursUntil: '從現在開始約{delta}小時', + dayUntil: '從現在開始1天', + daysUntil: '從現在開始{delta}天', + weekUntil: '從現在開始1星期', + weeksUntil: '從現在開始{delta}星期', + monthUntil: '從現在開始一個月', + monthsUntil: '從現在開始{delta}個月', + yearUntil: '從現在開始1年', + yearsUntil: '從現在開始{delta}年' + +}); + + +/* +--- + +name: Locale.zh-CH.Form.Validator + +description: Form Validator messages for Chinese (simplified and traditional). + +license: MIT-style license + +authors: + - YMind Chan + +requires: + - /Locale + - /Form.Validator + +provides: [Form.zh-CH.Form.Validator, Form.Validator.CurrencyYuanValidator] + +... +*/ + +// Simplified Chinese +Locale.define('zh-CHS', 'FormValidator', { + + required: '此项必填。', + minLength: '请至少输入 {minLength} 个字符 (已输入 {length} 个)。', + maxLength: '最多只能输入 {maxLength} 个字符 (已输入 {length} 个)。', + integer: '请输入一个整数,不能包含小数点。例如:"1", "200"。', + numeric: '请输入一个数字,例如:"1", "1.1", "-1", "-1.1"。', + digits: '请输入由数字和标点符号组成的内容。例如电话号码。', + alpha: '请输入 A-Z 的 26 个字母,不能包含空格或任何其他字符。', + alphanum: '请输入 A-Z 的 26 个字母或 0-9 的 10 个数字,不能包含空格或任何其他字符。', + dateSuchAs: '请输入合法的日期格式,如:{date}。', + dateInFormatMDY: '请输入合法的日期格式,例如:YYYY-MM-DD ("2010-12-31")。', + email: '请输入合法的电子信箱地址,例如:"fred@domain.com"。', + url: '请输入合法的 Url 地址,例如:http://www.example.com。', + currencyDollar: '请输入合法的货币符号,例如:¥100.0', + oneRequired: '请至少选择一项。', + errorPrefix: '错误:', + warningPrefix: '警告:', + + // Form.Validator.Extras + noSpace: '不能包含空格。', + reqChkByNode: '未选择任何内容。', + requiredChk: '此项必填。', + reqChkByName: '请选择 {label}.', + match: '必须与{matchName}相匹配', + startDate: '起始日期', + endDate: '结束日期', + currendDate: '当前日期', + afterDate: '日期必须等于或晚于 {label}.', + beforeDate: '日期必须早于或等于 {label}.', + startMonth: '请选择起始月份', + sameMonth: '您必须修改两个日期中的一个,以确保它们在同一月份。', + creditcard: '您输入的信用卡号码不正确。当前已输入{length}个字符。' + +}); + +// Traditional Chinese +Locale.define('zh-CHT', 'FormValidator', { + + required: '此項必填。 ', + minLength: '請至少輸入{minLength} 個字符(已輸入{length} 個)。 ', + maxLength: '最多只能輸入{maxLength} 個字符(已輸入{length} 個)。 ', + integer: '請輸入一個整數,不能包含小數點。例如:"1", "200"。 ', + numeric: '請輸入一個數字,例如:"1", "1.1", "-1", "-1.1"。 ', + digits: '請輸入由數字和標點符號組成的內容。例如電話號碼。 ', + alpha: '請輸入AZ 的26 個字母,不能包含空格或任何其他字符。 ', + alphanum: '請輸入AZ 的26 個字母或0-9 的10 個數字,不能包含空格或任何其他字符。 ', + dateSuchAs: '請輸入合法的日期格式,如:{date}。 ', + dateInFormatMDY: '請輸入合法的日期格式,例如:YYYY-MM-DD ("2010-12-31")。 ', + email: '請輸入合法的電子信箱地址,例如:"fred@domain.com"。 ', + url: '請輸入合法的Url 地址,例如:http://www.example.com。 ', + currencyDollar: '請輸入合法的貨幣符號,例如:¥100.0', + oneRequired: '請至少選擇一項。 ', + errorPrefix: '錯誤:', + warningPrefix: '警告:', + + // Form.Validator.Extras + noSpace: '不能包含空格。 ', + reqChkByNode: '未選擇任何內容。 ', + requiredChk: '此項必填。 ', + reqChkByName: '請選擇 {label}.', + match: '必須與{matchName}相匹配', + startDate: '起始日期', + endDate: '結束日期', + currendDate: '當前日期', + afterDate: '日期必須等於或晚於{label}.', + beforeDate: '日期必須早於或等於{label}.', + startMonth: '請選擇起始月份', + sameMonth: '您必須修改兩個日期中的一個,以確保它們在同一月份。 ', + creditcard: '您輸入的信用卡號碼不正確。當前已輸入{length}個字符。 ' + +}); + +Form.Validator.add('validate-currency-yuan', { + + errorMsg: function(){ + return Form.Validator.getMsg('currencyYuan'); + }, + + test: function(element){ + // [¥]1[##][,###]+[.##] + // [¥]1###+[.##] + // [¥]0.## + // [¥].## + return Form.Validator.getValidator('IsEmpty').test(element) || (/^¥?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(element.get('value')); + } + +}); + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-More-1.6.0.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-More-1.6.0.js new file mode 100644 index 0000000000..520b3d7d02 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/MooTools-More-1.6.0.js @@ -0,0 +1,14658 @@ +/* MooTools: the javascript framework. license: MIT-style license. copyright: Copyright (c) 2006-2018 [Valerio Proietti](https://mootools.net/).*/ +/*! +Web Build: https://mootools.net/more/builder/a3048f4bfdf603b22a69c141dbd0fca9 +*/ +/* +--- + +script: More.js + +name: More + +description: MooTools More + +license: MIT-style license + +authors: + - Guillermo Rauch + - Thomas Aylott + - Scott Kyle + - Arian Stolwijk + - Tim Wienk + - Christoph Pojer + - Aaron Newton + - Jacob Thornton + +requires: + - Core/MooTools + +provides: [MooTools.More] + +... +*/ + +MooTools.More = { + version: '1.6.0', + build: '45b71db70f879781a7e0b0d3fb3bb1307c2521eb' +}; + +/* +--- + +script: Chain.Wait.js + +name: Chain.Wait + +description: value, Adds a method to inject pauses between chained events. + +license: MIT-style license. + +authors: + - Aaron Newton + +requires: + - Core/Chain + - Core/Element + - Core/Fx + - MooTools.More + +provides: [Chain.Wait] + +... +*/ + +(function(){ + +var wait = { + wait: function(duration){ + return this.chain(function(){ + this.callChain.delay(duration == null ? 500 : duration, this); + return this; + }.bind(this)); + } +}; + +Chain.implement(wait); + +if (this.Fx) Fx.implement(wait); + +if (this.Element && Element.implement && this.Fx){ + Element.implement({ + + chains: function(effects){ + Array.convert(effects || ['tween', 'morph', 'reveal']).each(function(effect){ + effect = this.get(effect); + if (!effect) return; + effect.setOptions({ + link:'chain' + }); + }, this); + return this; + }, + + pauseFx: function(duration, effect){ + this.chains(effect).get(effect || 'tween').wait(duration); + return this; + } + + }); +} + +})(); + +/* +--- + +script: Class.Binds.js + +name: Class.Binds + +description: Automagically binds specified methods in a class to the instance of the class. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Class + - MooTools.More + +provides: [Class.Binds] + +... +*/ + +Class.Mutators.Binds = function(binds){ + if (!this.prototype.initialize) this.implement('initialize', function(){}); + return Array.convert(binds).concat(this.prototype.Binds || []); +}; + +Class.Mutators.initialize = function(initialize){ + return function(){ + Array.convert(this.Binds).each(function(name){ + var original = this[name]; + if (original) this[name] = original.bind(this); + }, this); + return initialize.apply(this, arguments); + }; +}; + +/* +--- + +script: Class.Occlude.js + +name: Class.Occlude + +description: Prevents a class from being applied to a DOM element twice. + +license: MIT-style license. + +authors: + - Aaron Newton + +requires: + - Core/Class + - Core/Element + - MooTools.More + +provides: [Class.Occlude] + +... +*/ + +Class.Occlude = new Class({ + + occlude: function(property, element){ + element = document.id(element || this.element); + var instance = element.retrieve(property || this.property); + if (instance && !this.occluded) + return (this.occluded = instance); + + this.occluded = false; + element.store(property || this.property, this); + return this.occluded; + } + +}); + +/* +--- + +script: Class.Refactor.js + +name: Class.Refactor + +description: Extends a class onto itself with new property, preserving any items attached to the class's namespace. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Class + - MooTools.More + +# Some modules declare themselves dependent on Class.Refactor +provides: [Class.refactor, Class.Refactor] + +... +*/ + +Class.refactor = function(original, refactors){ + + Object.each(refactors, function(item, name){ + var origin = original.prototype[name]; + origin = (origin && origin.$origin) || origin || function(){}; + original.implement(name, (typeof item == 'function') ? function(){ + var old = this.previous; + this.previous = origin; + var value = item.apply(this, arguments); + this.previous = old; + return value; + } : item); + }); + + return original; + +}; + +/* +--- + +script: Class.Singleton.js + +name: Class.Singleton + +description: Always provides a single instance of a class + +license: MIT-style license. + +authors: + - Hristo Chakarov + +requires: + - Core/Class + +provides: [Class.Singleton] + +... +*/ + +Class.Singleton = new Class({ + + initialize : function(descriptor){ + // here we keep reference of the single instance + var singleton; + // create a regular Class + var constructor = new Class(descriptor); + // We return another constructor, because we need to make sure that we + // always return the same one and only instance. + return function(){ + if (singleton){ + return singleton; + } + // Obviously we instantiate that class for the first time. + // Create brand new object & extend it with the prototype of the + // original `constructor`. + singleton = Object.append({}, constructor.prototype); + singleton.constructor = constructor; + // We also need to call the constructor as a function, passing the + // arguments object. + var returnValue = constructor.apply(singleton, arguments); + // In case the `constructor` returns something other than `this` - + // return that value; otherwise return the `singleton`. + singleton = typeof returnValue == 'object' ? returnValue : singleton; + return singleton; + }; + } + +}); + +/* +--- + +name: Events.Pseudos + +description: Adds the functionality to add pseudo events + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: [Core/Class.Extras, Core/Slick.Parser, MooTools.More] + +provides: [Events.Pseudos] + +... +*/ + +(function(){ + +Events.Pseudos = function(pseudos, addEvent, removeEvent){ + + var storeKey = '_monitorEvents:'; + + var storageOf = function(object){ + return { + store: object.store ? function(key, value){ + object.store(storeKey + key, value); + } : function(key, value){ + (object._monitorEvents || (object._monitorEvents = {}))[key] = value; + }, + retrieve: object.retrieve ? function(key, dflt){ + return object.retrieve(storeKey + key, dflt); + } : function(key, dflt){ + if (!object._monitorEvents) return dflt; + return object._monitorEvents[key] || dflt; + } + }; + }; + + var splitType = function(type){ + if (type.indexOf(':') == -1 || !pseudos) return null; + + var parsed = Slick.parse(type).expressions[0][0], + parsedPseudos = parsed.pseudos, + l = parsedPseudos.length, + splits = []; + + while (l--){ + var pseudo = parsedPseudos[l].key, + listener = pseudos[pseudo]; + if (listener != null) splits.push({ + event: parsed.tag, + value: parsedPseudos[l].value, + pseudo: pseudo, + original: type, + listener: listener + }); + } + return splits.length ? splits : null; + }; + + return { + + addEvent: function(type, fn, internal){ + var split = splitType(type); + if (!split) return addEvent.call(this, type, fn, internal); + + var storage = storageOf(this), + events = storage.retrieve(type, []), + eventType = split[0].event, + args = Array.slice(arguments, 2), + stack = fn, + self = this; + + split.each(function(item){ + var listener = item.listener, + stackFn = stack; + if (listener == false) eventType += ':' + item.pseudo + '(' + item.value + ')'; + else stack = function(){ + listener.call(self, item, stackFn, arguments, stack); + }; + }); + + events.include({type: eventType, event: fn, monitor: stack}); + storage.store(type, events); + + if (type != eventType) addEvent.apply(this, [type, fn].concat(args)); + return addEvent.apply(this, [eventType, stack].concat(args)); + }, + + removeEvent: function(type, fn){ + var split = splitType(type); + if (!split) return removeEvent.call(this, type, fn); + + var storage = storageOf(this), + events = storage.retrieve(type); + if (!events) return this; + + var args = Array.slice(arguments, 2); + + removeEvent.apply(this, [type, fn].concat(args)); + events.each(function(monitor, i){ + if (!fn || monitor.event == fn) removeEvent.apply(this, [monitor.type, monitor.monitor].concat(args)); + delete events[i]; + }, this); + + storage.store(type, events); + return this; + } + + }; + +}; + +var pseudos = { + + once: function(split, fn, args, monitor){ + fn.apply(this, args); + this.removeEvent(split.event, monitor) + .removeEvent(split.original, fn); + }, + + throttle: function(split, fn, args){ + if (!fn._throttled){ + fn.apply(this, args); + fn._throttled = setTimeout(function(){ + fn._throttled = false; + }, split.value || 250); + } + }, + + pause: function(split, fn, args){ + clearTimeout(fn._pause); + fn._pause = fn.delay(split.value || 250, this, args); + } + +}; + +Events.definePseudo = function(key, listener){ + pseudos[key] = listener; + return this; +}; + +Events.lookupPseudo = function(key){ + return pseudos[key]; +}; + +var proto = Events.prototype; +Events.implement(Events.Pseudos(pseudos, proto.addEvent, proto.removeEvent)); + +['Request', 'Fx'].each(function(klass){ + if (this[klass]) this[klass].implement(Events.prototype); +}); + +})(); + +/* +--- + +script: Drag.js + +name: Drag + +description: The base Drag Class. Can be used to drag and resize Elements using mouse events. + +license: MIT-style license + +authors: + - Valerio Proietti + - Tom Occhinno + - Jan Kassens + +requires: + - Core/Events + - Core/Options + - Core/Element.Event + - Core/Element.Style + - Core/Element.Dimensions + - MooTools.More + +provides: [Drag] +... + +*/ +(function(){ + +var Drag = this.Drag = new Class({ + + Implements: [Events, Options], + + options: {/* + onBeforeStart: function(thisElement){}, + onStart: function(thisElement, event){}, + onSnap: function(thisElement){}, + onDrag: function(thisElement, event){}, + onCancel: function(thisElement){}, + onComplete: function(thisElement, event){},*/ + snap: 6, + unit: 'px', + grid: false, + style: true, + limit: false, + handle: false, + invert: false, + unDraggableTags: ['button', 'input', 'a', 'textarea', 'select', 'option'], + preventDefault: false, + stopPropagation: false, + compensateScroll: false, + modifiers: {x: 'left', y: 'top'} + }, + + initialize: function(){ + var params = Array.link(arguments, { + 'options': Type.isObject, + 'element': function(obj){ + return obj != null; + } + }); + + this.element = document.id(params.element); + this.document = this.element.getDocument(); + this.setOptions(params.options || {}); + var htype = typeOf(this.options.handle); + this.handles = ((htype == 'array' || htype == 'collection') ? $$(this.options.handle) : document.id(this.options.handle)) || this.element; + this.mouse = {'now': {}, 'pos': {}}; + this.value = {'start': {}, 'now': {}}; + this.offsetParent = (function(el){ + var offsetParent = el.getOffsetParent(); + var isBody = !offsetParent || (/^(?:body|html)$/i).test(offsetParent.tagName); + return isBody ? window : document.id(offsetParent); + })(this.element); + this.selection = 'selectstart' in document ? 'selectstart' : 'mousedown'; + + this.compensateScroll = {start: {}, diff: {}, last: {}}; + + if ('ondragstart' in document && !('FileReader' in window) && !Drag.ondragstartFixed){ + document.ondragstart = Function.convert(false); + Drag.ondragstartFixed = true; + } + + this.bound = { + start: this.start.bind(this), + check: this.check.bind(this), + drag: this.drag.bind(this), + stop: this.stop.bind(this), + cancel: this.cancel.bind(this), + eventStop: Function.convert(false), + scrollListener: this.scrollListener.bind(this) + }; + this.attach(); + }, + + attach: function(){ + this.handles.addEvent('mousedown', this.bound.start); + this.handles.addEvent('touchstart', this.bound.start); + if (this.options.compensateScroll) this.offsetParent.addEvent('scroll', this.bound.scrollListener); + return this; + }, + + detach: function(){ + this.handles.removeEvent('mousedown', this.bound.start); + this.handles.removeEvent('touchstart', this.bound.start); + if (this.options.compensateScroll) this.offsetParent.removeEvent('scroll', this.bound.scrollListener); + return this; + }, + + scrollListener: function(){ + + if (!this.mouse.start) return; + var newScrollValue = this.offsetParent.getScroll(); + + if (this.element.getStyle('position') == 'absolute'){ + var scrollDiff = this.sumValues(newScrollValue, this.compensateScroll.last, -1); + this.mouse.now = this.sumValues(this.mouse.now, scrollDiff, 1); + } else { + this.compensateScroll.diff = this.sumValues(newScrollValue, this.compensateScroll.start, -1); + } + if (this.offsetParent != window) this.compensateScroll.diff = this.sumValues(this.compensateScroll.start, newScrollValue, -1); + this.compensateScroll.last = newScrollValue; + this.render(this.options); + }, + + sumValues: function(alpha, beta, op){ + var sum = {}, options = this.options; + for (var z in options.modifiers){ + if (!options.modifiers[z]) continue; + sum[z] = alpha[z] + beta[z] * op; + } + return sum; + }, + + start: function(event){ + if (this.options.unDraggableTags.contains(event.target.get('tag'))) return; + + var options = this.options; + + if (event.rightClick) return; + + if (options.preventDefault) event.preventDefault(); + if (options.stopPropagation) event.stopPropagation(); + this.compensateScroll.start = this.compensateScroll.last = this.offsetParent.getScroll(); + this.compensateScroll.diff = {x: 0, y: 0}; + this.mouse.start = event.page; + this.fireEvent('beforeStart', this.element); + + var limit = options.limit; + this.limit = {x: [], y: []}; + + var z, coordinates, offsetParent = this.offsetParent == window ? null : this.offsetParent; + for (z in options.modifiers){ + if (!options.modifiers[z]) continue; + + var style = this.element.getStyle(options.modifiers[z]); + + // Some browsers (IE and Opera) don't always return pixels. + if (style && !style.match(/px$/)){ + if (!coordinates) coordinates = this.element.getCoordinates(offsetParent); + style = coordinates[options.modifiers[z]]; + } + + if (options.style) this.value.now[z] = (style || 0).toInt(); + else this.value.now[z] = this.element[options.modifiers[z]]; + + if (options.invert) this.value.now[z] *= -1; + + this.mouse.pos[z] = event.page[z] - this.value.now[z]; + + if (limit && limit[z]){ + var i = 2; + while (i--){ + var limitZI = limit[z][i]; + if (limitZI || limitZI === 0) this.limit[z][i] = (typeof limitZI == 'function') ? limitZI() : limitZI; + } + } + } + + if (typeOf(this.options.grid) == 'number') this.options.grid = { + x: this.options.grid, + y: this.options.grid + }; + + var events = { + mousemove: this.bound.check, + mouseup: this.bound.cancel, + touchmove: this.bound.check, + touchend: this.bound.cancel + }; + events[this.selection] = this.bound.eventStop; + this.document.addEvents(events); + }, + + check: function(event){ + if (this.options.preventDefault) event.preventDefault(); + var distance = Math.round(Math.sqrt(Math.pow(event.page.x - this.mouse.start.x, 2) + Math.pow(event.page.y - this.mouse.start.y, 2))); + if (distance > this.options.snap){ + this.cancel(); + this.document.addEvents({ + mousemove: this.bound.drag, + mouseup: this.bound.stop, + touchmove: this.bound.drag, + touchend: this.bound.stop + }); + this.fireEvent('start', [this.element, event]).fireEvent('snap', this.element); + } + }, + + drag: function(event){ + var options = this.options; + if (options.preventDefault) event.preventDefault(); + this.mouse.now = this.sumValues(event.page, this.compensateScroll.diff, -1); + + this.render(options); + this.fireEvent('drag', [this.element, event]); + }, + + render: function(options){ + for (var z in options.modifiers){ + if (!options.modifiers[z]) continue; + this.value.now[z] = this.mouse.now[z] - this.mouse.pos[z]; + + if (options.invert) this.value.now[z] *= -1; + if (options.limit && this.limit[z]){ + if ((this.limit[z][1] || this.limit[z][1] === 0) && (this.value.now[z] > this.limit[z][1])){ + this.value.now[z] = this.limit[z][1]; + } else if ((this.limit[z][0] || this.limit[z][0] === 0) && (this.value.now[z] < this.limit[z][0])){ + this.value.now[z] = this.limit[z][0]; + } + } + if (options.grid[z]) this.value.now[z] -= ((this.value.now[z] - (this.limit[z][0]||0)) % options.grid[z]); + if (options.style) this.element.setStyle(options.modifiers[z], this.value.now[z] + options.unit); + else this.element[options.modifiers[z]] = this.value.now[z]; + } + }, + + cancel: function(event){ + this.document.removeEvents({ + mousemove: this.bound.check, + mouseup: this.bound.cancel, + touchmove: this.bound.check, + touchend: this.bound.cancel + }); + if (event){ + this.document.removeEvent(this.selection, this.bound.eventStop); + this.fireEvent('cancel', this.element); + } + }, + + stop: function(event){ + var events = { + mousemove: this.bound.drag, + mouseup: this.bound.stop, + touchmove: this.bound.drag, + touchend: this.bound.stop + }; + events[this.selection] = this.bound.eventStop; + this.document.removeEvents(events); + this.mouse.start = null; + if (event) this.fireEvent('complete', [this.element, event]); + } + +}); + +})(); + + +Element.implement({ + + makeResizable: function(options){ + var drag = new Drag(this, Object.merge({ + modifiers: { + x: 'width', + y: 'height' + } + }, options)); + + this.store('resizer', drag); + return drag.addEvent('drag', function(){ + this.fireEvent('resize', drag); + }.bind(this)); + } + +}); + +/* +--- + +script: Drag.Move.js + +name: Drag.Move + +description: A Drag extension that provides support for the constraining of draggables to containers and droppables. + +license: MIT-style license + +authors: + - Valerio Proietti + - Tom Occhinno + - Jan Kassens + - Aaron Newton + - Scott Kyle + +requires: + - Core/Element.Dimensions + - Drag + +provides: [Drag.Move] + +... +*/ + +Drag.Move = new Class({ + + Extends: Drag, + + options: {/* + onEnter: function(thisElement, overed){}, + onLeave: function(thisElement, overed){}, + onDrop: function(thisElement, overed, event){},*/ + droppables: [], + container: false, + precalculate: false, + includeMargins: true, + checkDroppables: true + }, + + initialize: function(element, options){ + this.parent(element, options); + element = this.element; + + this.droppables = $$(this.options.droppables); + this.setContainer(this.options.container); + + if (this.options.style){ + if (this.options.modifiers.x == 'left' && this.options.modifiers.y == 'top'){ + var parent = element.getOffsetParent(), + styles = element.getStyles('left', 'top'); + if (parent && (styles.left == 'auto' || styles.top == 'auto')){ + element.setPosition(element.getPosition(parent)); + } + } + + if (element.getStyle('position') == 'static') element.setStyle('position', 'absolute'); + } + + this.addEvent('start', this.checkDroppables, true); + this.overed = null; + }, + + setContainer: function(container){ + this.container = document.id(container); + if (this.container && typeOf(this.container) != 'element'){ + this.container = document.id(this.container.getDocument().body); + } + }, + + start: function(event){ + if (this.container) this.options.limit = this.calculateLimit(); + + if (this.options.precalculate){ + this.positions = this.droppables.map(function(el){ + return el.getCoordinates(); + }); + } + + this.parent(event); + }, + + calculateLimit: function(){ + var element = this.element, + container = this.container, + + offsetParent = document.id(element.getOffsetParent()) || document.body, + containerCoordinates = container.getCoordinates(offsetParent), + elementMargin = {}, + elementBorder = {}, + containerMargin = {}, + containerBorder = {}, + offsetParentPadding = {}, + offsetScroll = offsetParent.getScroll(); + + ['top', 'right', 'bottom', 'left'].each(function(pad){ + elementMargin[pad] = element.getStyle('margin-' + pad).toInt(); + elementBorder[pad] = element.getStyle('border-' + pad).toInt(); + containerMargin[pad] = container.getStyle('margin-' + pad).toInt(); + containerBorder[pad] = container.getStyle('border-' + pad).toInt(); + offsetParentPadding[pad] = offsetParent.getStyle('padding-' + pad).toInt(); + }, this); + + var width = element.offsetWidth + elementMargin.left + elementMargin.right, + height = element.offsetHeight + elementMargin.top + elementMargin.bottom, + left = 0 + offsetScroll.x, + top = 0 + offsetScroll.y, + right = containerCoordinates.right - containerBorder.right - width + offsetScroll.x, + bottom = containerCoordinates.bottom - containerBorder.bottom - height + offsetScroll.y; + + if (this.options.includeMargins){ + left += elementMargin.left; + top += elementMargin.top; + } else { + right += elementMargin.right; + bottom += elementMargin.bottom; + } + + if (element.getStyle('position') == 'relative'){ + var coords = element.getCoordinates(offsetParent); + coords.left -= element.getStyle('left').toInt(); + coords.top -= element.getStyle('top').toInt(); + + left -= coords.left; + top -= coords.top; + if (container.getStyle('position') != 'relative'){ + left += containerBorder.left; + top += containerBorder.top; + } + right += elementMargin.left - coords.left; + bottom += elementMargin.top - coords.top; + + if (container != offsetParent){ + left += containerMargin.left + offsetParentPadding.left; + if (!offsetParentPadding.left && left < 0) left = 0; + top += offsetParent == document.body ? 0 : containerMargin.top + offsetParentPadding.top; + if (!offsetParentPadding.top && top < 0) top = 0; + } + } else { + left -= elementMargin.left; + top -= elementMargin.top; + if (container != offsetParent){ + left += containerCoordinates.left + containerBorder.left; + top += containerCoordinates.top + containerBorder.top; + } + } + + return { + x: [left, right], + y: [top, bottom] + }; + }, + + getDroppableCoordinates: function(element){ + var position = element.getCoordinates(); + if (element.getStyle('position') == 'fixed'){ + var scroll = window.getScroll(); + position.left += scroll.x; + position.right += scroll.x; + position.top += scroll.y; + position.bottom += scroll.y; + } + return position; + }, + + checkDroppables: function(){ + var overed = this.droppables.filter(function(el, i){ + el = this.positions ? this.positions[i] : this.getDroppableCoordinates(el); + var now = this.mouse.now; + return (now.x > el.left && now.x < el.right && now.y < el.bottom && now.y > el.top); + }, this).getLast(); + + if (this.overed != overed){ + if (this.overed) this.fireEvent('leave', [this.element, this.overed]); + if (overed) this.fireEvent('enter', [this.element, overed]); + this.overed = overed; + } + }, + + drag: function(event){ + this.parent(event); + if (this.options.checkDroppables && this.droppables.length) this.checkDroppables(); + }, + + stop: function(event){ + this.checkDroppables(); + this.fireEvent('drop', [this.element, this.overed, event]); + this.overed = null; + return this.parent(event); + } + +}); + +Element.implement({ + + makeDraggable: function(options){ + var drag = new Drag.Move(this, options); + this.store('dragger', drag); + return drag; + } + +}); + +/* +--- + +script: Element.Measure.js + +name: Element.Measure + +description: Extends the Element native object to include methods useful in measuring dimensions. + +credits: "Element.measure / .expose methods by Daniel Steigerwald License: MIT-style license. Copyright: Copyright (c) 2008 Daniel Steigerwald, daniel.steigerwald.cz" + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element.Style + - Core/Element.Dimensions + - MooTools.More + +provides: [Element.Measure] + +... +*/ + +(function(){ + +var getStylesList = function(styles, planes){ + var list = []; + Object.each(planes, function(directions){ + Object.each(directions, function(edge){ + styles.each(function(style){ + list.push(style + '-' + edge + (style == 'border' ? '-width' : '')); + }); + }); + }); + return list; +}; + +var calculateEdgeSize = function(edge, styles){ + var total = 0; + Object.each(styles, function(value, style){ + if (style.test(edge)) total = total + value.toInt(); + }); + return total; +}; + +var isVisible = function(el){ + return !!(!el || el.offsetHeight || el.offsetWidth); +}; + + +Element.implement({ + + measure: function(fn){ + if (isVisible(this)) return fn.call(this); + var parent = this.getParent(), + toMeasure = []; + while (!isVisible(parent) && parent != document.body){ + toMeasure.push(parent.expose()); + parent = parent.getParent(); + } + var restore = this.expose(), + result = fn.call(this); + restore(); + toMeasure.each(function(restore){ + restore(); + }); + return result; + }, + + expose: function(){ + if (this.getStyle('display') != 'none') return function(){}; + var before = this.style.cssText; + this.setStyles({ + display: 'block', + position: 'absolute', + visibility: 'hidden' + }); + return function(){ + this.style.cssText = before; + }.bind(this); + }, + + getDimensions: function(options){ + options = Object.merge({computeSize: false}, options); + var dim = {x: 0, y: 0}; + + var getSize = function(el, options){ + return (options.computeSize) ? el.getComputedSize(options) : el.getSize(); + }; + + var parent = this.getParent('body'); + + if (parent && this.getStyle('display') == 'none'){ + dim = this.measure(function(){ + return getSize(this, options); + }); + } else if (parent){ + try { //safari sometimes crashes here, so catch it + dim = getSize(this, options); + } catch (e){} + } + + return Object.append(dim, (dim.x || dim.x === 0) ? { + width: dim.x, + height: dim.y + } : { + x: dim.width, + y: dim.height + }); + }, + + getComputedSize: function(options){ + + + options = Object.merge({ + styles: ['padding','border'], + planes: { + height: ['top','bottom'], + width: ['left','right'] + }, + mode: 'both' + }, options); + + var styles = {}, + size = {width: 0, height: 0}, + dimensions; + + if (options.mode == 'vertical'){ + delete size.width; + delete options.planes.width; + } else if (options.mode == 'horizontal'){ + delete size.height; + delete options.planes.height; + } + + getStylesList(options.styles, options.planes).each(function(style){ + styles[style] = this.getStyle(style).toInt(); + }, this); + + Object.each(options.planes, function(edges, plane){ + + var capitalized = plane.capitalize(), + style = this.getStyle(plane); + + if (style == 'auto' && !dimensions) dimensions = this.getDimensions(); + + style = styles[plane] = (style == 'auto') ? dimensions[plane] : style.toInt(); + size['total' + capitalized] = style; + + edges.each(function(edge){ + var edgesize = calculateEdgeSize(edge, styles); + size['computed' + edge.capitalize()] = edgesize; + size['total' + capitalized] += edgesize; + }); + + }, this); + + return Object.append(size, styles); + } + +}); + +})(); + +/* +--- + +script: Slider.js + +name: Slider + +description: Class for creating horizontal and vertical slider controls. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Element.Dimensions + - Core/Number + - Class.Binds + - Drag + - Element.Measure + +provides: [Slider] + +... +*/ +(function(){ + +var Slider = this.Slider = new Class({ + + Implements: [Events, Options], + + Binds: ['clickedElement', 'draggedKnob', 'scrolledElement'], + + options: {/* + onTick: function(intPosition){}, + onMove: function(){}, + onChange: function(intStep){}, + onComplete: function(strStep){},*/ + onTick: function(position){ + this.setKnobPosition(position); + }, + initialStep: 0, + snap: false, + offset: 0, + range: false, + wheel: false, + steps: 100, + mode: 'horizontal' + }, + + initialize: function(element, knob, options){ + this.setOptions(options); + options = this.options; + this.element = document.id(element); + knob = this.knob = document.id(knob); + this.previousChange = this.previousEnd = this.step = options.initialStep ? options.initialStep : options.range ? options.range[0] : 0; + + var limit = {}, + modifiers = {x: false, y: false}; + + switch (options.mode){ + case 'vertical': + this.axis = 'y'; + this.property = 'top'; + this.offset = 'offsetHeight'; + break; + case 'horizontal': + this.axis = 'x'; + this.property = 'left'; + this.offset = 'offsetWidth'; + } + + this.setSliderDimensions(); + this.setRange(options.range, null, true); + + if (knob.getStyle('position') == 'static') knob.setStyle('position', 'relative'); + knob.setStyle(this.property, -options.offset); + modifiers[this.axis] = this.property; + limit[this.axis] = [-options.offset, this.full - options.offset]; + + var dragOptions = { + snap: 0, + limit: limit, + modifiers: modifiers, + onDrag: this.draggedKnob, + onStart: this.draggedKnob, + onBeforeStart: (function(){ + this.isDragging = true; + }).bind(this), + onCancel: function(){ + this.isDragging = false; + }.bind(this), + onComplete: function(){ + this.isDragging = false; + this.draggedKnob(); + this.end(); + }.bind(this) + }; + if (options.snap) this.setSnap(dragOptions); + + this.drag = new Drag(knob, dragOptions); + if (options.initialStep != null) this.set(options.initialStep, true); + this.attach(); + }, + + attach: function(){ + this.element.addEvent('mousedown', this.clickedElement); + if (this.options.wheel) this.element.addEvent('mousewheel', this.scrolledElement); + this.drag.attach(); + return this; + }, + + detach: function(){ + this.element.removeEvent('mousedown', this.clickedElement) + .removeEvent('mousewheel', this.scrolledElement); + this.drag.detach(); + return this; + }, + + autosize: function(){ + this.setSliderDimensions() + .setKnobPosition(this.toPosition(this.step)); + this.drag.options.limit[this.axis] = [-this.options.offset, this.full - this.options.offset]; + if (this.options.snap) this.setSnap(); + return this; + }, + + setSnap: function(options){ + if (!options) options = this.drag.options; + options.grid = Math.ceil(this.stepWidth); + options.limit[this.axis][1] = this.element[this.offset]; + return this; + }, + + setKnobPosition: function(position){ + if (this.options.snap) position = this.toPosition(this.step); + this.knob.setStyle(this.property, position); + return this; + }, + + setSliderDimensions: function(){ + this.full = this.element.measure(function(){ + this.half = this.knob[this.offset] / 2; + return this.element[this.offset] - this.knob[this.offset] + (this.options.offset * 2); + }.bind(this)); + return this; + }, + + set: function(step, silently){ + if (!((this.range > 0) ^ (step < this.min))) step = this.min; + if (!((this.range > 0) ^ (step > this.max))) step = this.max; + + this.step = (step).round(this.modulus.decimalLength); + if (silently) this.checkStep().setKnobPosition(this.toPosition(this.step)); + else this.checkStep().fireEvent('tick', this.toPosition(this.step)).fireEvent('move').end(); + return this; + }, + + setRange: function(range, pos, silently){ + this.min = Array.pick([range[0], 0]); + this.max = Array.pick([range[1], this.options.steps]); + this.range = this.max - this.min; + this.steps = this.options.steps || this.full; + var stepSize = this.stepSize = Math.abs(this.range) / this.steps; + this.stepWidth = this.stepSize * this.full / Math.abs(this.range); + this.setModulus(); + + if (range) this.set(Array.pick([pos, this.step]).limit(this.min,this.max), silently); + return this; + }, + + setModulus: function(){ + var decimals = ((this.stepSize + '').split('.')[1] || []).length, + modulus = 1 + ''; + while (decimals--) modulus += '0'; + this.modulus = {multiplier: (modulus).toInt(10), decimalLength: modulus.length - 1}; + }, + + clickedElement: function(event){ + if (this.isDragging || event.target == this.knob) return; + + var dir = this.range < 0 ? -1 : 1, + position = event.page[this.axis] - this.element.getPosition()[this.axis] - this.half; + + position = position.limit(-this.options.offset, this.full - this.options.offset); + + this.step = (this.min + dir * this.toStep(position)).round(this.modulus.decimalLength); + + this.checkStep() + .fireEvent('tick', position) + .fireEvent('move') + .end(); + }, + + scrolledElement: function(event){ + var mode = (this.options.mode == 'horizontal') ? (event.wheel < 0) : (event.wheel > 0); + this.set(this.step + (mode ? -1 : 1) * this.stepSize); + event.stop(); + }, + + draggedKnob: function(){ + var dir = this.range < 0 ? -1 : 1, + position = this.drag.value.now[this.axis]; + + position = position.limit(-this.options.offset, this.full -this.options.offset); + + this.step = (this.min + dir * this.toStep(position)).round(this.modulus.decimalLength); + this.checkStep(); + this.fireEvent('move'); + }, + + checkStep: function(){ + var step = this.step; + if (this.previousChange != step){ + this.previousChange = step; + this.fireEvent('change', step); + } + return this; + }, + + end: function(){ + var step = this.step; + if (this.previousEnd !== step){ + this.previousEnd = step; + this.fireEvent('complete', step + ''); + } + return this; + }, + + toStep: function(position){ + var step = (position + this.options.offset) * this.stepSize / this.full * this.steps; + return this.options.steps ? (step - (step * this.modulus.multiplier) % (this.stepSize * this.modulus.multiplier) / this.modulus.multiplier).round(this.modulus.decimalLength) : step; + }, + + toPosition: function(step){ + return (this.full * Math.abs(this.min - step)) / (this.steps * this.stepSize) - this.options.offset || 0; + } + +}); + +})(); + + +/* +--- + +script: Sortables.js + +name: Sortables + +description: Class for creating a drag and drop sorting interface for lists of items. + +license: MIT-style license + +authors: + - Tom Occhino + +requires: + - Core/Fx.Morph + - Drag.Move + +provides: [Sortables] + +... +*/ +(function(){ + +var Sortables = this.Sortables = new Class({ + + Implements: [Events, Options], + + options: {/* + onSort: function(element, clone){}, + onStart: function(element, clone){}, + onComplete: function(element){},*/ + opacity: 1, + clone: false, + revert: false, + handle: false, + dragOptions: {}, + unDraggableTags: ['button', 'input', 'a', 'textarea', 'select', 'option'] + }, + + initialize: function(lists, options){ + this.setOptions(options); + + this.elements = []; + this.lists = []; + this.idle = true; + + this.addLists($$(document.id(lists) || lists)); + + if (!this.options.clone) this.options.revert = false; + if (this.options.revert) this.effect = new Fx.Morph(null, Object.merge({ + duration: 250, + link: 'cancel' + }, this.options.revert)); + }, + + attach: function(){ + this.addLists(this.lists); + return this; + }, + + detach: function(){ + this.lists = this.removeLists(this.lists); + return this; + }, + + addItems: function(){ + Array.flatten(arguments).each(function(element){ + this.elements.push(element); + var start = element.retrieve('sortables:start', function(event){ + this.start.call(this, event, element); + }.bind(this)); + (this.options.handle ? element.getElement(this.options.handle) || element : element).addEvent('mousedown', start); + }, this); + return this; + }, + + addLists: function(){ + Array.flatten(arguments).each(function(list){ + this.lists.include(list); + this.addItems(list.getChildren()); + }, this); + return this; + }, + + removeItems: function(){ + return $$(Array.flatten(arguments).map(function(element){ + this.elements.erase(element); + var start = element.retrieve('sortables:start'); + (this.options.handle ? element.getElement(this.options.handle) || element : element).removeEvent('mousedown', start); + + return element; + }, this)); + }, + + removeLists: function(){ + return $$(Array.flatten(arguments).map(function(list){ + this.lists.erase(list); + this.removeItems(list.getChildren()); + + return list; + }, this)); + }, + + getDroppableCoordinates: function(element){ + var offsetParent = element.getOffsetParent(); + var position = element.getPosition(offsetParent); + var scroll = { + w: window.getScroll(), + offsetParent: offsetParent.getScroll() + }; + position.x += scroll.offsetParent.x; + position.y += scroll.offsetParent.y; + + if (offsetParent.getStyle('position') == 'fixed'){ + position.x -= scroll.w.x; + position.y -= scroll.w.y; + } + + return position; + }, + + getClone: function(event, element){ + if (!this.options.clone) return new Element(element.tagName).inject(document.body); + if (typeOf(this.options.clone) == 'function') return this.options.clone.call(this, event, element, this.list); + var clone = element.clone(true).setStyles({ + margin: 0, + position: 'absolute', + visibility: 'hidden', + width: element.getStyle('width') + }).addEvent('mousedown', function(event){ + element.fireEvent('mousedown', event); + }); + //prevent the duplicated radio inputs from unchecking the real one + if (clone.get('html').test('radio')){ + clone.getElements('input[type=radio]').each(function(input, i){ + input.set('name', 'clone_' + i); + if (input.get('checked')) element.getElements('input[type=radio]')[i].set('checked', true); + }); + } + + return clone.inject(this.list).setPosition(this.getDroppableCoordinates(this.element)); + }, + + getDroppables: function(){ + var droppables = this.list.getChildren().erase(this.clone).erase(this.element); + if (!this.options.constrain) droppables.append(this.lists).erase(this.list); + return droppables; + }, + + insert: function(dragging, element){ + var where = 'inside'; + if (this.lists.contains(element)){ + this.list = element; + this.drag.droppables = this.getDroppables(); + } else { + where = this.element.getAllPrevious().contains(element) ? 'before' : 'after'; + } + this.element.inject(element, where); + this.fireEvent('sort', [this.element, this.clone]); + }, + + start: function(event, element){ + if ( + !this.idle || + event.rightClick || + (!this.options.handle && this.options.unDraggableTags.contains(event.target.get('tag'))) + ) return; + + this.idle = false; + this.element = element; + this.opacity = element.getStyle('opacity'); + this.list = element.getParent(); + this.clone = this.getClone(event, element); + + this.drag = new Drag.Move(this.clone, Object.merge({ + + droppables: this.getDroppables() + }, this.options.dragOptions)).addEvents({ + onSnap: function(){ + event.stop(); + this.clone.setStyle('visibility', 'visible'); + this.element.setStyle('opacity', this.options.opacity || 0); + this.fireEvent('start', [this.element, this.clone]); + }.bind(this), + onEnter: this.insert.bind(this), + onCancel: this.end.bind(this), + onComplete: this.end.bind(this) + }); + + this.clone.inject(this.element, 'before'); + this.drag.start(event); + }, + + end: function(){ + this.drag.detach(); + this.element.setStyle('opacity', this.opacity); + var self = this; + if (this.effect){ + var dim = this.element.getStyles('width', 'height'), + clone = this.clone, + pos = clone.computePosition(this.getDroppableCoordinates(clone)); + + var destroy = function(){ + this.removeEvent('cancel', destroy); + clone.destroy(); + self.reset(); + }; + + this.effect.element = clone; + this.effect.start({ + top: pos.top, + left: pos.left, + width: dim.width, + height: dim.height, + opacity: 0.25 + }).addEvent('cancel', destroy).chain(destroy); + } else { + this.clone.destroy(); + self.reset(); + } + + }, + + reset: function(){ + this.idle = true; + this.fireEvent('complete', this.element); + }, + + serialize: function(){ + var params = Array.link(arguments, { + modifier: Type.isFunction, + index: function(obj){ + return obj != null; + } + }); + var serial = this.lists.map(function(list){ + return list.getChildren().map(params.modifier || function(element){ + return element.get('id'); + }, this); + }, this); + + var index = params.index; + if (this.lists.length == 1) index = 0; + return (index || index === 0) && index >= 0 && index < this.lists.length ? serial[index] : serial; + } + +}); + +})(); + +/* +--- + +name: Element.Event.Pseudos + +description: Adds the functionality to add pseudo events for Elements + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: [Core/Element.Event, Core/Element.Delegation, Events.Pseudos] + +provides: [Element.Event.Pseudos, Element.Delegation.Pseudo] + +... +*/ + +(function(){ + +var pseudos = {relay: false}, + copyFromEvents = ['once', 'throttle', 'pause'], + count = copyFromEvents.length; + +while (count--) pseudos[copyFromEvents[count]] = Events.lookupPseudo(copyFromEvents[count]); + +DOMEvent.definePseudo = function(key, listener){ + pseudos[key] = listener; + return this; +}; + +var proto = Element.prototype; +[Element, Window, Document].invoke('implement', Events.Pseudos(pseudos, proto.addEvent, proto.removeEvent)); + +})(); + +/* +--- + +name: Element.Event.Pseudos.Keys + +description: Adds functionality fire events if certain keycombinations are pressed + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: [Element.Event.Pseudos] + +provides: [Element.Event.Pseudos.Keys] + +... +*/ + +(function(){ + +var keysStoreKey = '$moo:keys-pressed', + keysKeyupStoreKey = '$moo:keys-keyup'; + + +DOMEvent.definePseudo('keys', function(split, fn, args){ + + var event = args[0], + keys = [], + pressed = this.retrieve(keysStoreKey, []), + value = split.value; + + if (value != '+') keys.append(value.replace('++', function(){ + keys.push('+'); // shift++ and shift+++a + return ''; + }).split('+')); + else keys = ['+']; + + pressed.include(event.key); + + if (keys.every(function(key){ + return pressed.contains(key); + })) fn.apply(this, args); + + this.store(keysStoreKey, pressed); + + if (!this.retrieve(keysKeyupStoreKey)){ + var keyup = function(event){ + (function(){ + pressed = this.retrieve(keysStoreKey, []).erase(event.key); + this.store(keysStoreKey, pressed); + }).delay(0, this); // Fix for IE + }; + this.store(keysKeyupStoreKey, keyup).addEvent('keyup', keyup); + } + +}); + +DOMEvent.defineKeys({ + '16': 'shift', + '17': 'control', + '18': 'alt', + '20': 'capslock', + '33': 'pageup', + '34': 'pagedown', + '35': 'end', + '36': 'home', + '144': 'numlock', + '145': 'scrolllock', + '186': ';', + '187': '=', + '188': ',', + '190': '.', + '191': '/', + '192': '`', + '219': '[', + '220': '\\', + '221': ']', + '222': "'", + '107': '+', + '109': '-', // subtract + '189': '-' // dash +}); + +})(); + +/* +--- + +script: String.Extras.js + +name: String.Extras + +description: Extends the String native object to include methods useful in managing various kinds of strings (query strings, urls, html, etc). + +license: MIT-style license + +authors: + - Aaron Newton + - Guillermo Rauch + - Christopher Pitt + +requires: + - Core/String + - Core/Array + - MooTools.More + +provides: [String.Extras] + +... +*/ + +(function(){ + +var special = { + 'a': /[àáâãäåăą]/g, + 'A': /[ÀÁÂÃÄÅĂĄ]/g, + 'c': /[ćčç]/g, + 'C': /[ĆČÇ]/g, + 'd': /[ďđ]/g, + 'D': /[ĎÐ]/g, + 'e': /[èéêëěę]/g, + 'E': /[ÈÉÊËĚĘ]/g, + 'g': /[ğ]/g, + 'G': /[Ğ]/g, + 'i': /[ìíîï]/g, + 'I': /[ÌÍÎÏ]/g, + 'l': /[ĺľł]/g, + 'L': /[ĹĽŁ]/g, + 'n': /[ñňń]/g, + 'N': /[ÑŇŃ]/g, + 'o': /[òóôõöøő]/g, + 'O': /[ÒÓÔÕÖØ]/g, + 'r': /[řŕ]/g, + 'R': /[ŘŔ]/g, + 's': /[ššş]/g, + 'S': /[ŠŞŚ]/g, + 't': /[ťţ]/g, + 'T': /[ŤŢ]/g, + 'u': /[ùúûůüµ]/g, + 'U': /[ÙÚÛŮÜ]/g, + 'y': /[ÿý]/g, + 'Y': /[ŸÝ]/g, + 'z': /[žźż]/g, + 'Z': /[ŽŹŻ]/g, + 'th': /[þ]/g, + 'TH': /[Þ]/g, + 'dh': /[ð]/g, + 'DH': /[Ð]/g, + 'ss': /[ß]/g, + 'oe': /[œ]/g, + 'OE': /[Œ]/g, + 'ae': /[æ]/g, + 'AE': /[Æ]/g + }, + + tidy = { + ' ': /[\xa0\u2002\u2003\u2009]/g, + '*': /[\xb7]/g, + '\'': /[\u2018\u2019]/g, + '"': /[\u201c\u201d]/g, + '...': /[\u2026]/g, + '-': /[\u2013]/g, + // '--': /[\u2014]/g, + '»': /[\uFFFD]/g + }, + + conversions = { + ms: 1, + s: 1000, + m: 6e4, + h: 36e5 + }, + + findUnits = /(\d*.?\d+)([msh]+)/; + +var walk = function(string, replacements){ + var result = string, key; + for (key in replacements) result = result.replace(replacements[key], key); + return result; +}; + +var getRegexForTag = function(tag, contents){ + tag = tag || (contents ? '' : '\\w+'); + var regstr = contents ? '<' + tag + '(?!\\w)[^>]*>([\\s\\S]*?)<\/' + tag + '(?!\\w)>' : '<\/?' + tag + '\/?>|<' + tag + '[\\s|\/][^>]*>'; + return new RegExp(regstr, 'gi'); +}; + +String.implement({ + + standardize: function(){ + return walk(this, special); + }, + + repeat: function(times){ + return new Array(times + 1).join(this); + }, + + pad: function(length, str, direction){ + if (this.length >= length) return this; + + var pad = (str == null ? ' ' : '' + str) + .repeat(length - this.length) + .substr(0, length - this.length); + + if (!direction || direction == 'right') return this + pad; + if (direction == 'left') return pad + this; + + return pad.substr(0, (pad.length / 2).floor()) + this + pad.substr(0, (pad.length / 2).ceil()); + }, + + getTags: function(tag, contents){ + return this.match(getRegexForTag(tag, contents)) || []; + }, + + stripTags: function(tag, contents){ + return this.replace(getRegexForTag(tag, contents), ''); + }, + + tidy: function(){ + return walk(this, tidy); + }, + + truncate: function(max, trail, atChar){ + var string = this; + if (trail == null && arguments.length == 1) trail = '…'; + if (string.length > max){ + string = string.substring(0, max); + if (atChar){ + var index = string.lastIndexOf(atChar); + if (index != -1) string = string.substr(0, index); + } + if (trail) string += trail; + } + return string; + }, + + ms: function(){ + // "Borrowed" from https://gist.github.com/1503944 + var units = findUnits.exec(this); + if (units == null) return Number(this); + return Number(units[1]) * conversions[units[2]]; + } + +}); + +})(); + +/* +--- + +script: Element.Forms.js + +name: Element.Forms + +description: Extends the Element native object to include methods useful in managing inputs. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element + - String.Extras + - MooTools.More + +provides: [Element.Forms] + +... +*/ + +Element.implement({ + + tidy: function(){ + this.set('value', this.get('value').tidy()); + }, + + getTextInRange: function(start, end){ + return this.get('value').substring(start, end); + }, + + getSelectedText: function(){ + if (this.setSelectionRange) return this.getTextInRange(this.getSelectionStart(), this.getSelectionEnd()); + return document.selection.createRange().text; + }, + + getSelectedRange: function(){ + if (this.selectionStart != null){ + return { + start: this.selectionStart, + end: this.selectionEnd + }; + } + + var pos = { + start: 0, + end: 0 + }; + var range = this.getDocument().selection.createRange(); + if (!range || range.parentElement() != this) return pos; + var duplicate = range.duplicate(); + + if (this.type == 'text'){ + pos.start = 0 - duplicate.moveStart('character', -100000); + pos.end = pos.start + range.text.length; + } else { + var value = this.get('value'); + var offset = value.length; + duplicate.moveToElementText(this); + duplicate.setEndPoint('StartToEnd', range); + if (duplicate.text.length) offset -= value.match(/[\n\r]*$/)[0].length; + pos.end = offset - duplicate.text.length; + duplicate.setEndPoint('StartToStart', range); + pos.start = offset - duplicate.text.length; + } + return pos; + }, + + getSelectionStart: function(){ + return this.getSelectedRange().start; + }, + + getSelectionEnd: function(){ + return this.getSelectedRange().end; + }, + + setCaretPosition: function(pos){ + if (pos == 'end') pos = this.get('value').length; + this.selectRange(pos, pos); + return this; + }, + + getCaretPosition: function(){ + return this.getSelectedRange().start; + }, + + selectRange: function(start, end){ + if (this.setSelectionRange){ + this.focus(); + this.setSelectionRange(start, end); + } else { + var value = this.get('value'); + var diff = value.substr(start, end - start).replace(/\r/g, '').length; + start = value.substr(0, start).replace(/\r/g, '').length; + var range = this.createTextRange(); + range.collapse(true); + range.moveEnd('character', start + diff); + range.moveStart('character', start); + range.select(); + } + return this; + }, + + insertAtCursor: function(value, select){ + var pos = this.getSelectedRange(); + var text = this.get('value'); + this.set('value', text.substring(0, pos.start) + value + text.substring(pos.end, text.length)); + if (select !== false) this.selectRange(pos.start, pos.start + value.length); + else this.setCaretPosition(pos.start + value.length); + return this; + }, + + insertAroundCursor: function(options, select){ + options = Object.append({ + before: '', + defaultMiddle: '', + after: '' + }, options); + + var value = this.getSelectedText() || options.defaultMiddle; + var pos = this.getSelectedRange(); + var text = this.get('value'); + + if (pos.start == pos.end){ + this.set('value', text.substring(0, pos.start) + options.before + value + options.after + text.substring(pos.end, text.length)); + this.selectRange(pos.start + options.before.length, pos.end + options.before.length + value.length); + } else { + var current = text.substring(pos.start, pos.end); + this.set('value', text.substring(0, pos.start) + options.before + current + options.after + text.substring(pos.end, text.length)); + var selStart = pos.start + options.before.length; + if (select !== false) this.selectRange(selStart, selStart + current.length); + else this.setCaretPosition(selStart + text.length); + } + return this; + } + +}); + +/* +--- + +script: Element.Pin.js + +name: Element.Pin + +description: Extends the Element native object to include the pin method useful for fixed positioning for elements. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element.Event + - Core/Element.Dimensions + - Core/Element.Style + - MooTools.More + +provides: [Element.Pin] + +... +*/ + +(function(){ +var supportsPositionFixed = false, + supportTested = false; + +var testPositionFixed = function(){ + var test = new Element('div').setStyles({ + position: 'fixed', + top: 0, + right: 0 + }).inject(document.body); + supportsPositionFixed = (test.offsetTop === 0); + test.dispose(); + supportTested = true; +}; + +Element.implement({ + + pin: function(enable, forceScroll){ + if (!supportTested) testPositionFixed(); + if (this.getStyle('display') == 'none') return this; + + var pinnedPosition, + scroll = window.getScroll(), + parent, + scrollFixer; + + if (enable !== false){ + pinnedPosition = this.getPosition(); + if (!this.retrieve('pin:_pinned')){ + var currentPosition = { + top: pinnedPosition.y - scroll.y, + left: pinnedPosition.x - scroll.x, + margin: '0px', + padding: '0px' + }; + + if (supportsPositionFixed && !forceScroll){ + this.setStyle('position', 'fixed').setStyles(currentPosition); + } else { + + parent = this.getOffsetParent(); + var position = this.getPosition(parent), + styles = this.getStyles('left', 'top'); + + if (parent && styles.left == 'auto' || styles.top == 'auto') this.setPosition(position); + if (this.getStyle('position') == 'static') this.setStyle('position', 'absolute'); + + position = { + x: styles.left.toInt() - scroll.x, + y: styles.top.toInt() - scroll.y + }; + + scrollFixer = function(){ + if (!this.retrieve('pin:_pinned')) return; + var scroll = window.getScroll(); + this.setStyles({ + left: position.x + scroll.x, + top: position.y + scroll.y + }); + }.bind(this); + + this.store('pin:_scrollFixer', scrollFixer); + window.addEvent('scroll', scrollFixer); + } + this.store('pin:_pinned', true); + } + + } else { + if (!this.retrieve('pin:_pinned')) return this; + + parent = this.getParent(); + var offsetParent = (parent.getComputedStyle('position') != 'static' ? parent : parent.getOffsetParent()); + + pinnedPosition = this.getPosition(); + + this.store('pin:_pinned', false); + scrollFixer = this.retrieve('pin:_scrollFixer'); + if (!scrollFixer){ + this.setStyles({ + position: 'absolute', + top: pinnedPosition.y + scroll.y, + left: pinnedPosition.x + scroll.x + }); + } else { + this.store('pin:_scrollFixer', null); + window.removeEvent('scroll', scrollFixer); + } + this.removeClass('isPinned'); + } + return this; + }, + + unpin: function(){ + return this.pin(false); + }, + + togglePin: function(){ + return this.pin(!this.retrieve('pin:_pinned')); + } + +}); + + + +})(); + +/* +--- + +script: Element.Position.js + +name: Element.Position + +description: Extends the Element native object to include methods useful positioning elements relative to others. + +license: MIT-style license + +authors: + - Aaron Newton + - Jacob Thornton + +requires: + - Core/Options + - Core/Element.Dimensions + - Element.Measure + +provides: [Element.Position] + +... +*/ + +(function(original){ + +var local = Element.Position = { + + options: {/* + edge: false, + returnPos: false, + minimum: {x: 0, y: 0}, + maximum: {x: 0, y: 0}, + relFixedPosition: false, + ignoreMargins: false, + ignoreScroll: false, + allowNegative: false,*/ + relativeTo: document.body, + position: { + x: 'center', //left, center, right + y: 'center' //top, center, bottom + }, + offset: {x: 0, y: 0} + }, + + getOptions: function(element, options){ + options = Object.merge({}, local.options, options); + local.setPositionOption(options); + local.setEdgeOption(options); + local.setOffsetOption(element, options); + local.setDimensionsOption(element, options); + return options; + }, + + setPositionOption: function(options){ + options.position = local.getCoordinateFromValue(options.position); + }, + + setEdgeOption: function(options){ + var edgeOption = local.getCoordinateFromValue(options.edge); + options.edge = edgeOption ? edgeOption : + (options.position.x == 'center' && options.position.y == 'center') ? {x: 'center', y: 'center'} : + {x: 'left', y: 'top'}; + }, + + setOffsetOption: function(element, options){ + var parentOffset = {x: 0, y: 0}; + var parentScroll = {x: 0, y: 0}; + var offsetParent = element.measure(function(){ + return document.id(this.getOffsetParent()); + }); + + if (!offsetParent || offsetParent == element.getDocument().body) return; + + parentScroll = offsetParent.getScroll(); + parentOffset = offsetParent.measure(function(){ + var position = this.getPosition(); + if (this.getStyle('position') == 'fixed'){ + var scroll = window.getScroll(); + position.x += scroll.x; + position.y += scroll.y; + } + return position; + }); + + options.offset = { + parentPositioned: offsetParent != document.id(options.relativeTo), + x: options.offset.x - parentOffset.x + parentScroll.x, + y: options.offset.y - parentOffset.y + parentScroll.y + }; + }, + + setDimensionsOption: function(element, options){ + options.dimensions = element.getDimensions({ + computeSize: true, + styles: ['padding', 'border', 'margin'] + }); + }, + + getPosition: function(element, options){ + var position = {}; + options = local.getOptions(element, options); + var relativeTo = document.id(options.relativeTo) || document.body; + + local.setPositionCoordinates(options, position, relativeTo); + if (options.edge) local.toEdge(position, options); + + var offset = options.offset; + position.left = ((position.x >= 0 || offset.parentPositioned || options.allowNegative) ? position.x : 0).toInt(); + position.top = ((position.y >= 0 || offset.parentPositioned || options.allowNegative) ? position.y : 0).toInt(); + + local.toMinMax(position, options); + + if (options.relFixedPosition || relativeTo.getStyle('position') == 'fixed') local.toRelFixedPosition(relativeTo, position); + if (options.ignoreScroll) local.toIgnoreScroll(relativeTo, position); + if (options.ignoreMargins) local.toIgnoreMargins(position, options); + + position.left = Math.ceil(position.left); + position.top = Math.ceil(position.top); + delete position.x; + delete position.y; + + return position; + }, + + setPositionCoordinates: function(options, position, relativeTo){ + var offsetY = options.offset.y, + offsetX = options.offset.x, + calc = (relativeTo == document.body) ? window.getScroll() : relativeTo.getPosition(), + top = calc.y, + left = calc.x, + winSize = window.getSize(); + + switch (options.position.x){ + case 'left': position.x = left + offsetX; break; + case 'right': position.x = left + offsetX + relativeTo.offsetWidth; break; + default: position.x = left + ((relativeTo == document.body ? winSize.x : relativeTo.offsetWidth) / 2) + offsetX; break; + } + + switch (options.position.y){ + case 'top': position.y = top + offsetY; break; + case 'bottom': position.y = top + offsetY + relativeTo.offsetHeight; break; + default: position.y = top + ((relativeTo == document.body ? winSize.y : relativeTo.offsetHeight) / 2) + offsetY; break; + } + }, + + toMinMax: function(position, options){ + var xy = {left: 'x', top: 'y'}, value; + ['minimum', 'maximum'].each(function(minmax){ + ['left', 'top'].each(function(lr){ + value = options[minmax] ? options[minmax][xy[lr]] : null; + if (value != null && ((minmax == 'minimum') ? position[lr] < value : position[lr] > value)) position[lr] = value; + }); + }); + }, + + toRelFixedPosition: function(relativeTo, position){ + var winScroll = window.getScroll(); + position.top += winScroll.y; + position.left += winScroll.x; + }, + + toIgnoreScroll: function(relativeTo, position){ + var relScroll = relativeTo.getScroll(); + position.top -= relScroll.y; + position.left -= relScroll.x; + }, + + toIgnoreMargins: function(position, options){ + position.left += options.edge.x == 'right' + ? options.dimensions['margin-right'] + : (options.edge.x != 'center' + ? -options.dimensions['margin-left'] + : -options.dimensions['margin-left'] + ((options.dimensions['margin-right'] + options.dimensions['margin-left']) / 2)); + + position.top += options.edge.y == 'bottom' + ? options.dimensions['margin-bottom'] + : (options.edge.y != 'center' + ? -options.dimensions['margin-top'] + : -options.dimensions['margin-top'] + ((options.dimensions['margin-bottom'] + options.dimensions['margin-top']) / 2)); + }, + + toEdge: function(position, options){ + var edgeOffset = {}, + dimensions = options.dimensions, + edge = options.edge; + + switch (edge.x){ + case 'left': edgeOffset.x = 0; break; + case 'right': edgeOffset.x = -dimensions.x - dimensions.computedRight - dimensions.computedLeft; break; + // center + default: edgeOffset.x = -(Math.round(dimensions.totalWidth / 2)); break; + } + + switch (edge.y){ + case 'top': edgeOffset.y = 0; break; + case 'bottom': edgeOffset.y = -dimensions.y - dimensions.computedTop - dimensions.computedBottom; break; + // center + default: edgeOffset.y = -(Math.round(dimensions.totalHeight / 2)); break; + } + + position.x += edgeOffset.x; + position.y += edgeOffset.y; + }, + + getCoordinateFromValue: function(option){ + if (typeOf(option) != 'string') return option; + option = option.toLowerCase(); + + return { + x: option.test('left') ? 'left' + : (option.test('right') ? 'right' : 'center'), + y: option.test(/upper|top/) ? 'top' + : (option.test('bottom') ? 'bottom' : 'center') + }; + } + +}; + +Element.implement({ + + position: function(options){ + if (options && (options.x != null || options.y != null)){ + return (original ? original.apply(this, arguments) : this); + } + var position = this.setStyle('position', 'absolute').calculatePosition(options); + return (options && options.returnPos) ? position : this.setStyles(position); + }, + + calculatePosition: function(options){ + return local.getPosition(this, options); + } + +}); + +})(Element.prototype.position); + +/* +--- + +script: Element.Shortcuts.js + +name: Element.Shortcuts + +description: Extends the Element native object to include some shortcut methods. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element.Style + - MooTools.More + +provides: [Element.Shortcuts] + +... +*/ + +Element.implement({ + + isDisplayed: function(){ + return this.getStyle('display') != 'none'; + }, + + isVisible: function(){ + var w = this.offsetWidth, + h = this.offsetHeight; + return (w == 0 && h == 0) ? false : (w > 0 && h > 0) ? true : this.style.display != 'none'; + }, + + toggle: function(){ + return this[this.isDisplayed() ? 'hide' : 'show'](); + }, + + hide: function(){ + var d; + try { + //IE fails here if the element is not in the dom + d = this.getStyle('display'); + } catch (e){} + if (d == 'none') return this; + return this.store('element:_originalDisplay', d || '').setStyle('display', 'none'); + }, + + show: function(display){ + if (!display && this.isDisplayed()) return this; + display = display || this.retrieve('element:_originalDisplay') || 'block'; + return this.setStyle('display', (display == 'none') ? 'block' : display); + }, + + swapClass: function(remove, add){ + return this.removeClass(remove).addClass(add); + } + +}); + +Document.implement({ + + clearSelection: function(){ + if (window.getSelection){ + var selection = window.getSelection(); + if (selection && selection.removeAllRanges) selection.removeAllRanges(); + } else if (document.selection && document.selection.empty){ + try { + //IE fails here if selected element is not in dom + document.selection.empty(); + } catch (e){} + } + } + +}); + +/* +--- + +script: Elements.From.js + +name: Elements.From + +description: Returns a collection of elements from a string of html. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/String + - Core/Element + - MooTools.More + +provides: [Elements.from, Elements.From] + +... +*/ + +Elements.from = function(text, excludeScripts){ + if (excludeScripts || excludeScripts == null) text = text.stripScripts(); + + var container, match = text.match(/^\s*(?:\s*)*<(t[dhr]|tbody|tfoot|thead)/i); + + if (match){ + container = new Element('table'); + var tag = match[1].toLowerCase(); + if (['td', 'th', 'tr'].contains(tag)){ + container = new Element('tbody').inject(container); + if (tag != 'tr') container = new Element('tr').inject(container); + } + } + + return (container || new Element('div')).set('html', text).getChildren(); +}; + +/* +--- + +script: IframeShim.js + +name: IframeShim + +description: Defines IframeShim, a class for obscuring select lists and flash objects in IE. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element.Event + - Core/Element.Style + - Core/Options + - Core/Events + - Element.Position + - Class.Occlude + +provides: [IframeShim] + +... +*/ + +(function(){ + +var browsers = false; + + +var IframeShim = this.IframeShim = new Class({ + + Implements: [Options, Events, Class.Occlude], + + options: { + className: 'iframeShim', + src: 'javascript:false;document.write("");', + display: false, + zIndex: null, + margin: 0, + offset: {x: 0, y: 0}, + browsers: browsers + }, + + property: 'IframeShim', + + initialize: function(element, options){ + this.element = document.id(element); + if (this.occlude()) return this.occluded; + this.setOptions(options); + this.makeShim(); + return this; + }, + + makeShim: function(){ + if (this.options.browsers){ + var zIndex = this.element.getStyle('zIndex').toInt(); + + if (!zIndex){ + zIndex = 1; + var pos = this.element.getStyle('position'); + if (pos == 'static' || !pos) this.element.setStyle('position', 'relative'); + this.element.setStyle('zIndex', zIndex); + } + zIndex = ((this.options.zIndex != null || this.options.zIndex === 0) && zIndex > this.options.zIndex) ? this.options.zIndex : zIndex - 1; + if (zIndex < 0) zIndex = 1; + this.shim = new Element('iframe', { + src: this.options.src, + scrolling: 'no', + frameborder: 0, + styles: { + zIndex: zIndex, + position: 'absolute', + border: 'none', + filter: 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)' + }, + 'class': this.options.className + }).store('IframeShim', this); + var inject = (function(){ + this.shim.inject(this.element, 'after'); + this[this.options.display ? 'show' : 'hide'](); + this.fireEvent('inject'); + }).bind(this); + if (!IframeShim.ready) window.addEvent('load', inject); + else inject(); + } else { + this.position = this.hide = this.show = this.dispose = Function.convert(this); + } + }, + + position: function(){ + if (!IframeShim.ready || !this.shim) return this; + var size = this.element.measure(function(){ + return this.getSize(); + }); + if (this.options.margin != undefined){ + size.x = size.x - (this.options.margin * 2); + size.y = size.y - (this.options.margin * 2); + this.options.offset.x += this.options.margin; + this.options.offset.y += this.options.margin; + } + this.shim.set({width: size.x, height: size.y}).position({ + relativeTo: this.element, + offset: this.options.offset + }); + return this; + }, + + hide: function(){ + if (this.shim) this.shim.setStyle('display', 'none'); + return this; + }, + + show: function(){ + if (this.shim) this.shim.setStyle('display', 'block'); + return this.position(); + }, + + dispose: function(){ + if (this.shim) this.shim.dispose(); + return this; + }, + + destroy: function(){ + if (this.shim) this.shim.destroy(); + return this; + } + +}); + +})(); + +window.addEvent('load', function(){ + IframeShim.ready = true; +}); + +/* +--- + +script: Mask.js + +name: Mask + +description: Creates a mask element to cover another. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Options + - Core/Events + - Core/Element.Event + - Class.Binds + - Element.Position + - IframeShim + +provides: [Mask] + +... +*/ +(function(){ + +var Mask = this.Mask = new Class({ + + Implements: [Options, Events], + + Binds: ['position'], + + options: {/* + onShow: function(){}, + onHide: function(){}, + onDestroy: function(){}, + onClick: function(event){}, + inject: { + where: 'after', + target: null, + }, + hideOnClick: false, + id: null, + destroyOnHide: false,*/ + style: {}, + 'class': 'mask', + maskMargins: false, + useIframeShim: true, + iframeShimOptions: {} + }, + + initialize: function(target, options){ + this.target = document.id(target) || document.id(document.body); + this.target.store('mask', this); + this.setOptions(options); + this.render(); + this.inject(); + }, + + render: function(){ + this.element = new Element('div', { + 'class': this.options['class'], + id: this.options.id || 'mask-' + String.uniqueID(), + styles: Object.merge({}, this.options.style, { + display: 'none' + }), + events: { + click: function(event){ + this.fireEvent('click', event); + if (this.options.hideOnClick) this.hide(); + }.bind(this) + } + }); + + this.hidden = true; + }, + + toElement: function(){ + return this.element; + }, + + inject: function(target, where){ + where = where || (this.options.inject ? this.options.inject.where : '') || (this.target == document.body ? 'inside' : 'after'); + target = target || (this.options.inject && this.options.inject.target) || this.target; + + this.element.inject(target, where); + + if (this.options.useIframeShim){ + this.shim = new IframeShim(this.element, this.options.iframeShimOptions); + + this.addEvents({ + show: this.shim.show.bind(this.shim), + hide: this.shim.hide.bind(this.shim), + destroy: this.shim.destroy.bind(this.shim) + }); + } + }, + + position: function(){ + this.resize(this.options.width, this.options.height); + + this.element.position({ + relativeTo: this.target, + position: 'topLeft', + ignoreMargins: !this.options.maskMargins, + ignoreScroll: this.target == document.body + }); + + return this; + }, + + resize: function(x, y){ + var opt = { + styles: ['padding', 'border'] + }; + if (this.options.maskMargins) opt.styles.push('margin'); + + var dim = this.target.getComputedSize(opt); + if (this.target == document.body){ + this.element.setStyles({width: 0, height: 0}); + var win = window.getScrollSize(); + if (dim.totalHeight < win.y) dim.totalHeight = win.y; + if (dim.totalWidth < win.x) dim.totalWidth = win.x; + } + this.element.setStyles({ + width: Array.pick([x, dim.totalWidth, dim.x]), + height: Array.pick([y, dim.totalHeight, dim.y]) + }); + + return this; + }, + + show: function(){ + if (!this.hidden) return this; + + window.addEvent('resize', this.position); + this.position(); + this.showMask.apply(this, arguments); + + return this; + }, + + showMask: function(){ + this.element.setStyle('display', 'block'); + this.hidden = false; + this.fireEvent('show'); + }, + + hide: function(){ + if (this.hidden) return this; + + window.removeEvent('resize', this.position); + this.hideMask.apply(this, arguments); + if (this.options.destroyOnHide) return this.destroy(); + + return this; + }, + + hideMask: function(){ + this.element.setStyle('display', 'none'); + this.hidden = true; + this.fireEvent('hide'); + }, + + toggle: function(){ + this[this.hidden ? 'show' : 'hide'](); + }, + + destroy: function(){ + this.hide(); + this.element.destroy(); + this.fireEvent('destroy'); + this.target.eliminate('mask'); + } + +}); + +})(); + + +Element.Properties.mask = { + + set: function(options){ + var mask = this.retrieve('mask'); + if (mask) mask.destroy(); + return this.eliminate('mask').store('mask:options', options); + }, + + get: function(){ + var mask = this.retrieve('mask'); + if (!mask){ + mask = new Mask(this, this.retrieve('mask:options')); + this.store('mask', mask); + } + return mask; + } + +}; + +Element.implement({ + + mask: function(options){ + if (options) this.set('mask', options); + this.get('mask').show(); + return this; + }, + + unmask: function(){ + this.get('mask').hide(); + return this; + } + +}); + +/* +--- + +script: Spinner.js + +name: Spinner + +description: Adds a semi-transparent overlay over a dom element with a spinnin ajax icon. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Fx.Tween + - Core/Request + - Class.refactor + - Mask + +provides: [Spinner] + +... +*/ +(function(){ + +var Spinner = this.Spinner = new Class({ + + Extends: this.Mask, + + Implements: Chain, + + options: {/* + message: false,*/ + 'class': 'spinner', + containerPosition: {}, + content: { + 'class': 'spinner-content' + }, + messageContainer: { + 'class': 'spinner-msg' + }, + img: { + 'class': 'spinner-img' + }, + fxOptions: { + link: 'chain' + } + }, + + initialize: function(target, options){ + this.target = document.id(target) || document.id(document.body); + this.target.store('spinner', this); + this.setOptions(options); + this.render(); + this.inject(); + + // Add this to events for when noFx is true; parent methods handle hide/show. + var deactivate = function(){ this.active = false; }.bind(this); + this.addEvents({ + hide: deactivate, + show: deactivate + }); + }, + + render: function(){ + this.parent(); + + this.element.set('id', this.options.id || 'spinner-' + String.uniqueID()); + + this.content = document.id(this.options.content) || new Element('div', this.options.content); + this.content.inject(this.element); + + if (this.options.message){ + this.msg = document.id(this.options.message) || new Element('p', this.options.messageContainer).appendText(this.options.message); + this.msg.inject(this.content); + } + + if (this.options.img){ + this.img = document.id(this.options.img) || new Element('div', this.options.img); + this.img.inject(this.content); + } + + this.element.set('tween', this.options.fxOptions); + }, + + show: function(noFx){ + if (this.active) return this.chain(this.show.bind(this)); + if (!this.hidden){ + this.callChain.delay(20, this); + return this; + } + + this.target.set('aria-busy', 'true'); + this.active = true; + + return this.parent(noFx); + }, + + showMask: function(noFx){ + var pos = function(){ + this.content.position(Object.merge({ + relativeTo: this.element + }, this.options.containerPosition)); + }.bind(this); + + if (noFx){ + this.parent(); + pos(); + } else { + if (!this.options.style.opacity) this.options.style.opacity = this.element.getStyle('opacity').toFloat(); + this.element.setStyles({ + display: 'block', + opacity: 0 + }).tween('opacity', this.options.style.opacity); + pos(); + this.hidden = false; + this.fireEvent('show'); + this.callChain(); + } + }, + + hide: function(noFx){ + if (this.active) return this.chain(this.hide.bind(this)); + if (this.hidden){ + this.callChain.delay(20, this); + return this; + } + + this.target.set('aria-busy', 'false'); + this.active = true; + + return this.parent(noFx); + }, + + hideMask: function(noFx){ + if (noFx) return this.parent(); + this.element.tween('opacity', 0).get('tween').chain(function(){ + this.element.setStyle('display', 'none'); + this.hidden = true; + this.fireEvent('hide'); + this.callChain(); + }.bind(this)); + }, + + destroy: function(){ + this.content.destroy(); + this.parent(); + this.target.eliminate('spinner'); + } + +}); + +})(); + +Request = Class.refactor(Request, { + + options: { + useSpinner: false, + spinnerOptions: {}, + spinnerTarget: false + }, + + initialize: function(options){ + this._send = this.send; + this.send = function(options){ + var spinner = this.getSpinner(); + if (spinner) spinner.chain(this._send.pass(options, this)).show(); + else this._send(options); + return this; + }; + this.previous(options); + }, + + getSpinner: function(){ + if (!this.spinner){ + var update = document.id(this.options.spinnerTarget) || document.id(this.options.update); + if (this.options.useSpinner && update){ + update.set('spinner', this.options.spinnerOptions); + var spinner = this.spinner = update.get('spinner'); + ['complete', 'exception', 'cancel'].each(function(event){ + this.addEvent(event, spinner.hide.bind(spinner)); + }, this); + } + } + return this.spinner; + } + +}); + +Element.Properties.spinner = { + + set: function(options){ + var spinner = this.retrieve('spinner'); + if (spinner) spinner.destroy(); + return this.eliminate('spinner').store('spinner:options', options); + }, + + get: function(){ + var spinner = this.retrieve('spinner'); + if (!spinner){ + spinner = new Spinner(this, this.retrieve('spinner:options')); + this.store('spinner', spinner); + } + return spinner; + } + +}; + +Element.implement({ + + spin: function(options){ + if (options) this.set('spinner', options); + this.get('spinner').show(); + return this; + }, + + unspin: function(){ + this.get('spinner').hide(); + return this; + } + +}); + +/* +--- + +script: String.QueryString.js + +name: String.QueryString + +description: Methods for dealing with URI query strings. + +license: MIT-style license + +authors: + - Sebastian Markbåge + - Aaron Newton + - Lennart Pilon + - Valerio Proietti + +requires: + - Core/Array + - Core/String + - MooTools.More + +provides: [String.QueryString] + +... +*/ + +(function(){ + +/** + * decodeURIComponent doesn't do the correct thing with query parameter keys or + * values. Specifically, it leaves '+' as '+' when it should be converting them + * to spaces as that's the specification. When browsers submit HTML forms via + * GET, the values are encoded using 'application/x-www-form-urlencoded' + * which converts spaces to '+'. + * + * See: http://unixpapa.com/js/querystring.html for a description of the + * problem. + */ +var decodeComponent = function(str){ + return decodeURIComponent(str.replace(/\+/g, ' ')); +}; + +String.implement({ + + parseQueryString: function(decodeKeys, decodeValues){ + if (decodeKeys == null) decodeKeys = true; + if (decodeValues == null) decodeValues = true; + + var vars = this.split(/[&;]/), + object = {}; + if (!vars.length) return object; + + vars.each(function(val){ + var index = val.indexOf('=') + 1, + value = index ? val.substr(index) : '', + keys = index ? val.substr(0, index - 1).match(/([^\]\[]+|(\B)(?=\]))/g) : [val], + obj = object; + if (!keys) return; + if (decodeValues) value = decodeComponent(value); + keys.each(function(key, i){ + if (decodeKeys) key = decodeComponent(key); + var current = obj[key]; + + if (i < keys.length - 1) obj = obj[key] = current || {}; + else if (typeOf(current) == 'array') current.push(value); + else obj[key] = current != null ? [current, value] : value; + }); + }); + + return object; + }, + + cleanQueryString: function(method){ + return this.split('&').filter(function(val){ + var index = val.indexOf('='), + key = index < 0 ? '' : val.substr(0, index), + value = val.substr(index + 1); + + return method ? method.call(null, key, value) : (value || value === 0); + }).join('&'); + } + +}); + +})(); + +/* +--- + +script: Form.Request.js + +name: Form.Request + +description: Handles the basic functionality of submitting a form and updating a dom element with the result. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Request.HTML + - Class.Binds + - Class.Occlude + - Spinner + - String.QueryString + - Element.Delegation.Pseudo + +provides: [Form.Request] + +... +*/ + +if (!window.Form) window.Form = {}; + +(function(){ + +Form.Request = new Class({ + + Binds: ['onSubmit', 'onFormValidate'], + + Implements: [Options, Events, Class.Occlude], + + options: {/* + onFailure: function(){}, + onSuccess: function(){}, // aliased to onComplete, + onSend: function(){}*/ + requestOptions: { + evalScripts: true, + useSpinner: true, + emulation: false, + link: 'ignore' + }, + sendButtonClicked: true, + extraData: {}, + resetForm: true + }, + + property: 'form.request', + + initialize: function(form, target, options){ + this.element = document.id(form); + if (this.occlude()) return this.occluded; + this.setOptions(options) + .setTarget(target) + .attach(); + }, + + setTarget: function(target){ + this.target = document.id(target); + if (!this.request){ + this.makeRequest(); + } else { + this.request.setOptions({ + update: this.target + }); + } + return this; + }, + + toElement: function(){ + return this.element; + }, + + makeRequest: function(){ + var self = this; + this.request = new Request.HTML(Object.merge({ + update: this.target, + emulation: false, + spinnerTarget: this.element, + method: this.element.get('method') || 'post' + }, this.options.requestOptions)).addEvents({ + success: function(tree, elements, html, javascript){ + ['complete', 'success'].each(function(evt){ + self.fireEvent(evt, [self.target, tree, elements, html, javascript]); + }); + }, + failure: function(){ + self.fireEvent('complete', arguments).fireEvent('failure', arguments); + }, + exception: function(){ + self.fireEvent('failure', arguments); + } + }); + return this.attachReset(); + }, + + attachReset: function(){ + if (!this.options.resetForm) return this; + this.request.addEvent('success', function(){ + Function.attempt(function(){ + this.element.reset(); + }.bind(this)); + if (window.OverText) OverText.update(); + }.bind(this)); + return this; + }, + + attach: function(attach){ + var method = (attach != false) ? 'addEvent' : 'removeEvent'; + this.element[method]('click:relay(button, input[type=submit])', this.saveClickedButton.bind(this)); + + var fv = this.element.retrieve('validator'); + if (fv) fv[method]('onFormValidate', this.onFormValidate); + else this.element[method]('submit', this.onSubmit); + + return this; + }, + + detach: function(){ + return this.attach(false); + }, + + //public method + enable: function(){ + return this.attach(); + }, + + //public method + disable: function(){ + return this.detach(); + }, + + onFormValidate: function(valid, form, event){ + //if there's no event, then this wasn't a submit event + if (!event) return; + var fv = this.element.retrieve('validator'); + if (valid || (fv && !fv.options.stopOnFailure)){ + event.stop(); + this.send(); + } + }, + + onSubmit: function(event){ + var fv = this.element.retrieve('validator'); + if (fv){ + //form validator was created after Form.Request + this.element.removeEvent('submit', this.onSubmit); + fv.addEvent('onFormValidate', this.onFormValidate); + fv.validate(event); + return; + } + if (event) event.stop(); + this.send(); + }, + + saveClickedButton: function(event, target){ + var targetName = target.get('name'); + if (!targetName || !this.options.sendButtonClicked) return; + this.options.extraData[targetName] = target.get('value') || true; + this.clickedCleaner = function(){ + delete this.options.extraData[targetName]; + this.clickedCleaner = function(){}; + }.bind(this); + }, + + clickedCleaner: function(){}, + + send: function(){ + var str = this.element.toQueryString().trim(), + data = Object.toQueryString(this.options.extraData); + + if (str) str += '&' + data; + else str = data; + + this.fireEvent('send', [this.element, str.parseQueryString()]); + this.request.send({ + data: str, + url: this.options.requestOptions.url || this.element.get('action') + }); + this.clickedCleaner(); + return this; + } + +}); + +Element.implement('formUpdate', function(update, options){ + var fq = this.retrieve('form.request'); + if (!fq){ + fq = new Form.Request(this, update, options); + } else { + if (update) fq.setTarget(update); + if (options) fq.setOptions(options).makeRequest(); + } + fq.send(); + return this; +}); + +})(); + +/* +--- + +script: Fx.Reveal.js + +name: Fx.Reveal + +description: Defines Fx.Reveal, a class that shows and hides elements with a transition. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Fx.Morph + - Element.Shortcuts + - Element.Measure + +provides: [Fx.Reveal] + +... +*/ + +(function(){ + + +var hideTheseOf = function(object){ + var hideThese = object.options.hideInputs; + if (window.OverText){ + var otClasses = [null]; + OverText.each(function(ot){ + otClasses.include('.' + ot.options.labelClass); + }); + if (otClasses) hideThese += otClasses.join(', '); + } + return (hideThese) ? object.element.getElements(hideThese) : null; +}; + + +Fx.Reveal = new Class({ + + Extends: Fx.Morph, + + options: {/* + onShow: function(thisElement){}, + onHide: function(thisElement){}, + onComplete: function(thisElement){}, + heightOverride: null, + widthOverride: null,*/ + link: 'cancel', + styles: ['padding', 'border', 'margin'], + transitionOpacity: 'opacity' in document.documentElement, + mode: 'vertical', + display: function(){ + return this.element.get('tag') != 'tr' ? 'block' : 'table-row'; + }, + opacity: 1, + hideInputs: !('opacity' in document.documentElement) ? 'select, input, textarea, object, embed' : null + }, + + dissolve: function(){ + if (!this.hiding && !this.showing){ + if (this.element.getStyle('display') != 'none'){ + this.hiding = true; + this.showing = false; + this.hidden = true; + this.cssText = this.element.style.cssText; + + var startStyles = this.element.getComputedSize({ + styles: this.options.styles, + mode: this.options.mode + }); + if (this.options.transitionOpacity) startStyles.opacity = this.options.opacity; + + var zero = {}; + Object.each(startStyles, function(style, name){ + zero[name] = [style, 0]; + }); + + this.element.setStyles({ + display: Function.convert(this.options.display).call(this), + overflow: 'hidden' + }); + + var hideThese = hideTheseOf(this); + if (hideThese) hideThese.setStyle('visibility', 'hidden'); + + this.$chain.unshift(function(){ + if (this.hidden){ + this.hiding = false; + this.element.style.cssText = this.cssText; + this.element.setStyle('display', 'none'); + if (hideThese) hideThese.setStyle('visibility', 'visible'); + } + this.fireEvent('hide', this.element); + this.callChain(); + }.bind(this)); + + this.start(zero); + } else { + this.callChain.delay(10, this); + this.fireEvent('complete', this.element); + this.fireEvent('hide', this.element); + } + } else if (this.options.link == 'chain'){ + this.chain(this.dissolve.bind(this)); + } else if (this.options.link == 'cancel' && !this.hiding){ + this.cancel(); + this.dissolve(); + } + return this; + }, + + reveal: function(){ + if (!this.showing && !this.hiding){ + if (this.element.getStyle('display') == 'none'){ + this.hiding = false; + this.showing = true; + this.hidden = false; + this.cssText = this.element.style.cssText; + + var startStyles; + this.element.measure(function(){ + startStyles = this.element.getComputedSize({ + styles: this.options.styles, + mode: this.options.mode + }); + }.bind(this)); + if (this.options.heightOverride != null) startStyles.height = this.options.heightOverride.toInt(); + if (this.options.widthOverride != null) startStyles.width = this.options.widthOverride.toInt(); + if (this.options.transitionOpacity){ + this.element.setStyle('opacity', 0); + startStyles.opacity = this.options.opacity; + } + + var zero = { + height: 0, + display: Function.convert(this.options.display).call(this) + }; + Object.each(startStyles, function(style, name){ + zero[name] = 0; + }); + zero.overflow = 'hidden'; + + this.element.setStyles(zero); + + var hideThese = hideTheseOf(this); + if (hideThese) hideThese.setStyle('visibility', 'hidden'); + + this.$chain.unshift(function(){ + this.element.style.cssText = this.cssText; + this.element.setStyle('display', Function.convert(this.options.display).call(this)); + if (!this.hidden) this.showing = false; + if (hideThese) hideThese.setStyle('visibility', 'visible'); + this.callChain(); + this.fireEvent('show', this.element); + }.bind(this)); + + this.start(startStyles); + } else { + this.callChain(); + this.fireEvent('complete', this.element); + this.fireEvent('show', this.element); + } + } else if (this.options.link == 'chain'){ + this.chain(this.reveal.bind(this)); + } else if (this.options.link == 'cancel' && !this.showing){ + this.cancel(); + this.reveal(); + } + return this; + }, + + toggle: function(){ + if (this.element.getStyle('display') == 'none'){ + this.reveal(); + } else { + this.dissolve(); + } + return this; + }, + + cancel: function(){ + this.parent.apply(this, arguments); + if (this.cssText != null) this.element.style.cssText = this.cssText; + this.hiding = false; + this.showing = false; + return this; + } + +}); + +Element.Properties.reveal = { + + set: function(options){ + this.get('reveal').cancel().setOptions(options); + return this; + }, + + get: function(){ + var reveal = this.retrieve('reveal'); + if (!reveal){ + reveal = new Fx.Reveal(this); + this.store('reveal', reveal); + } + return reveal; + } + +}; + +Element.Properties.dissolve = Element.Properties.reveal; + +Element.implement({ + + reveal: function(options){ + this.get('reveal').setOptions(options).reveal(); + return this; + }, + + dissolve: function(options){ + this.get('reveal').setOptions(options).dissolve(); + return this; + }, + + nix: function(options){ + var params = Array.link(arguments, {destroy: Type.isBoolean, options: Type.isObject}); + this.get('reveal').setOptions(options).dissolve().chain(function(){ + this[params.destroy ? 'destroy' : 'dispose'](); + }.bind(this)); + return this; + }, + + wink: function(){ + var params = Array.link(arguments, {duration: Type.isNumber, options: Type.isObject}); + var reveal = this.get('reveal').setOptions(params.options); + reveal.reveal().chain(function(){ + (function(){ + reveal.dissolve(); + }).delay(params.duration || 2000); + }); + } + +}); + +})(); + +/* +--- + +script: Form.Request.Append.js + +name: Form.Request.Append + +description: Handles the basic functionality of submitting a form and updating a dom element with the result. The result is appended to the DOM element instead of replacing its contents. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Form.Request + - Fx.Reveal + - Elements.from + +provides: [Form.Request.Append] + +... +*/ + +Form.Request.Append = new Class({ + + Extends: Form.Request, + + options: { + //onBeforeEffect: function(){}, + useReveal: true, + revealOptions: {}, + inject: 'bottom' + }, + + makeRequest: function(){ + this.request = new Request.HTML(Object.merge({ + url: this.element.get('action'), + method: this.element.get('method') || 'post', + spinnerTarget: this.element + }, this.options.requestOptions, { + evalScripts: false + })).addEvents({ + success: function(tree, elements, html, javascript){ + var container; + var kids = Elements.from(html); + if (kids.length == 1){ + container = kids[0]; + } else { + container = new Element('div', { + styles: { + display: 'none' + } + }).adopt(kids); + } + container.inject(this.target, this.options.inject); + if (this.options.requestOptions.evalScripts) Browser.exec(javascript); + this.fireEvent('beforeEffect', container); + var finish = function(){ + this.fireEvent('success', [container, this.target, tree, elements, html, javascript]); + }.bind(this); + if (this.options.useReveal){ + container.set('reveal', this.options.revealOptions).get('reveal').chain(finish); + container.reveal(); + } else { + finish(); + } + }.bind(this), + failure: function(xhr){ + this.fireEvent('failure', xhr); + }.bind(this) + }); + this.attachReset(); + } + +}); + +/* +--- + +script: Object.Extras.js + +name: Object.Extras + +description: Extra Object generics, like getFromPath which allows a path notation to child elements. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Object + - MooTools.More + +provides: [Object.Extras] + +... +*/ + +(function(){ + +var defined = function(value){ + return value != null; +}; + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +Object.extend({ + + getFromPath: function(source, parts){ + if (typeof parts == 'string') parts = parts.split('.'); + for (var i = 0, l = parts.length; i < l; i++){ + if (hasOwnProperty.call(source, parts[i])) source = source[parts[i]]; + else return null; + } + return source; + }, + + cleanValues: function(object, method){ + method = method || defined; + for (var key in object) if (!method(object[key])){ + delete object[key]; + } + return object; + }, + + erase: function(object, key){ + if (hasOwnProperty.call(object, key)) delete object[key]; + return object; + }, + + run: function(object){ + var args = Array.slice(arguments, 1); + for (var key in object) if (object[key].apply){ + object[key].apply(object, args); + } + return object; + } + +}); + +})(); + +/* +--- + +script: Locale.js + +name: Locale + +description: Provides methods for localization. + +license: MIT-style license + +authors: + - Aaron Newton + - Arian Stolwijk + +requires: + - Core/Events + - Object.Extras + - MooTools.More + +provides: [Locale, Lang] + +... +*/ + +(function(){ + +var current = null, + locales = {}, + inherits = {}; + +var getSet = function(set){ + if (instanceOf(set, Locale.Set)) return set; + else return locales[set]; +}; + +var Locale = this.Locale = { + + define: function(locale, set, key, value){ + var name; + if (instanceOf(locale, Locale.Set)){ + name = locale.name; + if (name) locales[name] = locale; + } else { + name = locale; + if (!locales[name]) locales[name] = new Locale.Set(name); + locale = locales[name]; + } + + if (set) locale.define(set, key, value); + + + + if (!current) current = locale; + + return locale; + }, + + use: function(locale){ + locale = getSet(locale); + + if (locale){ + current = locale; + + this.fireEvent('change', locale); + + + } + + return this; + }, + + getCurrent: function(){ + return current; + }, + + get: function(key, args){ + return (current) ? current.get(key, args) : ''; + }, + + inherit: function(locale, inherits, set){ + locale = getSet(locale); + + if (locale) locale.inherit(inherits, set); + return this; + }, + + list: function(){ + return Object.keys(locales); + } + +}; + +Object.append(Locale, new Events); + +Locale.Set = new Class({ + + sets: {}, + + inherits: { + locales: [], + sets: {} + }, + + initialize: function(name){ + this.name = name || ''; + }, + + define: function(set, key, value){ + var defineData = this.sets[set]; + if (!defineData) defineData = {}; + + if (key){ + if (typeOf(key) == 'object') defineData = Object.merge(defineData, key); + else defineData[key] = value; + } + this.sets[set] = defineData; + + return this; + }, + + get: function(key, args, _base){ + var value = Object.getFromPath(this.sets, key); + if (value != null){ + var type = typeOf(value); + if (type == 'function') value = value.apply(null, Array.convert(args)); + else if (type == 'object') value = Object.clone(value); + return value; + } + + // get value of inherited locales + var index = key.indexOf('.'), + set = index < 0 ? key : key.substr(0, index), + names = (this.inherits.sets[set] || []).combine(this.inherits.locales).include('en-US'); + if (!_base) _base = []; + + for (var i = 0, l = names.length; i < l; i++){ + if (_base.contains(names[i])) continue; + _base.include(names[i]); + + var locale = locales[names[i]]; + if (!locale) continue; + + value = locale.get(key, args, _base); + if (value != null) return value; + } + + return ''; + }, + + inherit: function(names, set){ + names = Array.convert(names); + + if (set && !this.inherits.sets[set]) this.inherits.sets[set] = []; + + var l = names.length; + while (l--) (set ? this.inherits.sets[set] : this.inherits.locales).unshift(names[l]); + + return this; + } + +}); + + + +})(); + +/* +--- + +name: Locale.en-US.Date + +description: Date messages for US English. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Locale + +provides: [Locale.en-US.Date] + +... +*/ + +Locale.define('en-US', 'Date', { + + months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + months_abbr: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + days_abbr: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + + // Culture's date order: MM/DD/YYYY + dateOrder: ['month', 'date', 'year'], + shortDate: '%m/%d/%Y', + shortTime: '%I:%M%p', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 0, + + // Date.Extras + ordinal: function(dayOfMonth){ + // 1st, 2nd, 3rd, etc. + return (dayOfMonth > 3 && dayOfMonth < 21) ? 'th' : ['th', 'st', 'nd', 'rd', 'th'][Math.min(dayOfMonth % 10, 4)]; + }, + + lessThanMinuteAgo: 'less than a minute ago', + minuteAgo: 'about a minute ago', + minutesAgo: '{delta} minutes ago', + hourAgo: 'about an hour ago', + hoursAgo: 'about {delta} hours ago', + dayAgo: '1 day ago', + daysAgo: '{delta} days ago', + weekAgo: '1 week ago', + weeksAgo: '{delta} weeks ago', + monthAgo: '1 month ago', + monthsAgo: '{delta} months ago', + yearAgo: '1 year ago', + yearsAgo: '{delta} years ago', + + lessThanMinuteUntil: 'less than a minute from now', + minuteUntil: 'about a minute from now', + minutesUntil: '{delta} minutes from now', + hourUntil: 'about an hour from now', + hoursUntil: 'about {delta} hours from now', + dayUntil: '1 day from now', + daysUntil: '{delta} days from now', + weekUntil: '1 week from now', + weeksUntil: '{delta} weeks from now', + monthUntil: '1 month from now', + monthsUntil: '{delta} months from now', + yearUntil: '1 year from now', + yearsUntil: '{delta} years from now' + +}); + +/* +--- + +script: Date.js + +name: Date + +description: Extends the Date native object to include methods useful in managing dates. + +license: MIT-style license + +authors: + - Aaron Newton + - Nicholas Barthelemy - https://svn.nbarthelemy.com/date-js/ + - Harald Kirshner - mail [at] digitarald.de; http://digitarald.de + - Scott Kyle - scott [at] appden.com; http://appden.com + +requires: + - Core/Array + - Core/String + - Core/Number + - MooTools.More + - Locale + - Locale.en-US.Date + +provides: [Date] + +... +*/ + +(function(){ + +var Date = this.Date; + +var DateMethods = Date.Methods = { + ms: 'Milliseconds', + year: 'FullYear', + min: 'Minutes', + mo: 'Month', + sec: 'Seconds', + hr: 'Hours' +}; + +[ + 'Date', 'Day', 'FullYear', 'Hours', 'Milliseconds', 'Minutes', 'Month', 'Seconds', 'Time', 'TimezoneOffset', + 'Week', 'Timezone', 'GMTOffset', 'DayOfYear', 'LastMonth', 'LastDayOfMonth', 'UTCDate', 'UTCDay', 'UTCFullYear', + 'AMPM', 'Ordinal', 'UTCHours', 'UTCMilliseconds', 'UTCMinutes', 'UTCMonth', 'UTCSeconds', 'UTCMilliseconds' +].each(function(method){ + Date.Methods[method.toLowerCase()] = method; +}); + +var pad = function(n, digits, string){ + if (digits == 1) return n; + return n < Math.pow(10, digits - 1) ? (string || '0') + pad(n, digits - 1, string) : n; +}; + +Date.implement({ + + set: function(prop, value){ + prop = prop.toLowerCase(); + var method = DateMethods[prop] && 'set' + DateMethods[prop]; + if (method && this[method]) this[method](value); + return this; + }.overloadSetter(), + + get: function(prop){ + prop = prop.toLowerCase(); + var method = DateMethods[prop] && 'get' + DateMethods[prop]; + if (method && this[method]) return this[method](); + return null; + }.overloadGetter(), + + clone: function(){ + return new Date(this.get('time')); + }, + + increment: function(interval, times){ + interval = interval || 'day'; + times = times != null ? times : 1; + + switch (interval){ + case 'year': + return this.increment('month', times * 12); + case 'month': + var d = this.get('date'); + this.set('date', 1).set('mo', this.get('mo') + times); + return this.set('date', d.min(this.get('lastdayofmonth'))); + case 'week': + return this.increment('day', times * 7); + case 'day': + return this.set('date', this.get('date') + times); + } + + if (!Date.units[interval]) throw new Error(interval + ' is not a supported interval'); + + return this.set('time', this.get('time') + times * Date.units[interval]()); + }, + + decrement: function(interval, times){ + return this.increment(interval, -1 * (times != null ? times : 1)); + }, + + isLeapYear: function(){ + return Date.isLeapYear(this.get('year')); + }, + + clearTime: function(){ + return this.set({hr: 0, min: 0, sec: 0, ms: 0}); + }, + + diff: function(date, resolution){ + if (typeOf(date) == 'string') date = Date.parse(date); + + return ((date - this) / Date.units[resolution || 'day'](3, 3)).round(); // non-leap year, 30-day month + }, + + getLastDayOfMonth: function(){ + return Date.daysInMonth(this.get('mo'), this.get('year')); + }, + + getDayOfYear: function(){ + return (Date.UTC(this.get('year'), this.get('mo'), this.get('date') + 1) + - Date.UTC(this.get('year'), 0, 1)) / Date.units.day(); + }, + + setDay: function(day, firstDayOfWeek){ + if (firstDayOfWeek == null){ + firstDayOfWeek = Date.getMsg('firstDayOfWeek'); + if (firstDayOfWeek === '') firstDayOfWeek = 1; + } + + day = (7 + Date.parseDay(day, true) - firstDayOfWeek) % 7; + var currentDay = (7 + this.get('day') - firstDayOfWeek) % 7; + + return this.increment('day', day - currentDay); + }, + + getWeek: function(firstDayOfWeek){ + if (firstDayOfWeek == null){ + firstDayOfWeek = Date.getMsg('firstDayOfWeek'); + if (firstDayOfWeek === '') firstDayOfWeek = 1; + } + + var date = this, + dayOfWeek = (7 + date.get('day') - firstDayOfWeek) % 7, + dividend = 0, + firstDayOfYear; + + if (firstDayOfWeek == 1){ + // ISO-8601, week belongs to year that has the most days of the week (i.e. has the thursday of the week) + var month = date.get('month'), + startOfWeek = date.get('date') - dayOfWeek; + + if (month == 11 && startOfWeek > 28) return 1; // Week 1 of next year + + if (month == 0 && startOfWeek < -2){ + // Use a date from last year to determine the week + date = new Date(date).decrement('day', dayOfWeek); + dayOfWeek = 0; + } + + firstDayOfYear = new Date(date.get('year'), 0, 1).get('day') || 7; + if (firstDayOfYear > 4) dividend = -7; // First week of the year is not week 1 + } else { + // In other cultures the first week of the year is always week 1 and the last week always 53 or 54. + // Days in the same week can have a different weeknumber if the week spreads across two years. + firstDayOfYear = new Date(date.get('year'), 0, 1).get('day'); + } + + dividend += date.get('dayofyear'); + dividend += 6 - dayOfWeek; // Add days so we calculate the current date's week as a full week + dividend += (7 + firstDayOfYear - firstDayOfWeek) % 7; // Make up for first week of the year not being a full week + + return (dividend / 7); + }, + + getOrdinal: function(day){ + return Date.getMsg('ordinal', day || this.get('date')); + }, + + getTimezone: function(){ + return this.toString() + .replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/, '$1') + .replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, '$1$2$3'); + }, + + getGMTOffset: function(){ + var off = this.get('timezoneOffset'); + return ((off > 0) ? '-' : '+') + pad((off.abs() / 60).floor(), 2) + pad(off % 60, 2); + }, + + setAMPM: function(ampm){ + ampm = ampm.toUpperCase(); + var hr = this.get('hr'); + if (hr > 11 && ampm == 'AM') return this.decrement('hour', 12); + else if (hr < 12 && ampm == 'PM') return this.increment('hour', 12); + return this; + }, + + getAMPM: function(){ + return (this.get('hr') < 12) ? 'AM' : 'PM'; + }, + + parse: function(str){ + this.set('time', Date.parse(str)); + return this; + }, + + isValid: function(date){ + if (!date) date = this; + return typeOf(date) == 'date' && !isNaN(date.valueOf()); + }, + + format: function(format){ + if (!this.isValid()) return 'invalid date'; + + if (!format) format = '%x %X'; + if (typeof format == 'string') format = formats[format.toLowerCase()] || format; + if (typeof format == 'function') return format(this); + + var d = this; + return format.replace(/%([a-z%])/gi, + function($0, $1){ + switch ($1){ + case 'a': return Date.getMsg('days_abbr')[d.get('day')]; + case 'A': return Date.getMsg('days')[d.get('day')]; + case 'b': return Date.getMsg('months_abbr')[d.get('month')]; + case 'B': return Date.getMsg('months')[d.get('month')]; + case 'c': return d.format('%a %b %d %H:%M:%S %Y'); + case 'd': return pad(d.get('date'), 2); + case 'e': return pad(d.get('date'), 2, ' '); + case 'H': return pad(d.get('hr'), 2); + case 'I': return pad((d.get('hr') % 12) || 12, 2); + case 'j': return pad(d.get('dayofyear'), 3); + case 'k': return pad(d.get('hr'), 2, ' '); + case 'l': return pad((d.get('hr') % 12) || 12, 2, ' '); + case 'L': return pad(d.get('ms'), 3); + case 'm': return pad((d.get('mo') + 1), 2); + case 'M': return pad(d.get('min'), 2); + case 'o': return d.get('ordinal'); + case 'p': return Date.getMsg(d.get('ampm')); + case 's': return Math.round(d / 1000); + case 'S': return pad(d.get('seconds'), 2); + case 'T': return d.format('%H:%M:%S'); + case 'U': return pad(d.get('week'), 2); + case 'w': return d.get('day'); + case 'x': return d.format(Date.getMsg('shortDate')); + case 'X': return d.format(Date.getMsg('shortTime')); + case 'y': return d.get('year').toString().substr(2); + case 'Y': return d.get('year'); + case 'z': return d.get('GMTOffset'); + case 'Z': return d.get('Timezone'); + } + return $1; + } + ); + }, + + toISOString: function(){ + return this.format('iso8601'); + } + +}).alias({ + toJSON: 'toISOString', + compare: 'diff', + strftime: 'format' +}); + +// The day and month abbreviations are standardized, so we cannot use simply %a and %b because they will get localized +var rfcDayAbbr = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + rfcMonthAbbr = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + +var formats = { + db: '%Y-%m-%d %H:%M:%S', + compact: '%Y%m%dT%H%M%S', + 'short': '%d %b %H:%M', + 'long': '%B %d, %Y %H:%M', + rfc822: function(date){ + return rfcDayAbbr[date.get('day')] + date.format(', %d ') + rfcMonthAbbr[date.get('month')] + date.format(' %Y %H:%M:%S %Z'); + }, + rfc2822: function(date){ + return rfcDayAbbr[date.get('day')] + date.format(', %d ') + rfcMonthAbbr[date.get('month')] + date.format(' %Y %H:%M:%S %z'); + }, + iso8601: function(date){ + return ( + date.getUTCFullYear() + '-' + + pad(date.getUTCMonth() + 1, 2) + '-' + + pad(date.getUTCDate(), 2) + 'T' + + pad(date.getUTCHours(), 2) + ':' + + pad(date.getUTCMinutes(), 2) + ':' + + pad(date.getUTCSeconds(), 2) + '.' + + pad(date.getUTCMilliseconds(), 3) + 'Z' + ); + } +}; + +var parsePatterns = [], + nativeParse = Date.parse; + +var parseWord = function(type, word, num){ + var ret = -1, + translated = Date.getMsg(type + 's'); + switch (typeOf(word)){ + case 'object': + ret = translated[word.get(type)]; + break; + case 'number': + ret = translated[word]; + if (!ret) throw new Error('Invalid ' + type + ' index: ' + word); + break; + case 'string': + var match = translated.filter(function(name){ + return this.test(name); + }, new RegExp('^' + word, 'i')); + if (!match.length) throw new Error('Invalid ' + type + ' string'); + if (match.length > 1) throw new Error('Ambiguous ' + type); + ret = match[0]; + } + + return (num) ? translated.indexOf(ret) : ret; +}; + +var startCentury = 1900, + startYear = 70; + +Date.extend({ + + getMsg: function(key, args){ + return Locale.get('Date.' + key, args); + }, + + units: { + ms: Function.convert(1), + second: Function.convert(1000), + minute: Function.convert(60000), + hour: Function.convert(3600000), + day: Function.convert(86400000), + week: Function.convert(608400000), + month: function(month, year){ + var d = new Date; + return Date.daysInMonth(month != null ? month : d.get('mo'), year != null ? year : d.get('year')) * 86400000; + }, + year: function(year){ + year = year || new Date().get('year'); + return Date.isLeapYear(year) ? 31622400000 : 31536000000; + } + }, + + daysInMonth: function(month, year){ + return [31, Date.isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; + }, + + isLeapYear: function(year){ + return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0); + }, + + parse: function(from){ + var t = typeOf(from); + if (t == 'number') return new Date(from); + if (t != 'string') return from; + from = from.clean(); + if (!from.length) return null; + + var parsed; + parsePatterns.some(function(pattern){ + var bits = pattern.re.exec(from); + return (bits) ? (parsed = pattern.handler(bits)) : false; + }); + + if (!(parsed && parsed.isValid())){ + parsed = new Date(nativeParse(from)); + if (!(parsed && parsed.isValid())) parsed = new Date(from.toInt()); + } + return parsed; + }, + + parseDay: function(day, num){ + return parseWord('day', day, num); + }, + + parseMonth: function(month, num){ + return parseWord('month', month, num); + }, + + parseUTC: function(value){ + var localDate = new Date(value); + var utcSeconds = Date.UTC( + localDate.get('year'), + localDate.get('mo'), + localDate.get('date'), + localDate.get('hr'), + localDate.get('min'), + localDate.get('sec'), + localDate.get('ms') + ); + return new Date(utcSeconds); + }, + + orderIndex: function(unit){ + return Date.getMsg('dateOrder').indexOf(unit) + 1; + }, + + defineFormat: function(name, format){ + formats[name] = format; + return this; + }, + + + + defineParser: function(pattern){ + parsePatterns.push((pattern.re && pattern.handler) ? pattern : build(pattern)); + return this; + }, + + defineParsers: function(){ + Array.flatten(arguments).each(Date.defineParser); + return this; + }, + + define2DigitYearStart: function(year){ + startYear = year % 100; + startCentury = year - startYear; + return this; + } + +}).extend({ + defineFormats: Date.defineFormat.overloadSetter() +}); + +var regexOf = function(type){ + return new RegExp('(?:' + Date.getMsg(type).map(function(name){ + return name.substr(0, 3); + }).join('|') + ')[a-z]*'); +}; + +var replacers = function(key){ + switch (key){ + case 'T': + return '%H:%M:%S'; + case 'x': // iso8601 covers yyyy-mm-dd, so just check if month is first + return ((Date.orderIndex('month') == 1) ? '%m[-./]%d' : '%d[-./]%m') + '([-./]%y)?'; + case 'X': + return '%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%z?'; + } + return null; +}; + +var keys = { + d: /[0-2]?[0-9]|3[01]/, + H: /[01]?[0-9]|2[0-3]/, + I: /0?[1-9]|1[0-2]/, + M: /[0-5]?\d/, + s: /\d+/, + o: /[a-z]*/, + p: /[ap]\.?m\.?/, + y: /\d{2}|\d{4}/, + Y: /\d{4}/, + z: /Z|[+-]\d{2}(?::?\d{2})?/ +}; + +keys.m = keys.I; +keys.S = keys.M; + +var currentLanguage; + +var recompile = function(language){ + currentLanguage = language; + + keys.a = keys.A = regexOf('days'); + keys.b = keys.B = regexOf('months'); + + parsePatterns.each(function(pattern, i){ + if (pattern.format) parsePatterns[i] = build(pattern.format); + }); +}; + +var build = function(format){ + if (!currentLanguage) return {format: format}; + + var parsed = []; + var re = (format.source || format) // allow format to be regex + .replace(/%([a-z])/gi, + function($0, $1){ + return replacers($1) || $0; + } + ).replace(/\((?!\?)/g, '(?:') // make all groups non-capturing + .replace(/ (?!\?|\*)/g, ',? ') // be forgiving with spaces and commas + .replace(/%([a-z%])/gi, + function($0, $1){ + var p = keys[$1]; + if (!p) return $1; + parsed.push($1); + return '(' + p.source + ')'; + } + ).replace(/\[a-z\]/gi, '[a-z\\u00c0-\\uffff;\&]'); // handle unicode words + + return { + format: format, + re: new RegExp('^' + re + '$', 'i'), + handler: function(bits){ + bits = bits.slice(1).associate(parsed); + var date = new Date().clearTime(), + year = bits.y || bits.Y; + + if (year != null) handle.call(date, 'y', year); // need to start in the right year + if ('d' in bits) handle.call(date, 'd', 1); + if ('m' in bits || bits.b || bits.B) handle.call(date, 'm', 1); + + for (var key in bits) handle.call(date, key, bits[key]); + return date; + } + }; +}; + +var handle = function(key, value){ + if (!value) return this; + + switch (key){ + case 'a': case 'A': return this.set('day', Date.parseDay(value, true)); + case 'b': case 'B': return this.set('mo', Date.parseMonth(value, true)); + case 'd': return this.set('date', value); + case 'H': case 'I': return this.set('hr', value); + case 'm': return this.set('mo', value - 1); + case 'M': return this.set('min', value); + case 'p': return this.set('ampm', value.replace(/\./g, '')); + case 'S': return this.set('sec', value); + case 's': return this.set('ms', ('0.' + value) * 1000); + case 'w': return this.set('day', value); + case 'Y': return this.set('year', value); + case 'y': + value = +value; + if (value < 100) value += startCentury + (value < startYear ? 100 : 0); + return this.set('year', value); + case 'z': + if (value == 'Z') value = '+00'; + var offset = value.match(/([+-])(\d{2}):?(\d{2})?/); + offset = (offset[1] + '1') * (offset[2] * 60 + (+offset[3] || 0)) + this.getTimezoneOffset(); + return this.set('time', this - offset * 60000); + } + + return this; +}; + +Date.defineParsers( + '%Y([-./]%m([-./]%d((T| )%X)?)?)?', // "1999-12-31", "1999-12-31 11:59pm", "1999-12-31 23:59:59", ISO8601 + '%Y%m%d(T%H(%M%S?)?)?', // "19991231", "19991231T1159", compact + '%x( %X)?', // "12/31", "12.31.99", "12-31-1999", "12/31/2008 11:59 PM" + '%d%o( %b( %Y)?)?( %X)?', // "31st", "31st December", "31 Dec 1999", "31 Dec 1999 11:59pm" + '%b( %d%o)?( %Y)?( %X)?', // Same as above with month and day switched + '%Y %b( %d%o( %X)?)?', // Same as above with year coming first + '%o %b %d %X %z %Y', // "Thu Oct 22 08:11:23 +0000 2009" + '%T', // %H:%M:%S + '%H:%M( ?%p)?' // "11:05pm", "11:05 am" and "11:05" +); + +Locale.addEvent('change', function(language){ + if (Locale.get('Date')) recompile(language); +}).fireEvent('change', Locale.getCurrent()); + +})(); + +/* +--- + +name: Locale.en-US.Form.Validator + +description: Form Validator messages for English. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Locale + +provides: [Locale.en-US.Form.Validator] + +... +*/ + +Locale.define('en-US', 'FormValidator', { + + required: 'This field is required.', + length: 'Please enter {length} characters (you entered {elLength} characters)', + minLength: 'Please enter at least {minLength} characters (you entered {length} characters).', + maxLength: 'Please enter no more than {maxLength} characters (you entered {length} characters).', + integer: 'Please enter an integer in this field. Numbers with decimals (e.g. 1.25) are not permitted.', + numeric: 'Please enter only numeric values in this field (i.e. "1" or "1.1" or "-1" or "-1.1").', + digits: 'Please use numbers and punctuation only in this field (for example, a phone number with dashes or dots is permitted).', + alpha: 'Please use only letters (a-z) within this field. No spaces or other characters are allowed.', + alphanum: 'Please use only letters (a-z) or numbers (0-9) in this field. No spaces or other characters are allowed.', + dateSuchAs: 'Please enter a valid date such as {date}', + dateInFormatMDY: 'Please enter a valid date such as MM/DD/YYYY (i.e. "12/31/1999")', + email: 'Please enter a valid email address. For example "fred@domain.com".', + url: 'Please enter a valid URL such as http://www.example.com.', + currencyDollar: 'Please enter a valid $ amount. For example $100.00 .', + oneRequired: 'Please enter something for at least one of these inputs.', + errorPrefix: 'Error: ', + warningPrefix: 'Warning: ', + + // Form.Validator.Extras + noSpace: 'There can be no spaces in this input.', + reqChkByNode: 'No items are selected.', + requiredChk: 'This field is required.', + reqChkByName: 'Please select a {label}.', + match: 'This field needs to match the {matchName} field', + startDate: 'the start date', + endDate: 'the end date', + currentDate: 'the current date', + afterDate: 'The date should be the same or after {label}.', + beforeDate: 'The date should be the same or before {label}.', + startMonth: 'Please select a start month', + sameMonth: 'These two dates must be in the same month - you must change one or the other.', + creditcard: 'The credit card number entered is invalid. Please check the number and try again. {length} digits entered.' + +}); + +/* +--- + +script: Form.Validator.js + +name: Form.Validator + +description: A css-class based form validation system. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Options + - Core/Events + - Core/Element.Delegation + - Core/Slick.Finder + - Core/Element.Event + - Core/Element.Style + - Core/JSON + - Locale + - Class.Binds + - Date + - Element.Forms + - Locale.en-US.Form.Validator + - Element.Shortcuts + +provides: [Form.Validator, InputValidator, FormValidator.BaseValidators] + +... +*/ +if (!window.Form) window.Form = {}; + +var InputValidator = this.InputValidator = new Class({ + + Implements: [Options], + + options: { + errorMsg: 'Validation failed.', + test: Function.convert(true) + }, + + initialize: function(className, options){ + this.setOptions(options); + this.className = className; + }, + + test: function(field, props){ + field = document.id(field); + return (field) ? this.options.test(field, props || this.getProps(field)) : false; + }, + + getError: function(field, props){ + field = document.id(field); + var err = this.options.errorMsg; + if (typeOf(err) == 'function') err = err(field, props || this.getProps(field)); + return err; + }, + + getProps: function(field){ + field = document.id(field); + return (field) ? field.get('validatorProps') : {}; + } + +}); + +Element.Properties.validators = { + + get: function(){ + return (this.get('data-validators') || this.className).clean().replace(/'(\\.|[^'])*'|"(\\.|[^"])*"/g, function(match){ + return match.replace(' ', '\\x20'); + }).split(' '); + } + +}; + +Element.Properties.validatorProps = { + + set: function(props){ + return this.eliminate('$moo:validatorProps').store('$moo:validatorProps', props); + }, + + get: function(props){ + if (props) this.set(props); + if (this.retrieve('$moo:validatorProps')) return this.retrieve('$moo:validatorProps'); + if (this.getProperty('data-validator-properties') || this.getProperty('validatorProps')){ + try { + this.store('$moo:validatorProps', JSON.decode(this.getProperty('validatorProps') || this.getProperty('data-validator-properties'), false)); + } catch (e){ + return {}; + } + } else { + var vals = this.get('validators').filter(function(cls){ + return cls.test(':'); + }); + if (!vals.length){ + this.store('$moo:validatorProps', {}); + } else { + props = {}; + vals.each(function(cls){ + var split = cls.split(':'); + if (split[1]){ + try { + props[split[0]] = JSON.decode(split[1], false); + } catch (e){} + } + }); + this.store('$moo:validatorProps', props); + } + } + return this.retrieve('$moo:validatorProps'); + } + +}; + +Form.Validator = new Class({ + + Implements: [Options, Events], + + options: {/* + onFormValidate: function(isValid, form, event){}, + onElementValidate: function(isValid, field, className, warn){}, + onElementPass: function(field){}, + onElementFail: function(field, validatorsFailed){}, */ + fieldSelectors: 'input, select, textarea', + ignoreHidden: true, + ignoreDisabled: true, + useTitles: false, + evaluateOnSubmit: true, + evaluateFieldsOnBlur: true, + evaluateFieldsOnChange: true, + serial: true, + stopOnFailure: true, + warningPrefix: function(){ + return Form.Validator.getMsg('warningPrefix') || 'Warning: '; + }, + errorPrefix: function(){ + return Form.Validator.getMsg('errorPrefix') || 'Error: '; + } + }, + + initialize: function(form, options){ + this.setOptions(options); + this.element = document.id(form); + this.warningPrefix = Function.convert(this.options.warningPrefix)(); + this.errorPrefix = Function.convert(this.options.errorPrefix)(); + this._bound = { + onSubmit: this.onSubmit.bind(this), + blurOrChange: function(event, field){ + this.validationMonitor(field, true); + }.bind(this) + }; + this.enable(); + }, + + toElement: function(){ + return this.element; + }, + + getFields: function(){ + return (this.fields = this.element.getElements(this.options.fieldSelectors)); + }, + + enable: function(){ + this.element.store('validator', this); + if (this.options.evaluateOnSubmit) this.element.addEvent('submit', this._bound.onSubmit); + if (this.options.evaluateFieldsOnBlur){ + this.element.addEvent('blur:relay(input,select,textarea)', this._bound.blurOrChange); + } + if (this.options.evaluateFieldsOnChange){ + this.element.addEvent('change:relay(input,select,textarea)', this._bound.blurOrChange); + } + }, + + disable: function(){ + this.element.eliminate('validator'); + this.element.removeEvents({ + submit: this._bound.onSubmit, + 'blur:relay(input,select,textarea)': this._bound.blurOrChange, + 'change:relay(input,select,textarea)': this._bound.blurOrChange + }); + }, + + validationMonitor: function(){ + clearTimeout(this.timer); + this.timer = this.validateField.delay(50, this, arguments); + }, + + onSubmit: function(event){ + if (this.validate(event)) this.reset(); + }, + + reset: function(){ + this.getFields().each(this.resetField, this); + return this; + }, + + validate: function(event){ + var result = this.getFields().map(function(field){ + return this.validateField(field, true); + }, this).every(function(v){ + return v; + }); + this.fireEvent('formValidate', [result, this.element, event]); + if (this.options.stopOnFailure && !result && event) event.preventDefault(); + return result; + }, + + validateField: function(field, force){ + if (this.paused) return true; + field = document.id(field); + var passed = !field.hasClass('validation-failed'); + var failed, warned; + if (this.options.serial && !force){ + failed = this.element.getElement('.validation-failed'); + warned = this.element.getElement('.warning'); + } + if (field && (!failed || force || field.hasClass('validation-failed') || (failed && !this.options.serial))){ + var validationTypes = field.get('validators'); + var validators = validationTypes.some(function(cn){ + return this.getValidator(cn); + }, this); + var validatorsFailed = []; + validationTypes.each(function(className){ + if (className && !this.test(className, field)) validatorsFailed.include(className); + }, this); + passed = validatorsFailed.length === 0; + if (validators && !this.hasValidator(field, 'warnOnly')){ + if (passed){ + field.addClass('validation-passed').removeClass('validation-failed'); + this.fireEvent('elementPass', [field]); + } else { + field.addClass('validation-failed').removeClass('validation-passed'); + this.fireEvent('elementFail', [field, validatorsFailed]); + } + } + if (!warned){ + var warnings = validationTypes.some(function(cn){ + if (cn.test('^warn')) + return this.getValidator(cn.replace(/^warn-/,'')); + else return null; + }, this); + field.removeClass('warning'); + var warnResult = validationTypes.map(function(cn){ + if (cn.test('^warn')) + return this.test(cn.replace(/^warn-/,''), field, true); + else return null; + }, this); + } + } + return passed; + }, + + test: function(className, field, warn){ + field = document.id(field); + if ((this.options.ignoreHidden && !field.isVisible()) || (this.options.ignoreDisabled && field.get('disabled'))) return true; + var validator = this.getValidator(className); + if (warn != null) warn = false; + if (this.hasValidator(field, 'warnOnly')) warn = true; + var isValid = field.hasClass('ignoreValidation') || (validator ? validator.test(field) : true); + if (validator) this.fireEvent('elementValidate', [isValid, field, className, warn]); + if (warn) return true; + return isValid; + }, + + hasValidator: function(field, value){ + return field.get('validators').contains(value); + }, + + resetField: function(field){ + field = document.id(field); + if (field){ + field.get('validators').each(function(className){ + if (className.test('^warn-')) className = className.replace(/^warn-/, ''); + field.removeClass('validation-failed'); + field.removeClass('warning'); + field.removeClass('validation-passed'); + }, this); + } + return this; + }, + + stop: function(){ + this.paused = true; + return this; + }, + + start: function(){ + this.paused = false; + return this; + }, + + ignoreField: function(field, warn){ + field = document.id(field); + if (field){ + this.enforceField(field); + if (warn) field.addClass('warnOnly'); + else field.addClass('ignoreValidation'); + } + return this; + }, + + enforceField: function(field){ + field = document.id(field); + if (field) field.removeClass('warnOnly').removeClass('ignoreValidation'); + return this; + } + +}); + +Form.Validator.getMsg = function(key){ + return Locale.get('FormValidator.' + key); +}; + +Form.Validator.adders = { + + validators:{}, + + add : function(className, options){ + this.validators[className] = new InputValidator(className, options); + //if this is a class (this method is used by instances of Form.Validator and the Form.Validator namespace) + //extend these validators into it + //this allows validators to be global and/or per instance + if (!this.initialize){ + this.implement({ + validators: this.validators + }); + } + }, + + addAllThese : function(validators){ + Array.convert(validators).each(function(validator){ + this.add(validator[0], validator[1]); + }, this); + }, + + getValidator: function(className){ + return this.validators[className.split(':')[0]]; + } + +}; + +Object.append(Form.Validator, Form.Validator.adders); + +Form.Validator.implement(Form.Validator.adders); + +Form.Validator.add('IsEmpty', { + + errorMsg: false, + test: function(element){ + if (element.type == 'select-one' || element.type == 'select') + return !(element.selectedIndex >= 0 && element.options[element.selectedIndex].value != ''); + else + return ((element.get('value') == null) || (element.get('value').length == 0)); + } + +}); + +Form.Validator.addAllThese([ + + ['required', { + errorMsg: function(){ + return Form.Validator.getMsg('required'); + }, + test: function(element){ + return !Form.Validator.getValidator('IsEmpty').test(element); + } + }], + + ['length', { + errorMsg: function(element, props){ + if (typeOf(props.length) != 'null') + return Form.Validator.getMsg('length').substitute({length: props.length, elLength: element.get('value').length}); + else return ''; + }, + test: function(element, props){ + if (typeOf(props.length) != 'null') return (element.get('value').length == props.length || element.get('value').length == 0); + else return true; + } + }], + + ['minLength', { + errorMsg: function(element, props){ + if (typeOf(props.minLength) != 'null') + return Form.Validator.getMsg('minLength').substitute({minLength: props.minLength, length: element.get('value').length}); + else return ''; + }, + test: function(element, props){ + if (typeOf(props.minLength) != 'null') return (element.get('value').length >= (props.minLength || 0)); + else return true; + } + }], + + ['maxLength', { + errorMsg: function(element, props){ + //props is {maxLength:10} + if (typeOf(props.maxLength) != 'null') + return Form.Validator.getMsg('maxLength').substitute({maxLength: props.maxLength, length: element.get('value').length}); + else return ''; + }, + test: function(element, props){ + return element.get('value').length <= (props.maxLength || 10000); + } + }], + + ['validate-integer', { + errorMsg: Form.Validator.getMsg.pass('integer'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^(-?[1-9]\d*|0)$/).test(element.get('value')); + } + }], + + ['validate-numeric', { + errorMsg: Form.Validator.getMsg.pass('numeric'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || + (/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(element.get('value')); + } + }], + + ['validate-digits', { + errorMsg: Form.Validator.getMsg.pass('digits'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^[\d() .:\-\+#]+$/.test(element.get('value'))); + } + }], + + ['validate-alpha', { + errorMsg: Form.Validator.getMsg.pass('alpha'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^[a-zA-Z]+$/).test(element.get('value')); + } + }], + + ['validate-alphanum', { + errorMsg: Form.Validator.getMsg.pass('alphanum'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || !(/\W/).test(element.get('value')); + } + }], + + ['validate-date', { + errorMsg: function(element, props){ + if (Date.parse){ + var format = props.dateFormat || '%x'; + return Form.Validator.getMsg('dateSuchAs').substitute({date: new Date().format(format)}); + } else { + return Form.Validator.getMsg('dateInFormatMDY'); + } + }, + test: function(element, props){ + if (Form.Validator.getValidator('IsEmpty').test(element)) return true; + var dateLocale = Locale.get('Date'), + dateNouns = new RegExp([dateLocale.days, dateLocale.days_abbr, dateLocale.months, dateLocale.months_abbr, dateLocale.AM, dateLocale.PM].flatten().join('|'), 'i'), + value = element.get('value'), + wordsInValue = value.match(/[a-z]+/gi); + + if (wordsInValue && !wordsInValue.every(dateNouns.exec, dateNouns)) return false; + + var date = Date.parse(value); + if (!date) return false; + + var format = props.dateFormat || '%x', + formatted = date.format(format); + if (formatted != 'invalid date') element.set('value', formatted); + return date.isValid(); + } + }], + + ['validate-email', { + errorMsg: Form.Validator.getMsg.pass('email'), + test: function(element){ + /* + var chars = "[a-z0-9!#$%&'*+/=?^_`{|}~-]", + local = '(?:' + chars + '\\.?){0,63}' + chars, + + label = '[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?', + hostname = '(?:' + label + '\\.)*' + label; + + octet = '(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)', + ipv4 = '\\[(?:' + octet + '\\.){3}' + octet + '\\]', + + domain = '(?:' + hostname + '|' + ipv4 + ')'; + + var regex = new RegExp('^' + local + '@' + domain + '$', 'i'); + */ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]\.?){0,63}[a-z0-9!#$%&'*+\/=?^_`{|}~-]@(?:(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\])$/i).test(element.get('value')); + } + }], + + ['validate-url', { + errorMsg: Form.Validator.getMsg.pass('url'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(element.get('value')); + } + }], + + ['validate-currency-dollar', { + errorMsg: Form.Validator.getMsg.pass('currencyDollar'), + test: function(element){ + return Form.Validator.getValidator('IsEmpty').test(element) || (/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(element.get('value')); + } + }], + + ['validate-one-required', { + errorMsg: Form.Validator.getMsg.pass('oneRequired'), + test: function(element, props){ + var p = document.id(props['validate-one-required']) || element.getParent(props['validate-one-required']); + return p.getElements('input').some(function(el){ + if (['checkbox', 'radio'].contains(el.get('type'))) return el.get('checked'); + return el.get('value'); + }); + } + }] + +]); + +Element.Properties.validator = { + + set: function(options){ + this.get('validator').setOptions(options); + }, + + get: function(){ + var validator = this.retrieve('validator'); + if (!validator){ + validator = new Form.Validator(this); + this.store('validator', validator); + } + return validator; + } + +}; + +Element.implement({ + + validate: function(options){ + if (options) this.set('validator', options); + return this.get('validator').validate(); + } + +}); + + + + + + +/* +--- + +script: Form.Validator.Extras.js + +name: Form.Validator.Extras + +description: Additional validators for the Form.Validator class. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Form.Validator + +provides: [Form.Validator.Extras] + +... +*/ + +(function(){ + +function getItems(props, preference, children, cssSelector){ + if (preference && props[preference]) return props[preference]; + var el = document.id(props[children]); + if (!el) return []; + return el.getElements(cssSelector); +} + +Form.Validator.addAllThese([ + + ['validate-enforce-oncheck', { + test: function(element, props){ + var fv = element.getParent('form').retrieve('validator'); + if (!fv) return true; + getItems(props, 'toEnforce', 'enforceChildrenOf', 'input, select, textarea').each(function(item){ + if (element.checked){ + fv.enforceField(item); + } else { + fv.ignoreField(item); + fv.resetField(item); + } + }); + return true; + } + }], + + ['validate-ignore-oncheck', { + test: function(element, props){ + var fv = element.getParent('form').retrieve('validator'); + if (!fv) return true; + getItems(props, 'toIgnore', 'ignoreChildrenOf', 'input, select, textarea').each(function(item){ + if (element.checked){ + fv.ignoreField(item); + fv.resetField(item); + } else { + fv.enforceField(item); + } + }); + return true; + } + }], + + ['validate-enforce-onselect-value', { + test: function(element, props){ + if (!props.value) return true; + var fv = element.getParent('form').retrieve('validator'); + if (!fv) return true; + getItems(props, 'toEnforce', 'enforceChildrenOf', 'input, select, textarea').each(function(item){ + if (props.value == element.value){ + fv.enforceField(item); + } else { + fv.ignoreField(item); + fv.resetField(item); + } + }); + return true; + } + }], + + ['validate-nospace', { + errorMsg: function(){ + return Form.Validator.getMsg('noSpace'); + }, + test: function(element, props){ + return !element.get('value').test(/\s/); + } + }], + + ['validate-toggle-oncheck', { + test: function(element, props){ + var fv = element.getParent('form').retrieve('validator'); + if (!fv) return true; + var eleArr = getItems(props, 'toToggle', 'toToggleChildrenOf', 'input, select, textarea'); + if (!element.checked){ + eleArr.each(function(item){ + fv.ignoreField(item); + fv.resetField(item); + }); + } else { + eleArr.each(function(item){ + fv.enforceField(item); + }); + } + return true; + } + }], + + ['validate-reqchk-bynode', { + errorMsg: function(){ + return Form.Validator.getMsg('reqChkByNode'); + }, + test: function(element, props){ + return getItems(props, false, 'nodeId', props.selector || 'input[type=checkbox], input[type=radio]').some(function(item){ + return item.checked; + }); + } + }], + + ['validate-required-check', { + errorMsg: function(element, props){ + return props.useTitle ? element.get('title') : Form.Validator.getMsg('requiredChk'); + }, + test: function(element, props){ + return !!element.checked; + } + }], + + ['validate-reqchk-byname', { + errorMsg: function(element, props){ + return Form.Validator.getMsg('reqChkByName').substitute({label: props.label || element.get('type')}); + }, + test: function(element, props){ + var grpName = props.groupName || element.get('name'); + var grpNameEls = $$('[name=' + grpName +']'); + var oneCheckedItem = grpNameEls.some(function(item, index){ + return item.checked; + }); + var fv = element.getParent('form').retrieve('validator'); + if (oneCheckedItem && fv){ + grpNameEls.each(function(item, index){ fv.resetField(item); }); + } + return oneCheckedItem; + } + }], + + ['validate-match', { + errorMsg: function(element, props){ + return Form.Validator.getMsg('match').substitute({matchName: decodeURIComponent((props.matchName+'').replace(/\+/g, '%20')) || document.id(props.matchInput).get('name')}); + }, + test: function(element, props){ + var eleVal = element.get('value'); + var matchVal = document.id(props.matchInput) && document.id(props.matchInput).get('value'); + return eleVal && matchVal ? eleVal == matchVal : true; + } + }], + + ['validate-after-date', { + errorMsg: function(element, props){ + return Form.Validator.getMsg('afterDate').substitute({ + label: props.afterLabel || (props.afterElement ? Form.Validator.getMsg('startDate') : Form.Validator.getMsg('currentDate')) + }); + }, + test: function(element, props){ + var start = document.id(props.afterElement) ? Date.parse(document.id(props.afterElement).get('value')) : new Date(); + var end = Date.parse(element.get('value')); + return end && start ? end >= start : true; + } + }], + + ['validate-before-date', { + errorMsg: function(element, props){ + return Form.Validator.getMsg('beforeDate').substitute({ + label: props.beforeLabel || (props.beforeElement ? Form.Validator.getMsg('endDate') : Form.Validator.getMsg('currentDate')) + }); + }, + test: function(element, props){ + var start = Date.parse(element.get('value')); + var end = document.id(props.beforeElement) ? Date.parse(document.id(props.beforeElement).get('value')) : new Date(); + return end && start ? end >= start : true; + } + }], + + ['validate-custom-required', { + errorMsg: function(){ + return Form.Validator.getMsg('required'); + }, + test: function(element, props){ + return element.get('value') != props.emptyValue; + } + }], + + ['validate-same-month', { + errorMsg: function(element, props){ + var startMo = document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value'); + var eleVal = element.get('value'); + if (eleVal != '') return Form.Validator.getMsg(startMo ? 'sameMonth' : 'startMonth'); + }, + test: function(element, props){ + var d1 = Date.parse(element.get('value')); + var d2 = Date.parse(document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value')); + return d1 && d2 ? d1.format('%B') == d2.format('%B') : true; + } + }], + + + ['validate-cc-num', { + errorMsg: function(element){ + var ccNum = element.get('value').replace(/[^0-9]/g, ''); + return Form.Validator.getMsg('creditcard').substitute({length: ccNum.length}); + }, + test: function(element){ + // required is a different test + if (Form.Validator.getValidator('IsEmpty').test(element)) return true; + + // Clean number value + var ccNum = element.get('value'); + ccNum = ccNum.replace(/[^0-9]/g, ''); + + var validType = false; + + if (ccNum.test(/^4[0-9]{12}([0-9]{3})?$/)) validType = 'Visa'; + else if (ccNum.test(/^5[1-5]([0-9]{14})$/)) validType = 'Master Card'; + else if (ccNum.test(/^3[47][0-9]{13}$/)) validType = 'American Express'; + else if (ccNum.test(/^6(?:011|5[0-9]{2})[0-9]{12}$/)) validType = 'Discover'; + else if (ccNum.test(/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/)) validType = 'Diners Club'; + + if (validType){ + var sum = 0; + var cur = 0; + + for (var i=ccNum.length-1; i>=0; --i){ + cur = ccNum.charAt(i).toInt(); + if (cur == 0) continue; + + if ((ccNum.length-i) % 2 == 0) cur += cur; + if (cur > 9){ + cur = cur.toString().charAt(0).toInt() + cur.toString().charAt(1).toInt(); + } + + sum += cur; + } + if ((sum % 10) == 0) return true; + } + + var chunks = ''; + while (ccNum != ''){ + chunks += ' ' + ccNum.substr(0,4); + ccNum = ccNum.substr(4); + } + + element.getParent('form').retrieve('validator').ignoreField(element); + element.set('value', chunks.clean()); + element.getParent('form').retrieve('validator').enforceField(element); + return false; + } + }] + +]); + +})(); + +/* +--- + +script: Form.Validator.Inline.js + +name: Form.Validator.Inline + +description: Extends Form.Validator to add inline messages. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Form.Validator + +provides: [Form.Validator.Inline] + +... +*/ + +Form.Validator.Inline = new Class({ + + Extends: Form.Validator, + + options: { + showError: function(errorElement){ + if (errorElement.reveal) errorElement.reveal(); + else errorElement.setStyle('display', 'block'); + }, + hideError: function(errorElement){ + if (errorElement.dissolve) errorElement.dissolve(); + else errorElement.setStyle('display', 'none'); + }, + scrollToErrorsOnSubmit: true, + scrollToErrorsOnBlur: false, + scrollToErrorsOnChange: false, + scrollFxOptions: { + transition: 'quad:out', + offset: { + y: -20 + } + } + }, + + initialize: function(form, options){ + this.parent(form, options); + this.addEvent('onElementValidate', function(isValid, field, className, warn){ + var validator = this.getValidator(className); + if (!isValid && validator.getError(field)){ + if (warn) field.addClass('warning'); + var advice = this.makeAdvice(className, field, validator.getError(field), warn); + this.insertAdvice(advice, field); + this.showAdvice(className, field); + } else { + this.hideAdvice(className, field); + } + }); + }, + + makeAdvice: function(className, field, error, warn){ + var errorMsg = (warn) ? this.warningPrefix : this.errorPrefix; + errorMsg += (this.options.useTitles) ? field.title || error:error; + var cssClass = (warn) ? 'warning-advice' : 'validation-advice'; + var advice = this.getAdvice(className, field); + if (advice){ + advice = advice.set('html', errorMsg); + } else { + advice = new Element('div', { + html: errorMsg, + styles: { display: 'none' }, + id: 'advice-' + className.split(':')[0] + '-' + this.getFieldId(field) + }).addClass(cssClass); + } + field.store('$moo:advice-' + className, advice); + return advice; + }, + + getFieldId : function(field){ + return field.id ? field.id : field.id = 'input_' + field.name; + }, + + showAdvice: function(className, field){ + var advice = this.getAdvice(className, field); + if ( + advice && + !field.retrieve('$moo:' + this.getPropName(className)) && + ( + advice.getStyle('display') == 'none' || + advice.getStyle('visibility') == 'hidden' || + advice.getStyle('opacity') == 0 + ) + ){ + field.store('$moo:' + this.getPropName(className), true); + this.options.showError(advice); + this.fireEvent('showAdvice', [field, advice, className]); + } + }, + + hideAdvice: function(className, field){ + var advice = this.getAdvice(className, field); + if (advice && field.retrieve('$moo:' + this.getPropName(className))){ + field.store('$moo:' + this.getPropName(className), false); + this.options.hideError(advice); + this.fireEvent('hideAdvice', [field, advice, className]); + } + }, + + getPropName: function(className){ + return 'advice' + className; + }, + + resetField: function(field){ + field = document.id(field); + if (!field) return this; + this.parent(field); + field.get('validators').each(function(className){ + this.hideAdvice(className, field); + }, this); + return this; + }, + + getAllAdviceMessages: function(field, force){ + var advice = []; + if (field.hasClass('ignoreValidation') && !force) return advice; + var validators = field.get('validators').some(function(cn){ + var warner = cn.test('^warn-') || field.hasClass('warnOnly'); + if (warner) cn = cn.replace(/^warn-/, ''); + var validator = this.getValidator(cn); + if (!validator) return; + advice.push({ + message: validator.getError(field), + warnOnly: warner, + passed: validator.test(), + validator: validator + }); + }, this); + return advice; + }, + + getAdvice: function(className, field){ + return field.retrieve('$moo:advice-' + className); + }, + + insertAdvice: function(advice, field){ + //Check for error position prop + var props = field.get('validatorProps'); + //Build advice + if (!props.msgPos || !document.id(props.msgPos)){ + if (field.type && field.type.toLowerCase() == 'radio') field.getParent().adopt(advice); + else advice.inject(document.id(field), 'after'); + } else { + document.id(props.msgPos).grab(advice); + } + }, + + validateField: function(field, force, scroll){ + var result = this.parent(field, force); + if (((this.options.scrollToErrorsOnSubmit && scroll == null) || scroll) && !result){ + var failed = document.id(this).getElement('.validation-failed'); + var par = document.id(this).getParent(); + while (par != document.body && par.getScrollSize().y == par.getSize().y){ + par = par.getParent(); + } + var fx = par.retrieve('$moo:fvScroller'); + if (!fx && window.Fx && Fx.Scroll){ + fx = new Fx.Scroll(par, this.options.scrollFxOptions); + par.store('$moo:fvScroller', fx); + } + if (failed){ + if (fx) fx.toElement(failed); + else par.scrollTo(par.getScroll().x, failed.getPosition(par).y - 20); + } + } + return result; + }, + + watchFields: function(fields){ + fields.each(function(el){ + if (this.options.evaluateFieldsOnBlur){ + el.addEvent('blur', this.validationMonitor.pass([el, false, this.options.scrollToErrorsOnBlur], this)); + } + if (this.options.evaluateFieldsOnChange){ + el.addEvent('change', this.validationMonitor.pass([el, true, this.options.scrollToErrorsOnChange], this)); + } + }, this); + } + +}); + +/* +--- + +script: OverText.js + +name: OverText + +description: Shows text over an input that disappears when the user clicks into it. The text remains hidden if the user adds a value. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Options + - Core/Events + - Core/Element.Event + - Class.Binds + - Class.Occlude + - Element.Position + - Element.Shortcuts + +provides: [OverText] + +... +*/ +(function(){ + +var OverText = this.OverText = new Class({ + + Implements: [Options, Events, Class.Occlude], + + Binds: ['reposition', 'assert', 'focus', 'hide'], + + options: {/* + textOverride: null, + onFocus: function(){}, + onTextHide: function(textEl, inputEl){}, + onTextShow: function(textEl, inputEl){}, */ + element: 'label', + labelClass: 'overTxtLabel', + positionOptions: { + position: 'upperLeft', + edge: 'upperLeft', + offset: { + x: 4, + y: 2 + } + }, + poll: false, + pollInterval: 250, + wrap: false + }, + + property: 'OverText', + + initialize: function(element, options){ + element = this.element = document.id(element); + + if (this.occlude()) return this.occluded; + this.setOptions(options); + + this.attach(element); + OverText.instances.push(this); + + if (this.options.poll) this.poll(); + }, + + toElement: function(){ + return this.element; + }, + + attach: function(){ + var element = this.element, + options = this.options, + value = options.textOverride || element.get('alt') || element.get('title'); + + if (!value) return this; + + var text = this.text = new Element(options.element, { + 'class': options.labelClass, + styles: { + lineHeight: 'normal', + position: 'absolute', + cursor: 'text' + }, + html: value, + events: { + click: this.hide.pass(options.element == 'label', this) + } + }).inject(element, 'after'); + + if (options.element == 'label'){ + if (!element.get('id')) element.set('id', 'input_' + String.uniqueID()); + text.set('for', element.get('id')); + } + + if (options.wrap){ + this.textHolder = new Element('div.overTxtWrapper', { + styles: { + lineHeight: 'normal', + position: 'relative' + } + }).grab(text).inject(element, 'before'); + } + + return this.enable(); + }, + + destroy: function(){ + this.element.eliminate(this.property); // Class.Occlude storage + this.disable(); + if (this.text) this.text.destroy(); + if (this.textHolder) this.textHolder.destroy(); + return this; + }, + + disable: function(){ + this.element.removeEvents({ + focus: this.focus, + blur: this.assert, + change: this.assert + }); + window.removeEvent('resize', this.reposition); + this.hide(true, true); + return this; + }, + + enable: function(){ + this.element.addEvents({ + focus: this.focus, + blur: this.assert, + change: this.assert + }); + window.addEvent('resize', this.reposition); + this.reposition(); + return this; + }, + + wrap: function(){ + if (this.options.element == 'label'){ + if (!this.element.get('id')) this.element.set('id', 'input_' + String.uniqueID()); + this.text.set('for', this.element.get('id')); + } + }, + + startPolling: function(){ + this.pollingPaused = false; + return this.poll(); + }, + + poll: function(stop){ + //start immediately + //pause on focus + //resumeon blur + if (this.poller && !stop) return this; + if (stop){ + clearInterval(this.poller); + } else { + this.poller = (function(){ + if (!this.pollingPaused) this.assert(true); + }).periodical(this.options.pollInterval, this); + } + + return this; + }, + + stopPolling: function(){ + this.pollingPaused = true; + return this.poll(true); + }, + + focus: function(){ + if (this.text && (!this.text.isDisplayed() || this.element.get('disabled'))) return this; + return this.hide(); + }, + + hide: function(suppressFocus, force){ + if (this.text && (this.text.isDisplayed() && (!this.element.get('disabled') || force))){ + this.text.hide(); + this.fireEvent('textHide', [this.text, this.element]); + this.pollingPaused = true; + if (!suppressFocus){ + try { + this.element.fireEvent('focus'); + this.element.focus(); + } catch (e){} //IE barfs if you call focus on hidden elements + } + } + return this; + }, + + show: function(){ + if (document.id(this.text) && !this.text.isDisplayed()){ + this.text.show(); + this.reposition(); + this.fireEvent('textShow', [this.text, this.element]); + this.pollingPaused = false; + } + return this; + }, + + test: function(){ + return !this.element.get('value'); + }, + + assert: function(suppressFocus){ + return this[this.test() ? 'show' : 'hide'](suppressFocus); + }, + + reposition: function(){ + this.assert(true); + if (!this.element.isVisible()) return this.stopPolling().hide(); + if (this.text && this.test()){ + this.text.position(Object.merge(this.options.positionOptions, { + relativeTo: this.element + })); + } + return this; + } + +}); + +})(); + +OverText.instances = []; + +Object.append(OverText, { + + each: function(fn){ + return OverText.instances.each(function(ot, i){ + if (ot.element && ot.text) fn.call(OverText, ot, i); + }); + }, + + update: function(){ + + return OverText.each(function(ot){ + return ot.reposition(); + }); + + }, + + hideAll: function(){ + + return OverText.each(function(ot){ + return ot.hide(true, true); + }); + + }, + + showAll: function(){ + return OverText.each(function(ot){ + return ot.show(); + }); + } + +}); + + +/* +--- + +script: Fx.Elements.js + +name: Fx.Elements + +description: Effect to change any number of CSS properties of any number of Elements. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Fx.CSS + - MooTools.More + +provides: [Fx.Elements] + +... +*/ + +Fx.Elements = new Class({ + + Extends: Fx.CSS, + + initialize: function(elements, options){ + this.elements = this.subject = $$(elements); + this.parent(options); + }, + + compute: function(from, to, delta){ + var now = {}; + + for (var i in from){ + var iFrom = from[i], iTo = to[i], iNow = now[i] = {}; + for (var p in iFrom) iNow[p] = this.parent(iFrom[p], iTo[p], delta); + } + + return now; + }, + + set: function(now){ + for (var i in now){ + if (!this.elements[i]) continue; + + var iNow = now[i]; + for (var p in iNow) this.render(this.elements[i], p, iNow[p], this.options.unit); + } + + return this; + }, + + start: function(obj){ + if (!this.check(obj)) return this; + var from = {}, to = {}; + + for (var i in obj){ + if (!this.elements[i]) continue; + + var iProps = obj[i], iFrom = from[i] = {}, iTo = to[i] = {}; + + for (var p in iProps){ + var parsed = this.prepare(this.elements[i], p, iProps[p]); + iFrom[p] = parsed.from; + iTo[p] = parsed.to; + } + } + + return this.parent(from, to); + } + +}); + +/* +--- + +script: Fx.Accordion.js + +name: Fx.Accordion + +description: An Fx.Elements extension which allows you to easily create accordion type controls. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Element.Event + - Fx.Elements + +provides: [Fx.Accordion] + +... +*/ + +Fx.Accordion = new Class({ + + Extends: Fx.Elements, + + options: {/* + onActive: function(toggler, section){}, + onBackground: function(toggler, section){},*/ + fixedHeight: false, + fixedWidth: false, + display: 0, + show: false, + height: true, + width: false, + opacity: true, + alwaysHide: false, + trigger: 'click', + initialDisplayFx: true, + resetHeight: true, + keepOpen: false + }, + + initialize: function(){ + var defined = function(obj){ + return obj != null; + }; + + var params = Array.link(arguments, { + 'container': Type.isElement, //deprecated + 'options': Type.isObject, + 'togglers': defined, + 'elements': defined + }); + this.parent(params.elements, params.options); + + var options = this.options, + togglers = this.togglers = $$(params.togglers); + + this.previous = -1; + this.internalChain = new Chain(); + + if (options.alwaysHide) this.options.link = 'chain'; + + if (options.show || this.options.show === 0){ + options.display = false; + this.previous = options.show; + } + + if (options.start){ + options.display = false; + options.show = false; + } + + var effects = this.effects = {}; + + if (options.opacity) effects.opacity = 'fullOpacity'; + if (options.width) effects.width = options.fixedWidth ? 'fullWidth' : 'offsetWidth'; + if (options.height) effects.height = options.fixedHeight ? 'fullHeight' : 'scrollHeight'; + + for (var i = 0, l = togglers.length; i < l; i++) this.addSection(togglers[i], this.elements[i]); + + this.elements.each(function(el, i){ + if (options.show === i){ + this.fireEvent('active', [togglers[i], el]); + } else { + for (var fx in effects) el.setStyle(fx, 0); + } + }, this); + + if (options.display || options.display === 0 || options.initialDisplayFx === false){ + this.display(options.display, options.initialDisplayFx); + } + + if (options.fixedHeight !== false) options.resetHeight = false; + this.addEvent('complete', this.internalChain.callChain.bind(this.internalChain)); + }, + + addSection: function(toggler, element){ + toggler = document.id(toggler); + element = document.id(element); + this.togglers.include(toggler); + this.elements.include(element); + + var togglers = this.togglers, + options = this.options, + test = togglers.contains(toggler), + idx = togglers.indexOf(toggler), + displayer = this.display.pass(idx, this); + + toggler.store('accordion:display', displayer) + .addEvent(options.trigger, displayer); + + if (options.height) element.setStyles({'padding-top': 0, 'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'}); + if (options.width) element.setStyles({'padding-left': 0, 'border-left': 'none', 'padding-right': 0, 'border-right': 'none'}); + + element.fullOpacity = 1; + if (options.fixedWidth) element.fullWidth = options.fixedWidth; + if (options.fixedHeight) element.fullHeight = options.fixedHeight; + element.setStyle('overflow', 'hidden'); + + if (!test) for (var fx in this.effects){ + element.setStyle(fx, 0); + } + return this; + }, + + removeSection: function(toggler, displayIndex){ + var togglers = this.togglers, + idx = togglers.indexOf(toggler), + element = this.elements[idx]; + + var remover = function(){ + togglers.erase(toggler); + this.elements.erase(element); + this.detach(toggler); + }.bind(this); + + if (this.now == idx || displayIndex != null){ + this.display(displayIndex != null ? displayIndex : (idx - 1 >= 0 ? idx - 1 : 0)).chain(remover); + } else { + remover(); + } + return this; + }, + + detach: function(toggler){ + var remove = function(toggler){ + toggler.removeEvent(this.options.trigger, toggler.retrieve('accordion:display')); + }.bind(this); + + if (!toggler) this.togglers.each(remove); + else remove(toggler); + return this; + }, + + display: function(index, useFx){ + if (!this.check(index, useFx)) return this; + + var obj = {}, + elements = this.elements, + options = this.options, + effects = this.effects, + keepOpen = options.keepOpen, + alwaysHide = options.alwaysHide; + + if (useFx == null) useFx = true; + if (typeOf(index) == 'element') index = elements.indexOf(index); + if (index == this.current && !alwaysHide && !keepOpen) return this; + + if (options.resetHeight){ + var prev = elements[this.current]; + if (prev && !this.selfHidden){ + for (var fx in effects) prev.setStyle(fx, prev[effects[fx]]); + } + } + + if (this.timer && options.link == 'chain') return this; + + if (this.current != null) this.previous = this.current; + this.current = index; + this.selfHidden = false; + + elements.each(function(el, i){ + obj[i] = {}; + var hide, isOpen; + if (!keepOpen || i == index){ + if (i == index) isOpen = (el.offsetHeight > 0 && options.height) || (el.offsetWidth > 0 && options.width); + + if (i != index){ + hide = true; + } else if ((alwaysHide || keepOpen) && isOpen){ + hide = true; + this.selfHidden = true; + } + this.fireEvent(hide ? 'background' : 'active', [this.togglers[i], el]); + for (var fx in effects) obj[i][fx] = hide ? 0 : el[effects[fx]]; + if (!useFx && !hide && options.resetHeight) obj[i].height = 'auto'; + } + }, this); + + this.internalChain.clearChain(); + this.internalChain.chain(function(){ + if (options.resetHeight && !this.selfHidden){ + var el = elements[index]; + if (el) el.setStyle('height', 'auto'); + } + }.bind(this)); + + return useFx ? this.start(obj) : this.set(obj).internalChain.callChain(); + } + +}); + + + +/* +--- + +script: Fx.Move.js + +name: Fx.Move + +description: Defines Fx.Move, a class that works with Element.Position.js to transition an element from one location to another. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Fx.Morph + - Element.Position + +provides: [Fx.Move] + +... +*/ + +Fx.Move = new Class({ + + Extends: Fx.Morph, + + options: { + relativeTo: document.body, + position: 'center', + edge: false, + offset: {x: 0, y: 0} + }, + + start: function(destination){ + var element = this.element, + topLeft = element.getStyles('top', 'left'); + if (topLeft.top == 'auto' || topLeft.left == 'auto'){ + element.setPosition(element.getPosition(element.getOffsetParent())); + } + return this.parent(element.position(Object.merge({}, this.options, destination, {returnPos: true}))); + } + +}); + +Element.Properties.move = { + + set: function(options){ + this.get('move').cancel().setOptions(options); + return this; + }, + + get: function(){ + var move = this.retrieve('move'); + if (!move){ + move = new Fx.Move(this, {link: 'cancel'}); + this.store('move', move); + } + return move; + } + +}; + +Element.implement({ + + move: function(options){ + this.get('move').start(options); + return this; + } + +}); + +/* +--- + +script: Fx.Scroll.js + +name: Fx.Scroll + +description: Effect to smoothly scroll any element, including the window. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Fx + - Core/Element.Event + - Core/Element.Dimensions + - MooTools.More + +provides: [Fx.Scroll] + +... +*/ + +(function(){ + +Fx.Scroll = new Class({ + + Extends: Fx, + + options: { + offset: {x: 0, y: 0}, + wheelStops: true + }, + + initialize: function(element, options){ + this.element = this.subject = document.id(element); + this.parent(options); + + if (typeOf(this.element) != 'element') this.element = document.id(this.element.getDocument().body); + + if (this.options.wheelStops){ + var stopper = this.element, + cancel = this.cancel.pass(false, this); + this.addEvent('start', function(){ + stopper.addEvent('mousewheel', cancel); + }, true); + this.addEvent('complete', function(){ + stopper.removeEvent('mousewheel', cancel); + }, true); + } + }, + + set: function(){ + var now = Array.flatten(arguments); + this.element.scrollTo(now[0], now[1]); + return this; + }, + + compute: function(from, to, delta){ + return [0, 1].map(function(i){ + return Fx.compute(from[i], to[i], delta); + }); + }, + + start: function(x, y){ + if (!this.check(x, y)) return this; + var scroll = this.element.getScroll(); + return this.parent([scroll.x, scroll.y], [x, y]); + }, + + calculateScroll: function(x, y){ + var element = this.element, + scrollSize = element.getScrollSize(), + scroll = element.getScroll(), + size = element.getSize(), + offset = this.options.offset, + values = {x: x, y: y}; + + for (var z in values){ + if (!values[z] && values[z] !== 0) values[z] = scroll[z]; + if (typeOf(values[z]) != 'number') values[z] = scrollSize[z] - size[z]; + values[z] += offset[z]; + } + + return [values.x, values.y]; + }, + + toTop: function(){ + return this.start.apply(this, this.calculateScroll(false, 0)); + }, + + toLeft: function(){ + return this.start.apply(this, this.calculateScroll(0, false)); + }, + + toRight: function(){ + return this.start.apply(this, this.calculateScroll('right', false)); + }, + + toBottom: function(){ + return this.start.apply(this, this.calculateScroll(false, 'bottom')); + }, + + toElement: function(el, axes){ + axes = axes ? Array.convert(axes) : ['x', 'y']; + var scroll = isBody(this.element) ? {x: 0, y: 0} : this.element.getScroll(); + var position = Object.map(document.id(el).getPosition(this.element), function(value, axis){ + return axes.contains(axis) ? value + scroll[axis] : false; + }); + return this.start.apply(this, this.calculateScroll(position.x, position.y)); + }, + + toElementEdge: function(el, axes, offset){ + axes = axes ? Array.convert(axes) : ['x', 'y']; + el = document.id(el); + var to = {}, + position = el.getPosition(this.element), + size = el.getSize(), + scroll = this.element.getScroll(), + containerSize = this.element.getSize(), + edge = { + x: position.x + size.x, + y: position.y + size.y + }; + + ['x', 'y'].each(function(axis){ + if (axes.contains(axis)){ + if (edge[axis] > scroll[axis] + containerSize[axis]) to[axis] = edge[axis] - containerSize[axis]; + if (position[axis] < scroll[axis]) to[axis] = position[axis]; + } + if (to[axis] == null) to[axis] = scroll[axis]; + if (offset && offset[axis]) to[axis] = to[axis] + offset[axis]; + }, this); + + if (to.x != scroll.x || to.y != scroll.y) this.start(to.x, to.y); + return this; + }, + + toElementCenter: function(el, axes, offset){ + axes = axes ? Array.convert(axes) : ['x', 'y']; + el = document.id(el); + var to = {}, + position = el.getPosition(this.element), + size = el.getSize(), + scroll = this.element.getScroll(), + containerSize = this.element.getSize(); + + ['x', 'y'].each(function(axis){ + if (axes.contains(axis)){ + to[axis] = position[axis] - (containerSize[axis] - size[axis]) / 2; + } + if (to[axis] == null) to[axis] = scroll[axis]; + if (offset && offset[axis]) to[axis] = to[axis] + offset[axis]; + }, this); + + if (to.x != scroll.x || to.y != scroll.y) this.start(to.x, to.y); + return this; + } + +}); + + + +function isBody(element){ + return (/^(?:body|html)$/i).test(element.tagName); +} + +})(); + +/* +--- + +script: Fx.Slide.js + +name: Fx.Slide + +description: Effect to slide an element in and out of view. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Fx + - Core/Element.Style + - MooTools.More + +provides: [Fx.Slide] + +... +*/ + +Fx.Slide = new Class({ + + Extends: Fx, + + options: { + mode: 'vertical', + wrapper: false, + hideOverflow: true, + resetHeight: false + }, + + initialize: function(element, options){ + element = this.element = this.subject = document.id(element); + this.parent(options); + options = this.options; + + var wrapper = element.retrieve('wrapper'), + styles = element.getStyles('margin', 'position', 'overflow'); + + if (options.hideOverflow) styles = Object.append(styles, {overflow: 'hidden'}); + if (options.wrapper) wrapper = document.id(options.wrapper).setStyles(styles); + + if (!wrapper) wrapper = new Element('div', { + styles: styles + }).wraps(element); + + element.store('wrapper', wrapper).setStyle('margin', 0); + if (element.getStyle('overflow') == 'visible') element.setStyle('overflow', 'hidden'); + + this.now = []; + this.open = true; + this.wrapper = wrapper; + + this.addEvent('complete', function(){ + this.open = (wrapper['offset' + this.layout.capitalize()] != 0); + if (this.open && this.options.resetHeight) wrapper.setStyle('height', ''); + }, true); + }, + + vertical: function(){ + this.margin = 'margin-top'; + this.layout = 'height'; + this.offset = this.element.offsetHeight; + }, + + horizontal: function(){ + this.margin = 'margin-left'; + this.layout = 'width'; + this.offset = this.element.offsetWidth; + }, + + set: function(now){ + this.element.setStyle(this.margin, now[0]); + this.wrapper.setStyle(this.layout, now[1]); + return this; + }, + + compute: function(from, to, delta){ + return [0, 1].map(function(i){ + return Fx.compute(from[i], to[i], delta); + }); + }, + + start: function(how, mode){ + if (!this.check(how, mode)) return this; + this[mode || this.options.mode](); + + var margin = this.element.getStyle(this.margin).toInt(), + layout = this.wrapper.getStyle(this.layout).toInt(), + caseIn = [[margin, layout], [0, this.offset]], + caseOut = [[margin, layout], [-this.offset, 0]], + start; + + switch (how){ + case 'in': start = caseIn; break; + case 'out': start = caseOut; break; + case 'toggle': start = (layout == 0) ? caseIn : caseOut; + } + return this.parent(start[0], start[1]); + }, + + slideIn: function(mode){ + return this.start('in', mode); + }, + + slideOut: function(mode){ + return this.start('out', mode); + }, + + hide: function(mode){ + this[mode || this.options.mode](); + this.open = false; + return this.set([-this.offset, 0]); + }, + + show: function(mode){ + this[mode || this.options.mode](); + this.open = true; + return this.set([0, this.offset]); + }, + + toggle: function(mode){ + return this.start('toggle', mode); + } + +}); + +Element.Properties.slide = { + + set: function(options){ + this.get('slide').cancel().setOptions(options); + return this; + }, + + get: function(){ + var slide = this.retrieve('slide'); + if (!slide){ + slide = new Fx.Slide(this, {link: 'cancel'}); + this.store('slide', slide); + } + return slide; + } + +}; + +Element.implement({ + + slide: function(how, mode){ + how = how || 'toggle'; + var slide = this.get('slide'), toggle; + switch (how){ + case 'hide': slide.hide(mode); break; + case 'show': slide.show(mode); break; + case 'toggle': + var flag = this.retrieve('slide:flag', slide.open); + slide[flag ? 'slideOut' : 'slideIn'](mode); + this.store('slide:flag', !flag); + toggle = true; + break; + default: slide.start(how, mode); + } + if (!toggle) this.eliminate('slide:flag'); + return this; + } + +}); + +/* +--- + +script: Fx.SmoothScroll.js + +name: Fx.SmoothScroll + +description: Class for creating a smooth scrolling effect to all internal links on the page. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Slick.Finder + - Fx.Scroll + +provides: [Fx.SmoothScroll] + +... +*/ + +Fx.SmoothScroll = new Class({ + + Extends: Fx.Scroll, + + options: { + axes: ['x', 'y'] + }, + + initialize: function(options, context){ + context = context || document; + this.doc = context.getDocument(); + this.parent(this.doc, options); + + var win = context.getWindow(), + location = win.location.href.match(/^[^#]*/)[0] + '#', + links = $$(this.options.links || this.doc.links); + + links.each(function(link){ + if (link.href.indexOf(location) != 0) return; + var anchor = link.href.substr(location.length); + if (anchor) this.useLink(link, anchor); + }, this); + + this.addEvent('complete', function(){ + win.location.hash = this.anchor; + this.element.scrollTo(this.to[0], this.to[1]); + }, true); + }, + + useLink: function(link, anchor){ + + link.addEvent('click', function(event){ + var el = document.id(anchor) || this.doc.getElement('a[name=' + anchor + ']'); + if (!el) return; + + event.preventDefault(); + this.toElement(el, this.options.axes).chain(function(){ + this.fireEvent('scrolledTo', [link, el]); + }.bind(this)); + + this.anchor = anchor; + + }.bind(this)); + + return this; + } +}); + +/* +--- + +script: Fx.Sort.js + +name: Fx.Sort + +description: Defines Fx.Sort, a class that reorders lists with a transition. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element.Dimensions + - Fx.Elements + - Element.Measure + +provides: [Fx.Sort] + +... +*/ + +Fx.Sort = new Class({ + + Extends: Fx.Elements, + + options: { + mode: 'vertical' + }, + + initialize: function(elements, options){ + this.parent(elements, options); + this.elements.each(function(el){ + if (el.getStyle('position') == 'static') el.setStyle('position', 'relative'); + }); + this.setDefaultOrder(); + }, + + setDefaultOrder: function(){ + this.currentOrder = this.elements.map(function(el, index){ + return index; + }); + }, + + sort: function(){ + if (!this.check(arguments)) return this; + var newOrder = Array.flatten(arguments); + + var top = 0, + left = 0, + next = {}, + zero = {}, + vert = this.options.mode == 'vertical'; + + var current = this.elements.map(function(el, index){ + var size = el.getComputedSize({styles: ['border', 'padding', 'margin']}); + var val; + if (vert){ + val = { + top: top, + margin: size['margin-top'], + height: size.totalHeight + }; + top += val.height - size['margin-top']; + } else { + val = { + left: left, + margin: size['margin-left'], + width: size.totalWidth + }; + left += val.width; + } + var plane = vert ? 'top' : 'left'; + zero[index] = {}; + var start = el.getStyle(plane).toInt(); + zero[index][plane] = start || 0; + return val; + }, this); + + this.set(zero); + newOrder = newOrder.map(function(i){ return i.toInt(); }); + if (newOrder.length != this.elements.length){ + this.currentOrder.each(function(index){ + if (!newOrder.contains(index)) newOrder.push(index); + }); + if (newOrder.length > this.elements.length) + newOrder.splice(this.elements.length-1, newOrder.length - this.elements.length); + } + var margin = 0; + top = left = 0; + newOrder.each(function(item){ + var newPos = {}; + if (vert){ + newPos.top = top - current[item].top - margin; + top += current[item].height; + } else { + newPos.left = left - current[item].left; + left += current[item].width; + } + margin = margin + current[item].margin; + next[item]=newPos; + }, this); + var mapped = {}; + Array.clone(newOrder).sort().each(function(index){ + mapped[index] = next[index]; + }); + this.start(mapped); + this.currentOrder = newOrder; + + return this; + }, + + rearrangeDOM: function(newOrder){ + newOrder = newOrder || this.currentOrder; + var parent = this.elements[0].getParent(); + var rearranged = []; + this.elements.setStyle('opacity', 0); + //move each element and store the new default order + newOrder.each(function(index){ + rearranged.push(this.elements[index].inject(parent).setStyles({ + top: 0, + left: 0 + })); + }, this); + this.elements.setStyle('opacity', 1); + this.elements = $$(rearranged); + this.setDefaultOrder(); + return this; + }, + + getDefaultOrder: function(){ + return this.elements.map(function(el, index){ + return index; + }); + }, + + getCurrentOrder: function(){ + return this.currentOrder; + }, + + forward: function(){ + return this.sort(this.getDefaultOrder()); + }, + + backward: function(){ + return this.sort(this.getDefaultOrder().reverse()); + }, + + reverse: function(){ + return this.sort(this.currentOrder.reverse()); + }, + + sortByElements: function(elements){ + return this.sort(elements.map(function(el){ + return this.elements.indexOf(el); + }, this)); + }, + + swap: function(one, two){ + if (typeOf(one) == 'element') one = this.elements.indexOf(one); + if (typeOf(two) == 'element') two = this.elements.indexOf(two); + + var newOrder = Array.clone(this.currentOrder); + newOrder[this.currentOrder.indexOf(one)] = two; + newOrder[this.currentOrder.indexOf(two)] = one; + + return this.sort(newOrder); + } + +}); + +/* +--- + +script: Keyboard.js + +name: Keyboard + +description: KeyboardEvents used to intercept events on a class for keyboard and format modifiers in a specific order so as to make alt+shift+c the same as shift+alt+c. + +license: MIT-style license + +authors: + - Perrin Westrich + - Aaron Newton + - Scott Kyle + +requires: + - Core/Events + - Core/Options + - Core/Element.Event + - Element.Event.Pseudos.Keys + +provides: [Keyboard] + +... +*/ + +(function(){ + +var Keyboard = this.Keyboard = new Class({ + + Extends: Events, + + Implements: [Options], + + options: {/* + onActivate: function(){}, + onDeactivate: function(){},*/ + defaultEventType: 'keydown', + active: false, + manager: null, + events: {}, + nonParsedEvents: ['activate', 'deactivate', 'onactivate', 'ondeactivate', 'changed', 'onchanged'] + }, + + initialize: function(options){ + if (options && options.manager){ + this._manager = options.manager; + delete options.manager; + } + this.setOptions(options); + this._setup(); + }, + + addEvent: function(type, fn, internal){ + return this.parent(Keyboard.parse(type, this.options.defaultEventType, this.options.nonParsedEvents), fn, internal); + }, + + removeEvent: function(type, fn){ + return this.parent(Keyboard.parse(type, this.options.defaultEventType, this.options.nonParsedEvents), fn); + }, + + toggleActive: function(){ + return this[this.isActive() ? 'deactivate' : 'activate'](); + }, + + activate: function(instance){ + if (instance){ + if (instance.isActive()) return this; + //if we're stealing focus, store the last keyboard to have it so the relinquish command works + if (this._activeKB && instance != this._activeKB){ + this.previous = this._activeKB; + this.previous.fireEvent('deactivate'); + } + //if we're enabling a child, assign it so that events are now passed to it + this._activeKB = instance.fireEvent('activate'); + Keyboard.manager.fireEvent('changed'); + } else if (this._manager){ + //else we're enabling ourselves, we must ask our parent to do it for us + this._manager.activate(this); + } + return this; + }, + + isActive: function(){ + return this._manager ? (this._manager._activeKB == this) : (Keyboard.manager == this); + }, + + deactivate: function(instance){ + if (instance){ + if (instance === this._activeKB){ + this._activeKB = null; + instance.fireEvent('deactivate'); + Keyboard.manager.fireEvent('changed'); + } + } else if (this._manager){ + this._manager.deactivate(this); + } + return this; + }, + + relinquish: function(){ + if (this.isActive() && this._manager && this._manager.previous) this._manager.activate(this._manager.previous); + else this.deactivate(); + return this; + }, + + //management logic + manage: function(instance){ + if (instance._manager) instance._manager.drop(instance); + this._instances.push(instance); + instance._manager = this; + if (!this._activeKB) this.activate(instance); + return this; + }, + + drop: function(instance){ + instance.relinquish(); + this._instances.erase(instance); + if (this._activeKB == instance){ + if (this.previous && this._instances.contains(this.previous)) this.activate(this.previous); + else this._activeKB = this._instances[0]; + } + return this; + }, + + trace: function(){ + Keyboard.trace(this); + }, + + each: function(fn){ + Keyboard.each(this, fn); + }, + + /* + PRIVATE METHODS + */ + + _instances: [], + + _disable: function(instance){ + if (this._activeKB == instance) this._activeKB = null; + }, + + _setup: function(){ + this.addEvents(this.options.events); + //if this is the root manager, nothing manages it + if (Keyboard.manager && !this._manager) Keyboard.manager.manage(this); + if (this.options.active) this.activate(); + else this.relinquish(); + }, + + _handle: function(event, type){ + //Keyboard.stop(event) prevents key propagation + if (event.preventKeyboardPropagation) return; + + var bubbles = !!this._manager; + if (bubbles && this._activeKB){ + this._activeKB._handle(event, type); + if (event.preventKeyboardPropagation) return; + } + this.fireEvent(type, event); + + if (!bubbles && this._activeKB) this._activeKB._handle(event, type); + } + +}); + +var parsed = {}; +var modifiers = ['shift', 'control', 'alt', 'meta']; +var regex = /^(?:shift|control|ctrl|alt|meta)$/; + +Keyboard.parse = function(type, eventType, ignore){ + if (ignore && ignore.contains(type.toLowerCase())) return type; + + type = type.toLowerCase().replace(/^(keyup|keydown):/, function($0, $1){ + eventType = $1; + return ''; + }); + + if (!parsed[type]){ + if (type != '+'){ + var key, mods = {}; + type.split('+').each(function(part){ + if (regex.test(part)) mods[part] = true; + else key = part; + }); + + mods.control = mods.control || mods.ctrl; // allow both control and ctrl + + var keys = []; + modifiers.each(function(mod){ + if (mods[mod]) keys.push(mod); + }); + + if (key) keys.push(key); + parsed[type] = keys.join('+'); + } else { + parsed[type] = type; + } + } + + return eventType + ':keys(' + parsed[type] + ')'; +}; + +Keyboard.each = function(keyboard, fn){ + var current = keyboard || Keyboard.manager; + while (current){ + fn(current); + current = current._activeKB; + } +}; + +Keyboard.stop = function(event){ + event.preventKeyboardPropagation = true; +}; + +Keyboard.manager = new Keyboard({ + active: true +}); + +Keyboard.trace = function(keyboard){ + keyboard = keyboard || Keyboard.manager; + var hasConsole = window.console && console.log; + if (hasConsole) console.log('the following items have focus: '); + Keyboard.each(keyboard, function(current){ + if (hasConsole) console.log(document.id(current.widget) || current.wiget || current); + }); +}; + +var handler = function(event){ + var keys = []; + modifiers.each(function(mod){ + if (event[mod]) keys.push(mod); + }); + + if (!regex.test(event.key)) keys.push(event.key); + Keyboard.manager._handle(event, event.type + ':keys(' + keys.join('+') + ')'); +}; + +document.addEvents({ + 'keyup': handler, + 'keydown': handler +}); + +})(); + +/* +--- + +script: Keyboard.Extras.js + +name: Keyboard.Extras + +description: Enhances Keyboard by adding the ability to name and describe keyboard shortcuts, and the ability to grab shortcuts by name and bind the shortcut to different keys. + +license: MIT-style license + +authors: + - Perrin Westrich + +requires: + - Keyboard + - MooTools.More + +provides: [Keyboard.Extras] + +... +*/ +Keyboard.prototype.options.nonParsedEvents.combine(['rebound', 'onrebound']); + +Keyboard.implement({ + + /* + shortcut should be in the format of: + { + 'keys': 'shift+s', // the default to add as an event. + 'description': 'blah blah blah', // a brief description of the functionality. + 'handler': function(){} // the event handler to run when keys are pressed. + } + */ + addShortcut: function(name, shortcut){ + this._shortcuts = this._shortcuts || []; + this._shortcutIndex = this._shortcutIndex || {}; + + shortcut.getKeyboard = Function.convert(this); + shortcut.name = name; + this._shortcutIndex[name] = shortcut; + this._shortcuts.push(shortcut); + if (shortcut.keys) this.addEvent(shortcut.keys, shortcut.handler); + return this; + }, + + addShortcuts: function(obj){ + for (var name in obj) this.addShortcut(name, obj[name]); + return this; + }, + + removeShortcut: function(name){ + var shortcut = this.getShortcut(name); + if (shortcut && shortcut.keys){ + this.removeEvent(shortcut.keys, shortcut.handler); + delete this._shortcutIndex[name]; + this._shortcuts.erase(shortcut); + } + return this; + }, + + removeShortcuts: function(names){ + names.each(this.removeShortcut, this); + return this; + }, + + getShortcuts: function(){ + return this._shortcuts || []; + }, + + getShortcut: function(name){ + return (this._shortcutIndex || {})[name]; + } + +}); + +Keyboard.rebind = function(newKeys, shortcuts){ + Array.convert(shortcuts).each(function(shortcut){ + shortcut.getKeyboard().removeEvent(shortcut.keys, shortcut.handler); + shortcut.getKeyboard().addEvent(newKeys, shortcut.handler); + shortcut.keys = newKeys; + shortcut.getKeyboard().fireEvent('rebound'); + }); +}; + + +Keyboard.getActiveShortcuts = function(keyboard){ + var activeKBS = [], activeSCS = []; + Keyboard.each(keyboard, [].push.bind(activeKBS)); + activeKBS.each(function(kb){ activeSCS.extend(kb.getShortcuts()); }); + return activeSCS; +}; + +Keyboard.getShortcut = function(name, keyboard, opts){ + opts = opts || {}; + var shortcuts = opts.many ? [] : null, + set = opts.many ? function(kb){ + var shortcut = kb.getShortcut(name); + if (shortcut) shortcuts.push(shortcut); + } : function(kb){ + if (!shortcuts) shortcuts = kb.getShortcut(name); + }; + Keyboard.each(keyboard, set); + return shortcuts; +}; + +Keyboard.getShortcuts = function(name, keyboard){ + return Keyboard.getShortcut(name, keyboard, { many: true }); +}; + +/* +--- + +script: HtmlTable.js + +name: HtmlTable + +description: Builds table elements with methods to add rows. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Options + - Core/Events + - Class.Occlude + +provides: [HtmlTable] + +... +*/ +(function(){ + +var HtmlTable = this.HtmlTable = new Class({ + + Implements: [Options, Events, Class.Occlude], + + options: { + properties: { + cellpadding: 0, + cellspacing: 0, + border: 0 + }, + rows: [], + headers: [], + footers: [] + }, + + property: 'HtmlTable', + + initialize: function(){ + var params = Array.link(arguments, {options: Type.isObject, table: Type.isElement, id: Type.isString}); + this.setOptions(params.options); + if (!params.table && params.id) params.table = document.id(params.id); + this.element = params.table || new Element('table', this.options.properties); + if (this.occlude()) return this.occluded; + this.build(); + }, + + build: function(){ + this.element.store('HtmlTable', this); + + this.body = document.id(this.element.tBodies[0]) || new Element('tbody').inject(this.element); + $$(this.body.rows); + + if (this.options.headers.length) this.setHeaders(this.options.headers); + else this.thead = document.id(this.element.tHead); + + if (this.thead) this.head = this.getHead(); + if (this.options.footers.length) this.setFooters(this.options.footers); + + this.tfoot = document.id(this.element.tFoot); + if (this.tfoot) this.foot = document.id(this.tfoot.rows[0]); + + this.options.rows.each(function(row){ + this.push(row); + }, this); + }, + + toElement: function(){ + return this.element; + }, + + empty: function(){ + this.body.empty(); + return this; + }, + + set: function(what, items){ + var target = (what == 'headers') ? 'tHead' : 'tFoot', + lower = target.toLowerCase(); + + this[lower] = (document.id(this.element[target]) || new Element(lower).inject(this.element, 'top')).empty(); + var data = this.push(items, {}, this[lower], what == 'headers' ? 'th' : 'td'); + + if (what == 'headers') this.head = this.getHead(); + else this.foot = this.getHead(); + + return data; + }, + + getHead: function(){ + var rows = this.thead.rows; + return rows.length > 1 ? $$(rows) : rows.length ? document.id(rows[0]) : false; + }, + + setHeaders: function(headers){ + this.set('headers', headers); + return this; + }, + + setFooters: function(footers){ + this.set('footers', footers); + return this; + }, + + update: function(tr, row, tag){ + var tds = tr.getChildren(tag || 'td'), last = tds.length - 1; + + row.each(function(data, index){ + var td = tds[index] || new Element(tag || 'td').inject(tr), + content = ((data && Object.prototype.hasOwnProperty.call(data, 'content')) ? data.content : '') || data, + type = typeOf(content); + + if (data && Object.prototype.hasOwnProperty.call(data, 'properties')) td.set(data.properties); + if (/(element(s?)|array|collection)/.test(type)) td.empty().adopt(content); + else td.set('html', content); + + if (index > last) tds.push(td); + else tds[index] = td; + }); + + return { + tr: tr, + tds: tds + }; + }, + + push: function(row, rowProperties, target, tag, where){ + if (typeOf(row) == 'element' && row.get('tag') == 'tr'){ + row.inject(target || this.body, where); + return { + tr: row, + tds: row.getChildren('td') + }; + } + return this.update(new Element('tr', rowProperties).inject(target || this.body, where), row, tag); + }, + + pushMany: function(rows, rowProperties, target, tag, where){ + return rows.map(function(row){ + return this.push(row, rowProperties, target, tag, where); + }, this); + } + +}); + +})(); + + +['adopt', 'inject', 'wraps', 'grab', 'replaces', 'dispose'].each(function(method){ + HtmlTable.implement(method, function(){ + this.element[method].apply(this.element, arguments); + return this; + }); +}); + + + +/* +--- + +script: HtmlTable.Select.js + +name: HtmlTable.Select + +description: Builds a stripy, sortable table with methods to add rows. Rows can be selected with the mouse or keyboard navigation. + +license: MIT-style license + +authors: + - Harald Kirschner + - Aaron Newton + +requires: + - Keyboard + - Keyboard.Extras + - HtmlTable + - Class.refactor + - Element.Delegation.Pseudo + - Element.Shortcuts + +provides: [HtmlTable.Select] + +... +*/ + +HtmlTable = Class.refactor(HtmlTable, { + + options: { + /*onRowFocus: function(){}, + onRowUnfocus: function(){},*/ + useKeyboard: true, + classRowSelected: 'table-tr-selected', + classRowHovered: 'table-tr-hovered', + classSelectable: 'table-selectable', + shiftForMultiSelect: true, + allowMultiSelect: true, + selectable: false, + selectHiddenRows: false + }, + + initialize: function(){ + this.previous.apply(this, arguments); + if (this.occluded) return this.occluded; + + this.selectedRows = new Elements(); + + if (!this.bound) this.bound = {}; + this.bound.mouseleave = this.mouseleave.bind(this); + this.bound.clickRow = this.clickRow.bind(this); + this.bound.activateKeyboard = function(){ + if (this.keyboard && this.selectEnabled) this.keyboard.activate(); + }.bind(this); + + if (this.options.selectable) this.enableSelect(); + }, + + empty: function(){ + if (this.body.rows.length) this.selectNone(); + return this.previous(); + }, + + enableSelect: function(){ + this.selectEnabled = true; + this.attachSelects(); + this.element.addClass(this.options.classSelectable); + return this; + }, + + disableSelect: function(){ + this.selectEnabled = false; + this.attachSelects(false); + this.element.removeClass(this.options.classSelectable); + return this; + }, + + push: function(){ + var ret = this.previous.apply(this, arguments); + this.updateSelects(); + return ret; + }, + + toggleRow: function(row){ + return this[(this.isSelected(row) ? 'de' : '') + 'selectRow'](row); + }, + + selectRow: function(row, _nocheck){ + //private variable _nocheck: boolean whether or not to confirm the row is in the table body + //added here for optimization when selecting ranges + if (this.isSelected(row) || (!_nocheck && !this.body.getChildren().contains(row))) return; + if (!this.options.allowMultiSelect) this.selectNone(); + + if (!this.isSelected(row)){ + this.selectedRows.push(row); + row.addClass(this.options.classRowSelected); + this.fireEvent('rowFocus', [row, this.selectedRows]); + this.fireEvent('stateChanged'); + } + + this.focused = row; + document.clearSelection(); + + return this; + }, + + isSelected: function(row){ + return this.selectedRows.contains(row); + }, + + getSelected: function(){ + return this.selectedRows; + }, + + serialize: function(){ + var previousSerialization = this.previous.apply(this, arguments) || {}; + if (this.options.selectable){ + previousSerialization.selectedRows = this.selectedRows.map(function(row){ + return Array.indexOf(this.body.rows, row); + }.bind(this)); + } + return previousSerialization; + }, + + restore: function(tableState){ + if (this.options.selectable && tableState.selectedRows){ + tableState.selectedRows.each(function(index){ + this.selectRow(this.body.rows[index]); + }.bind(this)); + } + this.previous.apply(this, arguments); + }, + + deselectRow: function(row, _nocheck){ + if (!this.isSelected(row) || (!_nocheck && !this.body.getChildren().contains(row))) return; + + this.selectedRows = new Elements(Array.convert(this.selectedRows).erase(row)); + row.removeClass(this.options.classRowSelected); + this.fireEvent('rowUnfocus', [row, this.selectedRows]); + this.fireEvent('stateChanged'); + return this; + }, + + selectAll: function(selectNone){ + if (!selectNone && !this.options.allowMultiSelect) return; + this.selectRange(0, this.body.rows.length, selectNone); + return this; + }, + + selectNone: function(){ + return this.selectAll(true); + }, + + selectRange: function(startRow, endRow, _deselect){ + if (!this.options.allowMultiSelect && !_deselect) return; + var method = _deselect ? 'deselectRow' : 'selectRow', + rows = Array.clone(this.body.rows); + + if (typeOf(startRow) == 'element') startRow = rows.indexOf(startRow); + if (typeOf(endRow) == 'element') endRow = rows.indexOf(endRow); + endRow = endRow < rows.length - 1 ? endRow : rows.length - 1; + + if (endRow < startRow){ + var tmp = startRow; + startRow = endRow; + endRow = tmp; + } + + for (var i = startRow; i <= endRow; i++){ + if (this.options.selectHiddenRows || rows[i].isDisplayed()) this[method](rows[i], true); + } + + return this; + }, + + deselectRange: function(startRow, endRow){ + this.selectRange(startRow, endRow, true); + }, + +/* + Private methods: +*/ + + enterRow: function(row){ + if (this.hovered) this.hovered = this.leaveRow(this.hovered); + this.hovered = row.addClass(this.options.classRowHovered); + }, + + leaveRow: function(row){ + row.removeClass(this.options.classRowHovered); + }, + + updateSelects: function(){ + Array.each(this.body.rows, function(row){ + var binders = row.retrieve('binders'); + if (!binders && !this.selectEnabled) return; + if (!binders){ + binders = { + mouseenter: this.enterRow.pass([row], this), + mouseleave: this.leaveRow.pass([row], this) + }; + row.store('binders', binders); + } + if (this.selectEnabled) row.addEvents(binders); + else row.removeEvents(binders); + }, this); + }, + + shiftFocus: function(offset, event){ + if (!this.focused) return this.selectRow(this.body.rows[0], event); + var to = this.getRowByOffset(offset, this.options.selectHiddenRows); + if (to === null || this.focused == this.body.rows[to]) return this; + this.toggleRow(this.body.rows[to], event); + }, + + clickRow: function(event, row){ + var selecting = (event.shift || event.meta || event.control) && this.options.shiftForMultiSelect; + if (!selecting && !(event.rightClick && this.isSelected(row) && this.options.allowMultiSelect)) this.selectNone(); + + if (event.rightClick) this.selectRow(row); + else this.toggleRow(row); + + if (event.shift){ + this.selectRange(this.rangeStart || this.body.rows[0], row, this.rangeStart ? !this.isSelected(row) : true); + this.focused = row; + } + this.rangeStart = row; + }, + + getRowByOffset: function(offset, includeHiddenRows){ + if (!this.focused) return 0; + var index = Array.indexOf(this.body.rows, this.focused); + if ((index == 0 && offset < 0) || (index == this.body.rows.length -1 && offset > 0)) return null; + if (includeHiddenRows){ + index += offset; + } else { + var limit = 0, + count = 0; + if (offset > 0){ + while (count < offset && index < this.body.rows.length -1){ + if (this.body.rows[++index].isDisplayed()) count++; + } + } else { + while (count > offset && index > 0){ + if (this.body.rows[--index].isDisplayed()) count--; + } + } + } + return index; + }, + + attachSelects: function(attach){ + attach = attach != null ? attach : true; + + var method = attach ? 'addEvents' : 'removeEvents'; + this.element[method]({ + mouseleave: this.bound.mouseleave, + click: this.bound.activateKeyboard + }); + + this.body[method]({ + 'click:relay(tr)': this.bound.clickRow, + 'contextmenu:relay(tr)': this.bound.clickRow + }); + + if (this.options.useKeyboard || this.keyboard){ + if (!this.keyboard) this.keyboard = new Keyboard(); + if (!this.selectKeysDefined){ + this.selectKeysDefined = true; + var timer, held; + + var move = function(offset){ + var mover = function(e){ + clearTimeout(timer); + e.preventDefault(); + var to = this.body.rows[this.getRowByOffset(offset, this.options.selectHiddenRows)]; + if (e.shift && to && this.isSelected(to)){ + this.deselectRow(this.focused); + this.focused = to; + } else { + if (to && (!this.options.allowMultiSelect || !e.shift)){ + this.selectNone(); + } + this.shiftFocus(offset, e); + } + + if (held){ + timer = mover.delay(100, this, e); + } else { + timer = (function(){ + held = true; + mover(e); + }).delay(400); + } + }.bind(this); + return mover; + }.bind(this); + + var clear = function(){ + clearTimeout(timer); + held = false; + }; + + this.keyboard.addEvents({ + 'keydown:shift+up': move(-1), + 'keydown:shift+down': move(1), + 'keyup:shift+up': clear, + 'keyup:shift+down': clear, + 'keyup:up': clear, + 'keyup:down': clear + }); + + var shiftHint = ''; + if (this.options.allowMultiSelect && this.options.shiftForMultiSelect && this.options.useKeyboard){ + shiftHint = ' (Shift multi-selects).'; + } + + this.keyboard.addShortcuts({ + 'Select Previous Row': { + keys: 'up', + shortcut: 'up arrow', + handler: move(-1), + description: 'Select the previous row in the table.' + shiftHint + }, + 'Select Next Row': { + keys: 'down', + shortcut: 'down arrow', + handler: move(1), + description: 'Select the next row in the table.' + shiftHint + } + }); + + } + this.keyboard[attach ? 'activate' : 'deactivate'](); + } + this.updateSelects(); + }, + + mouseleave: function(){ + if (this.hovered) this.leaveRow(this.hovered); + } + +}); + +/* +--- + +script: HtmlTable.Sort.js + +name: HtmlTable.Sort + +description: Builds a stripy, sortable table with methods to add rows. + +license: MIT-style license + +authors: + - Harald Kirschner + - Aaron Newton + - Jacob Thornton + +requires: + - Core/Hash + - HtmlTable + - Class.refactor + - Element.Delegation.Pseudo + - String.Extras + - Date + +provides: [HtmlTable.Sort] + +... +*/ +(function(){ + +var readOnlyNess = document.createElement('table'); +try { + readOnlyNess.innerHTML = ''; + readOnlyNess = readOnlyNess.childNodes.length === 0; +} catch (e){ + readOnlyNess = true; +} + +HtmlTable = Class.refactor(HtmlTable, { + + options: {/* + onSort: function(){}, */ + sortIndex: 0, + sortReverse: false, + parsers: [], + defaultParser: 'string', + classSortable: 'table-sortable', + classHeadSort: 'table-th-sort', + classHeadSortRev: 'table-th-sort-rev', + classNoSort: 'table-th-nosort', + classGroupHead: 'table-tr-group-head', + classGroup: 'table-tr-group', + classCellSort: 'table-td-sort', + classSortSpan: 'table-th-sort-span', + sortable: false, + thSelector: 'th' + }, + + initialize: function(){ + this.previous.apply(this, arguments); + if (this.occluded) return this.occluded; + this.sorted = {index: null, dir: 1}; + if (!this.bound) this.bound = {}; + this.bound.headClick = this.headClick.bind(this); + this.sortSpans = new Elements(); + if (this.options.sortable){ + this.enableSort(); + if (this.options.sortIndex != null) this.sort(this.options.sortIndex, this.options.sortReverse); + } + }, + + attachSorts: function(attach){ + this.detachSorts(); + if (attach !== false) this.element.addEvent('click:relay(' + this.options.thSelector + ')', this.bound.headClick); + }, + + detachSorts: function(){ + this.element.removeEvents('click:relay(' + this.options.thSelector + ')'); + }, + + setHeaders: function(){ + this.previous.apply(this, arguments); + if (this.sortable) this.setParsers(); + }, + + setParsers: function(){ + this.parsers = this.detectParsers(); + }, + + detectParsers: function(){ + return this.head && this.head.getElements(this.options.thSelector).flatten().map(this.detectParser, this); + }, + + detectParser: function(cell, index){ + if (cell.hasClass(this.options.classNoSort) || cell.retrieve('htmltable-parser')) return cell.retrieve('htmltable-parser'); + var thDiv = new Element('div'); + thDiv.adopt(cell.childNodes).inject(cell); + var sortSpan = new Element('span', {'class': this.options.classSortSpan}).inject(thDiv, 'top'); + this.sortSpans.push(sortSpan); + var parser = this.options.parsers[index], + rows = this.body.rows, + cancel; + switch (typeOf(parser)){ + case 'function': parser = {convert: parser}; cancel = true; break; + case 'string': parser = parser; cancel = true; break; + } + if (!cancel){ + HtmlTable.ParserPriority.some(function(parserName){ + var current = HtmlTable.Parsers[parserName], + match = current.match; + if (!match) return false; + for (var i = 0, j = rows.length; i < j; i++){ + var cell = document.id(rows[i].cells[index]), + text = cell ? cell.get('html').clean() : ''; + if (text && match.test(text)){ + parser = current; + return true; + } + } + }); + } + if (!parser) parser = this.options.defaultParser; + cell.store('htmltable-parser', parser); + return parser; + }, + + headClick: function(event, el){ + if (!this.head || el.hasClass(this.options.classNoSort)) return; + return this.sort(Array.indexOf(this.head.getElements(this.options.thSelector).flatten(), el) % this.body.rows[0].cells.length); + }, + + serialize: function(){ + var previousSerialization = this.previous.apply(this, arguments) || {}; + if (this.options.sortable){ + previousSerialization.sortIndex = this.sorted.index; + previousSerialization.sortReverse = this.sorted.reverse; + } + return previousSerialization; + }, + + restore: function(tableState){ + if (this.options.sortable && tableState.sortIndex){ + this.sort(tableState.sortIndex, tableState.sortReverse); + } + this.previous.apply(this, arguments); + }, + + setSortedState: function(index, reverse){ + if (reverse != null) this.sorted.reverse = reverse; + else if (this.sorted.index == index) this.sorted.reverse = !this.sorted.reverse; + else this.sorted.reverse = this.sorted.index == null; + + if (index != null) this.sorted.index = index; + }, + + setHeadSort: function(sorted){ + var head = $$(!this.head.length ? this.head.cells[this.sorted.index] : this.head.map(function(row){ + return row.getElements(this.options.thSelector)[this.sorted.index]; + }, this).clean()); + if (!head.length) return; + if (sorted){ + head.addClass(this.options.classHeadSort); + if (this.sorted.reverse) head.addClass(this.options.classHeadSortRev); + else head.removeClass(this.options.classHeadSortRev); + } else { + head.removeClass(this.options.classHeadSort).removeClass(this.options.classHeadSortRev); + } + }, + + setRowSort: function(data, pre){ + var count = data.length, + body = this.body, + group, + rowIndex; + + while (count){ + var item = data[--count], + position = item.position, + row = body.rows[position]; + + if (row.disabled) continue; + if (!pre){ + group = this.setGroupSort(group, row, item); + this.setRowStyle(row, count); + } + body.appendChild(row); + + for (rowIndex = 0; rowIndex < count; rowIndex++){ + if (data[rowIndex].position > position) data[rowIndex].position--; + } + } + }, + + setRowStyle: function(row, i){ + this.previous(row, i); + row.cells[this.sorted.index].addClass(this.options.classCellSort); + }, + + setGroupSort: function(group, row, item){ + if (group == item.value) row.removeClass(this.options.classGroupHead).addClass(this.options.classGroup); + else row.removeClass(this.options.classGroup).addClass(this.options.classGroupHead); + return item.value; + }, + + getParser: function(){ + var parser = this.parsers[this.sorted.index]; + return typeOf(parser) == 'string' ? HtmlTable.Parsers[parser] : parser; + }, + + sort: function(index, reverse, pre, sortFunction){ + if (!this.head) return; + + if (!pre){ + this.clearSort(); + this.setSortedState(index, reverse); + this.setHeadSort(true); + } + + var parser = this.getParser(); + if (!parser) return; + + var rel; + if (!readOnlyNess){ + rel = this.body.getParent(); + this.body.dispose(); + } + + var data = this.parseData(parser).sort(sortFunction ? sortFunction : function(a, b){ + if (a.value === b.value) return 0; + return a.value > b.value ? 1 : -1; + }); + + var reversed = this.sorted.reverse == (parser == HtmlTable.Parsers['input-checked']); + if (reversed) data.reverse(true); + this.setRowSort(data, pre); + + if (rel) rel.grab(this.body); + this.fireEvent('stateChanged'); + return this.fireEvent('sort', [this.body, this.sorted.index, reversed ? 'asc' : 'desc']); + }, + + parseData: function(parser){ + return Array.map(this.body.rows, function(row, i){ + var value = parser.convert.call(document.id(row.cells[this.sorted.index])); + return { + position: i, + value: value + }; + }, this); + }, + + clearSort: function(){ + this.setHeadSort(false); + this.body.getElements('td').removeClass(this.options.classCellSort); + }, + + reSort: function(){ + if (this.sortable) this.sort.call(this, this.sorted.index, this.sorted.reverse); + return this; + }, + + enableSort: function(){ + this.element.addClass(this.options.classSortable); + this.attachSorts(true); + this.setParsers(); + this.sortable = true; + return this; + }, + + disableSort: function(){ + this.element.removeClass(this.options.classSortable); + this.attachSorts(false); + this.sortSpans.each(function(span){ + span.destroy(); + }); + this.sortSpans.empty(); + this.sortable = false; + return this; + } + +}); + +HtmlTable.ParserPriority = ['date', 'input-checked', 'input-value', 'float', 'number']; + +HtmlTable.Parsers = { + + 'date': { + match: /^\d{2}[-\/ ]\d{2}[-\/ ]\d{2,4}$/, + convert: function(){ + var d = Date.parse(this.get('text').stripTags()); + return (typeOf(d) == 'date') ? d.format('db') : ''; + }, + type: 'date' + }, + 'input-checked': { + match: / type="(radio|checkbox)"/, + convert: function(){ + return this.getElement('input').checked; + } + }, + 'input-value': { + match: / (size[z] + pos[z]) && scroll[z] + size[z] != scrollSize[z]){ + change[z] = (this.page[z] - size[z] + bottom - pos[z]) * this.options.velocity; + } + change[z] = change[z].round(); + } + if (change.y || change.x) this.fireEvent('change', [scroll.x + change.x, scroll.y + change.y]); + } + +}); + +})(); + + +/* +--- + +script: Tips.js + +name: Tips + +description: Class for creating nice tips that follow the mouse cursor when hovering an element. + +license: MIT-style license + +authors: + - Valerio Proietti + - Christoph Pojer + - Luis Merino + +requires: + - Core/Options + - Core/Events + - Core/Element.Event + - Core/Element.Style + - Core/Element.Dimensions + - MooTools.More + +provides: [Tips] + +... +*/ + +(function(){ + +var read = function(option, element){ + return (option) ? (typeOf(option) == 'function' ? option(element) : element.get(option)) : ''; +}; + +var Tips = this.Tips = new Class({ + + Implements: [Events, Options], + + options: {/* + id: null, + onAttach: function(element){}, + onDetach: function(element){}, + onBound: function(coords){},*/ + onShow: function(){ + this.tip.setStyle('display', 'block'); + }, + onHide: function(){ + this.tip.setStyle('display', 'none'); + }, + title: 'title', + text: function(element){ + return element.get('rel') || element.get('href'); + }, + showDelay: 100, + hideDelay: 100, + className: 'tip-wrap', + offset: {x: 16, y: 16}, + windowPadding: {x:0, y:0}, + fixed: false, + waiAria: true, + hideEmpty: false + }, + + initialize: function(){ + var params = Array.link(arguments, { + options: Type.isObject, + elements: function(obj){ + return obj != null; + } + }); + this.setOptions(params.options); + if (params.elements) this.attach(params.elements); + this.container = new Element('div', {'class': 'tip'}); + + if (this.options.id){ + this.container.set('id', this.options.id); + if (this.options.waiAria) this.attachWaiAria(); + } + }, + + toElement: function(){ + if (this.tip) return this.tip; + + this.tip = new Element('div', { + 'class': this.options.className, + styles: { + position: 'absolute', + top: 0, + left: 0, + display: 'none' + } + }).adopt( + new Element('div', {'class': 'tip-top'}), + this.container, + new Element('div', {'class': 'tip-bottom'}) + ); + + return this.tip; + }, + + attachWaiAria: function(){ + var id = this.options.id; + this.container.set('role', 'tooltip'); + + if (!this.waiAria){ + this.waiAria = { + show: function(element){ + if (id) element.set('aria-describedby', id); + this.container.set('aria-hidden', 'false'); + }, + hide: function(element){ + if (id) element.erase('aria-describedby'); + this.container.set('aria-hidden', 'true'); + } + }; + } + this.addEvents(this.waiAria); + }, + + detachWaiAria: function(){ + if (this.waiAria){ + this.container.erase('role'); + this.container.erase('aria-hidden'); + this.removeEvents(this.waiAria); + } + }, + + attach: function(elements){ + $$(elements).each(function(element){ + var title = read(this.options.title, element), + text = read(this.options.text, element); + + element.set('title', '').store('tip:native', title).retrieve('tip:title', title); + element.retrieve('tip:text', text); + this.fireEvent('attach', [element]); + + var events = ['enter', 'leave']; + if (!this.options.fixed) events.push('move'); + + events.each(function(value){ + var event = element.retrieve('tip:' + value); + if (!event) event = function(event){ + this['element' + value.capitalize()].apply(this, [event, element]); + }.bind(this); + + element.store('tip:' + value, event).addEvent('mouse' + value, event); + }, this); + }, this); + + return this; + }, + + detach: function(elements){ + $$(elements).each(function(element){ + ['enter', 'leave', 'move'].each(function(value){ + element.removeEvent('mouse' + value, element.retrieve('tip:' + value)).eliminate('tip:' + value); + }); + + this.fireEvent('detach', [element]); + + if (this.options.title == 'title'){ // This is necessary to check if we can revert the title + var original = element.retrieve('tip:native'); + if (original) element.set('title', original); + } + }, this); + + return this; + }, + + elementEnter: function(event, element){ + clearTimeout(this.timer); + this.timer = (function(){ + this.container.empty(); + var showTip = !this.options.hideEmpty; + ['title', 'text'].each(function(value){ + var content = element.retrieve('tip:' + value); + var div = this['_' + value + 'Element'] = new Element('div', { + 'class': 'tip-' + value + }).inject(this.container); + if (content){ + this.fill(div, content); + showTip = true; + } + }, this); + if (showTip){ + this.show(element); + } else { + this.hide(element); + } + this.position((this.options.fixed) ? {page: element.getPosition()} : event); + }).delay(this.options.showDelay, this); + }, + + elementLeave: function(event, element){ + clearTimeout(this.timer); + this.timer = this.hide.delay(this.options.hideDelay, this, element); + this.fireForParent(event, element); + }, + + setTitle: function(title){ + if (this._titleElement){ + this._titleElement.empty(); + this.fill(this._titleElement, title); + } + return this; + }, + + setText: function(text){ + if (this._textElement){ + this._textElement.empty(); + this.fill(this._textElement, text); + } + return this; + }, + + fireForParent: function(event, element){ + element = element.getParent(); + if (!element || element == document.body) return; + if (element.retrieve('tip:enter')) element.fireEvent('mouseenter', event); + else this.fireForParent(event, element); + }, + + elementMove: function(event, element){ + this.position(event); + }, + + position: function(event){ + if (!this.tip) document.id(this); + + var size = window.getSize(), scroll = window.getScroll(), + tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight}, + props = {x: 'left', y: 'top'}, + bounds = {y: false, x2: false, y2: false, x: false}, + obj = {}; + + for (var z in props){ + obj[props[z]] = event.page[z] + this.options.offset[z]; + if (obj[props[z]] < 0) bounds[z] = true; + if ((obj[props[z]] + tip[z] - scroll[z]) > size[z] - this.options.windowPadding[z]){ + obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z]; + bounds[z+'2'] = true; + } + } + + this.fireEvent('bound', bounds); + this.tip.setStyles(obj); + }, + + fill: function(element, contents){ + if (typeof contents == 'string') element.set('html', contents); + else element.adopt(contents); + }, + + show: function(element){ + if (!this.tip) document.id(this); + if (!this.tip.getParent()) this.tip.inject(document.body); + this.fireEvent('show', [this.tip, element]); + }, + + hide: function(element){ + if (!this.tip) document.id(this); + this.fireEvent('hide', [this.tip, element]); + } + +}); + +})(); + +/* +--- +name: Locale.CH.Number +description: Number messages for Switzerland. +license: MIT-style license +authors: + - Kim D. Jeker +requires: + - Locale +provides: [Locale.CH.Number] +... +*/ + +Locale.define('CH', 'Number', { + + decimal: ',', + group: '\'', + + currency: { + decimal: '.', + suffix: ' CHF' + } + +}); + +/* +--- + +name: Locale.EU.Number + +description: Number messages for Europe. + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: + - Locale + +provides: [Locale.EU.Number] + +... +*/ + +Locale.define('EU', 'Number', { + + decimal: ',', + group: '.', + + currency: { + prefix: '€ ' + } + +}); + +/* +--- + +script: Locale.Set.From.js + +name: Locale.Set.From + +description: Provides an alternative way to create Locale.Set objects. + +license: MIT-style license + +authors: + - Tim Wienk + +requires: + - Core/JSON + - Locale + +provides: Locale.Set.From + +... +*/ + +(function(){ + +var parsers = { + 'json': JSON.decode +}; + +Locale.Set.defineParser = function(name, fn){ + parsers[name] = fn; +}; + +Locale.Set.from = function(set, type){ + if (instanceOf(set, Locale.Set)) return set; + + if (!type && typeOf(set) == 'string') type = 'json'; + if (parsers[type]) set = parsers[type](set); + + var locale = new Locale.Set; + + locale.sets = set.sets || {}; + + if (set.inherits){ + locale.inherits.locales = Array.convert(set.inherits.locales); + locale.inherits.sets = set.inherits.sets || {}; + } + + return locale; +}; + +})(); + +/* +--- + +name: Locale.ZA.Number + +description: Number messages for ZA. + +license: MIT-style license + +authors: + - Werner Mollentze + +requires: + - Locale + +provides: [Locale.ZA.Number] + +... +*/ + +Locale.define('ZA', 'Number', { + + decimal: '.', + group: ',', + + currency: { + prefix: 'R ' + } + +}); + + + +/* +--- + +name: Locale.af-ZA.Date + +description: Date messages for ZA Afrikaans. + +license: MIT-style license + +authors: + - Werner Mollentze + +requires: + - Locale + +provides: [Locale.af-ZA.Date] + +... +*/ + +Locale.define('af-ZA', 'Date', { + + months: ['Januarie', 'Februarie', 'Maart', 'April', 'Mei', 'Junie', 'Julie', 'Augustus', 'September', 'Oktober', 'November', 'Desember'], + months_abbr: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], + days: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], + days_abbr: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], + + // Culture's date order: MM/DD/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d-%m-%Y', + shortTime: '%H:%M', + AM: 'VM', + PM: 'NM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: function(dayOfMonth){ + return ((dayOfMonth > 1 && dayOfMonth < 20 && dayOfMonth != 8) || (dayOfMonth > 100 && dayOfMonth.toString().substr(-2, 1) == '1')) ? 'de' : 'ste'; + }, + + lessThanMinuteAgo: 'minder as \'n minuut gelede', + minuteAgo: 'ongeveer \'n minuut gelede', + minutesAgo: '{delta} minute gelede', + hourAgo: 'omtret \'n uur gelede', + hoursAgo: 'ongeveer {delta} ure gelede', + dayAgo: '1 dag gelede', + daysAgo: '{delta} dae gelede', + weekAgo: '1 week gelede', + weeksAgo: '{delta} weke gelede', + monthAgo: '1 maand gelede', + monthsAgo: '{delta} maande gelede', + yearAgo: '1 jaar gelede', + yearsAgo: '{delta} jare gelede', + + lessThanMinuteUntil: 'oor minder as \'n minuut', + minuteUntil: 'oor ongeveer \'n minuut', + minutesUntil: 'oor {delta} minute', + hourUntil: 'oor ongeveer \'n uur', + hoursUntil: 'oor {delta} uur', + dayUntil: 'oor ongeveer \'n dag', + daysUntil: 'oor {delta} dae', + weekUntil: 'oor \'n week', + weeksUntil: 'oor {delta} weke', + monthUntil: 'oor \'n maand', + monthsUntil: 'oor {delta} maande', + yearUntil: 'oor \'n jaar', + yearsUntil: 'oor {delta} jaar' + +}); + +/* +--- + +name: Locale.af-ZA.Form.Validator + +description: Form Validator messages for Afrikaans. + +license: MIT-style license + +authors: + - Werner Mollentze + +requires: + - Locale + +provides: [Locale.af-ZA.Form.Validator] + +... +*/ + +Locale.define('af-ZA', 'FormValidator', { + + required: 'Hierdie veld word vereis.', + length: 'Voer asseblief {length} karakters in (u het {elLength} karakters ingevoer)', + minLength: 'Voer asseblief ten minste {minLength} karakters in (u het {length} karakters ingevoer).', + maxLength: 'Moet asseblief nie meer as {maxLength} karakters invoer nie (u het {length} karakters ingevoer).', + integer: 'Voer asseblief \'n heelgetal in hierdie veld in. Getalle met desimale (bv. 1.25) word nie toegelaat nie.', + numeric: 'Voer asseblief slegs numeriese waardes in hierdie veld in (bv. "1" of "1.1" of "-1" of "-1.1").', + digits: 'Gebruik asseblief slegs nommers en punktuasie in hierdie veld. (by voorbeeld, \'n telefoon nommer wat koppeltekens en punte bevat is toelaatbaar).', + alpha: 'Gebruik asseblief slegs letters (a-z) binne-in hierdie veld. Geen spasies of ander karakters word toegelaat nie.', + alphanum: 'Gebruik asseblief slegs letters (a-z) en nommers (0-9) binne-in hierdie veld. Geen spasies of ander karakters word toegelaat nie.', + dateSuchAs: 'Voer asseblief \'n geldige datum soos {date} in', + dateInFormatMDY: 'Voer asseblief \'n geldige datum soos MM/DD/YYYY in (bv. "12/31/1999")', + email: 'Voer asseblief \'n geldige e-pos adres in. Byvoorbeeld "fred@domain.com".', + url: 'Voer asseblief \'n geldige bronadres (URL) soos http://www.example.com in.', + currencyDollar: 'Voer asseblief \'n geldige $ bedrag in. Byvoorbeeld $100.00 .', + oneRequired: 'Voer asseblief iets in vir ten minste een van hierdie velde.', + errorPrefix: 'Fout: ', + warningPrefix: 'Waarskuwing: ', + + // Form.Validator.Extras + noSpace: 'Daar mag geen spasies in hierdie toevoer wees nie.', + reqChkByNode: 'Geen items is gekies nie.', + requiredChk: 'Hierdie veld word vereis.', + reqChkByName: 'Kies asseblief \'n {label}.', + match: 'Hierdie veld moet by die {matchName} veld pas', + startDate: 'die begin datum', + endDate: 'die eind datum', + currentDate: 'die huidige datum', + afterDate: 'Die datum moet dieselfde of na {label} wees.', + beforeDate: 'Die datum moet dieselfde of voor {label} wees.', + startMonth: 'Kies asseblief \'n begin maand', + sameMonth: 'Hierdie twee datums moet in dieselfde maand wees - u moet een of beide verander.', + creditcard: 'Die ingevoerde kredietkaart nommer is ongeldig. Bevestig asseblief die nommer en probeer weer. {length} syfers is ingevoer.' + +}); + +/* +--- + +name: Locale.af-ZA.Number + +description: Number messages for ZA Afrikaans. + +license: MIT-style license + +authors: + - Werner Mollentze + +requires: + - Locale + - Locale.ZA.Number + +provides: [Locale.af-ZA.Number] + +... +*/ + +Locale.define('af-ZA').inherit('ZA', 'Number'); + +/* +--- + +name: Locale.ar.Date + +description: Date messages for Arabic. + +license: MIT-style license + +authors: + - Chafik Barbar + +requires: + - Locale + +provides: [Locale.ar.Date] + +... +*/ + +Locale.define('ar', 'Date', { + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M' + +}); + +/* +--- + +name: Locale.ar.Form.Validator + +description: Form Validator messages for Arabic. + +license: MIT-style license + +authors: + - Chafik Barbar + +requires: + - Locale + +provides: [Locale.ar.Form.Validator] + +... +*/ + +Locale.define('ar', 'FormValidator', { + + required: 'هذا الحقل مطلوب.', + minLength: 'رجاءً إدخال {minLength} أحرف على الأقل (تم إدخال {length} أحرف).', + maxLength: 'الرجاء عدم إدخال أكثر من {maxLength} أحرف (تم إدخال {length} أحرف).', + integer: 'الرجاء إدخال عدد صحيح في هذا الحقل. أي رقم ذو كسر عشري أو مئوي (مثال 1.25 ) غير مسموح.', + numeric: 'الرجاء إدخال قيم رقمية في هذا الحقل (مثال "1" أو "1.1" أو "-1" أو "-1.1").', + digits: 'الرجاء أستخدام قيم رقمية وعلامات ترقيمية فقط في هذا الحقل (مثال, رقم هاتف مع نقطة أو شحطة)', + alpha: 'الرجاء أستخدام أحرف فقط (ا-ي) في هذا الحقل. أي فراغات أو علامات غير مسموحة.', + alphanum: 'الرجاء أستخدام أحرف فقط (ا-ي) أو أرقام (0-9) فقط في هذا الحقل. أي فراغات أو علامات غير مسموحة.', + dateSuchAs: 'الرجاء إدخال تاريخ صحيح كالتالي {date}', + dateInFormatMDY: 'الرجاء إدخال تاريخ صحيح (مثال, 31-12-1999)', + email: 'الرجاء إدخال بريد إلكتروني صحيح.', + url: 'الرجاء إدخال عنوان إلكتروني صحيح مثل http://www.example.com', + currencyDollar: 'الرجاء إدخال قيمة $ صحيحة. مثال, 100.00$', + oneRequired: 'الرجاء إدخال قيمة في أحد هذه الحقول على الأقل.', + errorPrefix: 'خطأ: ', + warningPrefix: 'تحذير: ' + +}); + +/* +--- + +name: Locale.ca-CA.Date + +description: Date messages for Catalan. + +license: MIT-style license + +authors: + - Ãlfons Sanchez + +requires: + - Locale + +provides: [Locale.ca-CA.Date] + +... +*/ + +Locale.define('ca-CA', 'Date', { + + months: ['Gener', 'Febrer', 'Març', 'Abril', 'Maig', 'Juny', 'Juli', 'Agost', 'Setembre', 'Octubre', 'Novembre', 'Desembre'], + months_abbr: ['gen.', 'febr.', 'març', 'abr.', 'maig', 'juny', 'jul.', 'ag.', 'set.', 'oct.', 'nov.', 'des.'], + days: ['Diumenge', 'Dilluns', 'Dimarts', 'Dimecres', 'Dijous', 'Divendres', 'Dissabte'], + days_abbr: ['dg', 'dl', 'dt', 'dc', 'dj', 'dv', 'ds'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 0, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'fa menys d`un minut', + minuteAgo: 'fa un minut', + minutesAgo: 'fa {delta} minuts', + hourAgo: 'fa un hora', + hoursAgo: 'fa unes {delta} hores', + dayAgo: 'fa un dia', + daysAgo: 'fa {delta} dies', + + lessThanMinuteUntil: 'menys d`un minut des d`ara', + minuteUntil: 'un minut des d`ara', + minutesUntil: '{delta} minuts des d`ara', + hourUntil: 'un hora des d`ara', + hoursUntil: 'unes {delta} hores des d`ara', + dayUntil: '1 dia des d`ara', + daysUntil: '{delta} dies des d`ara' + +}); + +/* +--- + +name: Locale.ca-CA.Form.Validator + +description: Form Validator messages for Catalan. + +license: MIT-style license + +authors: + - Miquel Hudin + - Ãlfons Sanchez + +requires: + - Locale + +provides: [Locale.ca-CA.Form.Validator] + +... +*/ + +Locale.define('ca-CA', 'FormValidator', { + + required: 'Aquest camp es obligatori.', + minLength: 'Per favor introdueix al menys {minLength} caracters (has introduit {length} caracters).', + maxLength: 'Per favor introdueix no mes de {maxLength} caracters (has introduit {length} caracters).', + integer: 'Per favor introdueix un nombre enter en aquest camp. Nombres amb decimals (p.e. 1,25) no estan permesos.', + numeric: 'Per favor introdueix sols valors numerics en aquest camp (p.e. "1" o "1,1" o "-1" o "-1,1").', + digits: 'Per favor usa sols numeros i puntuacio en aquest camp (per exemple, un nombre de telefon amb guions i punts no esta permes).', + alpha: 'Per favor utilitza lletres nomes (a-z) en aquest camp. No s´admiteixen espais ni altres caracters.', + alphanum: 'Per favor, utilitza nomes lletres (a-z) o numeros (0-9) en aquest camp. No s´admiteixen espais ni altres caracters.', + dateSuchAs: 'Per favor introdueix una data valida com {date}', + dateInFormatMDY: 'Per favor introdueix una data valida com DD/MM/YYYY (p.e. "31/12/1999")', + email: 'Per favor, introdueix una adreça de correu electronic valida. Per exemple, "fred@domain.com".', + url: 'Per favor introdueix una URL valida com http://www.example.com.', + currencyDollar: 'Per favor introdueix una quantitat valida de €. Per exemple €100,00 .', + oneRequired: 'Per favor introdueix alguna cosa per al menys una d´aquestes entrades.', + errorPrefix: 'Error: ', + warningPrefix: 'Avis: ', + + // Form.Validator.Extras + noSpace: 'No poden haver espais en aquesta entrada.', + reqChkByNode: 'No hi han elements seleccionats.', + requiredChk: 'Aquest camp es obligatori.', + reqChkByName: 'Per favor selecciona una {label}.', + match: 'Aquest camp necessita coincidir amb el camp {matchName}', + startDate: 'la data de inici', + endDate: 'la data de fi', + currentDate: 'la data actual', + afterDate: 'La data deu ser igual o posterior a {label}.', + beforeDate: 'La data deu ser igual o anterior a {label}.', + startMonth: 'Per favor selecciona un mes d´orige', + sameMonth: 'Aquestes dos dates deuen estar dins del mateix mes - deus canviar una o altra.' + +}); + +/* +--- + +name: Locale.cs-CZ.Date + +description: Date messages for Czech. + +license: MIT-style license + +authors: + - Jan Černý chemiX + - Christopher Zukowski + +requires: + - Locale + +provides: [Locale.cs-CZ.Date] + +... +*/ +(function(){ + +// Czech language pluralization rules, see http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html +// one -> n is 1; 1 +// few -> n in 2..4; 2-4 +// other -> everything else 0, 5-999, 1.31, 2.31, 5.31... +var pluralize = function(n, one, few, other){ + if (n == 1) return one; + else if (n == 2 || n == 3 || n == 4) return few; + else return other; +}; + +Locale.define('cs-CZ', 'Date', { + + months: ['Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'], + months_abbr: ['ledna', 'února', 'března', 'dubna', 'května', 'června', 'července', 'srpna', 'září', 'října', 'listopadu', 'prosince'], + days: ['Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'], + days_abbr: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'dop.', + PM: 'odp.', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'před chvílí', + minuteAgo: 'přibližně před minutou', + minutesAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'minutou', 'minutami', 'minutami'); }, + hourAgo: 'přibližně před hodinou', + hoursAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'hodinou', 'hodinami', 'hodinami'); }, + dayAgo: 'před dnem', + daysAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'dnem', 'dny', 'dny'); }, + weekAgo: 'před týdnem', + weeksAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'týdnem', 'týdny', 'týdny'); }, + monthAgo: 'před měsícem', + monthsAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'měsícem', 'měsíci', 'měsíci'); }, + yearAgo: 'před rokem', + yearsAgo: function(delta){ return 'před {delta} ' + pluralize(delta, 'rokem', 'lety', 'lety'); }, + + lessThanMinuteUntil: 'za chvíli', + minuteUntil: 'přibližně za minutu', + minutesUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'minutu', 'minuty', 'minut'); }, + hourUntil: 'přibližně za hodinu', + hoursUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'hodinu', 'hodiny', 'hodin'); }, + dayUntil: 'za den', + daysUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'den', 'dny', 'dnů'); }, + weekUntil: 'za týden', + weeksUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'týden', 'týdny', 'týdnů'); }, + monthUntil: 'za měsíc', + monthsUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'měsíc', 'měsíce', 'měsíců'); }, + yearUntil: 'za rok', + yearsUntil: function(delta){ return 'za {delta} ' + pluralize(delta, 'rok', 'roky', 'let'); } +}); + +})(); + +/* +--- + +name: Locale.cs-CZ.Form.Validator + +description: Form Validator messages for Czech. + +license: MIT-style license + +authors: + - Jan Černý chemiX + +requires: + - Locale + +provides: [Locale.cs-CZ.Form.Validator] + +... +*/ + +Locale.define('cs-CZ', 'FormValidator', { + + required: 'Tato položka je povinná.', + minLength: 'Zadejte prosím alespoň {minLength} znaků (napsáno {length} znaků).', + maxLength: 'Zadejte prosím méně než {maxLength} znaků (nápsáno {length} znaků).', + integer: 'Zadejte prosím celé číslo. Desetinná čísla (např. 1.25) nejsou povolena.', + numeric: 'Zadejte jen číselné hodnoty (tj. "1" nebo "1.1" nebo "-1" nebo "-1.1").', + digits: 'Zadejte prosím pouze čísla a interpunkční znaménka(například telefonní číslo s pomlčkami nebo tečkami je povoleno).', + alpha: 'Zadejte prosím pouze písmena (a-z). Mezery nebo jiné znaky nejsou povoleny.', + alphanum: 'Zadejte prosím pouze písmena (a-z) nebo číslice (0-9). Mezery nebo jiné znaky nejsou povoleny.', + dateSuchAs: 'Zadejte prosím platné datum jako {date}', + dateInFormatMDY: 'Zadejte prosím platné datum jako MM / DD / RRRR (tj. "12/31/1999")', + email: 'Zadejte prosím platnou e-mailovou adresu. Například "fred@domain.com".', + url: 'Zadejte prosím platnou URL adresu jako http://www.example.com.', + currencyDollar: 'Zadejte prosím platnou částku. Například $100.00.', + oneRequired: 'Zadejte prosím alespoň jednu hodnotu pro tyto položky.', + errorPrefix: 'Chyba: ', + warningPrefix: 'Upozornění: ', + + // Form.Validator.Extras + noSpace: 'V této položce nejsou povoleny mezery', + reqChkByNode: 'Nejsou vybrány žádné položky.', + requiredChk: 'Tato položka je vyžadována.', + reqChkByName: 'Prosím vyberte {label}.', + match: 'Tato položka se musí shodovat s položkou {matchName}', + startDate: 'datum zahájení', + endDate: 'datum ukončení', + currentDate: 'aktuální datum', + afterDate: 'Datum by mělo být stejné nebo větší než {label}.', + beforeDate: 'Datum by mělo být stejné nebo menší než {label}.', + startMonth: 'Vyberte počáteční měsíc.', + sameMonth: 'Tyto dva datumy musí být ve stejném měsíci - změňte jeden z nich.', + creditcard: 'Zadané číslo kreditní karty je neplatné. Prosím opravte ho. Bylo zadáno {length} čísel.' + +}); + +/* +--- + +name: Locale.da-DK.Date + +description: Date messages for Danish. + +license: MIT-style license + +authors: + - Martin Overgaard + - Henrik Hansen + +requires: + - Locale + +provides: [Locale.da-DK.Date] + +... +*/ + +Locale.define('da-DK', 'Date', { + + months: ['Januar', 'Februar', 'Marts', 'April', 'Maj', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'December'], + months_abbr: ['jan.', 'feb.', 'mar.', 'apr.', 'maj.', 'jun.', 'jul.', 'aug.', 'sep.', 'okt.', 'nov.', 'dec.'], + days: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'], + days_abbr: ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør'], + + // Culture's date order: DD-MM-YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d-%m-%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'mindre end et minut siden', + minuteAgo: 'omkring et minut siden', + minutesAgo: '{delta} minutter siden', + hourAgo: 'omkring en time siden', + hoursAgo: 'omkring {delta} timer siden', + dayAgo: '1 dag siden', + daysAgo: '{delta} dage siden', + weekAgo: '1 uge siden', + weeksAgo: '{delta} uger siden', + monthAgo: '1 måned siden', + monthsAgo: '{delta} måneder siden', + yearAgo: '1 år siden', + yearsAgo: '{delta} år siden', + + lessThanMinuteUntil: 'mindre end et minut fra nu', + minuteUntil: 'omkring et minut fra nu', + minutesUntil: '{delta} minutter fra nu', + hourUntil: 'omkring en time fra nu', + hoursUntil: 'omkring {delta} timer fra nu', + dayUntil: '1 dag fra nu', + daysUntil: '{delta} dage fra nu', + weekUntil: '1 uge fra nu', + weeksUntil: '{delta} uger fra nu', + monthUntil: '1 måned fra nu', + monthsUntil: '{delta} måneder fra nu', + yearUntil: '1 år fra nu', + yearsUntil: '{delta} år fra nu' + +}); + +/* +--- + +name: Locale.da-DK.Form.Validator + +description: Form Validator messages for Danish. + +license: MIT-style license + +authors: + - Martin Overgaard + +requires: + - Locale + +provides: [Locale.da-DK.Form.Validator] + +... +*/ + +Locale.define('da-DK', 'FormValidator', { + + required: 'Feltet skal udfyldes.', + minLength: 'Skriv mindst {minLength} tegn (du skrev {length} tegn).', + maxLength: 'Skriv maksimalt {maxLength} tegn (du skrev {length} tegn).', + integer: 'Skriv et tal i dette felt. Decimal tal (f.eks. 1.25) er ikke tilladt.', + numeric: 'Skriv kun tal i dette felt (i.e. "1" eller "1.1" eller "-1" eller "-1.1").', + digits: 'Skriv kun tal og tegnsætning i dette felt (eksempel, et telefon nummer med bindestreg eller punktum er tilladt).', + alpha: 'Skriv kun bogstaver (a-z) i dette felt. Mellemrum og andre tegn er ikke tilladt.', + alphanum: 'Skriv kun bogstaver (a-z) eller tal (0-9) i dette felt. Mellemrum og andre tegn er ikke tilladt.', + dateSuchAs: 'Skriv en gyldig dato som {date}', + dateInFormatMDY: 'Skriv dato i formatet DD-MM-YYYY (f.eks. "31-12-1999")', + email: 'Skriv en gyldig e-mail adresse. F.eks "fred@domain.com".', + url: 'Skriv en gyldig URL adresse. F.eks "http://www.example.com".', + currencyDollar: 'Skriv et gldigt beløb. F.eks Kr.100.00 .', + oneRequired: 'Et eller flere af felterne i denne formular skal udfyldes.', + errorPrefix: 'Fejl: ', + warningPrefix: 'Advarsel: ', + + // Form.Validator.Extras + noSpace: 'Der må ikke benyttes mellemrum i dette felt.', + reqChkByNode: 'Foretag et valg.', + requiredChk: 'Dette felt skal udfyldes.', + reqChkByName: 'Vælg en {label}.', + match: 'Dette felt skal matche {matchName} feltet', + startDate: 'start dato', + endDate: 'slut dato', + currentDate: 'dags dato', + afterDate: 'Datoen skal være større end eller lig med {label}.', + beforeDate: 'Datoen skal være mindre end eller lig med {label}.', + startMonth: 'Vælg en start måned', + sameMonth: 'De valgte datoer skal være i samme måned - skift en af dem.' + +}); + +/* +--- + +name: Locale.de-DE.Date + +description: Date messages for German. + +license: MIT-style license + +authors: + - Christoph Pojer + - Frank Rossi + - Ulrich Petri + - Fabian Beiner + +requires: + - Locale + +provides: [Locale.de-DE.Date] + +... +*/ + +Locale.define('de-DE', 'Date', { + + months: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'], + months_abbr: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'], + days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'], + days_abbr: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'], + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'vormittags', + PM: 'nachmittags', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'vor weniger als einer Minute', + minuteAgo: 'vor einer Minute', + minutesAgo: 'vor {delta} Minuten', + hourAgo: 'vor einer Stunde', + hoursAgo: 'vor {delta} Stunden', + dayAgo: 'vor einem Tag', + daysAgo: 'vor {delta} Tagen', + weekAgo: 'vor einer Woche', + weeksAgo: 'vor {delta} Wochen', + monthAgo: 'vor einem Monat', + monthsAgo: 'vor {delta} Monaten', + yearAgo: 'vor einem Jahr', + yearsAgo: 'vor {delta} Jahren', + + lessThanMinuteUntil: 'in weniger als einer Minute', + minuteUntil: 'in einer Minute', + minutesUntil: 'in {delta} Minuten', + hourUntil: 'in ca. einer Stunde', + hoursUntil: 'in ca. {delta} Stunden', + dayUntil: 'in einem Tag', + daysUntil: 'in {delta} Tagen', + weekUntil: 'in einer Woche', + weeksUntil: 'in {delta} Wochen', + monthUntil: 'in einem Monat', + monthsUntil: 'in {delta} Monaten', + yearUntil: 'in einem Jahr', + yearsUntil: 'in {delta} Jahren' + +}); + +/* +--- + +name: Locale.de-CH.Date + +description: Date messages for German (Switzerland). + +license: MIT-style license + +authors: + - Michael van der Weg + +requires: + - Locale + - Locale.de-DE.Date + +provides: [Locale.de-CH.Date] + +... +*/ + +Locale.define('de-CH').inherit('de-DE', 'Date'); + +/* +--- + +name: Locale.de-CH.Form.Validator + +description: Form Validator messages for German (Switzerland). + +license: MIT-style license + +authors: + - Michael van der Weg + +requires: + - Locale + +provides: [Locale.de-CH.Form.Validator] + +... +*/ + +Locale.define('de-CH', 'FormValidator', { + + required: 'Dieses Feld ist obligatorisch.', + minLength: 'Geben Sie bitte mindestens {minLength} Zeichen ein (Sie haben {length} Zeichen eingegeben).', + maxLength: 'Bitte geben Sie nicht mehr als {maxLength} Zeichen ein (Sie haben {length} Zeichen eingegeben).', + integer: 'Geben Sie bitte eine ganze Zahl ein. Dezimalzahlen (z.B. 1.25) sind nicht erlaubt.', + numeric: 'Geben Sie bitte nur Zahlenwerte in dieses Eingabefeld ein (z.B. "1", "1.1", "-1" oder "-1.1").', + digits: 'Benutzen Sie bitte nur Zahlen und Satzzeichen in diesem Eingabefeld (erlaubt ist z.B. eine Telefonnummer mit Bindestrichen und Punkten).', + alpha: 'Benutzen Sie bitte nur Buchstaben (a-z) in diesem Feld. Leerzeichen und andere Zeichen sind nicht erlaubt.', + alphanum: 'Benutzen Sie bitte nur Buchstaben (a-z) und Zahlen (0-9) in diesem Eingabefeld. Leerzeichen und andere Zeichen sind nicht erlaubt.', + dateSuchAs: 'Geben Sie bitte ein gültiges Datum ein. Wie zum Beispiel {date}', + dateInFormatMDY: 'Geben Sie bitte ein gültiges Datum ein. Wie zum Beispiel TT.MM.JJJJ (z.B. "31.12.1999")', + email: 'Geben Sie bitte eine gültige E-Mail Adresse ein. Wie zum Beispiel "maria@bernasconi.ch".', + url: 'Geben Sie bitte eine gültige URL ein. Wie zum Beispiel http://www.example.com.', + currencyDollar: 'Geben Sie bitte einen gültigen Betrag in Schweizer Franken ein. Wie zum Beispiel 100.00 CHF .', + oneRequired: 'Machen Sie für mindestens eines der Eingabefelder einen Eintrag.', + errorPrefix: 'Fehler: ', + warningPrefix: 'Warnung: ', + + // Form.Validator.Extras + noSpace: 'In diesem Eingabefeld darf kein Leerzeichen sein.', + reqChkByNode: 'Es wurden keine Elemente gewählt.', + requiredChk: 'Dieses Feld ist obligatorisch.', + reqChkByName: 'Bitte wählen Sie ein {label}.', + match: 'Dieses Eingabefeld muss mit dem Feld {matchName} übereinstimmen.', + startDate: 'Das Anfangsdatum', + endDate: 'Das Enddatum', + currentDate: 'Das aktuelle Datum', + afterDate: 'Das Datum sollte zur gleichen Zeit oder später sein {label}.', + beforeDate: 'Das Datum sollte zur gleichen Zeit oder früher sein {label}.', + startMonth: 'Wählen Sie bitte einen Anfangsmonat', + sameMonth: 'Diese zwei Datumsangaben müssen im selben Monat sein - Sie müssen eine von beiden verändern.', + creditcard: 'Die eingegebene Kreditkartennummer ist ungültig. Bitte überprüfen Sie diese und versuchen Sie es erneut. {length} Zahlen eingegeben.' + +}); + +/* +--- +name: Locale.de-CH.Number +description: Number messages for Switzerland. +license: MIT-style license +authors: + - Kim D. Jeker +requires: + - Locale + - Locale.CH.Number +provides: [Locale.de-CH.Number] +... +*/ + +Locale.define('de-CH').inherit('CH', 'Number'); + +/* +--- + +name: Locale.de-DE.Form.Validator + +description: Form Validator messages for German. + +license: MIT-style license + +authors: + - Frank Rossi + - Ulrich Petri + - Fabian Beiner + +requires: + - Locale + +provides: [Locale.de-DE.Form.Validator] + +... +*/ + +Locale.define('de-DE', 'FormValidator', { + + required: 'Dieses Eingabefeld muss ausgefüllt werden.', + minLength: 'Geben Sie bitte mindestens {minLength} Zeichen ein (Sie haben nur {length} Zeichen eingegeben).', + maxLength: 'Geben Sie bitte nicht mehr als {maxLength} Zeichen ein (Sie haben {length} Zeichen eingegeben).', + integer: 'Geben Sie in diesem Eingabefeld bitte eine ganze Zahl ein. Dezimalzahlen (z.B. "1.25") sind nicht erlaubt.', + numeric: 'Geben Sie in diesem Eingabefeld bitte nur Zahlenwerte (z.B. "1", "1.1", "-1" oder "-1.1") ein.', + digits: 'Geben Sie in diesem Eingabefeld bitte nur Zahlen und Satzzeichen ein (z.B. eine Telefonnummer mit Bindestrichen und Punkten ist erlaubt).', + alpha: 'Geben Sie in diesem Eingabefeld bitte nur Buchstaben (a-z) ein. Leerzeichen und andere Zeichen sind nicht erlaubt.', + alphanum: 'Geben Sie in diesem Eingabefeld bitte nur Buchstaben (a-z) und Zahlen (0-9) ein. Leerzeichen oder andere Zeichen sind nicht erlaubt.', + dateSuchAs: 'Geben Sie bitte ein gültiges Datum ein (z.B. "{date}").', + dateInFormatMDY: 'Geben Sie bitte ein gültiges Datum im Format TT.MM.JJJJ ein (z.B. "31.12.1999").', + email: 'Geben Sie bitte eine gültige E-Mail-Adresse ein (z.B. "max@mustermann.de").', + url: 'Geben Sie bitte eine gültige URL ein (z.B. "http://www.example.com").', + currencyDollar: 'Geben Sie bitte einen gültigen Betrag in EURO ein (z.B. 100.00€).', + oneRequired: 'Bitte füllen Sie mindestens ein Eingabefeld aus.', + errorPrefix: 'Fehler: ', + warningPrefix: 'Warnung: ', + + // Form.Validator.Extras + noSpace: 'Es darf kein Leerzeichen in diesem Eingabefeld sein.', + reqChkByNode: 'Es wurden keine Elemente gewählt.', + requiredChk: 'Dieses Feld muss ausgefüllt werden.', + reqChkByName: 'Bitte wählen Sie ein {label}.', + match: 'Dieses Eingabefeld muss mit dem {matchName} Eingabefeld übereinstimmen.', + startDate: 'Das Anfangsdatum', + endDate: 'Das Enddatum', + currentDate: 'Das aktuelle Datum', + afterDate: 'Das Datum sollte zur gleichen Zeit oder später sein als {label}.', + beforeDate: 'Das Datum sollte zur gleichen Zeit oder früher sein als {label}.', + startMonth: 'Wählen Sie bitte einen Anfangsmonat', + sameMonth: 'Diese zwei Datumsangaben müssen im selben Monat sein - Sie müssen eines von beiden verändern.', + creditcard: 'Die eingegebene Kreditkartennummer ist ungültig. Bitte überprüfen Sie diese und versuchen Sie es erneut. {length} Zahlen eingegeben.' + +}); + +/* +--- + +name: Locale.de-DE.Number + +description: Number messages for German. + +license: MIT-style license + +authors: + - Christoph Pojer + +requires: + - Locale + - Locale.EU.Number + +provides: [Locale.de-DE.Number] + +... +*/ + +Locale.define('de-DE').inherit('EU', 'Number'); + +/* +--- + +name: Locale.el-GR.Date + +description: Date messages for Greek language. + +license: MIT-style license + +authors: + - Periklis Argiriadis + +requires: + - Locale + +provides: [Locale.el-GR.Date] + +... +*/ + +Locale.define('el-GR', 'Date', { + + months: ['Ιανουάριος', 'Φεβρουάριος', 'Μάρτιος', 'Απρίλιος', 'Μάιος', 'Ιούνιος', 'Ιούλιος', 'Αύγουστος', 'Σεπτέμβριος', 'Οκτώβριος', 'Νοέμβριος', 'Δεκέμβριος'], + months_abbr: ['Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μάι', 'Ιουν', 'Ιουλ', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ'], + days: ['Κυριακή', 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο'], + days_abbr: ['Κυρ', 'Δευ', 'Τρι', 'Τετ', 'Πεμ', 'Παρ', 'Σαβ'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%I:%M%p', + AM: 'πμ', + PM: 'μμ', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: function(dayOfMonth){ + // 1st, 2nd, 3rd, etc. + return (dayOfMonth > 3 && dayOfMonth < 21) ? 'ος' : ['ος'][Math.min(dayOfMonth % 10, 4)]; + }, + + lessThanMinuteAgo: 'λιγότερο από ένα λεπτό πριν', + minuteAgo: 'περίπου ένα λεπτό πριν', + minutesAgo: '{delta} λεπτά πριν', + hourAgo: 'περίπου μια ώρα πριν', + hoursAgo: 'περίπου {delta} ώρες πριν', + dayAgo: '1 ημέρα πριν', + daysAgo: '{delta} ημέρες πριν', + weekAgo: '1 εβδομάδα πριν', + weeksAgo: '{delta} εβδομάδες πριν', + monthAgo: '1 μήνα πριν', + monthsAgo: '{delta} μήνες πριν', + yearAgo: '1 χρόνο πριν', + yearsAgo: '{delta} χρόνια πριν', + + lessThanMinuteUntil: 'λιγότερο από λεπτό από τώρα', + minuteUntil: 'περίπου ένα λεπτό από τώρα', + minutesUntil: '{delta} λεπτά από τώρα', + hourUntil: 'περίπου μια ώρα από τώρα', + hoursUntil: 'περίπου {delta} ώρες από τώρα', + dayUntil: '1 ημέρα από τώρα', + daysUntil: '{delta} ημέρες από τώρα', + weekUntil: '1 εβδομάδα από τώρα', + weeksUntil: '{delta} εβδομάδες από τώρα', + monthUntil: '1 μήνας από τώρα', + monthsUntil: '{delta} μήνες από τώρα', + yearUntil: '1 χρόνος από τώρα', + yearsUntil: '{delta} χρόνια από τώρα' + +}); + +/* +--- + +name: Locale.el-GR.Form.Validator + +description: Form Validator messages for Greek language. + +license: MIT-style license + +authors: + - Dimitris Tsironis + +requires: + - Locale + +provides: [Locale.el-GR.Form.Validator] + +... +*/ + +Locale.define('el-GR', 'FormValidator', { + + required: 'Αυτό το πεδίο είναι απαραίτητο.', + length: 'Παρακαλούμε, εισάγετε {length} χαρακτήρες (έχετε ήδη εισάγει {elLength} χαρακτήρες).', + minLength: 'Παρακαλούμε, εισάγετε τουλάχιστον {minLength} χαρακτήρες (έχετε ήδη εισάγε {length} χαρακτήρες).', + maxlength: 'Παρακαλούμε, εισάγετε εώς {maxlength} χαρακτήρες (έχετε ήδη εισάγε {length} χαρακτήρες).', + integer: 'Παρακαλούμε, εισάγετε έναν ακέραιο αριθμό σε αυτό το πεδίο. Οι αριθμοί με δεκαδικά ψηφία (π.χ. 1.25) δεν επιτρέπονται.', + numeric: 'Παρακαλούμε, εισάγετε μόνο αριθμητικές τιμές σε αυτό το πεδίο (π.χ." 1 " ή " 1.1 " ή " -1 " ή " -1.1 " ).', + digits: 'Παρακαλούμε, χρησιμοποιήστε μόνο αριθμούς και σημεία στίξης σε αυτόν τον τομέα (π.χ. επιτρέπεται αριθμός τηλεφώνου με παύλες ή τελείες).', + alpha: 'Παρακαλούμε, χρησιμοποιήστε μόνο γράμματα (a-z) σε αυτό το πεδίο. Δεν επιτρέπονται κενά ή άλλοι χαρακτήρες.', + alphanum: 'Παρακαλούμε, χρησιμοποιήστε μόνο γράμματα (a-z) ή αριθμούς (0-9) σε αυτόν τον τομέα. Δεν επιτρέπονται κενά ή άλλοι χαρακτήρες.', + dateSuchAs: 'Παρακαλούμε, εισάγετε μια έγκυρη ημερομηνία, όπως {date}', + dateInFormatMDY: 'Παρακαλώ εισάγετε μια έγκυρη ημερομηνία, όπως ΜΜ/ΗΗ/ΕΕΕΕ (π.χ. "12/31/1999").', + email: 'Παρακαλούμε, εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου (π.χ. "fred@domain.com").', + url: 'Παρακαλούμε, εισάγετε μια έγκυρη URL διεύθυνση, όπως http://www.example.com', + currencyDollar: 'Παρακαλούμε, εισάγετε ένα έγκυρο ποσό σε δολλάρια (π.χ. $100.00).', + oneRequired: 'Παρακαλούμε, εισάγετε κάτι για τουλάχιστον ένα από αυτά τα πεδία.', + errorPrefix: 'Σφάλμα: ', + warningPrefix: 'Προσοχή: ', + + // Form.Validator.Extras + noSpace: 'Δεν επιτρέπονται τα κενά σε αυτό το πεδίο.', + reqChkByNode: 'Δεν έχει επιλεγεί κάποιο αντικείμενο', + requiredChk: 'Αυτό το πεδίο είναι απαραίτητο.', + reqChkByName: 'Παρακαλούμε, επιλέξτε μια ετικέτα {label}.', + match: 'Αυτό το πεδίο πρέπει να ταιριάζει με το πεδίο {matchName}.', + startDate: 'η ημερομηνία έναρξης', + endDate: 'η ημερομηνία λήξης', + currentDate: 'η τρέχουσα ημερομηνία', + afterDate: 'Η ημερομηνία πρέπει να είναι η ίδια ή μετά από την {label}.', + beforeDate: 'Η ημερομηνία πρέπει να είναι η ίδια ή πριν από την {label}.', + startMonth: 'Παρακαλώ επιλέξτε ένα μήνα αρχής.', + sameMonth: 'Αυτές οι δύο ημερομηνίες πρέπει να έχουν τον ίδιο μήνα - θα πρέπει να αλλάξετε ή το ένα ή το άλλο', + creditcard: 'Ο αριθμός της πιστωτικής κάρτας δεν είναι έγκυρος. Παρακαλούμε ελέγξτε τον αριθμό και δοκιμάστε ξανά. {length} μήκος ψηφίων.' + +}); + +/* +--- + +name: Locale.en-GB.Date + +description: Date messages for British English. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Locale + - Locale.en-US.Date + +provides: [Locale.en-GB.Date] + +... +*/ + +Locale.define('en-GB', 'Date', { + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M' + +}).inherit('en-US', 'Date'); + +/* +--- + +name: Locale.en-US.Number + +description: Number messages for US English. + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: + - Locale + +provides: [Locale.en-US.Number] + +... +*/ + +Locale.define('en-US', 'Number', { + + decimal: '.', + group: ',', + +/* Commented properties are the defaults for Number.format + decimals: 0, + precision: 0, + scientific: null, + + prefix: null, + suffic: null, + + // Negative/Currency/percentage will mixin Number + negative: { + prefix: '-' + },*/ + + currency: { +// decimals: 2, + prefix: '$ ' + }/*, + + percentage: { + decimals: 2, + suffix: '%' + }*/ + +}); + + + +/* +--- + +name: Locale.es-ES.Date + +description: Date messages for Spanish. + +license: MIT-style license + +authors: + - Ãlfons Sanchez + +requires: + - Locale + +provides: [Locale.es-ES.Date] + +... +*/ + +Locale.define('es-ES', 'Date', { + + months: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'], + months_abbr: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'], + days: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'], + days_abbr: ['dom', 'lun', 'mar', 'mié', 'juv', 'vie', 'sáb'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'hace menos de un minuto', + minuteAgo: 'hace un minuto', + minutesAgo: 'hace {delta} minutos', + hourAgo: 'hace una hora', + hoursAgo: 'hace unas {delta} horas', + dayAgo: 'hace un día', + daysAgo: 'hace {delta} días', + weekAgo: 'hace una semana', + weeksAgo: 'hace unas {delta} semanas', + monthAgo: 'hace un mes', + monthsAgo: 'hace {delta} meses', + yearAgo: 'hace un año', + yearsAgo: 'hace {delta} años', + + lessThanMinuteUntil: 'menos de un minuto desde ahora', + minuteUntil: 'un minuto desde ahora', + minutesUntil: '{delta} minutos desde ahora', + hourUntil: 'una hora desde ahora', + hoursUntil: 'unas {delta} horas desde ahora', + dayUntil: 'un día desde ahora', + daysUntil: '{delta} días desde ahora', + weekUntil: 'una semana desde ahora', + weeksUntil: 'unas {delta} semanas desde ahora', + monthUntil: 'un mes desde ahora', + monthsUntil: '{delta} meses desde ahora', + yearUntil: 'un año desde ahora', + yearsUntil: '{delta} años desde ahora' + +}); + +/* +--- + +name: Locale.es-AR.Date + +description: Date messages for Spanish (Argentina). + +license: MIT-style license + +authors: + - Ãlfons Sanchez + - Diego Massanti + +requires: + - Locale + - Locale.es-ES.Date + +provides: [Locale.es-AR.Date] + +... +*/ + +Locale.define('es-AR').inherit('es-ES', 'Date'); + +/* +--- + +name: Locale.es-AR.Form.Validator + +description: Form Validator messages for Spanish (Argentina). + +license: MIT-style license + +authors: + - Diego Massanti + +requires: + - Locale + +provides: [Locale.es-AR.Form.Validator] + +... +*/ + +Locale.define('es-AR', 'FormValidator', { + + required: 'Este campo es obligatorio.', + minLength: 'Por favor ingrese al menos {minLength} caracteres (ha ingresado {length} caracteres).', + maxLength: 'Por favor no ingrese más de {maxLength} caracteres (ha ingresado {length} caracteres).', + integer: 'Por favor ingrese un número entero en este campo. Números con decimales (p.e. 1,25) no se permiten.', + numeric: 'Por favor ingrese solo valores numéricos en este campo (p.e. "1" o "1,1" o "-1" o "-1,1").', + digits: 'Por favor use sólo números y puntuación en este campo (por ejemplo, un número de teléfono con guiones y/o puntos no está permitido).', + alpha: 'Por favor use sólo letras (a-z) en este campo. No se permiten espacios ni otros caracteres.', + alphanum: 'Por favor, usa sólo letras (a-z) o números (0-9) en este campo. No se permiten espacios u otros caracteres.', + dateSuchAs: 'Por favor ingrese una fecha válida como {date}', + dateInFormatMDY: 'Por favor ingrese una fecha válida, utulizando el formato DD/MM/YYYY (p.e. "31/12/1999")', + email: 'Por favor, ingrese una dirección de e-mail válida. Por ejemplo, "fred@dominio.com".', + url: 'Por favor ingrese una URL válida como http://www.example.com.', + currencyDollar: 'Por favor ingrese una cantidad válida de pesos. Por ejemplo $100,00 .', + oneRequired: 'Por favor ingrese algo para por lo menos una de estas entradas.', + errorPrefix: 'Error: ', + warningPrefix: 'Advertencia: ', + + // Form.Validator.Extras + noSpace: 'No se permiten espacios en este campo.', + reqChkByNode: 'No hay elementos seleccionados.', + requiredChk: 'Este campo es obligatorio.', + reqChkByName: 'Por favor selecciona una {label}.', + match: 'Este campo necesita coincidir con el campo {matchName}', + startDate: 'la fecha de inicio', + endDate: 'la fecha de fin', + currentDate: 'la fecha actual', + afterDate: 'La fecha debe ser igual o posterior a {label}.', + beforeDate: 'La fecha debe ser igual o anterior a {label}.', + startMonth: 'Por favor selecciona un mes de origen', + sameMonth: 'Estas dos fechas deben estar en el mismo mes - debes cambiar una u otra.' + +}); + +/* +--- + +name: Locale.es-AR.Number + +description: Number messages for es Argentina. + +license: MIT-style license + +authors: + - Oscar Kuchuk + +requires: + - Locale + +provides: [Locale.es-AR.Number] + +... +*/ + +Locale.define('es-AR', 'Number', { + + decimal: ',', + group: '.', + +/* Commented properties are the defaults for Number.format + decimals: 0, + precision: 0, + scientific: null, + + prefix: null, + suffic: null, + + // Negative/Currency/percentage will mixin Number + negative: { + prefix: '-' + },*/ + + currency: { + decimals: 2, + prefix: '$ ' + }/*, + + percentage: { + decimals: 2, + suffix: '%' + }*/ + +}); + + +/* +--- + +name: Locale.es-ES.Form.Validator + +description: Form Validator messages for Spanish. + +license: MIT-style license + +authors: + - Ãlfons Sanchez + +requires: + - Locale + +provides: [Locale.es-ES.Form.Validator] + +... +*/ + +Locale.define('es-ES', 'FormValidator', { + + required: 'Este campo es obligatorio.', + minLength: 'Por favor introduce al menos {minLength} caracteres (has introducido {length} caracteres).', + maxLength: 'Por favor introduce no más de {maxLength} caracteres (has introducido {length} caracteres).', + integer: 'Por favor introduce un número entero en este campo. Números con decimales (p.e. 1,25) no se permiten.', + numeric: 'Por favor introduce solo valores numéricos en este campo (p.e. "1" o "1,1" o "-1" o "-1,1").', + digits: 'Por favor usa solo números y puntuación en este campo (por ejemplo, un número de teléfono con guiones y puntos no esta permitido).', + alpha: 'Por favor usa letras solo (a-z) en este campo. No se admiten espacios ni otros caracteres.', + alphanum: 'Por favor, usa solo letras (a-z) o números (0-9) en este campo. No se admiten espacios ni otros caracteres.', + dateSuchAs: 'Por favor introduce una fecha válida como {date}', + dateInFormatMDY: 'Por favor introduce una fecha válida como DD/MM/YYYY (p.e. "31/12/1999")', + email: 'Por favor, introduce una dirección de email válida. Por ejemplo, "fred@domain.com".', + url: 'Por favor introduce una URL válida como http://www.example.com.', + currencyDollar: 'Por favor introduce una cantidad válida de €. Por ejemplo €100,00 .', + oneRequired: 'Por favor introduce algo para por lo menos una de estas entradas.', + errorPrefix: 'Error: ', + warningPrefix: 'Aviso: ', + + // Form.Validator.Extras + noSpace: 'No pueden haber espacios en esta entrada.', + reqChkByNode: 'No hay elementos seleccionados.', + requiredChk: 'Este campo es obligatorio.', + reqChkByName: 'Por favor selecciona una {label}.', + match: 'Este campo necesita coincidir con el campo {matchName}', + startDate: 'la fecha de inicio', + endDate: 'la fecha de fin', + currentDate: 'la fecha actual', + afterDate: 'La fecha debe ser igual o posterior a {label}.', + beforeDate: 'La fecha debe ser igual o anterior a {label}.', + startMonth: 'Por favor selecciona un mes de origen', + sameMonth: 'Estas dos fechas deben estar en el mismo mes - debes cambiar una u otra.' + +}); + +/* +--- + +name: Locale.es-VE.Date + +description: Date messages for Spanish (Venezuela). + +license: MIT-style license + +authors: + - Daniel Barreto + +requires: + - Locale + - Locale.es-ES.Date + +provides: [Locale.es-VE.Date] + +... +*/ + +Locale.define('es-VE').inherit('es-ES', 'Date'); + +/* +--- + +name: Locale.es-VE.Form.Validator + +description: Form Validator messages for Spanish (Venezuela). + +license: MIT-style license + +authors: + - Daniel Barreto + +requires: + - Locale + - Locale.es-ES.Form.Validator + +provides: [Locale.es-VE.Form.Validator] + +... +*/ + +Locale.define('es-VE', 'FormValidator', { + + digits: 'Por favor usa solo números y puntuación en este campo. Por ejemplo, un número de teléfono con guiones y puntos no esta permitido.', + alpha: 'Por favor usa solo letras (a-z) en este campo. No se admiten espacios ni otros caracteres.', + currencyDollar: 'Por favor introduce una cantidad válida de Bs. Por ejemplo Bs. 100,00 .', + oneRequired: 'Por favor introduce un valor para por lo menos una de estas entradas.', + + // Form.Validator.Extras + startDate: 'La fecha de inicio', + endDate: 'La fecha de fin', + currentDate: 'La fecha actual' + +}).inherit('es-ES', 'FormValidator'); + +/* +--- + +name: Locale.es-VE.Number + +description: Number messages for Spanish (Venezuela). + +license: MIT-style license + +authors: + - Daniel Barreto + +requires: + - Locale + +provides: [Locale.es-VE.Number] + +... +*/ + +Locale.define('es-VE', 'Number', { + + decimal: ',', + group: '.', +/* + decimals: 0, + precision: 0, +*/ + // Negative/Currency/percentage will mixin Number + negative: { + prefix: '-' + }, + + currency: { + decimals: 2, + prefix: 'Bs. ' + }, + + percentage: { + decimals: 2, + suffix: '%' + } + +}); + +/* +--- + +name: Locale.et-EE.Date + +description: Date messages for Estonian. + +license: MIT-style license + +authors: + - Kevin Valdek + +requires: + - Locale + +provides: [Locale.et-EE.Date] + +... +*/ + +Locale.define('et-EE', 'Date', { + + months: ['jaanuar', 'veebruar', 'märts', 'aprill', 'mai', 'juuni', 'juuli', 'august', 'september', 'oktoober', 'november', 'detsember'], + months_abbr: ['jaan', 'veebr', 'märts', 'apr', 'mai', 'juuni', 'juuli', 'aug', 'sept', 'okt', 'nov', 'dets'], + days: ['pühapäev', 'esmaspäev', 'teisipäev', 'kolmapäev', 'neljapäev', 'reede', 'laupäev'], + days_abbr: ['pühap', 'esmasp', 'teisip', 'kolmap', 'neljap', 'reede', 'laup'], + + // Culture's date order: MM.DD.YYYY + dateOrder: ['month', 'date', 'year'], + shortDate: '%m.%d.%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'vähem kui minut aega tagasi', + minuteAgo: 'umbes minut aega tagasi', + minutesAgo: '{delta} minutit tagasi', + hourAgo: 'umbes tund aega tagasi', + hoursAgo: 'umbes {delta} tundi tagasi', + dayAgo: '1 päev tagasi', + daysAgo: '{delta} päeva tagasi', + weekAgo: '1 nädal tagasi', + weeksAgo: '{delta} nädalat tagasi', + monthAgo: '1 kuu tagasi', + monthsAgo: '{delta} kuud tagasi', + yearAgo: '1 aasta tagasi', + yearsAgo: '{delta} aastat tagasi', + + lessThanMinuteUntil: 'vähem kui minuti aja pärast', + minuteUntil: 'umbes minuti aja pärast', + minutesUntil: '{delta} minuti pärast', + hourUntil: 'umbes tunni aja pärast', + hoursUntil: 'umbes {delta} tunni pärast', + dayUntil: '1 päeva pärast', + daysUntil: '{delta} päeva pärast', + weekUntil: '1 nädala pärast', + weeksUntil: '{delta} nädala pärast', + monthUntil: '1 kuu pärast', + monthsUntil: '{delta} kuu pärast', + yearUntil: '1 aasta pärast', + yearsUntil: '{delta} aasta pärast' + +}); + +/* +--- + +name: Locale.et-EE.Form.Validator + +description: Form Validator messages for Estonian. + +license: MIT-style license + +authors: + - Kevin Valdek + +requires: + - Locale + +provides: [Locale.et-EE.Form.Validator] + +... +*/ + +Locale.define('et-EE', 'FormValidator', { + + required: 'Väli peab olema täidetud.', + minLength: 'Palun sisestage vähemalt {minLength} tähte (te sisestasite {length} tähte).', + maxLength: 'Palun ärge sisestage rohkem kui {maxLength} tähte (te sisestasite {length} tähte).', + integer: 'Palun sisestage väljale täisarv. Kümnendarvud (näiteks 1.25) ei ole lubatud.', + numeric: 'Palun sisestage ainult numbreid väljale (näiteks "1", "1.1", "-1" või "-1.1").', + digits: 'Palun kasutage ainult numbreid ja kirjavahemärke (telefoninumbri sisestamisel on lubatud kasutada kriipse ja punkte).', + alpha: 'Palun kasutage ainult tähti (a-z). Tühikud ja teised sümbolid on keelatud.', + alphanum: 'Palun kasutage ainult tähti (a-z) või numbreid (0-9). Tühikud ja teised sümbolid on keelatud.', + dateSuchAs: 'Palun sisestage kehtiv kuupäev kujul {date}', + dateInFormatMDY: 'Palun sisestage kehtiv kuupäev kujul MM.DD.YYYY (näiteks: "12.31.1999").', + email: 'Palun sisestage kehtiv e-maili aadress (näiteks: "fred@domain.com").', + url: 'Palun sisestage kehtiv URL (näiteks: http://www.example.com).', + currencyDollar: 'Palun sisestage kehtiv $ summa (näiteks: $100.00).', + oneRequired: 'Palun sisestage midagi vähemalt ühele antud väljadest.', + errorPrefix: 'Viga: ', + warningPrefix: 'Hoiatus: ', + + // Form.Validator.Extras + noSpace: 'Väli ei tohi sisaldada tühikuid.', + reqChkByNode: 'Ükski väljadest pole valitud.', + requiredChk: 'Välja täitmine on vajalik.', + reqChkByName: 'Palun valige üks {label}.', + match: 'Väli peab sobima {matchName} väljaga', + startDate: 'algkuupäev', + endDate: 'lõppkuupäev', + currentDate: 'praegune kuupäev', + afterDate: 'Kuupäev peab olema võrdne või pärast {label}.', + beforeDate: 'Kuupäev peab olema võrdne või enne {label}.', + startMonth: 'Palun valige algkuupäev.', + sameMonth: 'Antud kaks kuupäeva peavad olema samas kuus - peate muutma ühte kuupäeva.' + +}); + +/* +--- + +name: Locale.fa.Date + +description: Date messages for Persian. + +license: MIT-style license + +authors: + - Amir Hossein Hodjaty Pour + +requires: + - Locale + +provides: [Locale.fa.Date] + +... +*/ + +Locale.define('fa', 'Date', { + + months: ['ژانویه', 'فوریه', 'مارس', 'آپریل', 'مه', 'ژوئن', 'ژوئیه', 'آگوست', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر'], + months_abbr: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], + days: ['یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'], + days_abbr: ['ي', 'د', 'س', 'چ', 'پ', 'ج', 'ش'], + + // Culture's date order: MM/DD/YYYY + dateOrder: ['month', 'date', 'year'], + shortDate: '%m/%d/%Y', + shortTime: '%I:%M%p', + AM: 'ق.ظ', + PM: 'ب.ظ', + + // Date.Extras + ordinal: 'ام', + + lessThanMinuteAgo: 'کمتر از یک دقیقه پیش', + minuteAgo: 'حدود یک دقیقه پیش', + minutesAgo: '{delta} دقیقه پیش', + hourAgo: 'حدود یک ساعت پیش', + hoursAgo: 'حدود {delta} ساعت پیش', + dayAgo: '1 روز پیش', + daysAgo: '{delta} روز پیش', + weekAgo: '1 هفته پیش', + weeksAgo: '{delta} هفته پیش', + monthAgo: '1 ماه پیش', + monthsAgo: '{delta} ماه پیش', + yearAgo: '1 سال پیش', + yearsAgo: '{delta} سال پیش', + + lessThanMinuteUntil: 'کمتر از یک دقیقه از حالا', + minuteUntil: 'حدود یک دقیقه از حالا', + minutesUntil: '{delta} دقیقه از حالا', + hourUntil: 'حدود یک ساعت از حالا', + hoursUntil: 'حدود {delta} ساعت از حالا', + dayUntil: '1 روز از حالا', + daysUntil: '{delta} روز از حالا', + weekUntil: '1 هفته از حالا', + weeksUntil: '{delta} هفته از حالا', + monthUntil: '1 ماه از حالا', + monthsUntil: '{delta} ماه از حالا', + yearUntil: '1 سال از حالا', + yearsUntil: '{delta} سال از حالا' + +}); + +/* +--- + +name: Locale.fa.Form.Validator + +description: Form Validator messages for Persian. + +license: MIT-style license + +authors: + - Amir Hossein Hodjaty Pour + +requires: + - Locale + +provides: [Locale.fa.Form.Validator] + +... +*/ + +Locale.define('fa', 'FormValidator', { + + required: 'این فیلد الزامی است.', + minLength: 'شما باید حداقل {minLength} حرف وارد کنید ({length} حرف وارد کرده اید).', + maxLength: 'لطفا حداکثر {maxLength} حرف وارد کنید (شما {length} حرف وارد کرده اید).', + integer: 'لطفا از عدد صحیح استفاده کنید. اعداد اعشاری (مانند 1.25) مجاز نیستند.', + numeric: 'لطفا فقط داده عددی وارد کنید (مانند "1" یا "1.1" یا "1-" یا "1.1-").', + digits: 'لطفا فقط از اعداد و علامتها در این فیلد استفاده کنید (برای مثال شماره تلفن با خط تیره و نقطه قابل قبول است).', + alpha: 'لطفا فقط از حروف الفباء برای این بخش استفاده کنید. کاراکترهای دیگر و فاصله مجاز نیستند.', + alphanum: 'لطفا فقط از حروف الفباء و اعداد در این بخش استفاده کنید. کاراکترهای دیگر و فاصله مجاز نیستند.', + dateSuchAs: 'لطفا یک تاریخ معتبر مانند {date} وارد کنید.', + dateInFormatMDY: 'لطفا یک تاریخ معتبر به شکل MM/DD/YYYY وارد کنید (مانند "12/31/1999").', + email: 'لطفا یک آدرس ایمیل معتبر وارد کنید. برای مثال "fred@domain.com".', + url: 'لطفا یک URL معتبر مانند http://www.example.com وارد کنید.', + currencyDollar: 'لطفا یک محدوده معتبر برای این بخش وارد کنید مانند 100.00$ .', + oneRequired: 'لطفا حداقل یکی از فیلدها را پر کنید.', + errorPrefix: 'خطا: ', + warningPrefix: 'هشدار: ', + + // Form.Validator.Extras + noSpace: 'استفاده از فاصله در این بخش مجاز نیست.', + reqChkByNode: 'موردی انتخاب نشده است.', + requiredChk: 'این فیلد الزامی است.', + reqChkByName: 'لطفا یک {label} را انتخاب کنید.', + match: 'این فیلد باید با فیلد {matchName} مطابقت داشته باشد.', + startDate: 'تاریخ شروع', + endDate: 'تاریخ پایان', + currentDate: 'تاریخ کنونی', + afterDate: 'تاریخ میبایست برابر یا بعد از {label} باشد', + beforeDate: 'تاریخ میبایست برابر یا قبل از {label} باشد', + startMonth: 'لطفا ماه شروع را انتخاب کنید', + sameMonth: 'این دو تاریخ باید در یک ماه باشند - شما باید یکی یا هر دو را تغییر دهید.', + creditcard: 'شماره کارت اعتباری که وارد کرده اید معتبر نیست. لطفا شماره را بررسی کنید و مجددا تلاش کنید. {length} رقم وارد شده است.' + +}); + +/* +--- + +name: Locale.fi-FI.Date + +description: Date messages for Finnish. + +license: MIT-style license + +authors: + - ksel + +requires: + - Locale + +provides: [Locale.fi-FI.Date] + +... +*/ + +Locale.define('fi-FI', 'Date', { + + // NOTE: months and days are not capitalized in finnish + months: ['tammikuu', 'helmikuu', 'maaliskuu', 'huhtikuu', 'toukokuu', 'kesäkuu', 'heinäkuu', 'elokuu', 'syyskuu', 'lokakuu', 'marraskuu', 'joulukuu'], + + // these abbreviations are really not much used in finnish because they obviously won't abbreviate very much. ;) + // NOTE: sometimes one can see forms such as "tammi", "helmi", etc. but that is not proper finnish. + months_abbr: ['tammik.', 'helmik.', 'maalisk.', 'huhtik.', 'toukok.', 'kesäk.', 'heinäk.', 'elok.', 'syysk.', 'lokak.', 'marrask.', 'jouluk.'], + + days: ['sunnuntai', 'maanantai', 'tiistai', 'keskiviikko', 'torstai', 'perjantai', 'lauantai'], + days_abbr: ['su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'vajaa minuutti sitten', + minuteAgo: 'noin minuutti sitten', + minutesAgo: '{delta} minuuttia sitten', + hourAgo: 'noin tunti sitten', + hoursAgo: 'noin {delta} tuntia sitten', + dayAgo: 'päivä sitten', + daysAgo: '{delta} päivää sitten', + weekAgo: 'viikko sitten', + weeksAgo: '{delta} viikkoa sitten', + monthAgo: 'kuukausi sitten', + monthsAgo: '{delta} kuukautta sitten', + yearAgo: 'vuosi sitten', + yearsAgo: '{delta} vuotta sitten', + + lessThanMinuteUntil: 'vajaan minuutin kuluttua', + minuteUntil: 'noin minuutin kuluttua', + minutesUntil: '{delta} minuutin kuluttua', + hourUntil: 'noin tunnin kuluttua', + hoursUntil: 'noin {delta} tunnin kuluttua', + dayUntil: 'päivän kuluttua', + daysUntil: '{delta} päivän kuluttua', + weekUntil: 'viikon kuluttua', + weeksUntil: '{delta} viikon kuluttua', + monthUntil: 'kuukauden kuluttua', + monthsUntil: '{delta} kuukauden kuluttua', + yearUntil: 'vuoden kuluttua', + yearsUntil: '{delta} vuoden kuluttua' + +}); + +/* +--- + +name: Locale.fi-FI.Form.Validator + +description: Form Validator messages for Finnish. + +license: MIT-style license + +authors: + - ksel + +requires: + - Locale + +provides: [Locale.fi-FI.Form.Validator] + +... +*/ + +Locale.define('fi-FI', 'FormValidator', { + + required: 'Tämä kenttä on pakollinen.', + minLength: 'Ole hyvä ja anna vähintään {minLength} merkkiä (annoit {length} merkkiä).', + maxLength: 'Älä anna enempää kuin {maxLength} merkkiä (annoit {length} merkkiä).', + integer: 'Ole hyvä ja anna kokonaisluku. Luvut, joissa on desimaaleja (esim. 1.25) eivät ole sallittuja.', + numeric: 'Anna tähän kenttään lukuarvo (kuten "1" tai "1.1" tai "-1" tai "-1.1").', + digits: 'Käytä pelkästään numeroita ja välimerkkejä tässä kentässä (syötteet, kuten esim. puhelinnumero, jossa on väliviivoja, pilkkuja tai pisteitä, kelpaa).', + alpha: 'Anna tähän kenttään vain kirjaimia (a-z). Välilyönnit tai muut merkit eivät ole sallittuja.', + alphanum: 'Anna tähän kenttään vain kirjaimia (a-z) tai numeroita (0-9). Välilyönnit tai muut merkit eivät ole sallittuja.', + dateSuchAs: 'Ole hyvä ja anna kelvollinen päivmäärä, kuten esimerkiksi {date}', + dateInFormatMDY: 'Ole hyvä ja anna kelvollinen päivämäärä muodossa pp/kk/vvvv (kuten "12/31/1999")', + email: 'Ole hyvä ja anna kelvollinen sähköpostiosoite (kuten esimerkiksi "matti@meikalainen.com").', + url: 'Ole hyvä ja anna kelvollinen URL, kuten esimerkiksi http://www.example.com.', + currencyDollar: 'Ole hyvä ja anna kelvollinen eurosumma (kuten esimerkiksi 100,00 EUR) .', + oneRequired: 'Ole hyvä ja syötä jotakin ainakin johonkin näistä kentistä.', + errorPrefix: 'Virhe: ', + warningPrefix: 'Varoitus: ', + + // Form.Validator.Extras + noSpace: 'Tässä syötteessä ei voi olla välilyöntejä', + reqChkByNode: 'Ei valintoja.', + requiredChk: 'Tämä kenttä on pakollinen.', + reqChkByName: 'Ole hyvä ja valitse {label}.', + match: 'Tämän kentän tulee vastata kenttää {matchName}', + startDate: 'alkupäivämäärä', + endDate: 'loppupäivämäärä', + currentDate: 'nykyinen päivämäärä', + afterDate: 'Päivämäärän tulisi olla sama tai myöhäisempi ajankohta kuin {label}.', + beforeDate: 'Päivämäärän tulisi olla sama tai aikaisempi ajankohta kuin {label}.', + startMonth: 'Ole hyvä ja valitse aloituskuukausi', + sameMonth: 'Näiden kahden päivämäärän tulee olla saman kuun sisällä -- sinun pitää muuttaa jompaa kumpaa.', + creditcard: 'Annettu luottokortin numero ei kelpaa. Ole hyvä ja tarkista numero sekä yritä uudelleen. {length} numeroa syötetty.' + +}); + +/* +--- + +name: Locale.fi-FI.Number + +description: Finnish number messages + +license: MIT-style license + +authors: + - ksel + +requires: + - Locale + - Locale.EU.Number + +provides: [Locale.fi-FI.Number] + +... +*/ + +Locale.define('fi-FI', 'Number', { + + group: ' ' // grouped by space + +}).inherit('EU', 'Number'); + +/* +--- + +name: Locale.fr-FR.Date + +description: Date messages for French. + +license: MIT-style license + +authors: + - Nicolas Sorosac + - Antoine Abt + +requires: + - Locale + +provides: [Locale.fr-FR.Date] + +... +*/ + +Locale.define('fr-FR', 'Date', { + + months: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'], + months_abbr: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'], + days: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'], + days_abbr: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: function(dayOfMonth){ + return (dayOfMonth > 1) ? '' : 'er'; + }, + + lessThanMinuteAgo: "il y a moins d'une minute", + minuteAgo: 'il y a une minute', + minutesAgo: 'il y a {delta} minutes', + hourAgo: 'il y a une heure', + hoursAgo: 'il y a {delta} heures', + dayAgo: 'il y a un jour', + daysAgo: 'il y a {delta} jours', + weekAgo: 'il y a une semaine', + weeksAgo: 'il y a {delta} semaines', + monthAgo: 'il y a 1 mois', + monthsAgo: 'il y a {delta} mois', + yearthAgo: 'il y a 1 an', + yearsAgo: 'il y a {delta} ans', + + lessThanMinuteUntil: "dans moins d'une minute", + minuteUntil: 'dans une minute', + minutesUntil: 'dans {delta} minutes', + hourUntil: 'dans une heure', + hoursUntil: 'dans {delta} heures', + dayUntil: 'dans un jour', + daysUntil: 'dans {delta} jours', + weekUntil: 'dans 1 semaine', + weeksUntil: 'dans {delta} semaines', + monthUntil: 'dans 1 mois', + monthsUntil: 'dans {delta} mois', + yearUntil: 'dans 1 an', + yearsUntil: 'dans {delta} ans' + +}); + +/* +--- + +name: Locale.fr-FR.Form.Validator + +description: Form Validator messages for French. + +license: MIT-style license + +authors: + - Miquel Hudin + - Nicolas Sorosac + +requires: + - Locale + +provides: [Locale.fr-FR.Form.Validator] + +... +*/ + +/*eslint mootools-whitespace:0*/ + +Locale.define('fr-FR', 'FormValidator', { + + required: 'Ce champ est obligatoire.', + length: 'Veuillez saisir {length} caractère(s) (vous avez saisi {elLength} caractère(s)', + minLength: 'Veuillez saisir un minimum de {minLength} caractère(s) (vous avez saisi {length} caractère(s)).', + maxLength: 'Veuillez saisir un maximum de {maxLength} caractère(s) (vous avez saisi {length} caractère(s)).', + integer: 'Veuillez saisir un nombre entier dans ce champ. Les nombres décimaux (ex : "1,25") ne sont pas autorisés.', + numeric: 'Veuillez saisir uniquement des chiffres dans ce champ (ex : "1" ou "1,1" ou "-1" ou "-1,1").', + digits: "Veuillez saisir uniquement des chiffres et des signes de ponctuation dans ce champ (ex : un numéro de téléphone avec des traits d'union est autorisé).", + alpha: 'Veuillez saisir uniquement des lettres (a-z) dans ce champ. Les espaces ou autres caractères ne sont pas autorisés.', + alphanum: 'Veuillez saisir uniquement des lettres (a-z) ou des chiffres (0-9) dans ce champ. Les espaces ou autres caractères ne sont pas autorisés.', + dateSuchAs: 'Veuillez saisir une date correcte comme {date}', + dateInFormatMDY: 'Veuillez saisir une date correcte, au format JJ/MM/AAAA (ex : "31/11/1999").', + email: 'Veuillez saisir une adresse de courrier électronique. Par exemple "fred@domaine.com".', + url: 'Veuillez saisir une URL, comme http://www.exemple.com.', + currencyDollar: 'Veuillez saisir une quantité correcte. Par exemple 100,00€.', + oneRequired: 'Veuillez sélectionner au moins une de ces options.', + errorPrefix: 'Erreur : ', + warningPrefix: 'Attention : ', + + // Form.Validator.Extras + noSpace: "Ce champ n'accepte pas les espaces.", + reqChkByNode: "Aucun élément n'est sélectionné.", + requiredChk: 'Ce champ est obligatoire.', + reqChkByName: 'Veuillez sélectionner un(e) {label}.', + match: 'Ce champ doit correspondre avec le champ {matchName}.', + startDate: 'date de début', + endDate: 'date de fin', + currentDate: 'date actuelle', + afterDate: 'La date doit être identique ou postérieure à {label}.', + beforeDate: 'La date doit être identique ou antérieure à {label}.', + startMonth: 'Veuillez sélectionner un mois de début.', + sameMonth: 'Ces deux dates doivent être dans le même mois - vous devez en modifier une.', + creditcard: 'Le numéro de carte de crédit est invalide. Merci de vérifier le numéro et de réessayer. Vous avez entré {length} chiffre(s).' + +}); + +/* +--- + +name: Locale.fr-FR.Number + +description: Number messages for French. + +license: MIT-style license + +authors: + - Arian Stolwijk + - sv1l + +requires: + - Locale + - Locale.EU.Number + +provides: [Locale.fr-FR.Number] + +... +*/ + +Locale.define('fr-FR', 'Number', { + + group: ' ' // In fr-FR localization, group character is a blank space + +}).inherit('EU', 'Number'); + +/* +--- + +name: Locale.he-IL.Date + +description: Date messages for Hebrew. + +license: MIT-style license + +authors: + - Elad Ossadon + +requires: + - Locale + +provides: [Locale.he-IL.Date] + +... +*/ + +Locale.define('he-IL', 'Date', { + + months: ['ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'], + months_abbr: ['ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'], + days: ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'], + days_abbr: ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'], + + // Culture's date order: MM/DD/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 0, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'לפני פחות מדקה', + minuteAgo: 'לפני כדקה', + minutesAgo: 'לפני {delta} דקות', + hourAgo: 'לפני כשעה', + hoursAgo: 'לפני {delta} שעות', + dayAgo: 'לפני יום', + daysAgo: 'לפני {delta} ימים', + weekAgo: 'לפני שבוע', + weeksAgo: 'לפני {delta} שבועות', + monthAgo: 'לפני חודש', + monthsAgo: 'לפני {delta} חודשים', + yearAgo: 'לפני שנה', + yearsAgo: 'לפני {delta} שנים', + + lessThanMinuteUntil: 'בעוד פחות מדקה', + minuteUntil: 'בעוד כדקה', + minutesUntil: 'בעוד {delta} דקות', + hourUntil: 'בעוד כשעה', + hoursUntil: 'בעוד {delta} שעות', + dayUntil: 'בעוד יום', + daysUntil: 'בעוד {delta} ימים', + weekUntil: 'בעוד שבוע', + weeksUntil: 'בעוד {delta} שבועות', + monthUntil: 'בעוד חודש', + monthsUntil: 'בעוד {delta} חודשים', + yearUntil: 'בעוד שנה', + yearsUntil: 'בעוד {delta} שנים' + +}); + +/* +--- + +name: Locale.he-IL.Form.Validator + +description: Form Validator messages for Hebrew. + +license: MIT-style license + +authors: + - Elad Ossadon + +requires: + - Locale + +provides: [Locale.he-IL.Form.Validator] + +... +*/ + +Locale.define('he-IL', 'FormValidator', { + + required: 'נא למלא שדה זה.', + minLength: 'נא להזין לפחות {minLength} תווים (הזנת {length} תווים).', + maxLength: 'נא להזין עד {maxLength} תווים (הזנת {length} תווים).', + integer: 'נא להזין מספר שלם לשדה זה. מספרים עשרוניים (כמו 1.25) אינם חוקיים.', + numeric: 'נא להזין ערך מספרי בלבד בשדה זה (כמו "1", "1.1", "-1" או "-1.1").', + digits: 'נא להזין רק ספרות וסימני הפרדה בשדה זה (למשל, מספר טלפון עם מקפים או נקודות הוא חוקי).', + alpha: 'נא להזין רק אותיות באנגלית (a-z) בשדה זה. רווחים או תווים אחרים אינם חוקיים.', + alphanum: 'נא להזין רק אותריות באנגלית (a-z) או ספרות (0-9) בשדה זה. אווחרים או תווים אחרים אינם חוקיים.', + dateSuchAs: 'נא להזין תאריך חוקי, כמו {date}', + dateInFormatMDY: 'נא להזין תאריך חוקי בפורמט MM/DD/YYYY (כמו "12/31/1999")', + email: 'נא להזין כתובת אימייל חוקית. לדוגמה: "fred@domain.com".', + url: 'נא להזין כתובת אתר חוקית, כמו http://www.example.com.', + currencyDollar: 'נא להזין סכום דולרי חוקי. לדוגמה $100.00.', + oneRequired: 'נא לבחור לפחות בשדה אחד.', + errorPrefix: 'שגיאה: ', + warningPrefix: 'אזהרה: ', + + // Form.Validator.Extras + noSpace: 'אין להזין רווחים בשדה זה.', + reqChkByNode: 'נא לבחור אחת מהאפשרויות.', + requiredChk: 'שדה זה נדרש.', + reqChkByName: 'נא לבחור {label}.', + match: 'שדה זה צריך להתאים לשדה {matchName}', + startDate: 'תאריך ההתחלה', + endDate: 'תאריך הסיום', + currentDate: 'התאריך הנוכחי', + afterDate: 'התאריך צריך להיות זהה או אחרי {label}.', + beforeDate: 'התאריך צריך להיות זהה או לפני {label}.', + startMonth: 'נא לבחור חודש התחלה', + sameMonth: 'שני תאריכים אלה צריכים להיות באותו חודש - נא לשנות אחד התאריכים.', + creditcard: 'מספר כרטיס האשראי שהוזן אינו חוקי. נא לבדוק שנית. הוזנו {length} ספרות.' + +}); + +/* +--- + +name: Locale.he-IL.Number + +description: Number messages for Hebrew. + +license: MIT-style license + +authors: + - Elad Ossadon + +requires: + - Locale + +provides: [Locale.he-IL.Number] + +... +*/ + +Locale.define('he-IL', 'Number', { + + decimal: '.', + group: ',', + + currency: { + suffix: ' ₪' + } + +}); + +/* +--- + +name: Locale.hu-HU.Date + +description: Date messages for Hungarian. + +license: MIT-style license + +authors: + - Zsolt Szegheő + +requires: + - Locale + +provides: [Locale.hu-HU.Date] + +... +*/ + +Locale.define('hu-HU', 'Date', { + + months: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], + months_abbr: ['jan.', 'febr.', 'márc.', 'ápr.', 'máj.', 'jún.', 'júl.', 'aug.', 'szept.', 'okt.', 'nov.', 'dec.'], + days: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], + days_abbr: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], + + // Culture's date order: YYYY.MM.DD. + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y.%m.%d.', + shortTime: '%I:%M', + AM: 'de.', + PM: 'du.', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'alig egy perce', + minuteAgo: 'egy perce', + minutesAgo: '{delta} perce', + hourAgo: 'egy órája', + hoursAgo: '{delta} órája', + dayAgo: '1 napja', + daysAgo: '{delta} napja', + weekAgo: '1 hete', + weeksAgo: '{delta} hete', + monthAgo: '1 hónapja', + monthsAgo: '{delta} hónapja', + yearAgo: '1 éve', + yearsAgo: '{delta} éve', + + lessThanMinuteUntil: 'alig egy perc múlva', + minuteUntil: 'egy perc múlva', + minutesUntil: '{delta} perc múlva', + hourUntil: 'egy óra múlva', + hoursUntil: '{delta} óra múlva', + dayUntil: '1 nap múlva', + daysUntil: '{delta} nap múlva', + weekUntil: '1 hét múlva', + weeksUntil: '{delta} hét múlva', + monthUntil: '1 hónap múlva', + monthsUntil: '{delta} hónap múlva', + yearUntil: '1 év múlva', + yearsUntil: '{delta} év múlva' + +}); + +/* +--- + +name: Locale.hu-HU.Form.Validator + +description: Form Validator messages for Hungarian. + +license: MIT-style license + +authors: + - Zsolt Szegheő + +requires: + - Locale + +provides: [Locale.hu-HU.Form.Validator] + +... +*/ + +/*eslint mootools-whitespace:0*/ + +Locale.define('hu-HU', 'FormValidator', { + + required: 'A mező kitöltése kötelező.', + minLength: 'Legalább {minLength} karakter megadása szükséges (megadva {length} karakter).', + maxLength: 'Legfeljebb {maxLength} karakter megadása lehetséges (megadva {length} karakter).', + integer: 'Egész szám megadása szükséges. A tizedesjegyek (pl. 1.25) nem engedélyezettek.', + numeric: 'Szám megadása szükséges (pl. "1" vagy "1.1" vagy "-1" vagy "-1.1").', + digits: 'Csak számok és írásjelek megadása lehetséges (pl. telefonszám kötőjelek és/vagy perjelekkel).', + alpha: 'Csak betűk (a-z) megadása lehetséges. Szóköz és egyéb karakterek nem engedélyezettek.', + alphanum: 'Csak betűk (a-z) vagy számok (0-9) megadása lehetséges. Szóköz és egyéb karakterek nem engedélyezettek.', + dateSuchAs: 'Valós dátum megadása szükséges (pl. {date}).', + dateInFormatMDY: 'Valós dátum megadása szükséges ÉÉÉÉ.HH.NN. formában. (pl. "1999.12.31.")', + email: 'Valós e-mail cím megadása szükséges (pl. "fred@domain.hu").', + url: 'Valós URL megadása szükséges (pl. http://www.example.com).', + currencyDollar: 'Valós pénzösszeg megadása szükséges (pl. 100.00 Ft.).', + oneRequired: 'Az alábbi mezők legalább egyikének kitöltése kötelező.', + errorPrefix: 'Hiba: ', + warningPrefix: 'Figyelem: ', + + // Form.Validator.Extras + noSpace: 'A mező nem tartalmazhat szóközöket.', + reqChkByNode: 'Nincs egyetlen kijelölt elem sem.', + requiredChk: 'A mező kitöltése kötelező.', + reqChkByName: 'Egy {label} kiválasztása szükséges.', + match: 'A mezőnek egyeznie kell a(z) {matchName} mezővel.', + startDate: 'a kezdet dátuma', + endDate: 'a vég dátuma', + currentDate: 'jelenlegi dátum', + afterDate: 'A dátum nem lehet kisebb, mint {label}.', + beforeDate: 'A dátum nem lehet nagyobb, mint {label}.', + startMonth: 'Kezdeti hónap megadása szükséges.', + sameMonth: 'A két dátumnak ugyanazon hónapban kell lennie.', + creditcard: 'A megadott bankkártyaszám nem valódi (megadva {length} számjegy).' + +}); + +/* +--- + +name: Locale.it-IT.Date + +description: Date messages for Italian. + +license: MIT-style license. + +authors: + - Andrea Novero + - Valerio Proietti + +requires: + - Locale + +provides: [Locale.it-IT.Date] + +... +*/ + +Locale.define('it-IT', 'Date', { + + months: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'], + months_abbr: ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic'], + days: ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'], + days_abbr: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H.%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: 'º', + + lessThanMinuteAgo: 'meno di un minuto fa', + minuteAgo: 'circa un minuto fa', + minutesAgo: 'circa {delta} minuti fa', + hourAgo: "circa un'ora fa", + hoursAgo: 'circa {delta} ore fa', + dayAgo: 'circa 1 giorno fa', + daysAgo: 'circa {delta} giorni fa', + weekAgo: 'una settimana fa', + weeksAgo: '{delta} settimane fa', + monthAgo: 'un mese fa', + monthsAgo: '{delta} mesi fa', + yearAgo: 'un anno fa', + yearsAgo: '{delta} anni fa', + + lessThanMinuteUntil: 'tra meno di un minuto', + minuteUntil: 'tra circa un minuto', + minutesUntil: 'tra circa {delta} minuti', + hourUntil: "tra circa un'ora", + hoursUntil: 'tra circa {delta} ore', + dayUntil: 'tra circa un giorno', + daysUntil: 'tra circa {delta} giorni', + weekUntil: 'tra una settimana', + weeksUntil: 'tra {delta} settimane', + monthUntil: 'tra un mese', + monthsUntil: 'tra {delta} mesi', + yearUntil: 'tra un anno', + yearsUntil: 'tra {delta} anni' + +}); + +/* +--- + +name: Locale.it-IT.Form.Validator + +description: Form Validator messages for Italian. + +license: MIT-style license + +authors: + - Leonardo Laureti + - Andrea Novero + +requires: + - Locale + +provides: [Locale.it-IT.Form.Validator] + +... +*/ + +/*eslint mootools-whitespace:0*/ + +Locale.define('it-IT', 'FormValidator', { + + required: 'Il campo è obbligatorio.', + minLength: 'Inserire almeno {minLength} caratteri (ne sono stati inseriti {length}).', + maxLength: 'Inserire al massimo {maxLength} caratteri (ne sono stati inseriti {length}).', + integer: 'Inserire un numero intero. Non sono consentiti decimali (es.: 1.25).', + numeric: 'Inserire solo valori numerici (es.: "1" oppure "1.1" oppure "-1" oppure "-1.1").', + digits: 'Inserire solo numeri e caratteri di punteggiatura. Per esempio è consentito un numero telefonico con trattini o punti.', + alpha: 'Inserire solo lettere (a-z). Non sono consentiti spazi o altri caratteri.', + alphanum: 'Inserire solo lettere (a-z) o numeri (0-9). Non sono consentiti spazi o altri caratteri.', + dateSuchAs: 'Inserire una data valida del tipo {date}', + dateInFormatMDY: 'Inserire una data valida nel formato MM/GG/AAAA (es.: "12/31/1999")', + email: 'Inserire un indirizzo email valido. Per esempio "nome@dominio.com".', + url: 'Inserire un indirizzo valido. Per esempio "http://www.example.com".', + currencyDollar: 'Inserire un importo valido. Per esempio "$100.00".', + oneRequired: 'Completare almeno uno dei campi richiesti.', + errorPrefix: 'Errore: ', + warningPrefix: 'Attenzione: ', + + // Form.Validator.Extras + noSpace: 'Non sono consentiti spazi.', + reqChkByNode: 'Nessuna voce selezionata.', + requiredChk: 'Il campo è obbligatorio.', + reqChkByName: 'Selezionare un(a) {label}.', + match: 'Il valore deve corrispondere al campo {matchName}', + startDate: "data d'inizio", + endDate: 'data di fine', + currentDate: 'data attuale', + afterDate: 'La data deve corrispondere o essere successiva al {label}.', + beforeDate: 'La data deve corrispondere o essere precedente al {label}.', + startMonth: "Selezionare un mese d'inizio", + sameMonth: 'Le due date devono essere dello stesso mese - occorre modificarne una.' + +}); + +/* +--- + +name: Locale.ja-JP.Date + +description: Date messages for Japanese. + +license: MIT-style license + +authors: + - Noritaka Horio + +requires: + - Locale + +provides: [Locale.ja-JP.Date] + +... +*/ + +Locale.define('ja-JP', 'Date', { + + months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + months_abbr: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + days: ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'], + days_abbr: ['日', '月', '火', '水', '木', '金', '土'], + + // Culture's date order: YYYY/MM/DD + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y/%m/%d', + shortTime: '%H:%M', + AM: '午前', + PM: '午後', + firstDayOfWeek: 0, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: '1分以内前', + minuteAgo: '約1分前', + minutesAgo: '約{delta}分前', + hourAgo: '約1時間前', + hoursAgo: '約{delta}時間前', + dayAgo: '1日前', + daysAgo: '{delta}日前', + weekAgo: '1週間前', + weeksAgo: '{delta}週間前', + monthAgo: '1ヶ月前', + monthsAgo: '{delta}ヶ月前', + yearAgo: '1年前', + yearsAgo: '{delta}年前', + + lessThanMinuteUntil: '今から約1分以内', + minuteUntil: '今から約1分', + minutesUntil: '今から約{delta}分', + hourUntil: '今から約1時間', + hoursUntil: '今から約{delta}時間', + dayUntil: '今から1日間', + daysUntil: '今から{delta}日間', + weekUntil: '今から1週間', + weeksUntil: '今から{delta}週間', + monthUntil: '今から1ヶ月', + monthsUntil: '今から{delta}ヶ月', + yearUntil: '今から1年', + yearsUntil: '今から{delta}年' + +}); + +/* +--- + +name: Locale.ja-JP.Form.Validator + +description: Form Validator messages for Japanese. + +license: MIT-style license + +authors: + - Noritaka Horio + +requires: + - Locale + +provides: [Locale.ja-JP.Form.Validator] + +... +*/ + +Locale.define('ja-JP', 'FormValidator', { + + required: '入力は必須です。', + minLength: '入力文字数は{minLength}以上にしてください。({length}文字)', + maxLength: '入力文字数は{maxLength}以下にしてください。({length}文字)', + integer: '整数を入力してください。', + numeric: '入力できるのは数値だけです。(例: "1", "1.1", "-1", "-1.1"....)', + digits: '入力できるのは数値と句読記号です。 (例: -や+を含む電話番号など).', + alpha: '入力できるのは半角英字だけです。それ以外の文字は入力できません。', + alphanum: '入力できるのは半角英数字だけです。それ以外の文字は入力できません。', + dateSuchAs: '有効な日付を入力してください。{date}', + dateInFormatMDY: '日付の書式に誤りがあります。YYYY/MM/DD (i.e. "1999/12/31")', + email: 'メールアドレスに誤りがあります。', + url: 'URLアドレスに誤りがあります。', + currencyDollar: '金額に誤りがあります。', + oneRequired: 'ひとつ以上入力してください。', + errorPrefix: 'エラー: ', + warningPrefix: '警告: ', + + // FormValidator.Extras + noSpace: 'スペースは入力できません。', + reqChkByNode: '選択されていません。', + requiredChk: 'この項目は必須です。', + reqChkByName: '{label}を選択してください。', + match: '{matchName}が入力されている場合必須です。', + startDate: '開始日', + endDate: '終了日', + currentDate: '今日', + afterDate: '{label}以降の日付にしてください。', + beforeDate: '{label}以前の日付にしてください。', + startMonth: '開始月を選択してください。', + sameMonth: '日付が同一です。どちらかを変更してください。' + +}); + +/* +--- + +name: Locale.ja-JP.Number + +description: Number messages for Japanese. + +license: MIT-style license + +authors: + - Noritaka Horio + +requires: + - Locale + +provides: [Locale.ja-JP.Number] + +... +*/ + +Locale.define('ja-JP', 'Number', { + + decimal: '.', + group: ',', + + currency: { + decimals: 0, + prefix: '\\' + } + +}); + +/* +--- + +name: Locale.nl-NL.Date + +description: Date messages for Dutch. + +license: MIT-style license + +authors: + - Lennart Pilon + - Tim Wienk + +requires: + - Locale + +provides: [Locale.nl-NL.Date] + +... +*/ + +Locale.define('nl-NL', 'Date', { + + months: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], + months_abbr: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], + days: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], + days_abbr: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], + + // Culture's date order: DD-MM-YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d-%m-%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: 'e', + + lessThanMinuteAgo: 'minder dan een minuut geleden', + minuteAgo: 'ongeveer een minuut geleden', + minutesAgo: '{delta} minuten geleden', + hourAgo: 'ongeveer een uur geleden', + hoursAgo: 'ongeveer {delta} uur geleden', + dayAgo: 'een dag geleden', + daysAgo: '{delta} dagen geleden', + weekAgo: 'een week geleden', + weeksAgo: '{delta} weken geleden', + monthAgo: 'een maand geleden', + monthsAgo: '{delta} maanden geleden', + yearAgo: 'een jaar geleden', + yearsAgo: '{delta} jaar geleden', + + lessThanMinuteUntil: 'over minder dan een minuut', + minuteUntil: 'over ongeveer een minuut', + minutesUntil: 'over {delta} minuten', + hourUntil: 'over ongeveer een uur', + hoursUntil: 'over {delta} uur', + dayUntil: 'over ongeveer een dag', + daysUntil: 'over {delta} dagen', + weekUntil: 'over een week', + weeksUntil: 'over {delta} weken', + monthUntil: 'over een maand', + monthsUntil: 'over {delta} maanden', + yearUntil: 'over een jaar', + yearsUntil: 'over {delta} jaar' + +}); + +/* +--- + +name: Locale.nl-NL.Form.Validator + +description: Form Validator messages for Dutch. + +license: MIT-style license + +authors: + - Lennart Pilon + - Arian Stolwijk + - Tim Wienk + +requires: + - Locale + +provides: [Locale.nl-NL.Form.Validator] + +... +*/ + +Locale.define('nl-NL', 'FormValidator', { + + required: 'Dit veld is verplicht.', + length: 'Vul precies {length} karakters in (je hebt {elLength} karakters ingevoerd).', + minLength: 'Vul minimaal {minLength} karakters in (je hebt {length} karakters ingevoerd).', + maxLength: 'Vul niet meer dan {maxLength} karakters in (je hebt {length} karakters ingevoerd).', + integer: 'Vul een getal in. Getallen met decimalen (bijvoorbeeld 1.25) zijn niet toegestaan.', + numeric: 'Vul alleen numerieke waarden in (bijvoorbeeld "1" of "1.1" of "-1" of "-1.1").', + digits: 'Vul alleen nummers en leestekens in (bijvoorbeeld een telefoonnummer met streepjes is toegestaan).', + alpha: 'Vul alleen letters in (a-z). Spaties en andere karakters zijn niet toegestaan.', + alphanum: 'Vul alleen letters (a-z) of nummers (0-9) in. Spaties en andere karakters zijn niet toegestaan.', + dateSuchAs: 'Vul een geldige datum in, zoals {date}', + dateInFormatMDY: 'Vul een geldige datum, in het formaat MM/DD/YYYY (bijvoorbeeld "12/31/1999")', + email: 'Vul een geldig e-mailadres in. Bijvoorbeeld "fred@domein.nl".', + url: 'Vul een geldige URL in, zoals http://www.example.com.', + currencyDollar: 'Vul een geldig $ bedrag in. Bijvoorbeeld $100.00 .', + oneRequired: 'Vul iets in bij in ieder geval een van deze velden.', + warningPrefix: 'Waarschuwing: ', + errorPrefix: 'Fout: ', + + // Form.Validator.Extras + noSpace: 'Spaties zijn niet toegestaan in dit veld.', + reqChkByNode: 'Er zijn geen items geselecteerd.', + requiredChk: 'Dit veld is verplicht.', + reqChkByName: 'Selecteer een {label}.', + match: 'Dit veld moet overeen komen met het {matchName} veld', + startDate: 'de begin datum', + endDate: 'de eind datum', + currentDate: 'de huidige datum', + afterDate: 'De datum moet hetzelfde of na {label} zijn.', + beforeDate: 'De datum moet hetzelfde of voor {label} zijn.', + startMonth: 'Selecteer een begin maand', + sameMonth: 'Deze twee data moeten in dezelfde maand zijn - u moet een van beide aanpassen.', + creditcard: 'Het ingevulde creditcardnummer is niet geldig. Controleer het nummer en probeer opnieuw. {length} getallen ingevuld.' + +}); + +/* +--- + +name: Locale.nl-NL.Number + +description: Number messages for Dutch. + +license: MIT-style license + +authors: + - Arian Stolwijk + +requires: + - Locale + - Locale.EU.Number + +provides: [Locale.nl-NL.Number] + +... +*/ + +Locale.define('nl-NL').inherit('EU', 'Number'); + + + + +/* +--- + +name: Locale.no-NO.Date + +description: Date messages for Norwegian. + +license: MIT-style license + +authors: + - Espen 'Rexxars' Hovlandsdal + - Ole Tøsse Kolvik +requires: + - Locale + +provides: [Locale.no-NO.Date] + +... +*/ + +Locale.define('no-NO', 'Date', { + months: ['Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'], + months_abbr: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], + days: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'], + days_abbr: ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'], + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + lessThanMinuteAgo: 'mindre enn et minutt siden', + minuteAgo: 'omtrent et minutt siden', + minutesAgo: '{delta} minutter siden', + hourAgo: 'omtrent en time siden', + hoursAgo: 'omtrent {delta} timer siden', + dayAgo: '{delta} dag siden', + daysAgo: '{delta} dager siden', + weekAgo: 'en uke siden', + weeksAgo: '{delta} uker siden', + monthAgo: 'en måned siden', + monthsAgo: '{delta} måneder siden', + yearAgo: 'ett år siden', + yearsAgo: '{delta} år siden', + + lessThanMinuteUntil: 'mindre enn et minutt til', + minuteUntil: 'omtrent et minutt til', + minutesUntil: '{delta} minutter til', + hourUntil: 'omtrent en time til', + hoursUntil: 'omtrent {delta} timer til', + dayUntil: 'en dag til', + daysUntil: '{delta} dager til', + weekUntil: 'en uke til', + weeksUntil: '{delta} uker til', + monthUntil: 'en måned til', + monthsUntil: '{delta} måneder til', + yearUntil: 'et år til', + yearsUntil: '{delta} år til' +}); + +/* +--- + +name: Locale.no-NO.Form.Validator + +description: Form Validator messages for Norwegian. + +license: MIT-style license + +authors: + - Aaron Newton + - Espen 'Rexxars' Hovlandsdal + - Ole Tøsse Kolvik + +requires: + - Locale + +provides: [Locale.no-NO.Form.Validator] + +... +*/ + +Locale.define('no-NO', 'FormValidator', { + + required: 'Dette feltet er påkrevd.', + length: 'Skriv inn {length} tegn (du skrev {elLength} tegn)', + minLength: 'Skriv inn minst {minLength} tegn (du skrev {length} tegn).', + maxLength: 'Ikke skriv mer enn {maxLength} tegn (du skrev {length} tegn).', + integer: 'Skriv inn et tall i dette feltet. Tall med desimaler (f.eks. 1,25) er ikke tillat.', + numeric: 'Skriv kun inn numeriske verdier i dette feltet (f.eks. "1", "1.1", "-1" eller "-1.1").', + digits: 'Skriv kun nummer og skilletegn i dette feltet.', + alpha: 'Skriv kun bokstaver (a-å) i dette feltet. Ingen mellomrom eller andre tegn er tillat.', + alphanum: 'Skriv kun bokstaver (a-å) eller nummer (0-9) i dette feltet. Ingen mellomrom eller andre tegn er tillat.', + dateSuchAs: 'Skriv inn en gyldig dato, som f.eks. {date}', + dateInFormatMDY: 'Skriv inn en gyldig dato, f.eks. DD/MM/YYYY ("31/12/1999")', + email: 'Skriv inn en gyldig epost-adresse. F.eks. "ola.nordmann@example.com".', + url: 'Skriv inn en gyldig URL, f.eks. http://www.example.com.', + currencyDollar: 'Skriv inn et gyldig beløp. F.eks. 100,00.', + oneRequired: 'Minst ett av disse feltene må fylles ut.', + errorPrefix: 'Feil: ', + warningPrefix: 'Advarsel: ', + + // Form.Validator.Extras + noSpace: 'Mellomrom er ikke tillatt i dette feltet.', + reqChkByNode: 'Ingen objekter er valgt.', + requiredChk: 'Dette feltet er påkrevd.', + reqChkByName: 'Velg en {label}.', + match: 'Dette feltet må være lik {matchName}', + startDate: 'startdato', + endDate: 'sluttdato', + currentDate: 'dagens dato', + afterDate: 'Datoen må være den samme som eller etter {label}.', + beforeDate: 'Datoen må være den samme som eller før {label}.', + startMonth: 'Velg en startmåned', + sameMonth: 'Datoene må være i den samme måneden - velg den ene eller den andre.', + creditcard: 'Kortnummeret du skrev inn er ikke gyldig. Prøv igjen. Du skrev {length} siffer.' + +}); + +/* +--- + +name: Locale.no-NO.Number + +description: Number messages for Norwegian. + +license: MIT-style license + +authors: + - Arian Stolwijk + - Martin Lundgren + - Ole T�sse Kolvik + +requires: + - Locale + - Locale.EU.Number + +provides: [Locale.no-NO.Number] + +... +*/ + +Locale.define('no-NO', 'Number', { + + currency: { + prefix: 'NOK ' + } + +}).inherit('EU', 'Number'); + +/* +--- + +name: Locale.pl-PL.Date + +description: Date messages for Polish. + +license: MIT-style license + +authors: + - Oskar Krawczyk + +requires: + - Locale + +provides: [Locale.pl-PL.Date] + +... +*/ + +Locale.define('pl-PL', 'Date', { + + months: ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'], + months_abbr: ['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paź', 'lis', 'gru'], + days: ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'], + days_abbr: ['niedz.', 'pon.', 'wt.', 'śr.', 'czw.', 'pt.', 'sob.'], + + // Culture's date order: YYYY-MM-DD + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y-%m-%d', + shortTime: '%H:%M', + AM: 'nad ranem', + PM: 'po południu', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: function(dayOfMonth){ + return (dayOfMonth > 3 && dayOfMonth < 21) ? 'ty' : ['ty', 'szy', 'gi', 'ci', 'ty'][Math.min(dayOfMonth % 10, 4)]; + }, + + lessThanMinuteAgo: 'mniej niż minute temu', + minuteAgo: 'około minutę temu', + minutesAgo: '{delta} minut temu', + hourAgo: 'około godzinę temu', + hoursAgo: 'około {delta} godzin temu', + dayAgo: 'Wczoraj', + daysAgo: '{delta} dni temu', + + lessThanMinuteUntil: 'za niecałą minutę', + minuteUntil: 'za około minutę', + minutesUntil: 'za {delta} minut', + hourUntil: 'za około godzinę', + hoursUntil: 'za około {delta} godzin', + dayUntil: 'za 1 dzień', + daysUntil: 'za {delta} dni' + +}); + +/* +--- + +name: Locale.pl-PL.Form.Validator + +description: Form Validator messages for Polish. + +license: MIT-style license + +authors: + - Oskar Krawczyk + +requires: + - Locale + +provides: [Locale.pl-PL.Form.Validator] + +... +*/ + +Locale.define('pl-PL', 'FormValidator', { + + required: 'To pole jest wymagane.', + minLength: 'Wymagane jest przynajmniej {minLength} znaków (wpisanych zostało tylko {length}).', + maxLength: 'Dozwolone jest nie więcej niż {maxLength} znaków (wpisanych zostało {length})', + integer: 'To pole wymaga liczb całych. Liczby dziesiętne (np. 1.25) są niedozwolone.', + numeric: 'Prosimy używać tylko numerycznych wartości w tym polu (np. "1", "1.1", "-1" lub "-1.1").', + digits: 'Prosimy używać liczb oraz zankow punktuacyjnych w typ polu (dla przykładu, przy numerze telefonu myślniki i kropki są dozwolone).', + alpha: 'Prosimy używać tylko liter (a-z) w tym polu. Spacje oraz inne znaki są niedozwolone.', + alphanum: 'Prosimy używać tylko liter (a-z) lub liczb (0-9) w tym polu. Spacje oraz inne znaki są niedozwolone.', + dateSuchAs: 'Prosimy podać prawidłową datę w formacie: {date}', + dateInFormatMDY: 'Prosimy podać poprawną date w formacie DD.MM.RRRR (i.e. "12.01.2009")', + email: 'Prosimy podać prawidłowy adres e-mail, np. "jan@domena.pl".', + url: 'Prosimy podać prawidłowy adres URL, np. http://www.example.com.', + currencyDollar: 'Prosimy podać prawidłową sumę w PLN. Dla przykładu: 100.00 PLN.', + oneRequired: 'Prosimy wypełnić chociaż jedno z pól.', + errorPrefix: 'Błąd: ', + warningPrefix: 'Uwaga: ', + + // Form.Validator.Extras + noSpace: 'W tym polu nie mogą znajdować się spacje.', + reqChkByNode: 'Brak zaznaczonych elementów.', + requiredChk: 'To pole jest wymagane.', + reqChkByName: 'Prosimy wybrać z {label}.', + match: 'To pole musi być takie samo jak {matchName}', + startDate: 'data początkowa', + endDate: 'data końcowa', + currentDate: 'aktualna data', + afterDate: 'Podana data poinna być taka sama lub po {label}.', + beforeDate: 'Podana data poinna być taka sama lub przed {label}.', + startMonth: 'Prosimy wybrać początkowy miesiąc.', + sameMonth: 'Te dwie daty muszą być w zakresie tego samego miesiąca - wymagana jest zmiana któregoś z pól.' + +}); + +/* +--- + +name: Locale.pt-PT.Date + +description: Date messages for Portuguese. + +license: MIT-style license + +authors: + - Fabio Miranda Costa + +requires: + - Locale + +provides: [Locale.pt-PT.Date] + +... +*/ + +Locale.define('pt-PT', 'Date', { + + months: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'], + months_abbr: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'], + days: ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'], + days_abbr: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'], + + // Culture's date order: DD-MM-YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d-%m-%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: 'º', + + lessThanMinuteAgo: 'há menos de um minuto', + minuteAgo: 'há cerca de um minuto', + minutesAgo: 'há {delta} minutos', + hourAgo: 'há cerca de uma hora', + hoursAgo: 'há cerca de {delta} horas', + dayAgo: 'há um dia', + daysAgo: 'há {delta} dias', + weekAgo: 'há uma semana', + weeksAgo: 'há {delta} semanas', + monthAgo: 'há um mês', + monthsAgo: 'há {delta} meses', + yearAgo: 'há um ano', + yearsAgo: 'há {delta} anos', + + lessThanMinuteUntil: 'em menos de um minuto', + minuteUntil: 'em um minuto', + minutesUntil: 'em {delta} minutos', + hourUntil: 'em uma hora', + hoursUntil: 'em {delta} horas', + dayUntil: 'em um dia', + daysUntil: 'em {delta} dias', + weekUntil: 'em uma semana', + weeksUntil: 'em {delta} semanas', + monthUntil: 'em um mês', + monthsUntil: 'em {delta} meses', + yearUntil: 'em um ano', + yearsUntil: 'em {delta} anos' + +}); + +/* +--- + +name: Locale.pt-BR.Date + +description: Date messages for Portuguese (Brazil). + +license: MIT-style license + +authors: + - Fabio Miranda Costa + +requires: + - Locale + - Locale.pt-PT.Date + +provides: [Locale.pt-BR.Date] + +... +*/ + +Locale.define('pt-BR', 'Date', { + + // Culture's date order: DD/MM/YYYY + shortDate: '%d/%m/%Y' + +}).inherit('pt-PT', 'Date'); + +/* +--- + +name: Locale.pt-BR.Form.Validator + +description: Form Validator messages for Portuguese (Brazil). + +license: MIT-style license + +authors: + - Fábio Miranda Costa + +requires: + - Locale + +provides: [Locale.pt-BR.Form.Validator] + +... +*/ + +Locale.define('pt-BR', 'FormValidator', { + + required: 'Este campo é obrigatório.', + minLength: 'Digite pelo menos {minLength} caracteres (tamanho atual: {length}).', + maxLength: 'Não digite mais de {maxLength} caracteres (tamanho atual: {length}).', + integer: 'Por favor digite apenas um número inteiro neste campo. Não são permitidos números decimais (por exemplo, 1,25).', + numeric: 'Por favor digite apenas valores numéricos neste campo (por exemplo, "1" ou "1.1" ou "-1" ou "-1,1").', + digits: 'Por favor use apenas números e pontuação neste campo (por exemplo, um número de telefone com traços ou pontos é permitido).', + alpha: 'Por favor use somente letras (a-z). Espaço e outros caracteres não são permitidos.', + alphanum: 'Use somente letras (a-z) ou números (0-9) neste campo. Espaço e outros caracteres não são permitidos.', + dateSuchAs: 'Digite uma data válida, como {date}', + dateInFormatMDY: 'Digite uma data válida, como DD/MM/YYYY (por exemplo, "31/12/1999")', + email: 'Digite um endereço de email válido. Por exemplo "nome@dominio.com".', + url: 'Digite uma URL válida. Exemplo: http://www.example.com.', + currencyDollar: 'Digite um valor em dinheiro válido. Exemplo: R$100,00 .', + oneRequired: 'Digite algo para pelo menos um desses campos.', + errorPrefix: 'Erro: ', + warningPrefix: 'Aviso: ', + + // Form.Validator.Extras + noSpace: 'Não é possível digitar espaços neste campo.', + reqChkByNode: 'Não foi selecionado nenhum item.', + requiredChk: 'Este campo é obrigatório.', + reqChkByName: 'Por favor digite um {label}.', + match: 'Este campo deve ser igual ao campo {matchName}.', + startDate: 'a data inicial', + endDate: 'a data final', + currentDate: 'a data atual', + afterDate: 'A data deve ser igual ou posterior a {label}.', + beforeDate: 'A data deve ser igual ou anterior a {label}.', + startMonth: 'Por favor selecione uma data inicial.', + sameMonth: 'Estas duas datas devem ter o mesmo mês - você deve modificar uma das duas.', + creditcard: 'O número do cartão de crédito informado é inválido. Por favor verifique o valor e tente novamente. {length} números informados.' + +}); + +/* +--- + +name: Locale.pt-BR.Number + +description: Number messages for PT Brazilian. + +license: MIT-style license + +authors: + - Arian Stolwijk + - Danillo César + +requires: + - Locale + +provides: [Locale.pt-BR.Number] + +... +*/ + +Locale.define('pt-BR', 'Number', { + + decimal: ',', + group: '.', + + currency: { + prefix: 'R$ ' + } + +}); + + + +/* +--- + +name: Locale.pt-PT.Form.Validator + +description: Form Validator messages for Portuguese. + +license: MIT-style license + +authors: + - Miquel Hudin + +requires: + - Locale + +provides: [Locale.pt-PT.Form.Validator] + +... +*/ + +Locale.define('pt-PT', 'FormValidator', { + + required: 'Este campo é necessário.', + minLength: 'Digite pelo menos{minLength} caracteres (comprimento {length} caracteres).', + maxLength: 'Não insira mais de {maxLength} caracteres (comprimento {length} caracteres).', + integer: 'Digite um número inteiro neste domínio. Com números decimais (por exemplo, 1,25), não são permitidas.', + numeric: 'Digite apenas valores numéricos neste domínio (p.ex., "1" ou "1.1" ou "-1" ou "-1,1").', + digits: 'Por favor, use números e pontuação apenas neste campo (p.ex., um número de telefone com traços ou pontos é permitida).', + alpha: 'Por favor use somente letras (a-z), com nesta área. Não utilize espaços nem outros caracteres são permitidos.', + alphanum: 'Use somente letras (a-z) ou números (0-9) neste campo. Não utilize espaços nem outros caracteres são permitidos.', + dateSuchAs: 'Digite uma data válida, como {date}', + dateInFormatMDY: 'Digite uma data válida, como DD/MM/YYYY (p.ex. "31/12/1999")', + email: 'Digite um endereço de email válido. Por exemplo "fred@domain.com".', + url: 'Digite uma URL válida, como http://www.example.com.', + currencyDollar: 'Digite um valor válido $. Por exemplo $ 100,00. ', + oneRequired: 'Digite algo para pelo menos um desses insumos.', + errorPrefix: 'Erro: ', + warningPrefix: 'Aviso: ' + +}); + +/* +--- + +name: Locale.ru-RU-unicode.Date + +description: Date messages for Russian (utf-8). + +license: MIT-style license + +authors: + - Evstigneev Pavel + - Kuryanovich Egor + +requires: + - Locale + +provides: [Locale.ru-RU.Date] + +... +*/ + +(function(){ + +// Russian language pluralization rules, taken from CLDR project, http://unicode.org/cldr/ +// one -> n mod 10 is 1 and n mod 100 is not 11; +// few -> n mod 10 in 2..4 and n mod 100 not in 12..14; +// many -> n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14; +// other -> everything else (example 3.14) +var pluralize = function(n, one, few, many, other){ + var modulo10 = n % 10, + modulo100 = n % 100; + + if (modulo10 == 1 && modulo100 != 11){ + return one; + } else if ((modulo10 == 2 || modulo10 == 3 || modulo10 == 4) && !(modulo100 == 12 || modulo100 == 13 || modulo100 == 14)){ + return few; + } else if (modulo10 == 0 || (modulo10 == 5 || modulo10 == 6 || modulo10 == 7 || modulo10 == 8 || modulo10 == 9) || (modulo100 == 11 || modulo100 == 12 || modulo100 == 13 || modulo100 == 14)){ + return many; + } else { + return other; + } +}; + +Locale.define('ru-RU', 'Date', { + + months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'], + months_abbr: ['янв', 'февр', 'март', 'апр', 'май','июнь','июль','авг','сент','окт','нояб','дек'], + days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'], + days_abbr: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'], + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'меньше минуты назад', + minuteAgo: 'минуту назад', + minutesAgo: function(delta){ return '{delta} ' + pluralize(delta, 'минуту', 'минуты', 'минут') + ' назад'; }, + hourAgo: 'час назад', + hoursAgo: function(delta){ return '{delta} ' + pluralize(delta, 'час', 'часа', 'часов') + ' назад'; }, + dayAgo: 'вчера', + daysAgo: function(delta){ return '{delta} ' + pluralize(delta, 'день', 'дня', 'дней') + ' назад'; }, + weekAgo: 'неделю назад', + weeksAgo: function(delta){ return '{delta} ' + pluralize(delta, 'неделя', 'недели', 'недель') + ' назад'; }, + monthAgo: 'месяц назад', + monthsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'месяц', 'месяца', 'месяцев') + ' назад'; }, + yearAgo: 'год назад', + yearsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'год', 'года', 'лет') + ' назад'; }, + + lessThanMinuteUntil: 'меньше чем через минуту', + minuteUntil: 'через минуту', + minutesUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'минуту', 'минуты', 'минут') + ''; }, + hourUntil: 'через час', + hoursUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'час', 'часа', 'часов') + ''; }, + dayUntil: 'завтра', + daysUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'день', 'дня', 'дней') + ''; }, + weekUntil: 'через неделю', + weeksUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'неделю', 'недели', 'недель') + ''; }, + monthUntil: 'через месяц', + monthsUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'месяц', 'месяца', 'месяцев') + ''; }, + yearUntil: 'через', + yearsUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'год', 'года', 'лет') + ''; } + +}); + + + +})(); + +/* +--- + +name: Locale.ru-RU-unicode.Form.Validator + +description: Form Validator messages for Russian (utf-8). + +license: MIT-style license + +authors: + - Chernodarov Egor + +requires: + - Locale + +provides: [Locale.ru-RU.Form.Validator] + +... +*/ + +Locale.define('ru-RU', 'FormValidator', { + + required: 'Это поле обязательно к заполнению.', + minLength: 'Пожалуйста, введите хотя бы {minLength} символов (Вы ввели {length}).', + maxLength: 'Пожалуйста, введите не больше {maxLength} символов (Вы ввели {length}).', + integer: 'Пожалуйста, введите в это поле число. Дробные числа (например 1.25) тут не разрешены.', + numeric: 'Пожалуйста, введите в это поле число (например "1" или "1.1", или "-1", или "-1.1").', + digits: 'В этом поле Вы можете использовать только цифры и знаки пунктуации (например, телефонный номер со знаками дефиса или с точками).', + alpha: 'В этом поле можно использовать только латинские буквы (a-z). Пробелы и другие символы запрещены.', + alphanum: 'В этом поле можно использовать только латинские буквы (a-z) и цифры (0-9). Пробелы и другие символы запрещены.', + dateSuchAs: 'Пожалуйста, введите корректную дату {date}', + dateInFormatMDY: 'Пожалуйста, введите дату в формате ММ/ДД/ГГГГ (например "12/31/1999")', + email: 'Пожалуйста, введите корректный емейл-адрес. Для примера "fred@domain.com".', + url: 'Пожалуйста, введите правильную ссылку вида http://www.example.com.', + currencyDollar: 'Пожалуйста, введите сумму в долларах. Например: $100.00 .', + oneRequired: 'Пожалуйста, выберите хоть что-нибудь в одном из этих полей.', + errorPrefix: 'Ошибка: ', + warningPrefix: 'Внимание: ' + +}); + + + +/* +--- + +name: Locale.sk-SK.Date + +description: Date messages for Slovak. + +license: MIT-style license + +authors: + - Ivan Masár + +requires: + - Locale + +provides: [Locale.sk-SK.Date] + +... +*/ +(function(){ + +// Slovak language pluralization rules, see http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html +// one -> n is 1; 1 +// few -> n in 2..4; 2-4 +// other -> everything else 0, 5-999, 1.31, 2.31, 5.31... +var pluralize = function(n, one, few, other){ + if (n == 1) return one; + else if (n == 2 || n == 3 || n == 4) return few; + else return other; +}; + +Locale.define('sk-SK', 'Date', { + + months: ['Január', 'Február', 'Marec', 'Apríl', 'Máj', 'Jún', 'Júl', 'August', 'September', 'Október', 'November', 'December'], + months_abbr: ['januára', 'februára', 'marca', 'apríla', 'mája', 'júna', 'júla', 'augusta', 'septembra', 'októbra', 'novembra', 'decembra'], + days: ['Nedele', 'Pondelí', 'Úterý', 'Streda', 'Čtvrtek', 'Pátek', 'Sobota'], + days_abbr: ['ne', 'po', 'ut', 'st', 'št', 'pi', 'so'], + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H:%M', + AM: 'dop.', + PM: 'pop.', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'pred chvíľou', + minuteAgo: 'približne pred minútou', + minutesAgo: function(delta){ return 'pred {delta} ' + pluralize(delta, 'minútou', 'minútami', 'minútami'); }, + hourAgo: 'približne pred hodinou', + hoursAgo: function(delta){ return 'pred {delta} ' + pluralize(delta, 'hodinou', 'hodinami', 'hodinami'); }, + dayAgo: 'pred dňom', + daysAgo: function(delta){ return 'pred {delta} ' + pluralize(delta, 'dňom', 'dňami', 'dňami'); }, + weekAgo: 'pred týždňom', + weeksAgo: function(delta){ return 'pred {delta} ' + pluralize(delta, 'týždňom', 'týždňami', 'týždňami'); }, + monthAgo: 'pred mesiacom', + monthsAgo: function(delta){ return 'pred {delta} ' + pluralize(delta, 'mesiacom', 'mesiacmi', 'mesiacmi'); }, + yearAgo: 'pred rokom', + yearsAgo: function(delta){ return 'pred {delta} ' + pluralize(delta, 'rokom', 'rokmi', 'rokmi'); }, + + lessThanMinuteUntil: 'o chvíľu', + minuteUntil: 'približne o minútu', + minutesUntil: function(delta){ return 'o {delta} ' + pluralize(delta, 'minútu', 'minúty', 'minúty'); }, + hourUntil: 'približne o hodinu', + hoursUntil: function(delta){ return 'o {delta} ' + pluralize(delta, 'hodinu', 'hodiny', 'hodín'); }, + dayUntil: 'o deň', + daysUntil: function(delta){ return 'o {delta} ' + pluralize(delta, 'deň', 'dni', 'dní'); }, + weekUntil: 'o týždeň', + weeksUntil: function(delta){ return 'o {delta} ' + pluralize(delta, 'týždeň', 'týždne', 'týždňov'); }, + monthUntil: 'o mesiac', + monthsUntil: function(delta){ return 'o {delta} ' + pluralize(delta, 'mesiac', 'mesiace', 'mesiacov'); }, + yearUntil: 'o rok', + yearsUntil: function(delta){ return 'o {delta} ' + pluralize(delta, 'rok', 'roky', 'rokov'); } +}); + +})(); + +/* +--- + +name: Locale.sk-SK.Form.Validator + +description: Form Validator messages for Czech. + +license: MIT-style license + +authors: + - Ivan Masár + +requires: + - Locale + +provides: [Locale.sk-SK.Form.Validator] + +... +*/ + +Locale.define('sk-SK', 'FormValidator', { + + required: 'Táto položka je povinná.', + minLength: 'Zadajte prosím aspoň {minLength} znakov (momentálne {length} znakov).', + maxLength: 'Zadajte prosím menej ako {maxLength} znakov (momentálne {length} znakov).', + integer: 'Zadajte prosím celé číslo. Desetinné čísla (napr. 1.25) nie sú povolené.', + numeric: 'Zadajte len číselné hodnoty (t.j. „1“ alebo „1.1“ alebo „-1“ alebo „-1.1“).', + digits: 'Zadajte prosím len čísla a interpunkčné znamienka (napríklad telefónne číslo s pomlčkami albo bodkami je povolené).', + alpha: 'Zadajte prosím len písmená (a-z). Medzery alebo iné znaky nie sú povolené.', + alphanum: 'Zadajte prosím len písmená (a-z) alebo číslice (0-9). Medzery alebo iné znaky nie sú povolené.', + dateSuchAs: 'Zadajte prosím platný dátum v tvare {date}', + dateInFormatMDY: 'Zadajte prosím platný datum v tvare MM / DD / RRRR (t.j. „12/31/1999“)', + email: 'Zadajte prosím platnú emailovú adresu. Napríklad „fred@domain.com“.', + url: 'Zadajte prosím platnoú adresu URL v tvare http://www.example.com.', + currencyDollar: 'Zadajte prosím platnú čiastku. Napríklad $100.00.', + oneRequired: 'Zadajte prosím aspoň jednu hodnotu z týchto položiek.', + errorPrefix: 'Chyba: ', + warningPrefix: 'Upozornenie: ', + + // Form.Validator.Extras + noSpace: 'V tejto položle nie sú povolené medzery', + reqChkByNode: 'Nie sú vybrané žiadne položky.', + requiredChk: 'Táto položka je povinná.', + reqChkByName: 'Prosím vyberte {label}.', + match: 'Táto položka sa musí zhodovať s položkou {matchName}', + startDate: 'dátum začiatku', + endDate: 'dátum ukončenia', + currendDate: 'aktuálny dátum', + afterDate: 'Dátum by mal býť rovnaký alebo väčší ako {label}.', + beforeDate: 'Dátum by mal byť rovnaký alebo menší ako {label}.', + startMonth: 'Vyberte počiatočný mesiac.', + sameMonth: 'Tieto dva dátumy musia býť v rovnakom mesiaci - zmeňte jeden z nich.', + creditcard: 'Zadané číslo kreditnej karty je neplatné. Prosím, opravte ho. Bolo zadaných {length} číslic.' + +}); + +/* +--- + +name: Locale.si-SI.Date + +description: Date messages for Slovenian. + +license: MIT-style license + +authors: + - Radovan Lozej + +requires: + - Locale + +provides: [Locale.si-SI.Date] + +... +*/ + +(function(){ + +var pluralize = function(n, one, two, three, other){ + return (n >= 1 && n <= 3) ? arguments[n] : other; +}; + +Locale.define('sl-SI', 'Date', { + + months: ['januar', 'februar', 'marec', 'april', 'maj', 'junij', 'julij', 'avgust', 'september', 'oktober', 'november', 'december'], + months_abbr: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'avg', 'sep', 'okt', 'nov', 'dec'], + days: ['nedelja', 'ponedeljek', 'torek', 'sreda', 'četrtek', 'petek', 'sobota'], + days_abbr: ['ned', 'pon', 'tor', 'sre', 'čet', 'pet', 'sob'], + + // Culture's date order: DD.MM.YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d.%m.%Y', + shortTime: '%H.%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '.', + + lessThanMinuteAgo: 'manj kot minuto nazaj', + minuteAgo: 'minuto nazaj', + minutesAgo: function(delta){ return '{delta} ' + pluralize(delta, 'minuto', 'minuti', 'minute', 'minut') + ' nazaj'; }, + hourAgo: 'uro nazaj', + hoursAgo: function(delta){ return '{delta} ' + pluralize(delta, 'uro', 'uri', 'ure', 'ur') + ' nazaj'; }, + dayAgo: 'dan nazaj', + daysAgo: function(delta){ return '{delta} ' + pluralize(delta, 'dan', 'dneva', 'dni', 'dni') + ' nazaj'; }, + weekAgo: 'teden nazaj', + weeksAgo: function(delta){ return '{delta} ' + pluralize(delta, 'teden', 'tedna', 'tedne', 'tednov') + ' nazaj'; }, + monthAgo: 'mesec nazaj', + monthsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'mesec', 'meseca', 'mesece', 'mesecov') + ' nazaj'; }, + yearthAgo: 'leto nazaj', + yearsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'leto', 'leti', 'leta', 'let') + ' nazaj'; }, + + lessThanMinuteUntil: 'še manj kot minuto', + minuteUntil: 'še minuta', + minutesUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'minuta', 'minuti', 'minute', 'minut'); }, + hourUntil: 'še ura', + hoursUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'ura', 'uri', 'ure', 'ur'); }, + dayUntil: 'še dan', + daysUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'dan', 'dneva', 'dnevi', 'dni'); }, + weekUntil: 'še tedn', + weeksUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'teden', 'tedna', 'tedni', 'tednov'); }, + monthUntil: 'še mesec', + monthsUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'mesec', 'meseca', 'meseci', 'mesecov'); }, + yearUntil: 'še leto', + yearsUntil: function(delta){ return 'še {delta} ' + pluralize(delta, 'leto', 'leti', 'leta', 'let'); } + +}); + +})(); + +/* +--- + +name: Locale.si-SI.Form.Validator + +description: Form Validator messages for Slovenian. + +license: MIT-style license + +authors: + - Radovan Lozej + +requires: + - Locale + +provides: [Locale.si-SI.Form.Validator] + +... +*/ + +Locale.define('sl-SI', 'FormValidator', { + + required: 'To polje je obvezno', + minLength: 'Prosim, vnesite vsaj {minLength} znakov (vnesli ste {length} znakov).', + maxLength: 'Prosim, ne vnesite več kot {maxLength} znakov (vnesli ste {length} znakov).', + integer: 'Prosim, vnesite celo število. Decimalna števila (kot 1,25) niso dovoljena.', + numeric: 'Prosim, vnesite samo numerične vrednosti (kot "1" ali "1.1" ali "-1" ali "-1.1").', + digits: 'Prosim, uporabite številke in ločila le na tem polju (na primer, dovoljena je telefonska številka z pomišlaji ali pikami).', + alpha: 'Prosim, uporabite le črke v tem plju. Presledki in drugi znaki niso dovoljeni.', + alphanum: 'Prosim, uporabite samo črke ali številke v tem polju. Presledki in drugi znaki niso dovoljeni.', + dateSuchAs: 'Prosim, vnesite pravilen datum kot {date}', + dateInFormatMDY: 'Prosim, vnesite pravilen datum kot MM.DD.YYYY (primer "12.31.1999")', + email: 'Prosim, vnesite pravilen email naslov. Na primer "fred@domain.com".', + url: 'Prosim, vnesite pravilen URL kot http://www.example.com.', + currencyDollar: 'Prosim, vnesit epravilno vrednost €. Primer 100,00€ .', + oneRequired: 'Prosimo, vnesite nekaj za vsaj eno izmed teh polj.', + errorPrefix: 'Napaka: ', + warningPrefix: 'Opozorilo: ', + + // Form.Validator.Extras + noSpace: 'To vnosno polje ne dopušča presledkov.', + reqChkByNode: 'Nič niste izbrali.', + requiredChk: 'To polje je obvezno', + reqChkByName: 'Prosim, izberite {label}.', + match: 'To polje se mora ujemati z poljem {matchName}', + startDate: 'datum začetka', + endDate: 'datum konca', + currentDate: 'trenuten datum', + afterDate: 'Datum bi moral biti isti ali po {label}.', + beforeDate: 'Datum bi moral biti isti ali pred {label}.', + startMonth: 'Prosim, vnesite začetni datum', + sameMonth: 'Ta dva datuma morata biti v istem mesecu - premeniti morate eno ali drugo.', + creditcard: 'Številka kreditne kartice ni pravilna. Preverite številko ali poskusite še enkrat. Vnešenih {length} znakov.' + +}); + +/* +--- + +name: Locale.sv-SE.Date + +description: Date messages for Swedish. + +license: MIT-style license + +authors: + - Martin Lundgren + +requires: + - Locale + +provides: [Locale.sv-SE.Date] + +... +*/ + +Locale.define('sv-SE', 'Date', { + + months: ['januari', 'februari', 'mars', 'april', 'maj', 'juni', 'juli', 'augusti', 'september', 'oktober', 'november', 'december'], + months_abbr: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], + days: ['söndag', 'måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag'], + days_abbr: ['sön', 'mån', 'tis', 'ons', 'tor', 'fre', 'lör'], + + // Culture's date order: YYYY-MM-DD + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y-%m-%d', + shortTime: '%H:%M', + AM: '', + PM: '', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'mindre än en minut sedan', + minuteAgo: 'ungefär en minut sedan', + minutesAgo: '{delta} minuter sedan', + hourAgo: 'ungefär en timme sedan', + hoursAgo: 'ungefär {delta} timmar sedan', + dayAgo: '1 dag sedan', + daysAgo: '{delta} dagar sedan', + + lessThanMinuteUntil: 'mindre än en minut sedan', + minuteUntil: 'ungefär en minut sedan', + minutesUntil: '{delta} minuter sedan', + hourUntil: 'ungefär en timme sedan', + hoursUntil: 'ungefär {delta} timmar sedan', + dayUntil: '1 dag sedan', + daysUntil: '{delta} dagar sedan' + +}); + +/* +--- + +name: Locale.sv-SE.Form.Validator + +description: Form Validator messages for Swedish. + +license: MIT-style license + +authors: + - Martin Lundgren + +requires: + - Locale + +provides: [Locale.sv-SE.Form.Validator] + +... +*/ + +Locale.define('sv-SE', 'FormValidator', { + + required: 'Fältet är obligatoriskt.', + minLength: 'Ange minst {minLength} tecken (du angav {length} tecken).', + maxLength: 'Ange högst {maxLength} tecken (du angav {length} tecken). ', + integer: 'Ange ett heltal i fältet. Tal med decimaler (t.ex. 1,25) är inte tillåtna.', + numeric: 'Ange endast numeriska värden i detta fält (t.ex. "1" eller "1.1" eller "-1" eller "-1,1").', + digits: 'Använd endast siffror och skiljetecken i detta fält (till exempel ett telefonnummer med bindestreck tillåtet).', + alpha: 'Använd endast bokstäver (a-ö) i detta fält. Inga mellanslag eller andra tecken är tillåtna.', + alphanum: 'Använd endast bokstäver (a-ö) och siffror (0-9) i detta fält. Inga mellanslag eller andra tecken är tillåtna.', + dateSuchAs: 'Ange ett giltigt datum som t.ex. {date}', + dateInFormatMDY: 'Ange ett giltigt datum som t.ex. YYYY-MM-DD (i.e. "1999-12-31")', + email: 'Ange en giltig e-postadress. Till exempel "erik@domain.com".', + url: 'Ange en giltig webbadress som http://www.example.com.', + currencyDollar: 'Ange en giltig belopp. Exempelvis 100,00.', + oneRequired: 'Vänligen ange minst ett av dessa alternativ.', + errorPrefix: 'Fel: ', + warningPrefix: 'Varning: ', + + // Form.Validator.Extras + noSpace: 'Det får inte finnas några mellanslag i detta fält.', + reqChkByNode: 'Inga objekt är valda.', + requiredChk: 'Detta är ett obligatoriskt fält.', + reqChkByName: 'Välj en {label}.', + match: 'Detta fält måste matcha {matchName}', + startDate: 'startdatumet', + endDate: 'slutdatum', + currentDate: 'dagens datum', + afterDate: 'Datumet bör vara samma eller senare än {label}.', + beforeDate: 'Datumet bör vara samma eller tidigare än {label}.', + startMonth: 'Välj en start månad', + sameMonth: 'Dessa två datum måste vara i samma månad - du måste ändra det ena eller det andra.' + +}); + +/* +--- + +name: Locale.sv-SE.Number + +description: Number messages for Swedish. + +license: MIT-style license + +authors: + - Arian Stolwijk + - Martin Lundgren + +requires: + - Locale + - Locale.EU.Number + +provides: [Locale.sv-SE.Number] + +... +*/ + +Locale.define('sv-SE', 'Number', { + + currency: { + prefix: 'SEK ' + } + +}).inherit('EU', 'Number'); + +/* +--- + +name: Locale.tr-TR.Date + +description: Date messages for Turkish. + +license: MIT-style license + +authors: + - Faruk Can Bilir + +requires: + - Locale + +provides: [Locale.tr-TR.Date] + +... +*/ + +Locale.define('tr-TR', 'Date', { + + months: ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'], + months_abbr: ['Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz', 'Tem', 'Ağu', 'Eyl', 'Eki', 'Kas', 'Ara'], + days: ['Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'], + days_abbr: ['Pa', 'Pzt', 'Sa', 'Ça', 'Pe', 'Cu', 'Cmt'], + + // Culture's date order: MM/DD/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H.%M', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'bir dakikadan önce', + minuteAgo: 'yaklaşık bir dakika önce', + minutesAgo: '{delta} dakika önce', + hourAgo: 'bir saat kadar önce', + hoursAgo: '{delta} saat kadar önce', + dayAgo: 'bir gün önce', + daysAgo: '{delta} gün önce', + weekAgo: 'bir hafta önce', + weeksAgo: '{delta} hafta önce', + monthAgo: 'bir ay önce', + monthsAgo: '{delta} ay önce', + yearAgo: 'bir yıl önce', + yearsAgo: '{delta} yıl önce', + + lessThanMinuteUntil: 'bir dakikadan az sonra', + minuteUntil: 'bir dakika kadar sonra', + minutesUntil: '{delta} dakika sonra', + hourUntil: 'bir saat kadar sonra', + hoursUntil: '{delta} saat kadar sonra', + dayUntil: 'bir gün sonra', + daysUntil: '{delta} gün sonra', + weekUntil: 'bir hafta sonra', + weeksUntil: '{delta} hafta sonra', + monthUntil: 'bir ay sonra', + monthsUntil: '{delta} ay sonra', + yearUntil: 'bir yıl sonra', + yearsUntil: '{delta} yıl sonra' + +}); + +/* +--- + +name: Locale.tr-TR.Form.Validator + +description: Form Validator messages for Turkish. + +license: MIT-style license + +authors: + - Faruk Can Bilir + +requires: + - Locale + +provides: [Locale.tr-TR.Form.Validator] + +... +*/ + +Locale.define('tr-TR', 'FormValidator', { + + required: 'Bu alan zorunlu.', + minLength: 'Lütfen en az {minLength} karakter girin (siz {length} karakter girdiniz).', + maxLength: 'Lütfen en fazla {maxLength} karakter girin (siz {length} karakter girdiniz).', + integer: 'Lütfen bu alana sadece tamsayı girin. Ondalıklı sayılar (ör: 1.25) kullanılamaz.', + numeric: 'Lütfen bu alana sadece sayısal değer girin (ör: "1", "1.1", "-1" ya da "-1.1").', + digits: 'Lütfen bu alana sadece sayısal değer ve noktalama işareti girin (örneğin, nokta ve tire içeren bir telefon numarası kullanılabilir).', + alpha: 'Lütfen bu alanda yalnızca harf kullanın. Boşluk ve diğer karakterler kullanılamaz.', + alphanum: 'Lütfen bu alanda sadece harf ve rakam kullanın. Boşluk ve diğer karakterler kullanılamaz.', + dateSuchAs: 'Lütfen geçerli bir tarih girin (Ör: {date})', + dateInFormatMDY: 'Lütfen geçerli bir tarih girin (GG/AA/YYYY, ör: "31/12/1999")', + email: 'Lütfen geçerli bir email adresi girin. Ör: "kemal@etikan.com".', + url: 'Lütfen geçerli bir URL girin. Ör: http://www.example.com.', + currencyDollar: 'Lütfen geçerli bir TL miktarı girin. Ör: 100,00 TL .', + oneRequired: 'Lütfen en az bir tanesini doldurun.', + errorPrefix: 'Hata: ', + warningPrefix: 'Uyarı: ', + + // Form.Validator.Extras + noSpace: 'Bu alanda boşluk kullanılamaz.', + reqChkByNode: 'Hiçbir öğe seçilmemiş.', + requiredChk: 'Bu alan zorunlu.', + reqChkByName: 'Lütfen bir {label} girin.', + match: 'Bu alan, {matchName} alanıyla uyuşmalı', + startDate: 'başlangıç tarihi', + endDate: 'bitiş tarihi', + currentDate: 'bugünün tarihi', + afterDate: 'Tarih, {label} tarihiyle aynı gün ya da ondan sonra olmalıdır.', + beforeDate: 'Tarih, {label} tarihiyle aynı gün ya da ondan önce olmalıdır.', + startMonth: 'Lütfen bir başlangıç ayı seçin', + sameMonth: 'Bu iki tarih aynı ayda olmalı - bir tanesini değiştirmeniz gerekiyor.', + creditcard: 'Girdiğiniz kredi kartı numarası geçersiz. Lütfen kontrol edip tekrar deneyin. {length} hane girildi.' + +}); + +/* +--- + +name: Locale.tr-TR.Number + +description: Number messages for Turkish. + +license: MIT-style license + +authors: + - Faruk Can Bilir + +requires: + - Locale + - Locale.EU.Number + +provides: [Locale.tr-TR.Number] + +... +*/ + +Locale.define('tr-TR', 'Number', { + + currency: { + decimals: 0, + suffix: ' TL' + } + +}).inherit('EU', 'Number'); + +/* +--- + +name: Locale.uk-UA.Date + +description: Date messages for Ukrainian (utf-8). + +license: MIT-style license + +authors: + - Slik + +requires: + - Locale + +provides: [Locale.uk-UA.Date] + +... +*/ + +(function(){ + +var pluralize = function(n, one, few, many, other){ + var d = (n / 10).toInt(), + z = n % 10, + s = (n / 100).toInt(); + + if (d == 1 && n > 10) return many; + if (z == 1) return one; + if (z > 0 && z < 5) return few; + return many; +}; + +Locale.define('uk-UA', 'Date', { + + months: ['Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'], + months_abbr: ['Січ', 'Лют', 'Бер', 'Квіт', 'Трав', 'Черв', 'Лип', 'Серп', 'Вер', 'Жовт', 'Лист', 'Груд' ], + days: ['Неділя', 'Понеділок', 'Вівторок', 'Середа', 'Четвер', "П'ятниця", 'Субота'], + days_abbr: ['Нд', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'], + + // Culture's date order: DD/MM/YYYY + dateOrder: ['date', 'month', 'year'], + shortDate: '%d/%m/%Y', + shortTime: '%H:%M', + AM: 'до полудня', + PM: 'по полудню', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: 'меньше хвилини тому', + minuteAgo: 'хвилину тому', + minutesAgo: function(delta){ return '{delta} ' + pluralize(delta, 'хвилину', 'хвилини', 'хвилин') + ' тому'; }, + hourAgo: 'годину тому', + hoursAgo: function(delta){ return '{delta} ' + pluralize(delta, 'годину', 'години', 'годин') + ' тому'; }, + dayAgo: 'вчора', + daysAgo: function(delta){ return '{delta} ' + pluralize(delta, 'день', 'дня', 'днів') + ' тому'; }, + weekAgo: 'тиждень тому', + weeksAgo: function(delta){ return '{delta} ' + pluralize(delta, 'тиждень', 'тижні', 'тижнів') + ' тому'; }, + monthAgo: 'місяць тому', + monthsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'місяць', 'місяці', 'місяців') + ' тому'; }, + yearAgo: 'рік тому', + yearsAgo: function(delta){ return '{delta} ' + pluralize(delta, 'рік', 'роки', 'років') + ' тому'; }, + + lessThanMinuteUntil: 'за мить', + minuteUntil: 'через хвилину', + minutesUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'хвилину', 'хвилини', 'хвилин'); }, + hourUntil: 'через годину', + hoursUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'годину', 'години', 'годин'); }, + dayUntil: 'завтра', + daysUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'день', 'дня', 'днів'); }, + weekUntil: 'через тиждень', + weeksUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'тиждень', 'тижні', 'тижнів'); }, + monthUntil: 'через місяць', + monthesUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'місяць', 'місяці', 'місяців'); }, + yearUntil: 'через рік', + yearsUntil: function(delta){ return 'через {delta} ' + pluralize(delta, 'рік', 'роки', 'років'); } + +}); + +})(); + +/* +--- + +name: Locale.uk-UA.Form.Validator + +description: Form Validator messages for Ukrainian (utf-8). + +license: MIT-style license + +authors: + - Slik + +requires: + - Locale + +provides: [Locale.uk-UA.Form.Validator] + +... +*/ + +Locale.define('uk-UA', 'FormValidator', { + + required: 'Це поле повинне бути заповненим.', + minLength: 'Введіть хоча б {minLength} символів (Ви ввели {length}).', + maxLength: 'Кількість символів не може бути більше {maxLength} (Ви ввели {length}).', + integer: 'Введіть в це поле число. Дробові числа (наприклад 1.25) не дозволені.', + numeric: 'Введіть в це поле число (наприклад "1" або "1.1", або "-1", або "-1.1").', + digits: 'В цьому полі ви можете використовувати лише цифри і знаки пунктіації (наприклад, телефонний номер з знаками дефізу або з крапками).', + alpha: 'В цьому полі можна використовувати лише латинські літери (a-z). Пробіли і інші символи заборонені.', + alphanum: 'В цьому полі можна використовувати лише латинські літери (a-z) і цифри (0-9). Пробіли і інші символи заборонені.', + dateSuchAs: 'Введіть коректну дату {date}.', + dateInFormatMDY: 'Введіть дату в форматі ММ/ДД/РРРР (наприклад "12/31/2009").', + email: 'Введіть коректну адресу електронної пошти (наприклад "name@domain.com").', + url: 'Введіть коректне інтернет-посилання (наприклад http://www.example.com).', + currencyDollar: 'Введіть суму в доларах (наприклад "$100.00").', + oneRequired: 'Заповніть одне з полів.', + errorPrefix: 'Помилка: ', + warningPrefix: 'Увага: ', + + noSpace: 'Пробіли заборонені.', + reqChkByNode: 'Не відмічено жодного варіанту.', + requiredChk: 'Це поле повинне бути віміченим.', + reqChkByName: 'Будь ласка, відмітьте {label}.', + match: 'Це поле повинно відповідати {matchName}', + startDate: 'початкова дата', + endDate: 'кінцева дата', + currentDate: 'сьогоднішня дата', + afterDate: 'Ця дата повинна бути такою ж, або пізнішою за {label}.', + beforeDate: 'Ця дата повинна бути такою ж, або ранішою за {label}.', + startMonth: 'Будь ласка, виберіть початковий місяць', + sameMonth: 'Ці дати повинні відноситись одного і того ж місяця. Будь ласка, змініть одну з них.', + creditcard: 'Номер кредитної карти введений неправильно. Будь ласка, перевірте його. Введено {length} символів.' + +}); + +/* +--- + +name: Locale.zh-CH.Date + +description: Date messages for Chinese (simplified and traditional). + +license: MIT-style license + +authors: + - YMind Chan + +requires: + - Locale + +provides: [Locale.zh-CH.Date] + +... +*/ + +// Simplified Chinese +Locale.define('zh-CHS', 'Date', { + + months: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], + months_abbr: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'], + days: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], + days_abbr: ['日', '一', '二', '三', '四', '五', '六'], + + // Culture's date order: YYYY-MM-DD + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y-%m-%d', + shortTime: '%I:%M%p', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: '不到1分钟前', + minuteAgo: '大约1分钟前', + minutesAgo: '{delta}分钟之前', + hourAgo: '大约1小时前', + hoursAgo: '大约{delta}小时前', + dayAgo: '1天前', + daysAgo: '{delta}天前', + weekAgo: '1星期前', + weeksAgo: '{delta}星期前', + monthAgo: '1个月前', + monthsAgo: '{delta}个月前', + yearAgo: '1年前', + yearsAgo: '{delta}年前', + + lessThanMinuteUntil: '从现在开始不到1分钟', + minuteUntil: '从现在开始約1分钟', + minutesUntil: '从现在开始约{delta}分钟', + hourUntil: '从现在开始1小时', + hoursUntil: '从现在开始约{delta}小时', + dayUntil: '从现在开始1天', + daysUntil: '从现在开始{delta}天', + weekUntil: '从现在开始1星期', + weeksUntil: '从现在开始{delta}星期', + monthUntil: '从现在开始一个月', + monthsUntil: '从现在开始{delta}个月', + yearUntil: '从现在开始1年', + yearsUntil: '从现在开始{delta}年' + +}); + +// Traditional Chinese +Locale.define('zh-CHT', 'Date', { + + months: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], + months_abbr: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'], + days: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], + days_abbr: ['日', '一', '二', '三', '四', '五', '六'], + + // Culture's date order: YYYY-MM-DD + dateOrder: ['year', 'month', 'date'], + shortDate: '%Y-%m-%d', + shortTime: '%I:%M%p', + AM: 'AM', + PM: 'PM', + firstDayOfWeek: 1, + + // Date.Extras + ordinal: '', + + lessThanMinuteAgo: '不到1分鐘前', + minuteAgo: '大約1分鐘前', + minutesAgo: '{delta}分鐘之前', + hourAgo: '大約1小時前', + hoursAgo: '大約{delta}小時前', + dayAgo: '1天前', + daysAgo: '{delta}天前', + weekAgo: '1星期前', + weeksAgo: '{delta}星期前', + monthAgo: '1个月前', + monthsAgo: '{delta}个月前', + yearAgo: '1年前', + yearsAgo: '{delta}年前', + + lessThanMinuteUntil: '從現在開始不到1分鐘', + minuteUntil: '從現在開始約1分鐘', + minutesUntil: '從現在開始約{delta}分鐘', + hourUntil: '從現在開始1小時', + hoursUntil: '從現在開始約{delta}小時', + dayUntil: '從現在開始1天', + daysUntil: '從現在開始{delta}天', + weekUntil: '從現在開始1星期', + weeksUntil: '從現在開始{delta}星期', + monthUntil: '從現在開始一個月', + monthsUntil: '從現在開始{delta}個月', + yearUntil: '從現在開始1年', + yearsUntil: '從現在開始{delta}年' + +}); + +/* +--- + +name: Locale.zh-CH.Form.Validator + +description: Form Validator messages for Chinese (simplified and traditional). + +license: MIT-style license + +authors: + - YMind Chan + +requires: + - Locale + - Form.Validator + +provides: [Form.zh-CH.Form.Validator, Form.Validator.CurrencyYuanValidator] + +... +*/ + +// Simplified Chinese +Locale.define('zh-CHS', 'FormValidator', { + + required: '此项必填。', + minLength: '请至少输入 {minLength} 个字符 (已输入 {length} 个)。', + maxLength: '最多只能输入 {maxLength} 个字符 (已输入 {length} 个)。', + integer: '请输入一个整数,不能包含小数点。例如:"1", "200"。', + numeric: '请输入一个数字,例如:"1", "1.1", "-1", "-1.1"。', + digits: '请输入由数字和标点符号组成的内容。例如电话号码。', + alpha: '请输入 A-Z 的 26 个字母,不能包含空格或任何其他字符。', + alphanum: '请输入 A-Z 的 26 个字母或 0-9 的 10 个数字,不能包含空格或任何其他字符。', + dateSuchAs: '请输入合法的日期格式,如:{date}。', + dateInFormatMDY: '请输入合法的日期格式,例如:YYYY-MM-DD ("2010-12-31")。', + email: '请输入合法的电子信箱地址,例如:"fred@domain.com"。', + url: '请输入合法的 Url 地址,例如:http://www.example.com。', + currencyDollar: '请输入合法的货币符号,例如:¥100.0', + oneRequired: '请至少选择一项。', + errorPrefix: '错误:', + warningPrefix: '警告:', + + // Form.Validator.Extras + noSpace: '不能包含空格。', + reqChkByNode: '未选择任何内容。', + requiredChk: '此项必填。', + reqChkByName: '请选择 {label}.', + match: '必须与{matchName}相匹配', + startDate: '起始日期', + endDate: '结束日期', + currentDate: '当前日期', + afterDate: '日期必须等于或晚于 {label}.', + beforeDate: '日期必须早于或等于 {label}.', + startMonth: '请选择起始月份', + sameMonth: '您必须修改两个日期中的一个,以确保它们在同一月份。', + creditcard: '您输入的信用卡号码不正确。当前已输入{length}个字符。' + +}); + +// Traditional Chinese +Locale.define('zh-CHT', 'FormValidator', { + + required: '此項必填。 ', + minLength: '請至少輸入{minLength} 個字符(已輸入{length} 個)。 ', + maxLength: '最多只能輸入{maxLength} 個字符(已輸入{length} 個)。 ', + integer: '請輸入一個整數,不能包含小數點。例如:"1", "200"。 ', + numeric: '請輸入一個數字,例如:"1", "1.1", "-1", "-1.1"。 ', + digits: '請輸入由數字和標點符號組成的內容。例如電話號碼。 ', + alpha: '請輸入AZ 的26 個字母,不能包含空格或任何其他字符。 ', + alphanum: '請輸入AZ 的26 個字母或0-9 的10 個數字,不能包含空格或任何其他字符。 ', + dateSuchAs: '請輸入合法的日期格式,如:{date}。 ', + dateInFormatMDY: '請輸入合法的日期格式,例如:YYYY-MM-DD ("2010-12-31")。 ', + email: '請輸入合法的電子信箱地址,例如:"fred@domain.com"。 ', + url: '請輸入合法的Url 地址,例如:http://www.example.com。 ', + currencyDollar: '請輸入合法的貨幣符號,例如:¥100.0', + oneRequired: '請至少選擇一項。 ', + errorPrefix: '錯誤:', + warningPrefix: '警告:', + + // Form.Validator.Extras + noSpace: '不能包含空格。 ', + reqChkByNode: '未選擇任何內容。 ', + requiredChk: '此項必填。 ', + reqChkByName: '請選擇 {label}.', + match: '必須與{matchName}相匹配', + startDate: '起始日期', + endDate: '結束日期', + currentDate: '當前日期', + afterDate: '日期必須等於或晚於{label}.', + beforeDate: '日期必須早於或等於{label}.', + startMonth: '請選擇起始月份', + sameMonth: '您必須修改兩個日期中的一個,以確保它們在同一月份。 ', + creditcard: '您輸入的信用卡號碼不正確。當前已輸入{length}個字符。 ' + +}); + +Form.Validator.add('validate-currency-yuan', { + + errorMsg: function(){ + return Form.Validator.getMsg('currencyYuan'); + }, + + test: function(element){ + // [¥]1[##][,###]+[.##] + // [¥]1###+[.##] + // [¥]0.## + // [¥].## + return Form.Validator.getValidator('IsEmpty').test(element) || (/^¥?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(element.get('value')); + } + +}); + +/* +--- + +name: Locale.zh-CH.Number + +description: Number messages for for Chinese (simplified and traditional). + +license: MIT-style license + +authors: + - YMind Chan + +requires: + - Locale + - Locale.en-US.Number + +provides: [Locale.zh-CH.Number] + +... +*/ + +// Simplified Chinese +Locale.define('zh-CHS', 'Number', { + + currency: { + prefix: '¥ ' + } + +}).inherit('en-US', 'Number'); + +// Traditional Chinese +Locale.define('zh-CHT').inherit('zh-CHS', 'Number'); + +/* +--- + +script: Request.JSONP.js + +name: Request.JSONP + +description: Defines Request.JSONP, a class for cross domain javascript via script injection. + +license: MIT-style license + +authors: + - Aaron Newton + - Guillermo Rauch + - Arian Stolwijk + +requires: + - Core/Element + - Core/Request + - MooTools.More + +provides: [Request.JSONP] + +... +*/ + +Request.JSONP = new Class({ + + Implements: [Chain, Events, Options], + + options: {/* + onRequest: function(src, scriptElement){}, + onComplete: function(data){}, + onSuccess: function(data){}, + onCancel: function(){}, + onTimeout: function(){}, + onError: function(){}, */ + onRequest: function(src){ + if (this.options.log && window.console && console.log){ + console.log('JSONP retrieving script with url:' + src); + } + }, + onError: function(src){ + if (this.options.log && window.console && console.warn){ + console.warn('JSONP '+ src +' will fail in Internet Explorer, which enforces a 2083 bytes length limit on URIs'); + } + }, + url: '', + callbackKey: 'callback', + injectScript: document.head, + data: '', + link: 'ignore', + timeout: 0, + log: false + }, + + initialize: function(options){ + this.setOptions(options); + }, + + send: function(options){ + if (!Request.prototype.check.call(this, options)) return this; + this.running = true; + + var type = typeOf(options); + if (type == 'string' || type == 'element') options = {data: options}; + options = Object.merge(this.options, options || {}); + + var data = options.data; + switch (typeOf(data)){ + case 'element': data = document.id(data).toQueryString(); break; + case 'object': case 'hash': data = Object.toQueryString(data); + } + + var index = this.index = Request.JSONP.counter++, + key = 'request_' + index; + + var src = options.url + + (options.url.test('\\?') ? '&' :'?') + + (options.callbackKey) + + '=Request.JSONP.request_map.request_'+ index + + (data ? '&' + data : ''); + + if (src.length > 2083) this.fireEvent('error', src); + + Request.JSONP.request_map[key] = function(){ + delete Request.JSONP.request_map[key]; + this.success(arguments, index); + }.bind(this); + + var script = this.getScript(src).inject(options.injectScript); + this.fireEvent('request', [src, script]); + + if (options.timeout) this.timeout.delay(options.timeout, this); + + return this; + }, + + getScript: function(src){ + if (!this.script) this.script = new Element('script', { + type: 'text/javascript', + async: true, + src: src + }); + return this.script; + }, + + success: function(args){ + if (!this.running) return; + this.clear() + .fireEvent('complete', args).fireEvent('success', args) + .callChain(); + }, + + cancel: function(){ + if (this.running) this.clear().fireEvent('cancel'); + return this; + }, + + isRunning: function(){ + return !!this.running; + }, + + clear: function(){ + this.running = false; + if (this.script){ + this.script.destroy(); + this.script = null; + } + return this; + }, + + timeout: function(){ + if (this.running){ + this.running = false; + this.fireEvent('timeout', [this.script.get('src'), this.script]).fireEvent('failure').cancel(); + } + return this; + } + +}); + +Request.JSONP.counter = 0; +Request.JSONP.request_map = {}; + +/* +--- + +script: Request.Periodical.js + +name: Request.Periodical + +description: Requests the same URL to pull data from a server but increases the intervals if no data is returned to reduce the load + +license: MIT-style license + +authors: + - Christoph Pojer + +requires: + - Core/Request + - MooTools.More + +provides: [Request.Periodical] + +... +*/ + +Request.implement({ + + options: { + initialDelay: 5000, + delay: 5000, + limit: 60000 + }, + + startTimer: function(data){ + var fn = function(){ + if (!this.running) this.send({data: data}); + }; + this.lastDelay = this.options.initialDelay; + this.timer = fn.delay(this.lastDelay, this); + this.completeCheck = function(response){ + clearTimeout(this.timer); + this.lastDelay = (response) ? this.options.delay : (this.lastDelay + this.options.delay).min(this.options.limit); + this.timer = fn.delay(this.lastDelay, this); + }; + return this.addEvent('complete', this.completeCheck); + }, + + stopTimer: function(){ + clearTimeout(this.timer); + return this.removeEvent('complete', this.completeCheck); + } + +}); + +/* +--- + +script: Request.Queue.js + +name: Request.Queue + +description: Controls several instances of Request and its variants to run only one request at a time. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Core/Element + - Core/Request + - Class.Binds + +provides: [Request.Queue] + +... +*/ + +Request.Queue = new Class({ + + Implements: [Options, Events], + + Binds: ['attach', 'request', 'complete', 'cancel', 'success', 'failure', 'exception'], + + options: {/* + onRequest: function(argsPassedToOnRequest){}, + onSuccess: function(argsPassedToOnSuccess){}, + onComplete: function(argsPassedToOnComplete){}, + onCancel: function(argsPassedToOnCancel){}, + onException: function(argsPassedToOnException){}, + onFailure: function(argsPassedToOnFailure){}, + onEnd: function(){}, + */ + stopOnFailure: true, + autoAdvance: true, + concurrent: 1, + requests: {} + }, + + initialize: function(options){ + var requests; + if (options){ + requests = options.requests; + delete options.requests; + } + this.setOptions(options); + this.requests = {}; + this.queue = []; + this.reqBinders = {}; + + if (requests) this.addRequests(requests); + }, + + addRequest: function(name, request){ + this.requests[name] = request; + this.attach(name, request); + return this; + }, + + addRequests: function(obj){ + Object.each(obj, function(req, name){ + this.addRequest(name, req); + }, this); + return this; + }, + + getName: function(req){ + return Object.keyOf(this.requests, req); + }, + + attach: function(name, req){ + if (req._groupSend) return this; + ['request', 'complete', 'cancel', 'success', 'failure', 'exception'].each(function(evt){ + if (!this.reqBinders[name]) this.reqBinders[name] = {}; + this.reqBinders[name][evt] = function(){ + this['on' + evt.capitalize()].apply(this, [name, req].append(arguments)); + }.bind(this); + req.addEvent(evt, this.reqBinders[name][evt]); + }, this); + req._groupSend = req.send; + req.send = function(options){ + this.send(name, options); + return req; + }.bind(this); + return this; + }, + + removeRequest: function(req){ + var name = typeOf(req) == 'object' ? this.getName(req) : req; + if (!name && typeOf(name) != 'string') return this; + req = this.requests[name]; + if (!req) return this; + ['request', 'complete', 'cancel', 'success', 'failure', 'exception'].each(function(evt){ + req.removeEvent(evt, this.reqBinders[name][evt]); + }, this); + req.send = req._groupSend; + delete req._groupSend; + return this; + }, + + getRunning: function(){ + return Object.filter(this.requests, function(r){ + return r.running; + }); + }, + + isRunning: function(){ + return !!(Object.keys(this.getRunning()).length); + }, + + send: function(name, options){ + var q = function(){ + this.requests[name]._groupSend(options); + this.queue.erase(q); + }.bind(this); + + q.name = name; + if (Object.keys(this.getRunning()).length >= this.options.concurrent || (this.error && this.options.stopOnFailure)) this.queue.push(q); + else q(); + return this; + }, + + hasNext: function(name){ + return (!name) ? !!this.queue.length : !!this.queue.filter(function(q){ return q.name == name; }).length; + }, + + resume: function(){ + this.error = false; + (this.options.concurrent - Object.keys(this.getRunning()).length).times(this.runNext, this); + return this; + }, + + runNext: function(name){ + if (!this.queue.length) return this; + if (!name){ + this.queue[0](); + } else { + var found; + this.queue.each(function(q){ + if (!found && q.name == name){ + found = true; + q(); + } + }); + } + return this; + }, + + runAll: function(){ + this.queue.each(function(q){ + q(); + }); + return this; + }, + + clear: function(name){ + if (!name){ + this.queue.empty(); + } else { + this.queue = this.queue.map(function(q){ + if (q.name != name) return q; + else return false; + }).filter(function(q){ + return q; + }); + } + return this; + }, + + cancel: function(name){ + this.requests[name].cancel(); + return this; + }, + + onRequest: function(){ + this.fireEvent('request', arguments); + }, + + onComplete: function(){ + this.fireEvent('complete', arguments); + if (!this.queue.length) this.fireEvent('end'); + }, + + onCancel: function(){ + if (this.options.autoAdvance && !this.error) this.runNext(); + this.fireEvent('cancel', arguments); + }, + + onSuccess: function(){ + if (this.options.autoAdvance && !this.error) this.runNext(); + this.fireEvent('success', arguments); + }, + + onFailure: function(){ + this.error = true; + if (!this.options.stopOnFailure && this.options.autoAdvance) this.runNext(); + this.fireEvent('failure', arguments); + }, + + onException: function(){ + this.error = true; + if (!this.options.stopOnFailure && this.options.autoAdvance) this.runNext(); + this.fireEvent('exception', arguments); + } + +}); + +/* +--- + +script: Array.Extras.js + +name: Array.Extras + +description: Extends the Array native object to include useful methods to work with arrays. + +license: MIT-style license + +authors: + - Christoph Pojer + - Sebastian Markbåge + +requires: + - Core/Array + - MooTools.More + +provides: [Array.Extras] + +... +*/ + +(function(nil){ + +Array.implement({ + + min: function(){ + return Math.min.apply(null, this); + }, + + max: function(){ + return Math.max.apply(null, this); + }, + + average: function(){ + return this.length ? this.sum() / this.length : 0; + }, + + sum: function(){ + var result = 0, l = this.length; + if (l){ + while (l--){ + if (this[l] != null) result += parseFloat(this[l]); + } + } + return result; + }, + + unique: function(){ + return [].combine(this); + }, + + shuffle: function(){ + for (var i = this.length; i && --i;){ + var temp = this[i], r = Math.floor(Math.random() * ( i + 1 )); + this[i] = this[r]; + this[r] = temp; + } + return this; + }, + + reduce: function(fn, value){ + for (var i = 0, l = this.length; i < l; i++){ + if (i in this) value = value === nil ? this[i] : fn.call(null, value, this[i], i, this); + } + return value; + }, + + reduceRight: function(fn, value){ + var i = this.length; + while (i--){ + if (i in this) value = value === nil ? this[i] : fn.call(null, value, this[i], i, this); + } + return value; + }, + + pluck: function(prop){ + return this.map(function(item){ + return item[prop]; + }); + } + +}); + +})(); + +/* +--- + +script: Date.Extras.js + +name: Date.Extras + +description: Extends the Date native object to include extra methods (on top of those in Date.js). + +license: MIT-style license + +authors: + - Aaron Newton + - Scott Kyle + +requires: + - Date + +provides: [Date.Extras] + +... +*/ + +Date.implement({ + + timeDiffInWords: function(to){ + return Date.distanceOfTimeInWords(this, to || new Date); + }, + + timeDiff: function(to, separator){ + if (to == null) to = new Date; + var delta = ((to - this) / 1000).floor().abs(); + + var vals = [], + durations = [60, 60, 24, 365, 0], + names = ['s', 'm', 'h', 'd', 'y'], + value, duration; + + for (var item = 0; item < durations.length; item++){ + if (item && !delta) break; + value = delta; + if ((duration = durations[item])){ + value = (delta % duration); + delta = (delta / duration).floor(); + } + vals.unshift(value + (names[item] || '')); + } + + return vals.join(separator || ':'); + } + +}).extend({ + + distanceOfTimeInWords: function(from, to){ + return Date.getTimePhrase(((to - from) / 1000).toInt()); + }, + + getTimePhrase: function(delta){ + var suffix = (delta < 0) ? 'Until' : 'Ago'; + if (delta < 0) delta *= -1; + + var units = { + minute: 60, + hour: 60, + day: 24, + week: 7, + month: 52 / 12, + year: 12, + eon: Infinity + }; + + var msg = 'lessThanMinute'; + + for (var unit in units){ + var interval = units[unit]; + if (delta < 1.5 * interval){ + if (delta > 0.75 * interval) msg = unit; + break; + } + delta /= interval; + msg = unit + 's'; + } + + delta = delta.round(); + return Date.getMsg(msg + suffix, delta).substitute({delta: delta}); + } + +}).defineParsers( + + { + // "today", "tomorrow", "yesterday" + re: /^(?:tod|tom|yes)/i, + handler: function(bits){ + var d = new Date().clearTime(); + switch (bits[0]){ + case 'tom': return d.increment(); + case 'yes': return d.decrement(); + default: return d; + } + } + }, + + { + // "next Wednesday", "last Thursday" + re: /^(next|last) ([a-z]+)$/i, + handler: function(bits){ + var d = new Date().clearTime(); + var day = d.getDay(); + var newDay = Date.parseDay(bits[2], true); + var addDays = newDay - day; + if (newDay <= day) addDays += 7; + if (bits[1] == 'last') addDays -= 7; + return d.set('date', d.getDate() + addDays); + } + } + +).alias('timeAgoInWords', 'timeDiffInWords'); + +/* +--- + +name: Hash + +description: Contains Hash Prototypes. Provides a means for overcoming the JavaScript practical impossibility of extending native Objects. + +license: MIT-style license. + +requires: + - Core/Object + - MooTools.More + +provides: [Hash] + +... +*/ + +(function(){ + +if (this.Hash) return; + +var Hash = this.Hash = new Type('Hash', function(object){ + if (typeOf(object) == 'hash') object = Object.clone(object.getClean()); + for (var key in object) this[key] = object[key]; + return this; +}); + +this.$H = function(object){ + return new Hash(object); +}; + +Hash.implement({ + + forEach: function(fn, bind){ + Object.forEach(this, fn, bind); + }, + + getClean: function(){ + var clean = {}; + for (var key in this){ + if (this.hasOwnProperty(key)) clean[key] = this[key]; + } + return clean; + }, + + getLength: function(){ + var length = 0; + for (var key in this){ + if (this.hasOwnProperty(key)) length++; + } + return length; + } + +}); + +Hash.alias('each', 'forEach'); + +Hash.implement({ + + has: Object.prototype.hasOwnProperty, + + keyOf: function(value){ + return Object.keyOf(this, value); + }, + + hasValue: function(value){ + return Object.contains(this, value); + }, + + extend: function(properties){ + Hash.each(properties || {}, function(value, key){ + Hash.set(this, key, value); + }, this); + return this; + }, + + combine: function(properties){ + Hash.each(properties || {}, function(value, key){ + Hash.include(this, key, value); + }, this); + return this; + }, + + erase: function(key){ + if (this.hasOwnProperty(key)) delete this[key]; + return this; + }, + + get: function(key){ + return (this.hasOwnProperty(key)) ? this[key] : null; + }, + + set: function(key, value){ + if (!this[key] || this.hasOwnProperty(key)) this[key] = value; + return this; + }, + + empty: function(){ + Hash.each(this, function(value, key){ + delete this[key]; + }, this); + return this; + }, + + include: function(key, value){ + if (this[key] == undefined) this[key] = value; + return this; + }, + + map: function(fn, bind){ + return new Hash(Object.map(this, fn, bind)); + }, + + filter: function(fn, bind){ + return new Hash(Object.filter(this, fn, bind)); + }, + + every: function(fn, bind){ + return Object.every(this, fn, bind); + }, + + some: function(fn, bind){ + return Object.some(this, fn, bind); + }, + + getKeys: function(){ + return Object.keys(this); + }, + + getValues: function(){ + return Object.values(this); + }, + + toQueryString: function(base){ + return Object.toQueryString(this, base); + } + +}); + +Hash.alias({indexOf: 'keyOf', contains: 'hasValue'}); + + +})(); + + +/* +--- + +script: Hash.Extras.js + +name: Hash.Extras + +description: Extends the Hash Type to include getFromPath which allows a path notation to child elements. + +license: MIT-style license + +authors: + - Aaron Newton + +requires: + - Hash + - Object.Extras + +provides: [Hash.Extras] + +... +*/ + +Hash.implement({ + + getFromPath: function(notation){ + return Object.getFromPath(this, notation); + }, + + cleanValues: function(method){ + return new Hash(Object.cleanValues(this, method)); + }, + + run: function(){ + Object.run(arguments); + } + +}); + +/* +--- +name: Number.Format +description: Extends the Number Type object to include a number formatting method. +license: MIT-style license +authors: [Arian Stolwijk] +requires: [Core/Number, Locale.en-US.Number] +# Number.Extras is for compatibility +provides: [Number.Format, Number.Extras] +... +*/ + + +Number.implement({ + + format: function(options){ + // Thanks dojo and YUI for some inspiration + var value = this; + options = options ? Object.clone(options) : {}; + var getOption = function(key){ + if (options[key] != null) return options[key]; + return Locale.get('Number.' + key); + }; + + var negative = value < 0, + decimal = getOption('decimal'), + precision = getOption('precision'), + group = getOption('group'), + decimals = getOption('decimals'); + + if (negative){ + var negativeLocale = getOption('negative') || {}; + if (negativeLocale.prefix == null && negativeLocale.suffix == null) negativeLocale.prefix = '-'; + ['prefix', 'suffix'].each(function(key){ + if (negativeLocale[key]) options[key] = getOption(key) + negativeLocale[key]; + }); + + value = -value; + } + + var prefix = getOption('prefix'), + suffix = getOption('suffix'); + + if (decimals !== '' && decimals >= 0 && decimals <= 20) value = value.toFixed(decimals); + if (precision >= 1 && precision <= 21) value = (+value).toPrecision(precision); + + value += ''; + var index; + if (getOption('scientific') === false && value.indexOf('e') > -1){ + var match = value.split('e'), + zeros = +match[1]; + value = match[0].replace('.', ''); + + if (zeros < 0){ + zeros = -zeros - 1; + index = match[0].indexOf('.'); + if (index > -1) zeros -= index - 1; + while (zeros--) value = '0' + value; + value = '0.' + value; + } else { + index = match[0].lastIndexOf('.'); + if (index > -1) zeros -= match[0].length - index - 1; + while (zeros--) value += '0'; + } + } + + if (decimal != '.') value = value.replace('.', decimal); + + if (group){ + index = value.lastIndexOf(decimal); + index = (index > -1) ? index : value.length; + var newOutput = value.substring(index), + i = index; + + while (i--){ + if ((index - i - 1) % 3 == 0 && i != (index - 1)) newOutput = group + newOutput; + newOutput = value.charAt(i) + newOutput; + } + + value = newOutput; + } + + if (prefix) value = prefix + value; + if (suffix) value += suffix; + + return value; + }, + + formatCurrency: function(decimals){ + var locale = Locale.get('Number.currency') || {}; + if (locale.scientific == null) locale.scientific = false; + locale.decimals = decimals != null ? decimals + : (locale.decimals == null ? 2 : locale.decimals); + + return this.format(locale); + }, + + formatPercentage: function(decimals){ + var locale = Locale.get('Number.percentage') || {}; + if (locale.suffix == null) locale.suffix = '%'; + locale.decimals = decimals != null ? decimals + : (locale.decimals == null ? 2 : locale.decimals); + + return this.format(locale); + } + +}); + +/* +--- + +script: URI.js + +name: URI + +description: Provides methods useful in managing the window location and uris. + +license: MIT-style license + +authors: + - Sebastian Markbåge + - Aaron Newton + +requires: + - Core/Object + - Core/Class + - Core/Class.Extras + - Core/Element + - String.QueryString + +provides: [URI] + +... +*/ + +(function(){ + +var toString = function(){ + return this.get('value'); +}; + +var URI = this.URI = new Class({ + + Implements: Options, + + options: { + /*base: false*/ + }, + + regex: /^(?:(\w+):)?(?:\/\/(?:(?:([^:@\/]*):?([^:@\/]*))?@)?(\[[A-Fa-f0-9:]+\]|[^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/, + parts: ['scheme', 'user', 'password', 'host', 'port', 'directory', 'file', 'query', 'fragment'], + schemes: {http: 80, https: 443, ftp: 21, rtsp: 554, mms: 1755, file: 0}, + + initialize: function(uri, options){ + this.setOptions(options); + var base = this.options.base || URI.base; + if (!uri) uri = base; + + if (uri && uri.parsed) this.parsed = Object.clone(uri.parsed); + else this.set('value', uri.href || uri.toString(), base ? new URI(base) : false); + }, + + parse: function(value, base){ + var bits = value.match(this.regex); + if (!bits) return false; + bits.shift(); + return this.merge(bits.associate(this.parts), base); + }, + + merge: function(bits, base){ + if ((!bits || !bits.scheme) && (!base || !base.scheme)) return false; + if (base){ + this.parts.every(function(part){ + if (bits[part]) return false; + bits[part] = base[part] || ''; + return true; + }); + } + bits.port = bits.port || this.schemes[bits.scheme.toLowerCase()]; + bits.directory = bits.directory ? this.parseDirectory(bits.directory, base ? base.directory : '') : '/'; + return bits; + }, + + parseDirectory: function(directory, baseDirectory){ + directory = (directory.substr(0, 1) == '/' ? '' : (baseDirectory || '/')) + directory; + if (!directory.test(URI.regs.directoryDot)) return directory; + var result = []; + directory.replace(URI.regs.endSlash, '').split('/').each(function(dir){ + if (dir == '..' && result.length > 0) result.pop(); + else if (dir != '.') result.push(dir); + }); + return result.join('/') + '/'; + }, + + combine: function(bits){ + return bits.value || bits.scheme + '://' + + (bits.user ? bits.user + (bits.password ? ':' + bits.password : '') + '@' : '') + + (bits.host || '') + (bits.port && bits.port != this.schemes[bits.scheme] ? ':' + bits.port : '') + + (bits.directory || '/') + (bits.file || '') + + (bits.query ? '?' + bits.query : '') + + (bits.fragment ? '#' + bits.fragment : ''); + }, + + set: function(part, value, base){ + if (part == 'value'){ + var scheme = value.match(URI.regs.scheme); + if (scheme) scheme = scheme[1]; + if (scheme && this.schemes[scheme.toLowerCase()] == null) this.parsed = { scheme: scheme, value: value }; + else this.parsed = this.parse(value, (base || this).parsed) || (scheme ? { scheme: scheme, value: value } : { value: value }); + } else if (part == 'data'){ + this.setData(value); + } else { + this.parsed[part] = value; + } + return this; + }, + + get: function(part, base){ + switch (part){ + case 'value': return this.combine(this.parsed, base ? base.parsed : false); + case 'data' : return this.getData(); + } + return this.parsed[part] || ''; + }, + + go: function(){ + document.location.href = this.toString(); + }, + + toURI: function(){ + return this; + }, + + getData: function(key, part){ + var qs = this.get(part || 'query'); + if (!(qs || qs === 0)) return key ? null : {}; + var obj = qs.parseQueryString(); + return key ? obj[key] : obj; + }, + + setData: function(values, merge, part){ + if (typeof values == 'string'){ + var data = this.getData(); + data[arguments[0]] = arguments[1]; + values = data; + } else if (merge){ + values = Object.merge(this.getData(null, part), values); + } + return this.set(part || 'query', Object.toQueryString(values)); + }, + + clearData: function(part){ + return this.set(part || 'query', ''); + }, + + toString: toString, + valueOf: toString + +}); + +URI.regs = { + endSlash: /\/$/, + scheme: /^(\w+):/, + directoryDot: /\.\/|\.$/ +}; + +URI.base = new URI(Array.convert(document.getElements('base[href]', true)).getLast(), {base: document.location}); + +String.implement({ + + toURI: function(options){ + return new URI(this, options); + } + +}); + +})(); + +/* +--- + +script: URI.Relative.js + +name: URI.Relative + +description: Extends the URI class to add methods for computing relative and absolute urls. + +license: MIT-style license + +authors: + - Sebastian Markbåge + + +requires: + - Class.refactor + - URI + +provides: [URI.Relative] + +... +*/ + +URI = Class.refactor(URI, { + + combine: function(bits, base){ + if (!base || bits.scheme != base.scheme || bits.host != base.host || bits.port != base.port) + return this.previous.apply(this, arguments); + var end = bits.file + (bits.query ? '?' + bits.query : '') + (bits.fragment ? '#' + bits.fragment : ''); + + if (!base.directory) return (bits.directory || (bits.file ? '' : './')) + end; + + var baseDir = base.directory.split('/'), + relDir = bits.directory.split('/'), + path = '', + offset; + + var i = 0; + for (offset = 0; offset < baseDir.length && offset < relDir.length && baseDir[offset] == relDir[offset]; offset++); + for (i = 0; i < baseDir.length - offset - 1; i++) path += '../'; + for (i = offset; i < relDir.length - 1; i++) path += relDir[i] + '/'; + + return (path || (bits.file ? '' : './')) + end; + }, + + toAbsolute: function(base){ + base = new URI(base); + if (base) base.set('directory', '').set('file', ''); + return this.toRelative(base); + }, + + toRelative: function(base){ + return this.get('value', new URI(base)); + } + +}); + +/* +--- + +script: Assets.js + +name: Assets + +description: Provides methods to dynamically load JavaScript, CSS, and Image files into the document. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Element.Event + - MooTools.More + +provides: [Assets, Asset.javascript, Asset.css, Asset.image, Asset.images] + +... +*/ +;(function(){ + +var Asset = this.Asset = { + + javascript: function(source, properties){ + if (!properties) properties = {}; + + var script = new Element('script', {src: source, type: 'text/javascript'}), + doc = properties.document || document, + load = properties.onload || properties.onLoad; + + delete properties.onload; + delete properties.onLoad; + delete properties.document; + + if (load){ + if (!script.addEventListener){ + script.addEvent('readystatechange', function(){ + if (['loaded', 'complete'].contains(this.readyState)) load.call(this); + }); + } else { + script.addEvent('load', load); + } + } + + return script.set(properties).inject(doc.head); + }, + + css: function(source, properties){ + if (!properties) properties = {}; + + var load = properties.onload || properties.onLoad, + doc = properties.document || document, + timeout = properties.timeout || 3000; + + ['onload', 'onLoad', 'document'].each(function(prop){ + delete properties[prop]; + }); + + var link = new Element('link', { + type: 'text/css', + rel: 'stylesheet', + media: 'screen', + href: source + }).setProperties(properties).inject(doc.head); + + if (load){ + // based on article at http://www.yearofmoo.com/2011/03/cross-browser-stylesheet-preloading.html + var loaded = false, retries = 0; + var check = function(){ + var stylesheets = document.styleSheets; + for (var i = 0; i < stylesheets.length; i++){ + var file = stylesheets[i]; + var owner = file.ownerNode ? file.ownerNode : file.owningElement; + if (owner && owner == link){ + loaded = true; + return load.call(link); + } + } + retries++; + if (!loaded && retries < timeout / 50) return setTimeout(check, 50); + }; + setTimeout(check, 0); + } + return link; + }, + + image: function(source, properties){ + if (!properties) properties = {}; + + var image = new Image(), + element = document.id(image) || new Element('img'); + + ['load', 'abort', 'error'].each(function(name){ + var type = 'on' + name, + cap = 'on' + name.capitalize(), + event = properties[type] || properties[cap] || function(){}; + + delete properties[cap]; + delete properties[type]; + + image[type] = function(){ + if (!image) return; + if (!element.parentNode){ + element.width = image.width; + element.height = image.height; + } + image = image.onload = image.onabort = image.onerror = null; + event.delay(1, element, element); + element.fireEvent(name, element, 1); + }; + }); + + image.src = element.src = source; + if (image && image.complete) image.onload.delay(1); + return element.set(properties); + }, + + images: function(sources, options){ + sources = Array.convert(sources); + + var fn = function(){}, + counter = 0; + + options = Object.merge({ + onComplete: fn, + onProgress: fn, + onError: fn, + properties: {} + }, options); + + return new Elements(sources.map(function(source, index){ + return Asset.image(source, Object.append(options.properties, { + onload: function(){ + counter++; + options.onProgress.call(this, counter, index, source); + if (counter == sources.length) options.onComplete(); + }, + onerror: function(){ + counter++; + options.onError.call(this, counter, index, source); + if (counter == sources.length) options.onComplete(); + } + })); + })); + } + +}; + +})(); + +/* +--- + +script: Color.js + +name: Color + +description: Class for creating and manipulating colors in JavaScript. Supports HSB -> RGB Conversions and vice versa. + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Array + - Core/String + - Core/Number + - Core/Hash + - Core/Function + - MooTools.More + +provides: [Color] + +... +*/ + +(function(){ + +var Color = this.Color = new Type('Color', function(color, type){ + if (arguments.length >= 3){ + type = 'rgb'; color = Array.slice(arguments, 0, 3); + } else if (typeof color == 'string'){ + if (color.match(/rgb/)) color = color.rgbToHex().hexToRgb(true); + else if (color.match(/hsb/)) color = color.hsbToRgb(); + else color = color.hexToRgb(true); + } + type = type || 'rgb'; + switch (type){ + case 'hsb': + var old = color; + color = color.hsbToRgb(); + color.hsb = old; + break; + case 'hex': color = color.hexToRgb(true); break; + } + color.rgb = color.slice(0, 3); + color.hsb = color.hsb || color.rgbToHsb(); + color.hex = color.rgbToHex(); + return Object.append(color, this); +}); + +Color.implement({ + + mix: function(){ + var colors = Array.slice(arguments); + var alpha = (typeOf(colors.getLast()) == 'number') ? colors.pop() : 50; + var rgb = this.slice(); + colors.each(function(color){ + color = new Color(color); + for (var i = 0; i < 3; i++) rgb[i] = Math.round((rgb[i] / 100 * (100 - alpha)) + (color[i] / 100 * alpha)); + }); + return new Color(rgb, 'rgb'); + }, + + invert: function(){ + return new Color(this.map(function(value){ + return 255 - value; + })); + }, + + setHue: function(value){ + return new Color([value, this.hsb[1], this.hsb[2]], 'hsb'); + }, + + setSaturation: function(percent){ + return new Color([this.hsb[0], percent, this.hsb[2]], 'hsb'); + }, + + setBrightness: function(percent){ + return new Color([this.hsb[0], this.hsb[1], percent], 'hsb'); + } + +}); + +this.$RGB = function(r, g, b){ + return new Color([r, g, b], 'rgb'); +}; + +this.$HSB = function(h, s, b){ + return new Color([h, s, b], 'hsb'); +}; + +this.$HEX = function(hex){ + return new Color(hex, 'hex'); +}; + +Array.implement({ + + rgbToHsb: function(){ + var red = this[0], + green = this[1], + blue = this[2], + hue = 0, + max = Math.max(red, green, blue), + min = Math.min(red, green, blue), + delta = max - min, + brightness = max / 255, + saturation = (max != 0) ? delta / max : 0; + + if (saturation != 0){ + var rr = (max - red) / delta; + var gr = (max - green) / delta; + var br = (max - blue) / delta; + if (red == max) hue = br - gr; + else if (green == max) hue = 2 + rr - br; + else hue = 4 + gr - rr; + hue /= 6; + if (hue < 0) hue++; + } + return [Math.round(hue * 360), Math.round(saturation * 100), Math.round(brightness * 100)]; + }, + + hsbToRgb: function(){ + var br = Math.round(this[2] / 100 * 255); + if (this[1] == 0){ + return [br, br, br]; + } else { + var hue = this[0] % 360; + var f = hue % 60; + var p = Math.round((this[2] * (100 - this[1])) / 10000 * 255); + var q = Math.round((this[2] * (6000 - this[1] * f)) / 600000 * 255); + var t = Math.round((this[2] * (6000 - this[1] * (60 - f))) / 600000 * 255); + switch (Math.floor(hue / 60)){ + case 0: return [br, t, p]; + case 1: return [q, br, p]; + case 2: return [p, br, t]; + case 3: return [p, q, br]; + case 4: return [t, p, br]; + case 5: return [br, p, q]; + } + } + return false; + } + +}); + +String.implement({ + + rgbToHsb: function(){ + var rgb = this.match(/\d{1,3}/g); + return (rgb) ? rgb.rgbToHsb() : null; + }, + + hsbToRgb: function(){ + var hsb = this.match(/\d{1,3}/g); + return (hsb) ? hsb.hsbToRgb() : null; + } + +}); + +})(); + + +/* +--- + +script: Group.js + +name: Group + +description: Class for monitoring collections of events + +license: MIT-style license + +authors: + - Valerio Proietti + +requires: + - Core/Events + - MooTools.More + +provides: [Group] + +... +*/ + +(function(){ + +var Group = this.Group = new Class({ + + initialize: function(){ + this.instances = Array.flatten(arguments); + }, + + addEvent: function(type, fn){ + var instances = this.instances, + len = instances.length, + togo = len, + args = new Array(len), + self = this; + + instances.each(function(instance, i){ + instance.addEvent(type, function(){ + if (!args[i]) togo--; + args[i] = arguments; + if (!togo){ + fn.call(self, instances, instance, args); + togo = len; + args = new Array(len); + } + }); + }); + } + +}); + +})(); + +/* +--- + +script: Hash.Cookie.js + +name: Hash.Cookie + +description: Class for creating, reading, and deleting Cookies in JSON format. + +license: MIT-style license + +authors: + - Valerio Proietti + - Aaron Newton + +requires: + - Core/Cookie + - Core/JSON + - MooTools.More + - Hash + +provides: [Hash.Cookie] + +... +*/ + +Hash.Cookie = new Class({ + + Extends: Cookie, + + options: { + autoSave: true + }, + + initialize: function(name, options){ + this.parent(name, options); + this.load(); + }, + + save: function(){ + var value = JSON.encode(this.hash); + if (!value || value.length > 4096) return false; //cookie would be truncated! + if (value == '{}') this.dispose(); + else this.write(value); + return true; + }, + + load: function(){ + this.hash = new Hash(JSON.decode(this.read(), true)); + return this; + } + +}); + +Hash.each(Hash.prototype, function(method, name){ + if (typeof method == 'function') Hash.Cookie.implement(name, function(){ + var value = method.apply(this.hash, arguments); + if (this.options.autoSave) this.save(); + return value; + }); +}); + +/* +--- + +name: Swiff + +description: Wrapper for embedding SWF movies. Supports External Interface Communication. + +license: MIT-style license. + +credits: + - Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject. + +requires: [Core/Options, Core/Object, Core/Element] + +provides: Swiff + +... +*/ + +(function(){ + +var Swiff = this.Swiff = new Class({ + + Implements: Options, + + options: { + id: null, + height: 1, + width: 1, + container: null, + properties: {}, + params: { + quality: 'high', + allowScriptAccess: 'always', + wMode: 'window', + swLiveConnect: true + }, + callBacks: {}, + vars: {} + }, + + toElement: function(){ + return this.object; + }, + + initialize: function(path, options){ + this.instance = 'Swiff_' + String.uniqueID(); + + this.setOptions(options); + options = this.options; + var id = this.id = options.id || this.instance; + var container = document.id(options.container); + + Swiff.CallBacks[this.instance] = {}; + + var params = options.params, vars = options.vars, callBacks = options.callBacks; + var properties = Object.append({height: options.height, width: options.width}, options.properties); + + var self = this; + + for (var callBack in callBacks){ + Swiff.CallBacks[this.instance][callBack] = (function(option){ + return function(){ + return option.apply(self.object, arguments); + }; + })(callBacks[callBack]); + vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack; + } + + params.flashVars = Object.toQueryString(vars); + if ('ActiveXObject' in window){ + properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; + params.movie = path; + } else { + properties.type = 'application/x-shockwave-flash'; + } + properties.data = path; + + var build = ''; + } + build += ''; + this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild; + }, + + replaces: function(element){ + element = document.id(element, true); + element.parentNode.replaceChild(this.toElement(), element); + return this; + }, + + inject: function(element){ + document.id(element, true).appendChild(this.toElement()); + return this; + }, + + remote: function(){ + return Swiff.remote.apply(Swiff, [this.toElement()].append(arguments)); + } + +}); + +Swiff.CallBacks = {}; + +Swiff.remote = function(obj, fn){ + var rs = obj.CallFunction('' + __flash__argumentsToXML(arguments, 2) + ''); + return eval(rs); +}; + +})(); + +/* +--- +name: Table +description: LUA-Style table implementation. +license: MIT-style license +authors: + - Valerio Proietti +requires: [Core/Array] +provides: [Table] +... +*/ + +(function(){ + +var Table = this.Table = function(){ + + this.length = 0; + var keys = [], + values = []; + + this.set = function(key, value){ + var index = keys.indexOf(key); + if (index == -1){ + var length = keys.length; + keys[length] = key; + values[length] = value; + this.length++; + } else { + values[index] = value; + } + return this; + }; + + this.get = function(key){ + var index = keys.indexOf(key); + return (index == -1) ? null : values[index]; + }; + + this.erase = function(key){ + var index = keys.indexOf(key); + if (index != -1){ + this.length--; + keys.splice(index, 1); + return values.splice(index, 1)[0]; + } + return null; + }; + + this.each = this.forEach = function(fn, bind){ + for (var i = 0, l = this.length; i < l; i++) fn.call(bind, keys[i], values[i], this); + }; + +}; + +if (this.Type) new Type('Table', Table); + +})(); diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/jquery-1.12.4.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/jquery-1.12.4.js new file mode 100644 index 0000000000..7fc60fca78 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/libraries/jquery-1.12.4.js @@ -0,0 +1,11008 @@ +/*! + * jQuery JavaScript Library v1.12.4 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-05-20T17:17Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +//"use strict"; +var deletedIds = []; + +var document = window.document; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "1.12.4", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1, IE<9 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type( obj ) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + } catch ( e ) { + + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( !support.ownFirst ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[ j ] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +// JSHint would error on this code due to the Symbol not being defined in ES5. +// Defining this global in .jshintrc would create a danger of using the global +// unguarded in another place, it seems safer to just disable JSHint for these +// three lines. +/* jshint ignore: start */ +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ]; +} +/* jshint ignore: end */ + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // init accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt( 0 ) === "<" && + selector.charAt( selector.length - 1 ) === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[ 2 ] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[ 0 ] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof root.ready !== "undefined" ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[ 0 ], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.uniqueSort( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +} ); +var rnotwhite = ( /\S+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = true; + if ( !memory ) { + self.disable(); + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +} ); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +} ); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || + window.event.type === "load" || + document.readyState === "complete" ) { + + detach(); + jQuery.ready(); + } +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE6-10 + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + + // If IE event model is used + } else { + + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch ( e ) {} + + if ( top && top.doScroll ) { + ( function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll( "left" ); + } catch ( e ) { + return window.setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + } )(); + } + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); + + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownFirst = i === "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery( function() { + + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== "undefined" ) { + + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); +} ); + + +( function() { + var div = document.createElement( "div" ); + + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch ( e ) { + support.deleteExpando = false; + } + + // Null elements to avoid leaks in IE. + div = null; +} )(); +var acceptData = function( elem ) { + var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute( "classid" ) === noData; +}; + + + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) && + data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } else { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[ i ] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, undefined + } else { + cache[ id ] = undefined; + } +} + +jQuery.extend( { + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + jQuery.data( this, key ); + } ); + } + + return arguments.length > 1 ? + + // Sets one value + this.each( function() { + jQuery.data( this, key, value ); + } ) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each( function() { + jQuery.removeData( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = jQuery._data( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, + // or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); + + +( function() { + var shrinkWrapBlocksVal; + + support.shrinkWrapBlocks = function() { + if ( shrinkWrapBlocksVal != null ) { + return shrinkWrapBlocksVal; + } + + // Will be changed later if needed. + shrinkWrapBlocksVal = false; + + // Minified: var b,c,d + var div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + + // Test fired too early or in an unsupported environment, exit. + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + if ( typeof div.style.zoom !== "undefined" ) { + + // Reset CSS: box-sizing; display; margin; border + div.style.cssText = + + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + + "box-sizing:content-box;display:block;margin:0;border:0;" + + "padding:1px;width:1px;zoom:1"; + div.appendChild( document.createElement( "div" ) ).style.width = "5px"; + shrinkWrapBlocksVal = div.offsetWidth !== 3; + } + + body.removeChild( container ); + + return shrinkWrapBlocksVal; + }; + +} )(); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( + elems[ i ], + key, + raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[ 0 ], key ) : emptyGet; +}; +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([\w:-]+)/ ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + +var rleadingWhitespace = ( /^\s+/ ); + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" + + "details|dialog|figcaption|figure|footer|header|hgroup|main|" + + "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + + +( function() { + var div = document.createElement( "div" ), + fragment = document.createDocumentFragment(), + input = document.createElement( "input" ); + + // Setup + div.innerHTML = "
a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input = document.createElement( "input" ); + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ + support.noCloneEvent = !!div.addEventListener; + + // Support: IE<9 + // Since attributes and properties are the same in IE, + // cleanData must set properties to undefined rather than use removeAttribute + div[ jQuery.expando ] = 1; + support.attributes = !div.getAttribute( jQuery.expando ); +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + + // Support: IE8 + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] +}; + +// Support: IE8-IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; + ( elem = elems[ i ] ) != null; + i++ + ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; ( elem = elems[ i ] ) != null; i++ ) { + jQuery._data( + elem, + "globalEval", + !refElements || jQuery._data( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/, + rtbody = / from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[ 1 ] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) && + !tbody.childNodes.length ) { + + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; +} + + +( function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) + for ( i in { submit: true, change: true, focusin: true } ) { + eventName = "on" + i; + + if ( !( support[ i ] = eventName in window ) ) { + + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +} )(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE9 +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && + ( !e || jQuery.event.triggered !== e.type ) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + + // Add elem as a property of the handle fn to prevent a memory leak + // with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && + jQuery._data( cur, "handle" ); + + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( + ( !special._default || + special._default.apply( eventPath.pop(), data ) === false + ) && acceptData( elem ) + ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Safari 6-8+ + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split( " " ), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY fromElement offsetX offsetY " + + "pageX pageY screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? + original.toElement : + fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + // Piggyback on a donor event to simulate a different one + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + + // Previously, `originalEvent: {}` was set here, so stopPropagation call + // would not be triggered on donor event, since in our own + // jQuery.event.stopPropagation function we had a check for existence of + // originalEvent.stopPropagation method, so, consequently it would be a noop. + // + // Guard for simulated events was moved to jQuery.event.stopPropagation function + // since `originalEvent` should point to the original event for the + // constancy with other events and for more focused logic + } + ); + + jQuery.event.trigger( e, null, elem ); + + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, + // to properly expose it to GC + if ( typeof elem[ name ] === "undefined" ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: IE < 9, Android < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( !e || this.isSimulated ) { + return; + } + + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://code.google.com/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +// IE submit delegation +if ( !support.submit ) { + + jQuery.event.special.submit = { + setup: function() { + + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? + + // Support: IE <=8 + // We use jQuery.prop instead of elem.form + // to allow fixing the IE8 delegated submit issue (gh-2332) + // by 3rd party polyfills/workarounds. + jQuery.prop( elem, "form" ) : + undefined; + + if ( form && !jQuery._data( form, "submit" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submitBubble = true; + } ); + jQuery._data( form, "submit", true ); + } + } ); + + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + + // If form was submitted by the user, bubble the event up the tree + if ( event._submitBubble ) { + delete event._submitBubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event ); + } + } + }, + + teardown: function() { + + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.change ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._justChanged = true; + } + } ); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._justChanged && !event.isTrigger ) { + this._justChanged = false; + } + + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event ); + } ); + } + return false; + } + + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event ); + } + } ); + jQuery._data( elem, "change", true ); + } + } ); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || + ( elem.type !== "radio" && elem.type !== "checkbox" ) ) { + + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Support: Firefox +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome, Safari +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + jQuery._removeData( doc, fix ); + } else { + jQuery._data( doc, fix, attaches ); + } + } + }; + } ); +} + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + }, + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ), + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) ); + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + return elem; +} + +function cloneCopyEvent( src, dest ) { + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( + ( node.text || node.textContent || node.innerHTML || "" ) + .replace( rcleanScript, "" ) + ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + elems = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = elems[ i ] ) != null; i++ ) { + + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || jQuery.isXMLDoc( elem ) || + !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( ( !support.noCloneEvent || !support.noCloneChecked ) && + ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) { + + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[ i ] ) { + fixCloneNodeIssues( node, destElements[ i ] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) { + cloneCopyEvent( node, destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + cleanData: function( elems, /* internal */ forceAcceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + attributes = support.attributes, + special = jQuery.event.special; + + for ( ; ( elem = elems[ i ] ) != null; i++ ) { + if ( forceAcceptData || acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // Support: IE<9 + // IE does not allow us to delete expando properties from nodes + // IE creates expando attributes along with the property + // IE does not have a removeAttribute function on Document nodes + if ( !attributes && typeof elem.removeAttribute !== "undefined" ) { + elem.removeAttribute( internalKey ); + + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + } else { + elem[ internalKey ] = undefined; + } + + deletedIds.push( id ); + } + } + } + } + } +} ); + +jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( + ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value ) + ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + + // Remove element nodes and prevent memory leaks + elem = this[ i ] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); + + +var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || jQuery( " +
+
+
+ + +
+ +
+ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/1.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/1.PNG new file mode 100644 index 0000000000..e9cc95ca71 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/1.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/10.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/10.PNG new file mode 100644 index 0000000000..84e4f570fe Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/10.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/11.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/11.PNG new file mode 100644 index 0000000000..be6982feee Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/11.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/12.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/12.PNG new file mode 100644 index 0000000000..a085a1bd29 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/12.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/13.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/13.PNG new file mode 100644 index 0000000000..72bf252f12 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/13.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/14.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/14.PNG new file mode 100644 index 0000000000..07995760df Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/14.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/15.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/15.PNG new file mode 100644 index 0000000000..e322b9789f Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/15.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/16.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/16.PNG new file mode 100644 index 0000000000..91577ad737 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/16.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/2.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/2.PNG new file mode 100644 index 0000000000..4cec795dfa Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/2.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/3.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/3.PNG new file mode 100644 index 0000000000..f126794f63 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/3.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/4.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/4.PNG new file mode 100644 index 0000000000..1c5ea96719 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/4.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/5.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/5.PNG new file mode 100644 index 0000000000..dcaa67648b Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/5.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/6.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/6.PNG new file mode 100644 index 0000000000..caaef0c3ac Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/6.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/7.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/7.PNG new file mode 100644 index 0000000000..d4f9744949 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/7.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/8.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/8.PNG new file mode 100644 index 0000000000..6164f7a363 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/8.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/9.PNG b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/9.PNG new file mode 100644 index 0000000000..f7c53a368a Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/9.PNG differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/ed_snippet.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/ed_snippet.gif new file mode 100644 index 0000000000..12684f8193 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/img/ed_snippet.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ch.js new file mode 100644 index 0000000000..62e5bd62d2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ch.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/cz.js new file mode 100644 index 0000000000..c26a48bb67 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/cz.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/da.js new file mode 100644 index 0000000000..2f85401199 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/da.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/de.js new file mode 100644 index 0000000000..5ff7e22d7e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/de.js @@ -0,0 +1,21 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "All Categories": "Alle Kategorien", + "Cancel": "Abbrechen", + "Filter": "Filter", + "HTML": "HTML", + "Insert Snippet": "Snippet einfügen", + "Insert as HTML": "Als HTML einfügen", + "Insert as template variable": "Als Template-Variable einfügen", + "Only search word beginning": "Nur nach Wortanfang suchen", + "Variable": "Variable" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ee.js new file mode 100644 index 0000000000..aacd840801 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ee.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/el.js new file mode 100644 index 0000000000..7b4695f16e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/el.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/es.js new file mode 100644 index 0000000000..113ea9e197 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/es.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/eu.js new file mode 100644 index 0000000000..1021bf7f85 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/eu.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/fa.js new file mode 100644 index 0000000000..fd5718935f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/fa.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/fi.js new file mode 100644 index 0000000000..0233ac0781 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/fi.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/fr.js new file mode 100644 index 0000000000..164c263ec6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/fr.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuler" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/he.js new file mode 100644 index 0000000000..f65ddc7e66 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/he.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/hu.js new file mode 100644 index 0000000000..58d56640cf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/hu.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/it.js new file mode 100644 index 0000000000..2aba43af41 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/it.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ja.js new file mode 100644 index 0000000000..38fe597d76 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ja.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "中止", + "Filter": "フィルター", + "Insert Snippet": "スニペットの挿入", + "Variable": "変数" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/lc_base.js new file mode 100644 index 0000000000..1126e6a8a3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/lc_base.js @@ -0,0 +1,34 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "All Categories": "", + "Cancel": "", + "Filter": "", + "HTML": "", + "Insert Snippet": "", + "Insert as HTML": "", + "Insert as template variable": "", + "InsertSnippet for Xinha": "", + "Only search word beginning": "", + "Variable": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/lt.js new file mode 100644 index 0000000000..dbbc674cf2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/lt.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/lv.js new file mode 100644 index 0000000000..0bc68d53fa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/lv.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/nb.js new file mode 100644 index 0000000000..cb3a586e44 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/nb.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "Insert Snippet": "Sett inn snutt", + "Variable": "Variabel" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/nl.js new file mode 100644 index 0000000000..a6a901a641 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/nl.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuleren", + "Filter": "Filter", + "Insert Snippet": "Snippet invoegen", + "Variable": "Variabele" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/pl.js new file mode 100644 index 0000000000..923293067f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/pl.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anuluj" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/pt_br.js new file mode 100644 index 0000000000..8157ac75a2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/pt_br.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "Filter": "Filtro", + "HTML": "HTML", + "Insert Snippet": "Inserir Fragmento de Código", + "InsertSnippet for Xinha": "Fragmento de Códigos para o Xinha", + "Variable": "Variável" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ro.js new file mode 100644 index 0000000000..4c4e19f3ca --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ro.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ru.js new file mode 100644 index 0000000000..f569cfdc78 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/ru.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/sh.js new file mode 100644 index 0000000000..603b0c4017 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/sh.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/si.js new file mode 100644 index 0000000000..103d16047e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/si.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/sr.js new file mode 100644 index 0000000000..8d966e6352 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/sr.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/sv.js new file mode 100644 index 0000000000..18b6397ebc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/sv.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/th.js new file mode 100644 index 0000000000..bd36b85ef0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/th.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/tr.js new file mode 100644 index 0000000000..163623dc67 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/tr.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/vn.js new file mode 100644 index 0000000000..ec2d77979a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/lang/vn.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/readme.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/readme.html new file mode 100644 index 0000000000..c161a4bf37 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/readme.html @@ -0,0 +1,51 @@ + + InsertSnippet for Xinha + + +

InsertSnippet2 for Xinha

+

Insert HTML fragments or template variables in your document.

+

Features

+
    +
  • Categorization to organize your snippets if you have a lot (optional)
  • +
  • Search for name
  • +
  • Insert as literal text/html or variable (optional) 
  • +
  • XML data format
  • +
+

Usage

+

+In order to use your own snippets you have to add a parameter to your xinha_config: +

+
xinha_config.InsertSnippet2.snippets = "/path/to/your/snippets.xml";
+
+

This path should point to a XML file that has the following format:

+
<snXML>
+ <categories>
+    <c n="the name" />
+  </categories>
+  <snippets>
+        <s n="the name" v="optional variable name to be inserted" c="the category">
+            &lt;p&gt;some text or HTML, please entize HTML tags&lt;/p&gt;
+        </s>
+        <s n="another">
+            <![CDATA[
+               <p>or put HTML in a CDATA section</p>
+            ]]>
+        </s>
+  </snipptes>
+</snXML>
+
+

+

 Tags

+
<snXML></snXML>
 The root tag
<categories></categories>
 This tag contains the categories (optional)
 <c />
 Each category
 <snippets></snippets>
This tag contains the actual snippet. As this is XML, you cannot put HTML here literally. You have to either entize the <,>, and & characters or wrap the contents in a CDATA section
+

Attributes

+
 n
 The name of one snippet or category. It is obligatory for both.
 v
If this attribute is present in a snippet tag, there is a button in the UI that allows to insert this variable instead of the textual content of the snippet.
c
 The category
+

Inside the plugin's directory, there is a sample XML file and PHP script that shows how to create the XML dynamically.

+

3 October 2008 Raimund Meyer (xinha@raimundmeyer.de)

+ + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/snippets.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/snippets.php new file mode 100644 index 0000000000..9b226addd3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/snippets.php @@ -0,0 +1,37 @@ +'some text'), + * array('name'= 'snippet2','text'=>'

some HTML

', 'varname'=>'{$var}','category'=>'cat1') //varname and category are optional + * ) + * + * ?> + */ +header("Content-type: text/xml"); +print ' +'; +?> + + +'."\n"; +} + +?> + + + + +'."\n"; +} +?> + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/snippets.xml b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/snippets.xml new file mode 100644 index 0000000000..c06107d8c9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertSnippet2/snippets.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + Visit the Xinha website +
  • Nulla placerat nunc ut pede.
  • Vivamus ultrices mi sit amet urna.
  • Quisque sed augue quis nunc laoreet volutpat.
  • Nunc sit amet metus in tortor semper mattis.
  • + ]]> +
    + + <p>This is some information about something</p> + + + + + + + + + + ]]> + +
    +
    diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertWords/InsertWords.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertWords/InsertWords.js new file mode 100755 index 0000000000..907fc5693e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/InsertWords/InsertWords.js @@ -0,0 +1,70 @@ +// Plugin for htmlArea to insert keywords, when a type of +// keyword is selected from a dropdown list +// By Adam Wright, for The University of Western Australia +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). + +function InsertWords(editor, params) { + this.editor = editor; + var cfg = editor.config; + var self = this; + + if(params[0] && params[0].combos) { + //if arguments where passed with registerPlugin use these + var combos = params[0].combos; + } else if (cfg.InsertWords && cfg.InsertWords.combos) { + //if combos is found in config use these + var combos = cfg.InsertWords.combos; + } else { + //no combos found + var combos = []; + } + + // register the toolbar with the keywords dropdown + var first = true; + var toolbar = []; + + for (var i = combos.length; --i >= 0;) { + var combo = combos[i]; + var id = "IW-id" + i; + var iw_class = { + id : id, + options : combo.options, + action : function (editor) { self.onSelect(editor, this, combo.context); }, + refresh : function (editor) { }, + context : combo.context + }; + cfg.registerDropdown(iw_class); + + if (combo.label) + toolbar.push("T[" + combo.label + "]"); + toolbar.push(id); + toolbar.push(first ? "separator" : "space"); + } + + cfg.addToolbarElement(toolbar, "linebreak", 1); + +} + +InsertWords._pluginInfo = { + name : "InsertWords", + version : "1.0", + developer : "Adam Wright", + developer_url : "http://blog.hipikat.org/", + sponsor : "The University of Western Australia", + sponsor_url : "http://www.uwa.edu.au/", + license : "htmlArea" +}; + +InsertWords.prototype.onSelect = function(editor, obj, context) { + + // Get the toolbar object element + var elem = editor._toolbarObjects[obj.id].element; + + // Insert the keyword value blindly at the selection + editor.insertHTML(elem.value); + + // Reset the dropdown to it's label + elem.selectedIndex = 0; +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/LangMarks.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/LangMarks.js new file mode 100644 index 0000000000..3ea70bac7a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/LangMarks.js @@ -0,0 +1,179 @@ +// Mask Language plugin for Xinha +// Implementation by Udo Schmal +// +// (c) Udo Schmal & Schaffrath NeueMedien 2004 +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). + +function LangMarks(editor, args) { + this.editor = editor; + var cfg = editor.config; + var self = this; + var options = {}; + options[this._lc("— language —")] = ''; + + // Old configuration type + if(!cfg.LangMarks.languages) + { + Xinha.debugMsg('Warning: Old style LangMarks configuration detected, please update your LangMarks configuration.'); + var newConfig = { + languages: [], + attributes: Xinha.Config.prototype.attributes + }; + + for (var i in cfg.LangMarks) + { + if (typeof i != 'string') continue; + newConfig.languages.push( { name: i, code: cfg.LangMarks[i] } ); + } + + cfg.LangMarks = newConfig; + } + + for (var i = 0; i < cfg.LangMarks.languages.length; i++) + { + options[this._lc(cfg.LangMarks.languages[i].name)] = cfg.LangMarks.languages[i].code; + } + + + cfg.registerDropdown({ + id : "langmarks", + tooltip : this._lc("language select"), + options : options, + action : function(editor) { self.onSelect(editor, this); }, + refresh : function(editor) { self.updateValue(editor, this); } + }); + cfg.addToolbarElement("langmarks", "inserthorizontalrule", 1); +} + +LangMarks._pluginInfo = { + name : "LangMarks", + version : "1.0", + developer : "Udo Schmal", + developer_url : "", + sponsor : "L.N.Schaffrath NeueMedien", + sponsor_url : "http://www.schaffrath-neuemedien.de/", + c_owner : "Udo Schmal & Schaffrath NeueMedien", + license : "htmlArea" +}; + +Xinha.Config.prototype.LangMarks = { + 'languages': [ // Below are so lc_parse_strings.php finds them + { name:"Greek", code: "el" } , // Xinha._lc('Greek', 'LangMarks') + { name:"English", code: "en" }, // Xinha._lc('English', 'LangMarks') + { name:"French", code: "fr" } , // Xinha._lc('French', 'LangMarks') + { name:"Latin" , code: "la" } // Xinha._lc('Latin', 'LangMarks') + ], + + 'attributes': [ + 'lang', + 'xml:lang' + ] +}; + +LangMarks.prototype._lc = function(string) { + return Xinha._lc(string, 'LangMarks'); +}; + +LangMarks.prototype.onGenerate = function() { + this.editor.addEditorStylesheet(Xinha.getPluginDir("LangMarks") + '/lang-marks.css'); +}; + +LangMarks.prototype.onSelect = function(editor, obj, context, updatecontextclass) { + var tbobj = editor._toolbarObjects[obj.id]; + var index = tbobj.element.selectedIndex; + var language = tbobj.element.value; + + // retrieve parent element of the selection + var parent = editor.getParentElement(); + var surround = true; + + var is_span = (parent && parent.tagName.toLowerCase() == "span"); + var update_parent = (context && updatecontextclass && parent && parent.tagName.toLowerCase() == context); + + if (update_parent) { + parent.className = "haslang"; + parent.lang = language; + + for(var i = 0; i < this.editor.config.LangMarks.attributes.length; i++) + { + parent.setAttribute(this.editor.config.LangMarks.attributes[i], language); + } + + editor.updateToolbar(); + return; + } + + if (is_span && index == 0 && !/\S/.test(parent.style.cssText)) { + while (parent.firstChild) { + parent.parentNode.insertBefore(parent.firstChild, parent); + } + parent.parentNode.removeChild(parent); + editor.updateToolbar(); + return; + } + + if (is_span) { + // maybe we could simply change the class of the parent node? + if (parent.childNodes.length == 1) { + parent.className = "haslang"; + parent.lang = language; + + for(var i = 0; i < this.editor.config.LangMarks.attributes.length; i++) + { + parent.setAttribute(this.editor.config.LangMarks.attributes[i], language); + } + + surround = false; + // in this case we should handle the toolbar updation + // ourselves. + editor.updateToolbar(); + } + } + + // Other possibilities could be checked but require a lot of code. We + // can't afford to do that now. + if (surround) { + // shit happens ;-) most of the time. this method works, but + // it's dangerous when selection spans multiple block-level + // elements. + var html = ''; + for(var i = 0; i < this.editor.config.LangMarks.attributes.length; i++) + { + html += ' ' +this.editor.config.LangMarks.attributes[i] + '="'+language+'"'; + } + + editor.surroundHTML('', ''); + } +}; + +LangMarks.prototype.updateValue = function(editor, obj) { + var select = editor._toolbarObjects[obj.id].element; + var parents = editor.getAllAncestors(); + var parent; + var lang; + for (var i=0;i= 0;) { + var option = options[i]; + if (value == option.value) { + select.selectedIndex = i; + return; + } + } + } + else select.selectedIndex = 0; + +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang-marks.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang-marks.css new file mode 100644 index 0000000000..eee601eac3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang-marks.css @@ -0,0 +1,40 @@ +span.haslang { + border-bottom: 1px dashed #aaa; + white-space : nowrap; +} + + + +span[lang]::after { + content: attr(lang); + text-transform: uppercase; + font-family: sans-serif; + color: white; + background: red; + border: 1px solid red; + font-size: x-small; + font-weight: normal; + vertical-align: top; +} + +/* + * NOTE: The "proper" way to do this is with a CSS namespace + * @namespace xml "http://www.w3.org/XML/1998/namespace"; + * and putting xmlns:xml="http://www.w3.org/XML/1998/namespace" + * on the root element or the itself, then using + * span[xml|lang] as the selector, but this simply doesn't work + * in most browsers. Which sucks. + */ + +span[xml\:lang]::after { + content: attr(xml\:lang); + text-transform: uppercase; + font-family: sans-serif; + color: white; + background: red; + border: 1px solid red; + font-size: x-small; + font-weight: normal; + vertical-align: top; +} + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/de.js new file mode 100644 index 0000000000..5a2685a441 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/de.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— language —": "— Sprache —", + "English": "englisch", + "French": "französisch", + "Greek": "griechisch", + "Latin": "lateinisch", + "language select": "Sprachauswahl" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/es.js new file mode 100644 index 0000000000..7a312e3fca --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/es.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— language —": "— idioma —", + "English": "Inglés", + "French": "Francés", + "Greek": "Griego", + "Latin": "Latín", + "language select": "seleccionar idioma" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/fr.js new file mode 100644 index 0000000000..9a7a28ab06 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/fr.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— language —": "— Langue —", + "English": "anglais", + "French": "français", + "Greek": "grec", + "Latin": "latin", + "language select": "Sélection de la langue" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/ja.js new file mode 100644 index 0000000000..312cecb9ad --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/ja.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— language —": "— 言語 —", + "English": "英語", + "French": "フランス語", + "Greek": "ギリシャ語", + "Latin": "ラテン語", + "language select": "言語の選択" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/lc_base.js new file mode 100644 index 0000000000..1392ea1442 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/lc_base.js @@ -0,0 +1,31 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "— language —": "", + "', '": "", + "English": "", + "French": "", + "Greek": "", + "Latin": "", + "language select": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/nb.js new file mode 100644 index 0000000000..f97efaf0bb --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/nb.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— language —": "— Språk —", + "English": "engelsk", + "French": "fransk", + "Greek": "grekisk", + "Latin": "latin", + "language select": "Språkvalg" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/nl.js new file mode 100644 index 0000000000..6c1758e142 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/nl.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— language —": "— taal —", + "English": "Engels", + "French": "Frans", + "Greek": "Grieks", + "Latin": "Latijn", + "language select": "Taalkeuze" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/pt_br.js new file mode 100644 index 0000000000..bf98eb7d4f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/LangMarks/lang/pt_br.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "— language —": "— Idioma —", + "English": "Inglês", + "French": "Francês", + "Greek": "Grego", + "Latin": "Latim", + "language select": "Selecionar idioma" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/Linker.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/Linker.js new file mode 100644 index 0000000000..c63e3a4f4c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/Linker.js @@ -0,0 +1,106 @@ +/** htmlArea - James' Fork - Linker Plugin **/ +Linker._pluginInfo = +{ + name : "Linker", + version : "1.0", + developer: "James Sleeman", + developer_url: "http://www.gogo.co.nz/", + c_owner : "Gogo Internet Services", + license : "htmlArea", + sponsor : "Gogo Internet Services", + sponsor_url : "http://www.gogo.co.nz/" +}; + +Xinha.loadStyle('dTree/dtree.css', 'Linker'); + +Xinha.Config.prototype.Linker = +{ + 'treeCaption' : document.location.host, + 'backend' : Xinha.getPluginDir("Linker") + '/scan.php', + 'backend_data' : null, + 'files' : null, + 'dialog': null, + 'canSetTarget': true, + 'canRemoveLink': true +}; + + +function Linker(editor, args) +{ + this.editor = editor; + this.lConfig = editor.config.Linker; + + var linker = this; + if(typeof editor._createLink == 'undefined') { + editor._createLink = function(target) { + if(!target) target = linker._getSelectedAnchor(); + linker._createLink(target); + } + } + if(!editor.config.btnList.createlink) + { + editor.config.registerButton( + 'createlink', 'Insert/Modify Hyperlink', [_editor_url + "images/ed_buttons_main.gif",6,1], false, + function(e, objname, obj) { editor.execCommand("createlink"); } + ); + } + + // See if we can find 'createlink' + editor.config.addToolbarElement("createlink", "createlink", 0); +} + +Linker.prototype._lc = function(string) +{ + return Xinha._lc(string, 'Linker'); +}; + + +Linker.prototype.onGenerateOnce = function() +{ + Linker.loadAssets(); + this.loadFiles(); +}; + +Linker.prototype.onUpdateToolbar = function() +{ + if (typeof dTree == 'undefined' || !Linker.methodsReady || !Linker.html || !this.files) + { + this.editor._toolbarObjects.createlink.state("enabled", false); + } + else this.onUpdateToolbar = null; +}; + +Linker.Dialog_dTrees = [ ]; + +Linker.loadAssets = function() +{ + var self = Linker; + if (self.loading) return; + self.loading = true; + Xinha._getback(Xinha.getPluginDir("Linker") + '/pluginMethods.js', function(getback) { eval(getback); self.methodsReady = true; }); + Xinha._loadback( Xinha.getPluginDir("Linker") + '/dTree/dtree.js', function() {Linker.dTreeReady = true; } ); + Xinha._getback( Xinha.getPluginDir("Linker") + '/dialog.html', function(getback) { self.html = getback; } ); +} + +Linker.prototype.loadFiles = function() +{ + var linker = this; + if(linker.lConfig.backend) + { + //get files from backend + Xinha._postback(linker.lConfig.backend, + linker.lConfig.backend_data, + function(txt) { + try { + linker.files = eval(txt); + } catch(Error) { + linker.files = [ {url:'',title:Error.toString()} ]; + } + }); + } + else if(linker.lConfig.files != null) + { + //get files from plugin-config + linker.files = linker.lConfig.files; + } +} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/api.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/api.html new file mode 100644 index 0000000000..3686a80212 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/api.html @@ -0,0 +1,252 @@ + + + + + + Destroydrop » Javascripts » Tree » Api + + + + + + + + +
    + +
    + + + + +
    + +
    + + +

    Overview

    +
    +
    + + + +
    + + +

    Functions

    +
    +
    + + +

    add()

    +

    Adds a node to the tree.
    Can only be called before the tree is drawn.

    +

    id, pid and name are required.

    + +

    Parameters

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    idNumberUnique identity number.
    pidNumberNumber refering to the parent node. The value for the root node has to be -1.
    nameStringText label for the node.
    urlStringUrl for the node.
    titleStringTitle for the node.
    targetStringTarget for the node.
    iconStringImage file to use as the icon. Uses default if not specified.
    iconOpenStringImage file to use as the open icon. Uses default if not specified.
    openBooleanIs the node open.
    +
    + + +

    Example

    +

    mytree.add(1, 0, 'My node', 'node.html', 'node title', 'mainframe', 'img/musicfolder.gif');

    +
    + + +

    openAll()

    +

    Opens all the nodes.
    Can be called before and after the tree is drawn.

    +

    Example

    +

    mytree.openAll();

    +
    + + + +

    closeAll()

    +

    Closes all the nodes.
    Can be called before and after the tree is drawn.

    +

    Example

    +

    mytree.closeAll();

    +
    + + + +

    openTo()

    +

    Opens the tree to a certain node and can also select the node.
    + Can only be called after the tree is drawn.

    + +

    Parameters

    + + + + + + + + + + + + + + + + +
    NameTypeDescription
    idNumberIdentity number for the node.
    selectBooleanShould the node be selected.
    + +

    Example

    +

    mytree.openTo(4, true);

    + + + + +

    Configuration

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    VariableTypeDefaultDescription
    targetStringtrueTarget for all the nodes.
    folderLinksBooleantrueShould folders be links.
    useSelectionBooleantrueNodes can be selected(highlighted).
    useCookiesBooleantrueThe tree uses cookies to rember it's state.
    useLinesBooleantrueTree is drawn with lines.
    useIconsBooleantrueTree is drawn with icons.
    useStatusTextBooleanfalseDisplays node names in the statusbar instead of the url.
    closeSameLevelBooleanfalseOnly one node within a parent can be expanded at the same time. openAll() and closeAll() functions do not work when this is enabled.
    inOrderBooleanfalseIf parent nodes are always added before children, setting this to true speeds up the tree.
    + +

    Example

    +

    mytree.config.target = "mytarget";

    + +
    + + + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/dtree.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/dtree.css new file mode 100644 index 0000000000..ebf755662e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/dtree.css @@ -0,0 +1,41 @@ +/*--------------------------------------------------| +| dTree 2.05 | www.destroydrop.com/javascript/tree/ | +|---------------------------------------------------| +| Copyright (c) 2002-2003 Geir Landr? | +|--------------------------------------------------*/ + +.dtree { + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size: 11px; + color: #666; + white-space: nowrap; +} +.dtree img { + border: 0px !important; + margin:0px !important; + display:inline !important; + vertical-align: middle !important; +} +.dtree a,.dtree a:visited { + color: #333; + text-decoration: none; +} +.dtree a.node, .dtree a.nodeSel { + white-space: nowrap; + padding: 1px 2px 1px 2px; + /*padding: 0px 1px 0px 1px;*/ +} +.dtree a.node:hover, .dtree a.nodeSel:hover { + color: #333; + text-decoration: underline; +} +.dtree a.nodeSel { + background-color: #c0d2ec; + /* + -moz-border-radius : 4px; + border:1px dotted #333; + */ +} +.dtree .clip { + overflow: hidden; +} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/dtree.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/dtree.js new file mode 100644 index 0000000000..6299624cd4 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/dtree.js @@ -0,0 +1,725 @@ +/*--------------------------------------------------| + +| dTree 2.05 | www.destroydrop.com/javascript/tree/ | + +|---------------------------------------------------| + +| Copyright (c) 2002-2003 Geir Landr? | + +| | + +| This script can be used freely as long as all | + +| copyright messages are intact. | + +| | + +| Updated: 17.04.2003 | + +|--------------------------------------------------*/ + + + +// Node object + +function dTreeNode(id, pid, name, url, title, target, icon, iconOpen, open) { + + this.id = id; + + this.pid = pid; + + this.name = name; + + this.url = url; + + this.title = title; + + this.target = target; + + this.icon = icon; + + this.iconOpen = iconOpen; + + this._io = open || false; + + this._is = false; + + this._ls = false; + + this._hc = false; + + this._ai = 0; + + this._p; + +} + + + +// Tree object + +function dTree(objName, baseDir) { + + this.config = { + + target : null, + + folderLinks : true, + + useSelection : true, + + useCookies : true, + + useLines : true, + + useIcons : true, + + useStatusText : false, + + closeSameLevel : false, + + inOrder : false + + }; + + this.icon = { + + root : baseDir + 'img/base.gif', + + folder : baseDir + 'img/folder.gif', + + folderOpen : baseDir + 'img/folderopen.gif', + + node : baseDir + 'img/page.gif', + + empty : baseDir + 'img/empty.gif', + + line : baseDir + 'img/line.gif', + + join : baseDir + 'img/join.gif', + + joinBottom : baseDir + 'img/joinbottom.gif', + + plus : baseDir + 'img/plus.gif', + + plusBottom : baseDir + 'img/plusbottom.gif', + + minus : baseDir + 'img/minus.gif', + + minusBottom : baseDir + 'img/minusbottom.gif', + + nlPlus : baseDir + 'img/nolines_plus.gif', + + nlMinus : baseDir + 'img/nolines_minus.gif' + + }; + + this.obj = objName; + + this.aNodes = []; + + this.aIndent = []; + + this.root = new dTreeNode(-1); + + this.selectedNode = null; + + this.selectedFound = false; + + this.completed = false; + +} + + + +// Adds a new node to the node array + +dTree.prototype.add = function(id, pid, name, url, title, target, icon, iconOpen, open) { + + this.aNodes[this.aNodes.length] = new dTreeNode(id, pid, name, url, title, target, icon, iconOpen, open); + +}; + + + +// Open/close all nodes + +dTree.prototype.openAll = function() { + + this.oAll(true); + +}; + +dTree.prototype.closeAll = function() { + + this.oAll(false); + +}; + + + +// Outputs the tree to the page + +dTree.prototype.toString = function() { + this.setCS_All(); + var str = '
    \n'; + + if (document.getElementById) { + + if (this.config.useCookies) this.selectedNode = this.getSelected(); + + str += this.addNode(this.root); + + } else str += 'Browser not supported.'; + + str += '
    '; + + if (!this.selectedFound) this.selectedNode = null; + + this.completed = true; + + return str; + +}; + + + +// Creates the tree structure + +dTree.prototype.addNode = function(pNode) { + + var str = ''; + + var n=0; + + if (this.config.inOrder) n = pNode._ai; + + for (n; n'; + + } + + if (node.url) { + + str += ''; + + str += node.name; + + if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += ''; + + str += ''; + + if (node._hc) { + + str += '
    '; + + str += this.addNode(node); + + str += '
    '; + + } + + this.aIndent.pop(); + + return str; + +}; + + + +// Adds the empty and line icons + +dTree.prototype.indent = function(node, nodeId) { + + var str = ''; + + if (this.root.id != node.pid) { + + for (var n=0; n'; + + (node._ls) ? this.aIndent.push(0) : this.aIndent.push(1); + + if (node._hc) { + + str += ''; + + } else str += ''; + + } + + return str; + +}; + + + +// Checks if a node has any children and if it is the last sibling + +dTree.prototype.setCS = function(node) { + + var lastId; + + for (var n=0; n { _hc: haschildren, _ls_is: lastsibling} + + for(var n = 0; n < this.aNodes.length; n++) + { + var node = this.aNodes[n]; + if(!ids[node.pid]) + { + ids[node.pid] = { _hc: true, _ls_is: node.id }; + } + else + { + ids[node.pid]._hc = true; + ids[node.pid]._ls_is = node.id; + } + + if(!ids[node.id]) + { + ids[node.id] = { _hc: false, _ls_is: null } + } + } + + for(var n = 0; n < this.aNodes.length; n++) + { + var node = this.aNodes[n]; + node._ls = ids[node.pid]._ls_is == node.id ? true : false; + if(ids[node.id]) + { + node._hc = ids[node.id]._hc; + } + } +}; + +// Returns the selected node + +dTree.prototype.getSelected = function() { + + var sn = this.getCookie('cs' + this.obj); + + return (sn) ? sn : null; + +}; + + + +// Highlights the selected node + +dTree.prototype.s = function(id) { + + if (!this.config.useSelection) return; + + var cn = this.aNodes[id]; + + if (cn._hc && !this.config.folderLinks) return; + + if (this.selectedNode != id) { + + if (this.selectedNode || this.selectedNode==0) { + + eOld = document.getElementById("s" + this.obj + this.selectedNode); + + eOld.className = "node"; + + } + + eNew = document.getElementById("s" + this.obj + id); + + eNew.className = "nodeSel"; + + this.selectedNode = id; + + if (this.config.useCookies) this.setCookie('cs' + this.obj, cn.id); + + } + +}; + + + +// Toggle Open or close + +dTree.prototype.o = function(id) { + + var cn = this.aNodes[id]; + + this.nodeStatus(!cn._io, id, cn._ls); + + cn._io = !cn._io; + + if (this.config.closeSameLevel) this.closeLevel(cn); + + if (this.config.useCookies) this.updateCookie(); + +}; + + + +// Open or close all nodes + +dTree.prototype.oAll = function(status) { + + for (var n=0; n + + + + + Destroydrop » Javascripts » Tree + + + + + + + + +

    Destroydrop » Javascripts » Tree

    + +

    Example

    + +
    + +

    open all | close all

    + + + +
    + +

    ©2002-2003 Geir Landrö

    + + + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/base.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/base.gif new file mode 100644 index 0000000000..5aa538c1df Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/base.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/cd.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/cd.gif new file mode 100644 index 0000000000..6dfd68e2f0 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/cd.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/copy.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/copy.gif new file mode 100644 index 0000000000..330771cc1c Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/copy.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/empty.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/empty.gif new file mode 100644 index 0000000000..b5cf52378f Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/empty.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/folder.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/folder.gif new file mode 100644 index 0000000000..a4e2f29a7a Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/folder.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/folderopen.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/folderopen.gif new file mode 100644 index 0000000000..074649b8b3 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/folderopen.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/globe.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/globe.gif new file mode 100644 index 0000000000..f00ef00b0f Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/globe.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/imgfolder.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/imgfolder.gif new file mode 100644 index 0000000000..7906217681 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/imgfolder.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/join.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/join.gif new file mode 100644 index 0000000000..e5e2f6a490 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/join.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/joinbottom.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/joinbottom.gif new file mode 100644 index 0000000000..dd83b1822d Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/joinbottom.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/line.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/line.gif new file mode 100644 index 0000000000..6dcdebea42 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/line.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/minus.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/minus.gif new file mode 100644 index 0000000000..6eb44b6848 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/minus.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/minusbottom.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/minusbottom.gif new file mode 100644 index 0000000000..1380d72cf3 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/minusbottom.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/move.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/move.gif new file mode 100644 index 0000000000..1aa1eab773 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/move.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/musicfolder.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/musicfolder.gif new file mode 100644 index 0000000000..5761a406f0 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/musicfolder.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/nolines_minus.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/nolines_minus.gif new file mode 100644 index 0000000000..daa8c20681 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/nolines_minus.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/nolines_plus.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/nolines_plus.gif new file mode 100644 index 0000000000..3e28a7a9c1 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/nolines_plus.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/offline.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/offline.gif new file mode 100644 index 0000000000..23163a49ef Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/offline.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/offline.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/offline.png new file mode 100644 index 0000000000..bb86270529 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/offline.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/page.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/page.gif new file mode 100644 index 0000000000..7c1cea690f Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/page.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/plus.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/plus.gif new file mode 100644 index 0000000000..f6c9a11937 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/plus.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/plusbottom.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/plusbottom.gif new file mode 100644 index 0000000000..c56ad93687 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/plusbottom.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/question.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/question.gif new file mode 100644 index 0000000000..5536f004fe Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/question.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/trash.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/trash.gif new file mode 100644 index 0000000000..4d2fb72b67 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dTree/img/trash.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dialog.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dialog.html new file mode 100644 index 0000000000..4f9fbb68a1 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/dialog.html @@ -0,0 +1,107 @@ +

    Insert/Modify Link

    +
    +
    (the dTree goes in here)
    +
    +
    + + + + + + + + + + + + + + +
    Target: +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Size:x (px)
    Name:
    Menu Bar:Toolbar:
    Location Bar:Status Bar:
    Scrollbars:Resizeable:
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + +
    +
    + +
    + + + + + + +
    + +
    +
    + +
    + + + +
    +
    +
    + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ch.js new file mode 100644 index 0000000000..4e602b52f3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ch.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消", + "Insert/Modify Link": "插入/改寫連結", + "OK": "好", + "Target:": "目標匡:", + "URL:": "網址:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/cz.js new file mode 100644 index 0000000000..36b99297ee --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/cz.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/da.js new file mode 100644 index 0000000000..29e411de9f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/da.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller", + "Insert/Modify Link": "Indsæt/rediger hyperlink", + "Name:": "Navn", + "OK": "OK", + "Size:": "Størrelse", + "Target:": "Placering:", + "URL:": "URL:", + "You must select some text before making a new link.": "Vælg venligst noget tekst før du laver et nyt link." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/de.js new file mode 100644 index 0000000000..34a9b6524a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/de.js @@ -0,0 +1,31 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Are you sure you wish to remove this link?": "Wollen Sie diesen Link wirklich entfernen?", + "Cancel": "Abbrechen", + "Email Address:": "Email Adresse", + "Email Link": "Email Link", + "Insert/Modify Link": "Verknüpfung hinzufügen/ändern", + "Message Template:": "Nachrichten Vorlage:", + "Name:": "Name:", + "New Window": "Neues Fenster", + "OK": "OK", + "Ordinary Link": "Standard Link", + "Popup Window": "Pop-Up Fenster", + "Remove Link": "Link entfernen", + "Same Window (jump out of frames)": "Selbes Fenster (ganzer Bereich)", + "Size:": "Größe:", + "Subject:": "Betreff:", + "Target:": "Ziel:", + "URL Link": "URL Adresse", + "URL:": "URL:", + "You must select some text before making a new link.": "Sie müssen einen Text markieren um einen Link zu erstellen" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ee.js new file mode 100644 index 0000000000..ba916e9d88 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ee.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/el.js new file mode 100644 index 0000000000..7952fc7d9c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/el.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση", + "Insert/Modify Link": "Εισαγωγή/Τροποποίηση σύνδεσμου", + "OK": "Εντάξει", + "Target:": "Target:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/es.js new file mode 100644 index 0000000000..491181c11d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/es.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "Insert/Modify Link": "Insertar/Modificar un enlace", + "OK": "Aceptar", + "Target:": "Destino:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/eu.js new file mode 100644 index 0000000000..84aa300060 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/eu.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi", + "Insert/Modify Link": "Lotura txertatu/aldatu", + "OK": "Ados", + "Target:": "Helburua:", + "URL:": "URL-a:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/fa.js new file mode 100644 index 0000000000..637488c323 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/fa.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف", + "Insert/Modify Link": "افزودن / ویرایش لینک", + "OK": "بله", + "Target:": "هدف", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/fi.js new file mode 100644 index 0000000000..82552b9755 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/fi.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta", + "OK": "Hyväksy" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/fr.js new file mode 100644 index 0000000000..da198ff33e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/fr.js @@ -0,0 +1,31 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Are you sure you wish to remove this link?": "Confirmez-vous la suppression de ce lien ?", + "Cancel": "Annuler", + "Email Address:": "Adresse email", + "Email Link": "Lien email", + "Insert/Modify Link": "Insérer / Modifier un lien", + "Message Template:": "Message", + "Name:": "Nom", + "New Window": "Nouvelle fenêtre", + "OK": "OK", + "Ordinary Link": "Lien standard", + "Popup Window": "Fenêtre popup", + "Remove Link": "Supprimer", + "Same Window (jump out of frames)": "Même fenêtre (sort des frames)", + "Size:": "Taille", + "Subject:": "Sujet", + "Target:": "Cible", + "URL Link": "Lien URL", + "URL:": "URL:", + "You must select some text before making a new link.": "Vous devez sélectionner un texte avant de créer un nouveau lien" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/he.js new file mode 100644 index 0000000000..937b57869f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/he.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול", + "Insert/Modify Link": "הוסף/שנה קישור", + "OK": "אישור", + "Target:": "יעד:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/hu.js new file mode 100644 index 0000000000..19e4973e05 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/hu.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem", + "Insert/Modify Link": "Hivatkozás Beszúrása/Módosítása", + "OK": "Rendben", + "Target:": "Cél:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/it.js new file mode 100644 index 0000000000..c525acf5e2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/it.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento", + "Insert/Modify Link": "Inserisci/modifica link", + "OK": "OK", + "Target:": "Target:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ja.js new file mode 100644 index 0000000000..83bfc7297a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ja.js @@ -0,0 +1,37 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Are you sure you wish to remove this link?": "本当にこのリンクを削除しますか?", + "Cancel": "中止", + "Email Address:": "アドレス:", + "Email Link": "Eメールリンク", + "Insert/Modify Link": "リンクの挿入/修正", + "Location Bar:": "アドレスバー", + "Menu Bar:": "メニュー", + "Message Template:": "本文雛形:", + "Name:": "名前:", + "New Window": "新しいウィンドウ", + "OK": "OK", + "Ordinary Link": "標準リンク", + "Popup Window": "ポップアップウィンドウ", + "Remove Link": "リンク削除", + "Resizeable:": "リサイズ", + "Same Window (jump out of frames)": "同一ウィンドウ (フレーム最上位)", + "Scrollbars:": "スクロール", + "Size:": "サイズ:", + "Status Bar:": "ステータスバー", + "Subject:": "件名:", + "Target:": "ターゲット:", + "Toolbar:": "ツールバー", + "URL Link": "URLリンク", + "URL:": "URL:", + "You must select some text before making a new link.": "リンクを作成するにはテキストを選択する必要があります" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/lc_base.js new file mode 100644 index 0000000000..8fb7317ae4 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/lc_base.js @@ -0,0 +1,55 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "(px)": "", + "Anchor-Link": "", + "Anchor:": "", + "Are you sure you wish to remove this link?": "", + "Cancel": "", + "Email Address:": "", + "Email Link": "", + "Insert/Modify Link": "", + "Location Bar:": "", + "Menu Bar:": "", + "Message Template:": "", + "Name:": "", + "New Window": "", + "OK": "", + "Ordinary Link": "", + "Popup Window": "", + "PopupWindow": "", + "Remove Link": "", + "Resizeable:": "", + "Same Window (jump out of frames)": "", + "Scrollbars:": "", + "Shows On Hover": "", + "Size:": "", + "Status Bar:": "", + "Subject:": "", + "Target:": "", + "Title:": "", + "Toolbar:": "", + "URL Link": "", + "URL:": "", + "You must select some text before making a new link.": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/lt.js new file mode 100644 index 0000000000..3ab146b4fd --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/lt.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti", + "Insert/Modify Link": "Idėti/Modifikuoti", + "OK": "OK", + "Target:": "Target:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/lv.js new file mode 100644 index 0000000000..f83d5d3efc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/lv.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt", + "OK": "Labi" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/nb.js new file mode 100644 index 0000000000..8a7fc0fe20 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/nb.js @@ -0,0 +1,21 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Are you sure you wish to remove this link?": "Er du sikker på at du vil fjerne lenken?", + "Cancel": "Avbryt", + "Insert/Modify Link": "Rediger lenke", + "Name:": "Navn", + "OK": "OK", + "Size:": "Størrelse", + "Target:": "Mål:", + "URL:": "Adresse:", + "You must select some text before making a new link.": "Du må markere tekst eller et bilde før du kan lage en lenke." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/nl.js new file mode 100644 index 0000000000..68b8f82f9c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/nl.js @@ -0,0 +1,21 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Are you sure you wish to remove this link?": "Wilt u deze link werkelijk verwijderen?", + "Cancel": "Annuleren", + "Insert/Modify Link": "Hyperlink invoegen/aanpassen", + "Name:": "Naame", + "OK": "OK", + "Size:": "Grootte:", + "Target:": "Doel:", + "URL:": "URL:", + "You must select some text before making a new link.": "Selecteer de tekst welke gelinkt moet worden." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/pl.js new file mode 100644 index 0000000000..57bfdab971 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/pl.js @@ -0,0 +1,31 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Are you sure you wish to remove this link?": "Na pewno chcesz usunąć odnośnik?", + "Cancel": "Anuluj", + "Email Address:": "Adres e-mail", + "Email Link": "Link do e-maila", + "Insert/Modify Link": "Wstaw/edytuj odnośnik", + "Message Template:": "Szablon wiadmości:", + "Name:": "Nazwa:", + "New Window": "Nowe okno", + "OK": "OK", + "Ordinary Link": "Zwykły odnośnik", + "Popup Window": "Okienko pop-up", + "Remove Link": "USUŃ ODNOŚNIK", + "Same Window (jump out of frames)": "To samo okno (wyskocz z ramek)", + "Size:": "Rozmiar:", + "Subject:": "Temat:", + "Target:": "Okno docelowe:", + "URL Link": "Adres URL", + "URL:": "URL:", + "You must select some text before making a new link.": "Zaznacz tekst przed dodaniem odnośnika." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/pt_br.js new file mode 100644 index 0000000000..c3dc5ba152 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/pt_br.js @@ -0,0 +1,39 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Anchor-Link": "Link-Âncora", + "Anchor:": "Âncora:", + "Are you sure you wish to remove this link?": "Você tem certeza que deseja remover este link?", + "Cancel": "Cancelar", + "Email Address:": "Endereço de E-mail:", + "Email Link": "Link de E-mail", + "Insert/Modify Link": "Inserir/Modificar Link", + "Location Bar:": "Barra de Localização:", + "Menu Bar:": "Barra de Menu:", + "Message Template:": "Modelo de Mensagem:", + "Name:": "Nome:", + "New Window": "Nova Janela", + "OK": "OK", + "Ordinary Link": "Link Comum", + "Popup Window": "Janela Pop-up", + "Remove Link": "Remover Link", + "Resizeable:": "Redimensionável", + "Same Window (jump out of frames)": "Mesma Janela (Sair fora dos frames)", + "Scrollbars:": "Barra de Rolagem:", + "Size:": "Tamanho:", + "Status Bar:": "Barra de Informações:", + "Subject:": "Assunto:", + "Target:": "Destino:", + "Toolbar:": "Barra de Ferramentas:", + "URL Link": "URL do Link", + "URL:": "URL:", + "You must select some text before making a new link.": "Você precisa selecionar algum texto antes de criar um novo link." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ro.js new file mode 100644 index 0000000000..c382a67ab5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ro.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă", + "Insert/Modify Link": "Inserează/modifcă link", + "OK": "Acceptă", + "Target:": "Ţinta:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ru.js new file mode 100644 index 0000000000..1f883aeae0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/ru.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена", + "Insert/Modify Link": "Вставка/изменение ссылки", + "OK": "OK", + "Target:": "Открывать в окне:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/sh.js new file mode 100644 index 0000000000..b25d3228b8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/sh.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi", + "Insert/Modify Link": "Dodaj/promeni Link", + "OK": "OK", + "Target:": "Otvori u:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/si.js new file mode 100644 index 0000000000..7674892b4c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/si.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči", + "OK": "V redu" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/sr.js new file mode 100644 index 0000000000..1d660bb8fa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/sr.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи", + "Insert/Modify Link": "додај/промени линк", + "OK": "OK", + "Target:": "Отвори у:", + "URL:": "УРЛ:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/sv.js new file mode 100644 index 0000000000..8313e6916c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/sv.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "Insert/Modify Link": "Redigera länk", + "OK": "OK", + "Size:": "Storlek", + "Target:": "Mål:", + "URL:": "Sökväg:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/th.js new file mode 100644 index 0000000000..9da9c8d94d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/th.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก", + "OK": "ตกลง" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/tr.js new file mode 100644 index 0000000000..32c2fd26df --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/tr.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal", + "Insert/Modify Link": "Bağlantı ekle/değiştir", + "OK": "Tamam", + "Target:": "Hedef:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/vn.js new file mode 100644 index 0000000000..5908be3205 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/lang/vn.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy", + "Insert/Modify Link": "Thêm/Chỉnh sửa đường dẫn", + "OK": "Đồng ý", + "Target:": "Nơi hiện thị:", + "URL:": "URL:" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/link-picker.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/link-picker.js new file mode 100644 index 0000000000..442bd1f796 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/link-picker.js @@ -0,0 +1,138 @@ + + /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:-- + -- Xinha (is not htmlArea) - http://xinha.gogo.co.nz/ + -- + -- Use of Xinha is granted by the terms of the htmlArea License (based on + -- BSD license) please read license.txt in this package for details. + -- + -- Xinha was originally based on work by Mihai Bazon which is: + -- Copyright (c) 2003-2004 dynarch.com. + -- Copyright (c) 2002-2003 interactivetools.com, inc. + -- This copyright notice MUST stay intact for use. + -- + -- $HeadURL: http://svn.xinha.webfactional.com/trunk/modules/Dialogs/inline-dialog.js $ + -- $LastChangedDate: 2007-01-24 03:26:04 +1300 (Wed, 24 Jan 2007) $ + -- $LastChangedRevision: 694 $ + -- $LastChangedBy: gogo $ + --------------------------------------------------------------------------*/ + + +/** The Link Picker is a semi-standalone instance of the Linker plugin which can be used + * for providing a Linker style browse dialog for selecting urls which are then + * returned into a standard form field. + * + * Usage: + * -------------------------------------------------------------------------- + * {{{ + + + + + + + + + + + + + +
    + +
    +
    + + * }}} + * + */ + +function LinkPicker(field, config) +{ + this.field = field; + + var linkPicker = this; + + // We use a tempoary anchor tag to pass to the Linker plugin + this.tmpAnchor = document.createElement('a'); + + // We will use the detached dialog always + config.dialog = LinkPicker.Dialog; + config.canSetTarget = false; + config.canRemoveLink = false; + + // These methods are dummy versions of stuff that would normally be in a Xinha object + this.selectionEmpty = function() { return true; }; + this.getSelection = function() { return null; }; + this.selectNodeContents = function() { return true; }; + this.getHTML = function() { return ''; } + this.disableToolbar = function() { return true; } + this.enableToolbar = function() { return true; } + this._doc = { + execCommand: function() { return false; }, + getElementsByTagName: function() { return [ ]; } + } + this.config = { + Linker: config, + btnList: { }, + registerButton: function() { return true; }, + addToolbarElement: function() { } + } + + // Add a button next to the field + var button = document.createElement('input'); button.type='button'; + button.value = 'Browse'; + button.onclick = function() { linkPicker.editLink(); return false; } + field.parentNode.insertBefore(button,field.nextSibling); + + // We co-opt updateToolbar as the point at which we copy the temporary anchor across to the field + // Linker calls this as the last step, so perfect. + this.updateToolbar = function() { linkPicker.field.value = this.fixRelativeLinks(linkPicker.tmpAnchor.href); }; + + this.linker = new Linker(this); + this.linker.onGenerateOnce(); +} + +LinkPicker.prototype.editLink = function() +{ + this.tmpAnchor.href = this.field.value; + this.linker._createLink(this.tmpAnchor); +} + +LinkPicker.prototype.fixRelativeLinks = function(href) +{ + return href.replace(document.location.href.replace( /^(https?:\/\/[^\/]*)(.*)$/i, '$1' ), ''); +} + +LinkPicker.Dialog = function(linkPicker, html, localizer, size, options) +{ + LinkPicker.Dialog.parentConstructor.call(this, html, localizer, size, options); +} + +Xinha.extend(LinkPicker.Dialog, Xinha.DetachedDialog); + +LinkPicker.Config = function() { } +LinkPicker.Config.prototype = Xinha.Config.prototype.Linker; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/pluginMethods.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/pluginMethods.js new file mode 100644 index 0000000000..a1eb549cb0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/pluginMethods.js @@ -0,0 +1,642 @@ +Linker.prototype._createLink = function(a) +{ + if (!this._dialog) + { + this._dialog = new Linker.Dialog(this); + } + + if(!a && this.editor.selectionEmpty(this.editor.getSelection())) + { + alert(this._lc("You must select some text before making a new link.")); + return false; + } + + var inputs = + { + type: 'url', + href: 'http://www.example.com/', + title: this._lc('Shows On Hover'), + target: '', + p_width: '', + p_height: '', + p_options: ['menubar=no','toolbar=yes','location=no','status=no','scrollbars=yes','resizeable=yes'], + to: 'alice@example.com', + subject: '', + body: '', + anchor: '' + }; + + if(a && a.tagName.toLowerCase() == 'a') + { + var href =this.editor.fixRelativeLinks(a.getAttribute('href')); + var m = href.match(/^mailto:(.*@[^?&]*)(\?(.*))?$/); + var anchor = href.match(/^#(.*)$/); + var title = a.getAttribute('title'); + + if(m) + { + // Mailto + inputs.type = 'mailto'; + inputs.to = m[1]; + if(m[3]) + { + var args = m[3].split('&'); + for(var x = 0; x 0) + { + a.setAttribute(i, atr[i]); + } + else + { + a.removeAttribute(i); + } + } + + // If we change a mailto link in IE for some hitherto unknown + // reason it sets the innerHTML of the link to be the + // href of the link. Stupid IE. + if(Xinha.is_ie) + { + if(/mailto:([^?<>]*)(\?[^<]*)?$/i.test(a.innerHTML)) + { + a.innerHTML = RegExp.$1; + } + } + } + } + else + { + if(!atr.href) return true; + + // Insert a link, we let the browser do this, we figure it knows best + var tmp = Xinha.uniq('http://www.example.com/Link'); + linker.editor._doc.execCommand('createlink', false, tmp); + + // Fix them up + var anchors = linker.editor._doc.getElementsByTagName('a'); + for(var i = 0; i < anchors.length; i++) + { + var anchor = anchors[i]; + if(anchor.href == tmp) + { + // Found one. + if (!a) a = anchor; + for(var j in atr) + { + if(String(atr[j]).length > 0) + anchor.setAttribute(j, atr[j]); + } + } + } + } + linker.editor.selectNodeContents(a); + linker.editor.updateToolbar(); + }; + + this._dialog.show(inputs, doOK); + +}; + +Linker.prototype._getSelectedAnchor = function() +{ + var sel = this.editor.getSelection(); + var rng = this.editor.createRange(sel); + var a = this.editor.activeElement(sel); + if(a != null && a.tagName.toLowerCase() == 'a') + { + return a; + } + else + { + a = this.editor._getFirstAncestor(sel, 'a'); + if(a != null) + { + return a; + } + } + return null; +}; + +Linker.Dialog_dTrees = [ ]; + +Linker.Dialog = function (linker) +{ + var lDialog = this; + this.Dialog_nxtid = 0; + this.linker = linker; + this.id = { }; // This will be filled below with a replace, nifty + + this.ready = false; + + this.dialog = false; + + // load the dTree script + this._prepareDialog(); + +}; + +Linker.Dialog.prototype._prepareDialog = function() +{ + var lDialog = this; + var linker = this.linker; + + var files = this.linker.files; + + // Now we have everything we need, so we can build the dialog. + if(!linker.lConfig.dialog && Xinha.Dialog) linker.lConfig.dialog = Xinha.Dialog; + + var dialog = this.dialog = new linker.lConfig.dialog(linker.editor, Linker.html, 'Linker',{width:600,height:400}); + var dTreeName = Xinha.uniq('dTree_'); + + this.dTree = new dTree(dTreeName, Xinha.getPluginDir("Linker") + '/dTree/'); + eval(dTreeName + ' = this.dTree'); + + this.dTree.add(this.Dialog_nxtid++, -1, linker.lConfig.treeCaption , null, linker.lConfig.treeCaption); + this.makeNodes(files, 0); + + // Put it in + var ddTree = this.dialog.getElementById('dTree'); + //ddTree.innerHTML = this.dTree.toString(); + ddTree.innerHTML = ''; +// ddTree.style.position = 'absolute'; +// ddTree.style.left = 1 + 'px'; + // ddTree.style.top = 0 + 'px'; + ddTree.style.overflow = 'auto'; + ddTree.style.height = '300px'; + if ( Xinha.is_ie ) + { + ddTree.style.styleFloat = "left"; + } + else + { + ddTree.style.cssFloat = "left"; + } + ddTree.style.backgroundColor = 'white'; + this.ddTree = ddTree; + + this.dTree._linker_premade = this.dTree.toString(); + + var options = this.dialog.getElementById('options'); + //options.style.position = 'absolute'; + //options.style.top = 0 + 'px'; + //options.style.right = 0 + 'px'; + options.style.width = 320 + 'px'; + options.style.overflow = 'auto'; + + // Hookup the resizer + this.dialog.rootElem.style.paddingBottom ="0"; + this.dialog.onresize = function() + { + var h = parseInt(dialog.height) - dialog.getElementById('h1').offsetHeight; + var w = parseInt(dialog.width) - 330 ; + + // An error is thrown with IE when trying to set a negative width or a negative height + // But perhaps a width / height of 0 is not the minimum required we need to set + if (w<0) w = 0; + if (h<0) h = 0; + //options.style.height = + lDialog.ddTree.style.height = h + 'px'; + lDialog.ddTree.style.width = w + 'px'; + } + + // Set the onclick handlers for the link type radio buttons + var self = this; + this.dialog.getElementById('type_url').onclick = function() { + self.showOptionsForType('url'); + }; + this.dialog.getElementById('type_mailto').onclick = function() { + self.showOptionsForType('mailto'); + }; + this.dialog.getElementById('type_anchor').onclick = function() { + self.showOptionsForType('anchor'); + }; + + var hidePopupOptions = function() { + self.showOptionsForTarget('none') + }; + this.dialog.getElementById('noTargetRadio').onclick = hidePopupOptions; + this.dialog.getElementById('sameWindowRadio').onclick = hidePopupOptions; + this.dialog.getElementById('newWindowRadio').onclick = hidePopupOptions; + this.dialog.getElementById('popupWindowRadio').onclick = function() { + self.showOptionsForTarget('popup'); + }; + + this.ready = true; + ddTree = null; + Xinha.freeLater(lDialog, 'ddTree'); + options = null; +}; + +Linker.Dialog.prototype.makeNodes = function(files, parent) +{ + for(var i = 0; i < files.length; i++) + { + if(typeof files[i] == 'string') + { + this.dTree.add(this.Dialog_nxtid++, parent, + files[i].replace(/^.*\//, ''), + 'javascript:document.getElementsByName(\'' + this.dialog.id.href + '\')[0].value=decodeURIComponent(\'' + encodeURIComponent(files[i]) + '\');document.getElementsByName(\'' + this.dialog.id.type + '\')[0].click();document.getElementsByName(\'' + this.dialog.id.href + '\')[0].focus();void(0);', + files[i]); + } + else if(typeof files[i]=="object" && files[i] && typeof files[i].length==="number") // there seems to be a strange bug in IE that requires this complicated check, see #1197 + { + var id = this.Dialog_nxtid++; + this.dTree.add(id, parent, files[i][0].replace(/^.*\//, ''), null, files[i][0]); + this.makeNodes(files[i][1], id); + } + else if(typeof files[i] == 'object') + { + var id = this.Dialog_nxtid++; + if(files[i].title) var title = files[i].title; + else if(files[i].url) var title = files[i].url.replace(/^.*\//, ''); + else var title = "no title defined"; + if(files[i].url) var link = 'javascript:document.getElementsByName(\'' + this.dialog.id.href + '\')[0].value=decodeURIComponent(\'' + encodeURIComponent(files[i].url) + '\');document.getElementsByName(\'' + this.dialog.id.type + '\')[0].click();document.getElementsByName(\'' + this.dialog.id.href + '\')[0].focus();void(0);'; + else var link = ''; + + this.dTree.add(id, parent, title, link, title); + if(files[i].children) { + this.makeNodes(files[i].children, id); + } + } + } +}; + +Linker.Dialog.prototype._lc = Linker.prototype._lc; + +Linker.Dialog.prototype.show = function(inputs, ok, cancel) +{ + if(!this.ready) + { + var lDialog = this; + window.setTimeout(function() {lDialog.show(inputs,ok,cancel);},100); + return; + } + + if(this.ddTree.innerHTML == '') + { + this.ddTree.innerHTML = this.dTree._linker_premade; + } + + if(!this.linker.lConfig.canSetTarget) + { + this.dialog.getElementById('target_options').style.display = 'none'; + } + + this.showOptionsForType(inputs.type); + this.showOptionsForTarget(inputs.target); + + var anchor = this.dialog.getElementById('anchor'); + for(var i=anchor.length;i>=0;i--) { + anchor[i] = null; + } + + var html = this.linker.editor.getHTML(); + var anchors = new Array(); + + var m = html.match(/]+name="([^"]+)"/gi); + if(m) + { + for(i=0;i 0) + { + this.dialog.getElementById(enabledTargets[0]).checked = true; + } + + // Init the sizes + this.dialog.onresize(); +}; + +Linker.Dialog.prototype.hide = function() +{ + this.linker.editor.enableToolbar(); + return this.dialog.hide(); +}; + +Linker.Dialog.prototype.removeLink = function(applyFunc) +{ + this.dialog.getElementById('href').value = ""; + this.dialog.getElementById('to').value = ""; + + return applyFunc(); +}; + +Linker.Dialog.prototype.showOptionsForType = function(type) +{ + var urlOptions = this.dialog.getElementById('urltable'); + var mailtoOptions = this.dialog.getElementById('mailtable'); + var anchorOptions = this.dialog.getElementById('anchortable'); + + if (type == 'anchor') + { + anchorOptions.style.display = ''; + urlOptions.style.display = 'none'; + mailtoOptions.style.display = 'none'; + } + else if (type == 'mailto') + { + mailtoOptions.style.display = ''; + urlOptions.style.display = 'none'; + anchorOptions.style.display = 'none'; + } + else + { + urlOptions.style.display = ''; + mailtoOptions.style.display = 'none'; + anchorOptions.style.display = 'none'; + } +}; + +Linker.Dialog.prototype.showOptionsForTarget = function(target) +{ + var popupOptions = this.dialog.getElementById('popuptable'); + popupOptions.style.display = target == 'popup' ? '' : 'none'; +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/scan.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/scan.php new file mode 100644 index 0000000000..891b008293 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Linker/scan.php @@ -0,0 +1,114 @@ + + [ ]; + $url, 'children'=>$subdir); + } + } + elseif(is_file($path)) + { + if(($include && !preg_match($include, $url)) || ($exclude && preg_match($exclude, $url))) continue; + $files[] = array('url'=>$url); + } + + } + } + @closedir($dh); + return dirsort($files); + } + + function dirsort($files) + { + usort($files, 'dircomp'); + return $files; + } + + function dircomp($a, $b) + { + if(isset($a['children']) && !isset($b['children'])) return -1; + if(isset($b['children']) && !isset($a['children'])) return 1; + + return strcmp(strtolower($a['url']), strtolower($b['url'])); + } + + echo xinha_to_js(scan($dir,$url)); +?> diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListOperations/ListOperations.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListOperations/ListOperations.js new file mode 100644 index 0000000000..f0402443ef --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListOperations/ListOperations.js @@ -0,0 +1,90 @@ +/** + ListOperations for Xinha + =============================================================================== + + Provides some additional features for working with lists in Xinha. + + At present the only feature is + + {{{ + xinha_config.ListOperations.tabToIndent = [true | 'atstart' | false]; + }}} + + which causes pressig tab ina list to indent (or shift-tab to detent) to + a new list level + + Note that the HTML structure of this list may be, for example + {{{ +
      +
    • Item 1
    • +
        +
      • Item 1.1
      • +
      +
    • Item 2
    • +
    + }}} + +See ticket:1614 +*/ + +ListOperations._pluginInfo = { + name : "ListOperations", + version : "1.0", + developer : "The Xinha Core Developer Team", + developer_url : "http://trac.xinha.org/ticket/1614", + sponsor : "", + sponsor_url : "", + license : "htmlArea" +} + +Xinha.Config.prototype.ListOperations = +{ + // One of true, false, 'atstart' + // where 'atstart' will indent only at the start of a list item (can be a bit wonky if there is a leading space) + tabToIndent: true +} + +function ListOperations(editor) +{ + this.editor = editor; +} + +ListOperations.prototype.onKeyPress = function(ev) +{ + var editor = this.editor; + + // Not enabled, drop out + if(!editor.config.ListOperations.tabToIndent) return false; + + if( ev.keyCode !== 9 ) { return false; } + + var sel = editor.getSelection(), + rng = editor.createRange(sel), + containing_list = editor._getFirstAncestorAndWhy(sel, ["ol", "ul"]); + + if( containing_list[0] === null ) { + return false; + } + + containing_list_type = ["ol", "ul"][containing_list[1]]; + containing_list = containing_list[0]; + + if(!editor.config.ListOperations.tabToIndent == 'atstart') + { + if( rng.startOffset !== 0 ) { + return false; + } + } + + Xinha._stopEvent(ev); + + if( ev.shiftKey ) { + if( editor._getFirstAncestorForNodeAndWhy(containing_list, ["ol", "ul"])[0] !== null ) { + editor.execCommand("outdent"); + } + } else { + editor.execCommand("indent"); + } + + return true; +} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/ListType.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/ListType.css new file mode 100644 index 0000000000..8ad84b9fc1 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/ListType.css @@ -0,0 +1,43 @@ +.ListType { } +.ListType a { + display:block; + float:left; + margin:2px 0 0 5px; + padding:0; + width:50px; + height:40px; + border:1px solid #9c96a5; +} +.ListType a:hover { + border:1px solid #ffd760; +} +.ListType a.active { + border:1px solid #000084; +} +.ListType a.circle { + background:url(img/circle.png); +} +.ListType a.disc { + background:url(img/disc.png); +} +.ListType a.square { + background:url(img/square.png); +} +.ListType a.decimal { + background:url(img/decimal.png); +} +.ListType a.lower-alpha { + background:url(img/lower-alpha.png); +} +.ListType a.upper-alpha { + background:url(img/upper-alpha.png); +} +.ListType a.lower-roman { + background:url(img/lower-roman.png); +} +.ListType a.upper-roman { + background:url(img/upper-roman.png); +} +.ListType a.none { + background:url(img/none.png); +} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/ListType.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/ListType.js new file mode 100644 index 0000000000..f654eb3d6a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/ListType.js @@ -0,0 +1,191 @@ +// ListType Plugin for Xinha +// Toolbar Implementation by Mihai Bazon, http://dynarch.com/mishoo/ +Xinha.loadStyle( 'ListType.css', 'ListType' ); + +function ListType( editor ) +{ + this.editor = editor; + var cfg = editor.config; + var self = this; + + if ( cfg.ListType.mode == 'toolbar' ) + { + var options = {}; + options[Xinha._lc( "Decimal numbers", "ListType" )] = "decimal"; + options[Xinha._lc( "Lower roman numbers", "ListType" )] = "lower-roman"; + options[Xinha._lc( "Upper roman numbers", "ListType" )] = "upper-roman"; + options[Xinha._lc( "Lower latin letters", "ListType" )] = "lower-alpha"; + options[Xinha._lc( "Upper latin letters", "ListType" )] = "upper-alpha"; + if (!Xinha.is_ie) + // IE doesn't support this property; even worse, it complains + // with a gross error message when we tried to select it, + // therefore let's hide it from the damn "browser". + options[Xinha._lc( "Lower greek letters", "ListType" )] = "lower-greek"; + var obj = + { + id : "listtype", + tooltip : Xinha._lc( "Choose list style type (for ordered lists)", "ListType" ), + options : options, + action : function( editor ) { self.onSelect( editor, this ); }, + refresh : function( editor ) { self.updateValue( editor, this ); }, + context : "ol" + }; + cfg.registerDropdown( obj ); + cfg.addToolbarElement( "listtype", ["insertorderedlist","orderedlist"], 1 ); + } + else + { + editor._ListType = editor.addPanel( 'right' ); + Xinha.freeLater( editor, '_ListType' ); + Xinha.addClass( editor._ListType, 'ListType' ); + // hurm, ok it's pretty to use the background color for the whole panel, + // but should not it be set by default when creating the panel ? + Xinha.addClass( editor._ListType.parentNode, 'dialog' ); + + editor.notifyOn( 'modechange', + function(e,args) + { + if ( args.mode == 'text' ) editor.hidePanel( editor._ListType ); + } + ); + + var elts_ul = ['disc', 'circle', 'square', 'none']; + var elts_ol = ['decimal', 'lower-alpha', 'upper-alpha', 'lower-roman', 'upper-roman', 'none']; + var divglobal = document.createElement( 'div' ); + divglobal.style.height = '90px'; + var div = document.createElement( 'div' ); + this.divUL = div; + div.style.display = 'none'; + for ( var i=0; i +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Choose list style type (for ordered lists)": "", + "Decimal numbers": "", + "Lower greek letters": "", + "Lower latin letters": "", + "Lower roman numbers": "", + "Upper latin letters": "", + "Upper roman numbers": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/nb.js new file mode 100644 index 0000000000..62073a71e3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/nb.js @@ -0,0 +1,19 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Choose list style type (for ordered lists)": "Velg listetype (for nummererte lister)", + "Decimal numbers": "Desimaltall", + "Lower greek letters": "Lower greek letters", + "Lower latin letters": "Lower latin letters", + "Lower roman numbers": "Lower roman numbers", + "Upper latin letters": "Upper latin letters", + "Upper roman numbers": "Upper roman numbers" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/nl.js new file mode 100644 index 0000000000..bc5ab6d007 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/nl.js @@ -0,0 +1,19 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Choose list style type (for ordered lists)": "Kies stijl type (voor ordered lists)", + "Decimal numbers": "Decimale nummers", + "Lower greek letters": "Griekse letters", + "Lower latin letters": "Latijnse letters klein", + "Lower roman numbers": "Romeinse nummers klein", + "Upper latin letters": "Latijnse letters groot", + "Upper roman numbers": "Romeinse nummers groot" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/pl.js new file mode 100644 index 0000000000..a6b0a0d9e1 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/pl.js @@ -0,0 +1,19 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Choose list style type (for ordered lists)": "Wybierz typ listy numerowanej", + "Decimal numbers": "Cyfry arabskie", + "Lower greek letters": "Małe litery greckie", + "Lower latin letters": "Małe litery", + "Lower roman numbers": "Małe rzymskie", + "Upper latin letters": "Duże litery", + "Upper roman numbers": "Duże rzymskie" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/pt_br.js new file mode 100644 index 0000000000..2133d2d4c7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/pt_br.js @@ -0,0 +1,19 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Choose list style type (for ordered lists)": "Escolha um tipo de lista (para lista ordenada)", + "Decimal numbers": "Números decimais", + "Lower greek letters": "Letras gregas inferiores", + "Lower latin letters": "Letras latinas inferiores", + "Lower roman numbers": "Números romanos inferiores", + "Upper latin letters": "Letras latinas superiores", + "Upper roman numbers": "Números romanos superiores" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/ru.js new file mode 100644 index 0000000000..1d113cf3be --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/ru.js @@ -0,0 +1,19 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Choose list style type (for ordered lists)": "Выберите стиль списков (для упорядоченных списков)", + "Decimal numbers": "Десятичные числа", + "Lower greek letters": "Строчные греческие символы", + "Lower latin letters": "Строчные латинские символы", + "Lower roman numbers": "Строчные романские числа", + "Upper latin letters": "Заглавные латинские символы", + "Upper roman numbers": "Заглавные романские числа" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/sv.js new file mode 100755 index 0000000000..c7a8433a3d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/ListType/lang/sv.js @@ -0,0 +1,19 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Choose list style type (for ordered lists)": "Välj listtyp (för numrerade listor)", + "Decimal numbers": "Desimaltal", + "Lower greek letters": "Små grekiska bokstäver", + "Lower latin letters": "Små latinska bokstäver", + "Lower roman numbers": "Små romerska siffror", + "Upper latin letters": "Stora latinska bokstäver", + "Upper roman numbers": "Stora romerska siffror" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.FileManager.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.FileManager.js new file mode 100644 index 0000000000..eee4b2ffe4 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.FileManager.js @@ -0,0 +1,405 @@ +/** + = Mootools File Manager = + == File Manager == + + The functions in this file extend the MootoolsFileManager plugin with support + for managing files (inserting a link to a file). This file is loaded automatically. + + * @author $Author$ + * @version $Id$ + * @package MootoolsFileManager + */ + + +// Open a "files" mode of the plugin to allow to select a file to +// create a link to. +MootoolsFileManager.prototype.OpenFileManager = function(link) +{ + var editor = this.editor; + var outparam = null; + var self = this; + + if (typeof link == "undefined") + { + link = this.editor.getParentElement(); + if (link) + { + if (/^img$/i.test(link.tagName)) + link = link.parentNode; + if (!/^a$/i.test(link.tagName)) + link = null; + } + } + + // If the link wasn't provided, and no link is currently in focus, + // make one from the selection. + if (!link) + { + var sel = editor.getSelection(); + var range = editor.createRange(sel); + var compare = 0; + + if (Xinha.is_ie) + { + if ( sel.type == "Control" ) + { + compare = range.length; + } + else + { + compare = range.compareEndPoints("StartToEnd", range); + } + } + else + { + compare = range.compareBoundaryPoints(range.START_TO_END, range); + } + + if (compare == 0) + { + alert(Xinha._lc("You must select some text before making a new link.", 'MootoolsFileManager')); + return; + } + outparam = { + f_href : '', + f_title : '', + f_target : '', + f_type: '', + baseHref: editor.config.baseHref + }; + } + else + { + outparam = { + f_href : Xinha.is_ie ? link.href : link.getAttribute("href"), + f_title : link.title, + f_target : link.target, + f_type : link.type ? link.type : '', + baseHref: editor.config.baseHref + }; + } + + this.current_link = link; + this.current_attributes = outparam; + + if(!this.FileManagerWidget) + { + this.FileManagerWidget = new FileManager({ + url: this.editor.config.MootoolsFileManager.backend, + assetBasePath: Xinha.getPluginDir('MootoolsFileManager')+'/mootools-filemanager/Assets', + language: _editor_lang, + selectable: true, + upload: this.phpcfg.files_allow_upload, + destroy: this.phpcfg.files_allow_delete, + createFolders: this.phpcfg.files_allow_create_dir, + rename: this.phpcfg.files_allow_move, + move_or_copy: this.phpcfg.files_allow_move, + download: this.phpcfg.files_allow_download, + + propagateData: Object.merge({'__function': 'file-manager'}, this.editor.config.MootoolsFileManager.backend_data), + propagateType: 'POST', + + uploadAuthData: Object.merge({'__function': 'file-manager'}, this.editor.config.MootoolsFileManager.backend_data), + + onComplete: function(path, file, mgr) { self.FileManagerReturn(path,file); }, + onHide: function() { if(this.swf && this.swf.box) this.swf.box.style.display = 'none'; }, + onShow: function() { if(this.swf && this.swf.box) this.swf.box.style.display = ''; }, + onDetails: function(details) + { + this.info.adopt(self.FileManagerAttributes(details)); + return true; + }, + onHidePreview: function() + { + document.id(self.FileManagerAttributes().table).dispose(); + return true; + }, + + showDirGallery: false, + keyboardNavigation: false, + listType: this.phpcfg.files_list_type, + listPaginationSize: this.phpcfg.files_pagination_size, + listMaxSuggestedDirSizeForThumbnails: this.phpcfg.files_list_mode_over, + directory: this.phpcfg.files_list_start_in + }); + } + + // IE11 which pretends it is "gecko" is particularly finicky + // about losing selection other browsers not so much, but they + // don't seem to mind saving and restoring it anyway, so we + // will do that for everybody + if(1||Xinha.is_ie) this.current_selection = this.editor.saveSelection(); + if(link) + { + var src = Xinha.is_ie ? link.href : link.getAttribute("href"); + if(!src.match(/^(([a-z]+:)|\/)/i)) + { + src = self.editor.config.baseHref.replace(/\/[^\/]*$/, '') + '/' + src; + if(src.match(/^[a-z]+:/i) && !self.phpcfg.files_url.match(/^[a-z]:/i)) + { + src = src.replace(/^[a-z]+:(\/\/?)[^/]*/i, ''); + } + } + + // Get exploded path without the base url + var path = src.replace(self.phpcfg.files_url+'/', '').split('/'); + + // Pull off the file + var base = path.pop(); + + // Join the path back togethor (no base url, trailing slash if the path has any length) + path = path.length ? (path.join('/') + '/') : ''; + + // feed to widget + this.FileManagerWidget.show(null, path, base); + } + else + { + this.FileManagerWidget.show(); + } +}; + +// Take the values from the file selection and make it (or update) a link +MootoolsFileManager.prototype.FileManagerReturn = function(path, file) +{ + var editor = this.editor; + var a = this.current_link; + + var param = this.FileManagerAttributes(); + param.f_href = path; + + // IE11 which pretends it is "gecko" is particularly finicky + // about losing selection other browsers not so much, but they + // don't seem to mind saving and restoring it anyway, so we + // will do that for everybody + if(1||Xinha.is_ie) this.editor.restoreSelection(this.current_selection); + if (!a) + { + try + { + editor._doc.execCommand("createlink", false, param.f_href); + a = editor.getParentElement(); + var sel = editor.getSelection(); + var range = editor.createRange(sel); + if (!Xinha.is_ie) + { + a = range.startContainer; + if (!/^a$/i.test(a.tagName)) + { + a = a.nextSibling; + if (a == null) + { + a = range.startContainer.parentNode; + } + } + } + } catch(e) {} + } + else + { + var href = param.f_href.trim(); + editor.selectNodeContents(a); + if (href == "") + { + editor._doc.execCommand("unlink", false, null); + editor.updateToolbar(); + return false; + } + else + { + a.href = href; + } + } + + if (!(a && /^a$/i.test(a.tagName))) + { + return false; + } + + a.type = param.f_type.trim(); + a.target = param.f_target.trim(); + a.title = param.f_title.trim(); + editor.selectNodeContents(a); + editor.updateToolbar(); +}; + +/** Return a DOM fragment which has all the fields needed to set the + * attributes for a link given a structure of initial values. + * + * OR return a structure of values taken from the currently table. + */ + +MootoolsFileManager.prototype.FileManagerAttributes = function (details) +{ + + var self = this; + self._LastFileDetails = details; + + function f(name) + { + var e = self._FileManagerAttributesTable.getElementsByTagName('input'); + for(var i = 0; i < e.length; i++) + { + if(e[i].name == name) return e[i]; + } + + var e = self._FileManagerAttributesTable.getElementsByTagName('select'); + for(var i = 0; i < e.length; i++) + { + if(e[i].name == name) return e[i]; + } + + return null; + } + + function s(name, value) + { + for(var i = 0; i < f(name).options.length; i++) + { + if(f(name).options[i].value == value) + { + // f(name).options[i].selected = true; + f(name).selectedIndex = i; + return true; + } + } + return false; + } + + if(!this._FileManagerAttributesTable) + { + this._FileManagerAttributesTable = (function() { + var div = document.createElement('div'); + + var h2 = document.createElement('h2'); + h2.appendChild(document.createTextNode('Link Attributes')); + div.appendChild(h2); + + var table = document.createElement('table'); + div.appendChild(table); + + table.className = 'filemanager-extended-options'; + var tbody = table.appendChild(document.createElement('tbody')); + + { // Title + var tr = tbody.appendChild(document.createElement('tr')); + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Title:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + + td.colSpan = 6; + input.name = 'f_title'; + input.type = 'text'; + th.className = td.className = 'filemanager-f_title'; + } + + { // Content Type + var tr = tbody.appendChild(document.createElement('tr')); + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Type:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + + td.colSpan = 6; + input.name = 'f_type'; + input.type = 'text'; + th.className = td.className = 'filemanager-f_type'; + } + + { // Target + var tr = tbody.appendChild(document.createElement('tr')); + + { // Target + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Open In:')); + + var td = tr.appendChild(document.createElement('td')); + td.colSpan = 2; + var input = td.appendChild(document.createElement('select')); + + input.name = 'f_target'; + input.options[0] = new Option(''); + input.options[1] = new Option('New Window', '_blank'); + input.options[2] = new Option('Top Frame', '_top'); + input.options[3] = new Option('Other Frame:', ''); + + Xinha._addEvent(input, 'change', function() + { + if(f('f_target').selectedIndex == 3) + { + f('f_otherTarget').style.visibility = 'visible'; + } + else + { + f('f_otherTarget').style.visibility = 'hidden'; + } + }); + + var input = td.appendChild(document.createElement('input')); + input.name = 'f_otherTarget'; + input.size = 7; + input.type = 'text'; + input.style.visibility = 'hidden'; + + th.className = td.className = 'filemanager-f_target'; + } + } + + return div; + })(); + } + + if(this.current_attributes) + { + f('f_title').value = this.current_attributes.f_title; + f('f_type').value = this.current_attributes.f_type; + + if(this.current_attributes.f_target) + { + if(!s('f_target', this.current_attributes.f_target)) + { + f('f_target').selectedIndex = 3; + f('f_otherTarget').value = this.current_attributes.f_target; + } + else + { + f('f_otherTarget').value = ''; + } + } + + this.current_attributes = null; + } + + // If no details were supplied, we return the current ones + if(!details) + { + var details = { + f_title: f('f_title').value, + f_type: f('f_type').value, + f_target: f('f_target').selectedIndex < 3 ? f('f_target').options[f('f_target').selectedIndex].value : f('f_otherTarget').value, + + table: this._FileManagerAttributesTable + } + + return details; + } + + // If details were supplied, we set the appropriate ones. + if(details.mime) f('f_type').value = details.mime; + + f('f_target').style.visibility = ''; // Ensure that the select hasn't been hidden by an overlay and not put back + + if(f('f_target').selectedIndex == 3) + { + f('f_otherTarget').style.visibility = 'visible'; + } + else + { + f('f_otherTarget').style.visibility = 'hidden'; + } + + return this._FileManagerAttributesTable; +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.ImageManager.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.ImageManager.js new file mode 100644 index 0000000000..a877e911e0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.ImageManager.js @@ -0,0 +1,685 @@ +/** + = Mootools File Manager = + == Image Manager == + + The functions in this file extend the MootoolsFileManager plugin with support + for managing images. This file is loaded automatically. + + * @author $Author$ + * @version $Id$ + * @package MootoolsFileManager + */ + + +/** Open the Image Manager version of the plugin. + * + * Called from the _insertImage method of the editor (see the hookup in MootoolsFileManager.js) + * Optional image for future external use. + */ + +MootoolsFileManager.prototype.OpenImageManager = function(image) +{ + var editor = this.editor; // for nested functions + var self = this; + var outparam = null; + + if (typeof image == "undefined") + { + image = editor.getParentElement(); + if (image && !/^img$/i.test(image.tagName)) + { + image = null; + } + } + + if ( image ) + { + outparam = + { + f_url : image.getAttribute('src'), //Xinha.is_ie ? image.src : image.src, + f_alt : image.alt, + f_border : image.style.borderWidth ? image.style.borderWidth : image.border, + f_align : Xinha.hasAttribute(image, 'align') ? image.align : null, + f_padding: image.style.padding, + f_margin : image.style.margin, + f_width : Xinha.hasAttribute(image, 'width') ? image.width : null, + f_height : Xinha.hasAttribute(image, 'height') ? image.height : null, + f_backgroundColor: image.style.backgroundColor, + f_borderColor: image.style.borderColor, + f_hspace: image.hspace && image.hspace != '-1' ? parseInt(image.hspace) : null, + f_vspace: image.vspace && image.vspace != '-1' ? parseInt(image.vspace) : null + }; + + outparam.f_border = this.shortSize(outparam.f_border); + outparam.f_padding = this.shortSize(outparam.f_padding); + outparam.f_margin = this.shortSize(outparam.f_margin); + + outparam.f_backgroundColor = this.convertToHex(outparam.f_backgroundColor); + outparam.f_borderColor = this.convertToHex(outparam.f_borderColor); + } + + this.current_image = image; + this.current_attributes = outparam; + + if(!this.ImageManagerWidget) + { + this.ImageManagerWidget = new FileManager({ + url: this.editor.config.MootoolsFileManager.backend, + assetBasePath: Xinha.getPluginDir('MootoolsFileManager')+'/mootools-filemanager/Assets', + language: _editor_lang, + selectable: true, + + upload: this.phpcfg.images_allow_upload, + destroy: this.phpcfg.images_allow_delete, + createFolders: this.phpcfg.images_allow_create_dir, + rename: this.phpcfg.images_allow_move, + move_or_copy: this.phpcfg.images_allow_move, + download: this.phpcfg.images_allow_download, + + propagateData: Object.merge({'__function': 'image-manager'}, this.editor.config.MootoolsFileManager.backend_data), + propagateType: 'POST', + + uploadAuthData: Object.merge({'__function': 'image-manager'}, this.editor.config.MootoolsFileManager.backend_data), + + onComplete: function(path, file, mgr) { self.ImageManagerReturn(path,file); }, + onHide: function() { if(this.swf && this.swf.box) this.swf.box.style.display = 'none'; }, + onShow: function() { if(this.swf && this.swf.box) this.swf.box.style.display = ''; }, + onDetails: function(details) + { + this.info.adopt(self.ImageManagerAttributes(details)); + + // This is some meta data we don't need to see, messes up the formatting. + if(this.info.getElement('.filemanager-preview dl+p')) + { + this.info.getElement('.filemanager-preview dl+p').style.display = 'none'; + } + return true; + }, + onHidePreview: function() + { + document.id(self.ImageManagerAttributes().table).dispose(); + return true; + }, + + showDirGallery: false, + keyboardNavigation: false, + listType: this.phpcfg.images_list_type, + listPaginationSize: this.phpcfg.images_pagination_size, + listMaxSuggestedDirSizeForThumbnails: this.phpcfg.images_list_mode_over, + directory: this.phpcfg.images_list_start_in + }); + } + + // IE11 which pretends it is "gecko" is particularly finicky + // about losing selection other browsers not so much, but they + // don't seem to mind saving and restoring it anyway, so we + // will do that for everybody + if(1||Xinha.is_ie) this.current_selection = this.editor.saveSelection(); + + if(self.current_image) + { + var src = self.current_image.getAttribute('src'); + if(!src.match(/^(([a-z]+:)|\/)/i)) + { + src = self.editor.config.baseHref.replace(/\/[^\/]*$/, '') + '/' + src; + if(src.match(/^[a-z]+:/i) && !self.phpcfg.images_url.match(/^[a-z]:/i)) + { + src = src.replace(/^[a-z]+:(\/\/?)[^/]*/i, ''); + } + } + + // Get exploded path without the base url + var path = src.replace(self.phpcfg.images_url+'/', '').split('/'); + + // Pull off the file + var base = path.pop(); + + // Join the path back togethor (no base url, trailing slash if the path has any length) + path = path.length ? (path.join('/') + '/') : ''; + + // feed to widget + this.ImageManagerWidget.show(null, path, base); + } + else + { + this.ImageManagerWidget.show(); + } +}; + +/** Return a DOM fragment which has all the fields needed to set the + * attributes for an image given a structure of initial values. + * + * OR return a structure of values taken from the currently table. + */ + +MootoolsFileManager.prototype.ImageManagerAttributes = function (details) +{ + + var self = this; + self._LastImageDetails = details; + + function f(name) + { + var e = self._ImageManagerAttributesTable.getElementsByTagName('input'); + for(var i = 0; i < e.length; i++) + { + if(e[i].name == name) return e[i]; + } + + var e = self._ImageManagerAttributesTable.getElementsByTagName('select'); + for(var i = 0; i < e.length; i++) + { + if(e[i].name == name) return e[i]; + } + + return null; + } + + function s(name, value) + { + for(var i = 0; i < f(name).options.length; i++) + { + if(f(name).options[i].value == value) + { + // f(name).options[i].selected = true; + f(name).selectedIndex = i; + } + } + } + + if(!this._ImageManagerAttributesTable) + { + this._ImageManagerAttributesTable = (function() { + var table = document.createElement('table'); + table.className = 'filemanager-extended-options'; + var tbody = table.appendChild(document.createElement('tbody')); + + { // Description + var tr = tbody.appendChild(document.createElement('tr')); + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Description:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + + td.colSpan = 6; + input.name = 'f_alt'; + input.type = 'text'; + th.className = td.className = 'filemanager-f_alt'; + } + + { // Width, Constrain, Margin, + var tr = tbody.appendChild(document.createElement('tr')); + + { // Width + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Width:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + + input.name = 'f_width'; + input.size = 4; + input.type = 'text'; + // @TODO Constrain Ratio + th.className = td.className = 'filemanager-f_width'; + } + + { // Constrain + + var td = tr.appendChild(document.createElement('td')); + td.rowSpan = 2; + td.style.verticalAlign = 'middle'; + + var div = td.appendChild(document.createElement('div')); + div.style.position = 'relative'; + + var img = div.appendChild(document.createElement('img')); + img.src = Xinha.getPluginDir("MootoolsFileManager") + '/img/locked.gif'; + img.width = 25; + img.height = 32; + img.alt = 'Constrain Proportions'; + img.style.verticalAlign = 'middle'; + + var input = document.createElement('input'); + input.type = 'checkbox'; + input.name = 'f_constrain'; + input.style.position = 'absolute'; + input.style.top = '10px'; + input.style.left = '-4px'; + input.value = 'on'; + input.checked = true; + div.appendChild(input); + + td.className = 'filemanager-f_constrain'; + + } + + if(self.phpcfg.images_use_hspace_vspace) + { // HSPACE/VSPACE + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('L/R Margin:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + input.name = 'f_hspace'; + input.size = 3; + input.type = 'text'; + td.appendChild(document.createTextNode(' px ')); + th.className = td.className = 'filemanager-f_hspace'; + + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('T/B Margin:')); + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + input.name = 'f_vspace'; + input.size = 3; + input.type = 'text'; + td.appendChild(document.createTextNode(' px ')); + th.className = td.className = 'filemanager-f_vspace'; + } + else + { + // Margin + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Margin:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + input.name = 'f_margin'; + input.size = 3; + input.type = 'text'; + td.appendChild(document.createTextNode(' px ')); + th.className = td.className = 'filemanager-f_margin'; + } + } + + { // Height, Padding, Colour + var tr = tbody.appendChild(document.createElement('tr')); + + { // Height + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Height:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + + input.name = 'f_height'; + input.size = 4; + input.type = 'text'; + // @TODO Constrain Ratio + th.className = td.className = 'filemanager-f_width'; + } + + { // Padding + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Padding:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + input.name = 'f_padding'; + input.size = 3; + input.type = 'text'; + td.appendChild(document.createTextNode(' px ')); + th.className = td.className = 'filemanager-f_padding'; + } + + { // Padding Colour (Background) + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Colour:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + input.name = 'f_backgroundColor'; + input.size = 7; + input.type = 'text'; + new Xinha.colorPicker.InputBinding(input); + th.className = td.className = 'filemanager-f_backgroundColor'; + } + } + + { // Alignment, Border, Colour + var tr = tbody.appendChild(document.createElement('tr')); + + { // Alignment + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Alignment:')); + + var td = tr.appendChild(document.createElement('td')); + td.colSpan = 2; + var input = td.appendChild(document.createElement('select')); + + input.name = 'f_align'; + input.title = 'Positioning of this image'; + input.options[0] = new Option('', true, true); + input.options[1] = new Option('Left', 'left'); + input.options[2] = new Option('Right', 'right'); + input.options[3] = new Option('Top', 'top'); + input.options[4] = new Option('Middle', 'middle'); + input.options[5] = new Option('Bottom', 'bottom'); + + // @TODO Constrain Ratio + th.className = td.className = 'filemanager-f_align'; + } + + { // Border + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Border:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + input.name = 'f_border'; + input.size = 3; + input.type = 'text'; + td.appendChild(document.createTextNode(' px ')); + th.className = td.className = 'filemanager-f_border'; + } + + { // Border Colour + var th = tr.appendChild(document.createElement('th')); + var label = th.appendChild(document.createTextNode('Colour:')); + + var td = tr.appendChild(document.createElement('td')); + var input = td.appendChild(document.createElement('input')); + input.name = 'f_borderColor'; + input.size = 7; + input.type = 'text'; + new Xinha.colorPicker.InputBinding(input); + th.className = td.className = 'filemanager-f_borderColor'; + } + } + + { // Size Warning + var tr = tbody.appendChild(document.createElement('tr')); + + var td = tr.appendChild(document.createElement('td')); + td.colSpan = 7; + td.className = 'filemanager-img-size-notice'; + } + + var div = document.createElement('div'); + var h2 = document.createElement('h2'); + h2.appendChild(document.createTextNode('Image Attributes')); + div.appendChild(h2); + div.appendChild(table); + return div; + })(); + + + f('f_width').onkeyup = function() + { + if(!f('f_constrain').checked) return true; + if(!f('f_width').value) + { + f('f_width').value = ''; + f('f_height').value = ''; + } + else if(f('f_height').value && self._LastImageDetails) + { + f('f_height').value = self.ScaleImage(self._LastImageDetails, { width: f('f_width').value, height: null }).height; + } + else if(!self._LastImageDetails) + { + f('f_height').value = ''; + } + return true; + } + + f('f_height').onkeyup = function() + { + if(!f('f_constrain').checked) return true; + if(!f('f_height').value) + { + f('f_width').value = ''; + f('f_height').value = ''; + } + else if(f('f_width').value && self._LastImageDetails) + { + f('f_width').value = self.ScaleImage(self._LastImageDetails, { width: null, height: f('f_height').value }).width; + } + else if(!self._LastImageDetails) + { + f('f_width').value = ''; + } + return true; + } + + f('f_constrain').onclick = function() + { + if(this.checked && f('f_width').value && f('f_height').value) + { + var new_dim = self.ScaleImage(self._LastImageDetails, { width:f('f_width').value, height:f('f_height').value }); + f('f_width').value = new_dim.width; + f('f_height').value = new_dim.height; + } + } + } + + if(this.current_attributes) + { + f('f_alt').value = this.current_attributes.f_alt; + f('f_border').value = this.current_attributes.f_border; + s('f_align', this.current_attributes.f_align); + f('f_padding').value = this.current_attributes.f_padding; + if(f('f_margin')) f('f_margin').value = this.current_attributes.f_margin; + f('f_backgroundColor').value = this.current_attributes.f_backgroundColor; + f('f_borderColor').value = this.current_attributes.f_borderColor; + if(f('f_hspace')) f('f_hspace').value = this.current_attributes.f_hspace; + if(f('f_vspace')) f('f_vspace').value = this.current_attributes.f_vspace; + f('f_width').value = this.current_attributes.f_width ? this.current_attributes.f_width : ''; + f('f_height').value = this.current_attributes.f_height ? this.current_attributes.f_height : ''; + + this.current_attributes = null; + } + + // If no details were supplied, we return the current ones + if(!details) + { + var details = { + f_alt: f('f_alt').value, + f_border: f('f_border').value, + f_align: f('f_align').options[f('f_align').selectedIndex].value, + f_padding: f('f_padding').value, + f_margin: f('f_margin') ? f('f_margin').value : null, + f_backgroundColor: f('f_backgroundColor').value, + f_borderColor: f('f_borderColor').value, + f_hspace: f('f_hspace') ? f('f_hspace').value : null, + f_vspace: f('f_vspace') ? f('f_vspace').value : null, + f_width: f('f_width').value, + f_height: f('f_height').value, + + table: this._ImageManagerAttributesTable + } + return details; + } + + if(details.width && !isNaN(parseInt(details.width)) && parseInt(details.width) > 400) + { + this._ImageManagerAttributesTable.getElement('.filemanager-img-size-notice').set('html', '

    This original image is ' + (details.width) + ' pixels wide, you may wish to reduce the size by putting a lesser number in the "Width" field above. It is not usually desirable to exceed 400 pixels in width on most normal pages.

    '); + } + else + { + this._ImageManagerAttributesTable.getElement('.filemanager-img-size-notice').set('text', ''); + } + + // If details were supplied, we set the appropriate ones. + if( + ( (f('f_width').value && f('f_width').value != details.width) + || (f('f_height').value && f('f_height').value != details.height) ) + && + (!details.url || !this.current_image || this.current_image.getAttribute('src') != details.url) + ) + { + // Check if this is the same image + var warn = function() { + new FileManager.Dialog('This image is a different size, would you like to use the new size?', { + language: { + confirm: 'Shrink/Grow To Fit', + decline: 'Fullsize' + }, + + buttons: [ + 'confirm', + 'decline' + ], + + onConfirm: function(){ + if(f('f_constrain').checked) + { + var new_size = self.ScaleImage(details, {width: f('f_width').value, height: f('f_height').value}); + + f('f_width').value = f('f_width').value ? new_size.width : ''; + f('f_height').value = f('f_height').value ? new_size.height : ''; + } + }, + + onDecline: function(){ + f('f_width').value = ''; + f('f_height').value = ''; + } + }); + } + + if(!details.path) warn(); + else if(!this.current_image) warn(); + else + { + var src = self.current_image.getAttribute('src'); + if(!src.match(/^(([a-z]+:)|\/)/i)) + { + src = self.editor.config.baseHref.replace(/\/[^\/]*$/, '') + '/' + src; + if(src.match(/^[a-z]+:/i) && !self.phpcfg.images_url.match(/^[a-z]:/i)) + { + src = src.replace(/^[a-z]+:(\/\/?)[^/]*/i, ''); + } + } + if(details.path != src) warn(); + } + + } + + f('f_align').style.visibility = ''; // Ensure that the select hasn't been hidden by an overlay and not put back + + return this._ImageManagerAttributesTable; +}; + +/** Handle the "Select" return from the File Manager, inserting or updating an + * image as appropriate. Calles ImageManagerAttributes() with no arguments + * to find out the attributes to set. + */ + +MootoolsFileManager.prototype.ImageManagerReturn = function(path, file) +{ + + var editor = this.editor; + var self = this; + var image = this.current_image; + + var param = self.ImageManagerAttributes(); + param.f_url = path; + + // IE11 which pretends it is "gecko" is particularly finicky + // about losing selection other browsers not so much, but they + // don't seem to mind saving and restoring it anyway, so we + // will do that for everybody + if(1||Xinha.is_ie) this.editor.restoreSelection(this.current_selection); + var img = image; + if (!img) { + if (0 && Xinha.is_ie) { // Maybe IE7 Needs this, 9 seems to be ok, I think 8 too + var sel = editor._getSelection(); + var range = editor._createRange(sel); + editor._doc.execCommand("insertimage", false, param.f_url); + img = range.parentElement(); + + // wonder if this works... + if (img.tagName.toLowerCase() != "img") { + img = img.previousSibling; + } + } else { + img = document.createElement('img'); + img.src = param.f_url; + editor.insertNodeAtSelection(img); + } + } else { + img.src = param.f_url; + } + + for (field in param) { + var value = param[field]; + // @TODO: Add ability to mfm for this to be possible. + switch (field) { + case "f_alt" : img.alt = value; break; + case "f_border" : + if(value.length) + { + img.style.borderWidth = /[^0-9]/.test(value) ? value : (parseInt(value) + 'px'); + if(img.style.borderWidth && !img.style.borderStyle) + { + img.style.borderStyle = 'solid'; + } + } + else + { + img.style.borderWidth = ''; + img.style.borderStyle = ''; + } + break; + + case "f_borderColor": img.style.borderColor = value; break; + case "f_backgroundColor": img.style.backgroundColor = value; break; + + case "f_padding": + { + if(value.length) + { + img.style.padding = /[^0-9]/.test(value) ? value : (parseInt(value) + 'px'); + } + else + { + img.style.padding = ''; + } + } + break; + + case "f_margin": + { + if(value && value.length) + { + img.style.margin = /[^0-9]/.test(value) ? value : (parseInt(value) + 'px'); + } + else + { + img.style.margin = ''; + } + } + break; + + case "f_align" : if(value && value !== true && value !== 'true') { img.align = value; } else { img.removeAttribute('align'); } break; + + case "f_width" : + { + if(!isNaN(parseInt(value))) { img.width = parseInt(value); } else { img.removeAttribute('width'); } + } + break; + + case "f_height": + { + if(!isNaN(parseInt(value))) { img.height = parseInt(value); } else { img.removeAttribute('height'); } + } + break; + + case "f_hspace" : + { + if(!isNaN(parseInt(value))) { img.hspace = parseInt(value); } else { img.removeAttribute('hspace'); } + } + break; + + case "f_vspace" : + { + if(!isNaN(parseInt(value))) { img.vspace = parseInt(value); } else { img.removeAttribute('vspace'); } + } + break; + } + } +}; + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.css new file mode 100644 index 0000000000..7233fcb8bc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.css @@ -0,0 +1,61 @@ +.filemanager-container .filemanager { overflow:visible; } + +div.filemanager-info-area dt, div.filemanager-preview-area dt { width: 100px; margin-left:5px; } +div.filemanager-info-area dd, div.filemanager-preview-area dd { width:auto; } +div.filemanager div.filemanager-preview-content {clear:none; } + +div.filemanager-preview-area dt { float:left; } +div.filemanager-preview-area h2 { display:none; } +div.filemanager-preview-area img.preview { margin-left:5px; margin-right:5px; margin-top:0px; float:right; clear:right; /*max-width:140px;*/ } +div.filemanager-preview-area dl { float:left; clear:left; width:auto; } +div.filemanager-preview div.object { margin-left:15%; margin-right:15%; margin-top:0px; float:right; clear:right; } + +div.filemanager td, div.filemanager th, div.filemanager input[type=text] { + line-height: 20px; + font-size: 11px; +} + +div.filemanager th +{ + font-weight:bold; + text-align:left; + padding-left:0px; +} + +div.filemanager td.filemanager-f_alt input {width:100%;} + +div.filemanager table.filemanager-extended-options { width:550px; margin-left:5px; margin-right:5px; border-collapse:collapse; } + + +table.filemanager-extended-options .buttonColor { + width :1em; + margin-left: 2px; + cursor: default; +} + +table.filemanager-extended-options .buttonColor .chooser, table.filemanager-extended-options .buttonColor .nocolor { + height: 0.6em; + border: 1px solid; + padding: 0px 1em; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; +} + +table.filemanager-extended-options .buttonColor .buttonClick { + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; +} +table.filemanager-extended-options .buttonColor .buttonColor-hilite { + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; +} + +table.filemanager-extended-options .buttonColor .nocolor { padding: 0px; } +table.filemanager-extended-options .buttonColor .nocolor-hilite { background-color: #fff; color: #f00; } + +div.filemanager-uploader-area { clear:both; } +div.filemanager-preview p.tech_info { + clear: both; +} + +div.filemanager-preview p.err_info { + clear: both; +} + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.js new file mode 100644 index 0000000000..e11a9b39b5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/MootoolsFileManager.js @@ -0,0 +1,262 @@ +/** + = Mootools File Manager = + The MootoolsFileManager plugin allows for the management, selection and + insertion of links to files and inline images to the edited HTML. + + It requires the use of Mootools. If you do not use mootools plugins, + then mootools is not loaded. If mootools is already loaded, it will + not be reloaded (so if you want to use your own version of Mootools + then load it first). + + == Usage == + Instruct Xinha to load the MootoolsFileManager plugin (follow the NewbieGuide). + + Configure the plugin as per the directions in the config.php file. + + * @author $Author$ + * @version $Id$ + * @package MootoolsFileManager + */ + + +MootoolsFileManager._pluginInfo = { + name : "Mootols File Manager", + version : "1.5", + developer : "James Sleeman (Xinha), Christoph Pojer (FileManager)", + license : "MIT" +}; + +// All the configuration is done through PHP, please read config.php to learn how (or if you're in a real +// hurry, just edit config.php) +Xinha.Config.prototype.MootoolsFileManager = +{ + 'backend' : Xinha.getPluginDir("MootoolsFileManager") + '/backend.php?__plugin=MootoolsFileManager&', + 'backend_data' : { } +}; + +// In case you want to use your own version of Mootools, you can load it first. +MootoolsFileManager.AssetLoader = Xinha.loadLibrary('MooTools'); + +// In case you want to use your own version of FileManager, you can load it first. +// You better look at the changes we had to do to the standard one though. +if(typeof FileManager == 'undefined') +{ + if(typeof __MFM_ASSETS_DIR__ == 'undefined') + { + __MFM_ASSETS_DIR__ = Xinha.getPluginDir('MootoolsFileManager')+'/mootools-filemanager/Assets' + } + + if(typeof __MFM_USE_FLASH__ == 'undefined') + { + // Flash is now disabled by default, there is no good reason to use it + // as the NoFlash uploader works exactly the same on modern browsers + // (allows multiple file uploads, progress bars and so forth) + __MFM_USE_FLASH__ = false; + + /* + __MFM_USE_FLASH__ = Browser.Plugins.Flash.version ? true : false; + if(Browser.Platform.mac && Browser.firefox3) __MFM_USE_FLASH__ = false; + */ + } + + if(typeof __MFM_USE_BACK_BUTTON_NAVIGATION__ == 'undefined') + { + __MFM_USE_BACK_BUTTON_NAVIGATION__ = false; + } + + // Because dom is probably already ready for us, we can't use the autoinit, we do it manually + __MILKBOX_NO_AUTOINIT__ = true; + + MootoolsFileManager.AssetLoader + // These are now loaded by FileManager.js automatically + //.loadStyle('mootools-filemanager/Assets/Css/FileManager.css', 'MootoolsFileManager') + //.loadStyle('mootools-filemanager/Assets/Css/Additions.css', 'MootoolsFileManager') + //.loadScript('mootools-filemanager/Source/Additions.js', 'MootoolsFileManager') + .loadScript('mootools-filemanager/Source/FileManager.js', 'MootoolsFileManager') + .loadScript('mootools-filemanager/Language/Language.en.js', 'MootoolsFileManager') + .whenReady(function() { + window.milkbox = new Milkbox({ + centered:false + }); + }); + + if(__MFM_USE_FLASH__) + { + MootoolsFileManager.AssetLoader + .loadScript('mootools-filemanager/Source/Uploader/Swiff.Uploader.js', 'MootoolsFileManager') + .loadScript('mootools-filemanager/Source/Uploader/Fx.ProgressBar.js', 'MootoolsFileManager') + .loadScript('mootools-filemanager/Source/Uploader.js', 'MootoolsFileManager'); + } + else + { + MootoolsFileManager.AssetLoader + .loadScript('mootools-filemanager/Source/NoFlash.Uploader.js', 'MootoolsFileManager'); + } +} +MootoolsFileManager.AssetLoader.loadStyle('MootoolsFileManager.css', 'MootoolsFileManager'); + +function MootoolsFileManager(editor) +{ + this.editor = editor; + var self = this; + var cfg = editor.config; + + // Do a callback to the PHP backend and get it to "decode" the configuration for us into a + // javascript object. + + // IMPORTANT: we need to do this synchronously to ensure that the buttons are added to the toolbar + // before the toolbar is drawn. + + var phpcfg = Xinha._posturlcontent(editor.config.MootoolsFileManager.backend+'__function=read-config', editor.config.MootoolsFileManager.backend_data); + + eval ('var f = '+phpcfg+';'); + self.phpcfg = f; + self.hookUpButtons(); + + return; +}; + +/** Connect up/insert the appropriate buttons and load in the auxillary files. + * + * The different "modes" of this plugin have been split into several auxilliary files + * as it's likely you may not want them all (esp if we add more modes later). + * + * Each mode's "include" is loaded as soon as we know it could be needed by the + * editor, we don't wait until the button is pressed as that would be slow for + * the user to respond. + * + */ + +MootoolsFileManager.prototype.hookUpButtons = function() +{ + var self = this; + var phpcfg = self.phpcfg; + + if (phpcfg.files_dir) + { + MootoolsFileManager.AssetLoader.loadScript('MootoolsFileManager.FileManager.js', 'MootoolsFileManager'); + + this.editor.config.registerButton({ + id : "linkfile", + tooltip : Xinha._lc("Insert File Link",'MootoolsFileManager'), + image : Xinha.getPluginDir('MootoolsFileManager') + '/img/ed_linkfile.gif', + textMode : false, + action : function(editor) { MootoolsFileManager.AssetLoader.whenReady(function() { self.OpenFileManager(); }); } + }); + + this.editor.config.addToolbarElement("linkfile", "createlink", 1); + }; + + if(phpcfg.images_dir) + { + MootoolsFileManager.AssetLoader.loadScript('MootoolsFileManager.ImageManager.js', 'MootoolsFileManager'); + + // Override our Editors insert image button action. + self.editor._insertImage = function(image) + { + MootoolsFileManager.AssetLoader.whenReady(function() { self.OpenImageManager(image); }); + } + } +}; + +/** Helper method to scale (an image typically) to a new constraint. + * + * @param origdim object { width: 123,height: 456 } The original dimensions. + * @param newdim object { width: 456, height: 123 } The new (maximum) dimensions. + * @param flexside 'width'|'height' (optional) the side which can be "flexible" + * Defaults to the "short" side. + * @return { width: 789, height: 987 } The scaled dimensions which should be used. + */ + +MootoolsFileManager.prototype.ScaleImage = function( origdim, newdim, flexside ) +{ + if(!origdim.height || !origdim.width) return newdim; // No old size, stays new. + if(!newdim.height && !newdim.width) return origdim; // No new size, stays the same. + + if(!flexside) + { + if(origdim.width > origdim.height) + { + flexside = 'height'; // Landscape image, allow the height to flex. + } + else + { + flexside = 'width'; // Portrait image, allow the width to flex + } + } + + var knownside = null; + switch(flexside) + { + case 'height': knownside = 'width'; break; + case 'width' : knownside = 'height'; break; + } + + // If we DON'T know the known side, we need to flip it. + if(!newdim[knownside]) + { + var t = knownside; + knownside = flexside; + flexside = t; + } + + var ratio = 0; + switch(flexside) + { + case 'width': ratio = origdim.width / origdim.height; break; + case 'height': ratio = origdim.height / origdim.width; break; + } + + var rdim = {}; + rdim[knownside] = newdim[knownside]; + rdim[flexside] = Math.floor(newdim[knownside] * ratio); + if(isNaN(rdim[knownside])) rdim[knownside] = null; + if(isNaN(rdim[flexside])) rdim[flexside] = null; + return rdim; +} + +/** Take a multi-part CSS size specification (eg sizes for 4 borders) and + * shrink it into one if possible. + */ + +MootoolsFileManager.prototype.shortSize = function(cssSize) +{ + if(/ /.test(cssSize)) + { + var sizes = cssSize.split(' '); + var useFirstSize = true; + for(var i = 1; i < sizes.length; i++) + { + if(sizes[0] != sizes[i]) + { + useFirstSize = false; + break; + } + } + if(useFirstSize) cssSize = sizes[0]; + } + return cssSize; +}; + +/** Take a colour in rgb(a,b) format and convert to HEX + * handles multiple colours in same string as well. + */ + +MootoolsFileManager.prototype.convertToHex = function(color) +{ + if (typeof color == "string" && /, /.test.color) + color = color.replace(/, /, ','); // rgb(a, b) => rgb(a,b) + + if (typeof color == "string" && / /.test.color) { // multiple values + var colors = color.split(' '); + var colorstring = ''; + for (var i = 0; i < colors.length; i++) { + colorstring += Xinha._colorToRgb(colors[i]); + if (i + 1 < colors.length) + colorstring += " "; + } + return colorstring; + } + + return Xinha._colorToRgb(color); +} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/README.DEVELOPERS b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/README.DEVELOPERS new file mode 100644 index 0000000000..72475a47b6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/README.DEVELOPERS @@ -0,0 +1,5 @@ +The mootools-filemanager directory contains a version of mootools-filemanager as extracted from the following git repository + +https://github.com/sleemanj/mootools-filemanager/ + +it has been stripped of unnecessary code including the "GetID3" library as this is GPL licenced rather than MIT, no code changes are necessary from the git above, just stuff deleted. \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/XinhaFileManager.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/XinhaFileManager.php new file mode 100644 index 0000000000..d42ebee817 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/XinhaFileManager.php @@ -0,0 +1,69 @@ + $v) { $_POST[$k]=$v; if(!isset($_REQUEST[$k])) $_REQUEST[$k] = $v; } +} + +function size_to_bytes($s) +{ + if(preg_match('/([0-9\.])+([a-zA-Z]+)/', $s, $M)) + { + switch(strtolower($M[2])) + { + case 'm': + return floor(floatval($M[1]) * 1024 * 1024); + + case 'b': + return intval($M[1]); + + case 'kb': + return floor(floatval($M[1]) * 1024); + } + } + + if(floatval($s) < 10) return floor(floatval($s) * 1024 * 1024); + if(floatval($s) < 1024) return floor(floatval($s) * 1024); // Kilobytes + return intval($s); // Bytes +} + +define('I_KNOW_ABOUT_SUHOSIN', TRUE); // /contrib/xinha-php.js does it's best to avoid this problem for us +require_once('config.php'); + +// Ensure thumbnail path is OK +if(!isset($IMConfig['files_dir']) && !isset($IMConfig['images_dir'])) +{ + unset($IMConfig['thumbs_dir']); + unset($IMConfig['thumbs_url']); +} +else +{ + if(!file_exists($IMConfig['thumbs_dir'])) @mkdir($IMConfig['thumbs_dir']); +} + +switch ( @$_REQUEST[ "__function" ] ) +{ + case 'read-config': + // This is used so that the javascript can read the config + // so we don't have to have a js config and a php config duplicating + // settings + echo xinha_to_js($IMConfig); + break; + + case 'image-manager': + if(!@$IMConfig['images_dir']) + { + // Session time out + echo '{"status" : 0, "error": "No images_dir, most likely your session has timed out, or the file upload was too large for this server to handle, try refreshing your browser, or uploading a smaller file if it still does not work.", "data": ' . json_encode($_REQUEST).'}';exit; + } + + // include('mootools-filemanager/Assets/Connector/FileManager.php'); + include('XinhaFileManager.php'); + + $browser = new XinhaFileManager(array( + 'images_dir' => $IMConfig['images_dir'], + 'images_url' => $IMConfig['images_url'], + + 'thumbs_dir' => $IMConfig['thumbs_dir'], + 'thumbs_url' => $IMConfig['thumbs_url'], + + 'assetBasePath' => $IMConfig['base_url'] .'/mootools-filemanager/Assets', + + 'upload' => $IMConfig['images_allow_upload'], + 'destroy' => $IMConfig['images_allow_delete'], + 'create' => $IMConfig['images_allow_create_dir'], + 'move' => $IMConfig['images_allow_move'], + 'download' => $IMConfig['images_allow_download'], + + + 'maxUploadSize' => size_to_bytes($IMConfig['images_max_upload_size']), + 'suggestedMaxImageDimension' => $IMConfig['images_suggested_image_dimension'], + 'thumbnailsMustGoThroughBackend' => FALSE, + 'filter' => 'image/', + + 'thumbBigSize' => 150, + )); + + $browser->fireEvent(!empty($_REQUEST['event']) ? $_REQUEST['event'] : null); + break; + + case 'file-manager': + if(!@$IMConfig['files_dir']) + { + // Session time out + echo '{"status" : 0, "error": "No files_dir, most likely your session has timed out."}';exit; + } + + include('XinhaFileManager.php'); + + $browser = new XinhaFileManager(array( + 'files_dir' => $IMConfig['files_dir'], + 'files_url' => $IMConfig['files_url'], + + 'thumbs_dir' => $IMConfig['thumbs_dir'], + 'thumbs_url' => $IMConfig['thumbs_url'], + + 'assetBasePath' => $IMConfig['base_url'] .'/mootools-filemanager/Assets', + + 'upload' => $IMConfig['files_allow_upload'], + 'destroy' => $IMConfig['files_allow_delete'], + 'create' => $IMConfig['files_allow_create_dir'], + 'move' => $IMConfig['files_allow_move'], + 'download' => $IMConfig['files_allow_download'], + + + 'maxUploadSize' => size_to_bytes($IMConfig['files_max_upload_size']), + 'suggestedMaxImageDimension' => $IMConfig['files_suggested_image_dimension'], + 'thumbnailsMustGoThroughBackend' => FALSE, + // 'filter' => $IMConfig['files_filter'], + 'thumbBigSize' => 150, + 'useGetID3IfAvailable' => false, + )); + + $browser->fireEvent(!empty($_REQUEST['event']) ? $_REQUEST['event'] : null); + break; +} + +?> diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/config.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/config.php new file mode 100644 index 0000000000..43dddbcd04 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/config.php @@ -0,0 +1,247 @@ + '/home/your/directory', + 'images_url' => '/directory', + 'allow_images_upload' => true, + ) + ) + ?> + } + }}} + + This will work provided you are using normal file-based PHP sessions + (most likely), if not, you may need to modify the php-xinha.php + file to suit your setup. + + * @author $Author$ + * @version $Id$ + * @package MootoolsFileManager + * + */ + + + /** + == File Paths REQUIRED == + + This plugin operates (optionally) in two modes. + + 1. As a File Manager where people are inserting a link to a file + (eg a doc or pdf commonly), we call this "files" mode. + 2. As an Image Manager where people are inserting an inline image, + we call this "images" mode. + + You may provide one of, or both of, files_dir and images_dir. If you do not + provide one, that mode of MootoolsFileManager will be disabled. + + # `files_dir` -- Directory path to the location where ordinary files are stored + (eg /home/you/public_html/downloads/ ) + # `files_url` -- The URL path to the files_dir + (eg /downloads/) + # `images_dir` -- Directory path to the location where inline images are stored + (eg /home/you/public_html/images/) + # `images_url` -- The URL path to the images_dir + + === Security Caution === + + You should ensure that the paths you specify are protected against having PHP and + other scripts from being executed. The following .htaccess file is a good idea + + {{{ + + php_flag engine off + + AddType text/html .html .htm .shtml .php .php3 .php4 .php5 .php6 .php7 .php8 .phtml .phtm .pl .py .cgi + RemoveHandler .php + RemoveHandler .php8 + RemoveHandler .php7 + RemoveHandler .php6 + RemoveHandler .php5 + RemoveHandler .php4 + RemoveHandler .php3 + }}} + + */ + + $IMConfig['files_dir'] = FALSE; // No trailing slash + $IMConfig['files_url'] = FALSE; // No trailing slash + + $IMConfig['images_dir'] = FALSE; // No trailing slash + $IMConfig['images_url'] = FALSE; // No trailing slash + + $IMConfig['thumbs_dir'] = NULL; // Will default to images_dir/.thumbs or files_dir/.thumbs + $IMConfig['thumbs_url'] = NULL; // Will default to images_url/.thumbs or files_url/.thumbs + /** + == Turning On Uploads == + We have two sets of settings for turning on uploads, one controls the files mode + of the plugin, the other is for images mode. + + Note that allowing upload also permits the user to create subdirectories to better + organise the files. + + === Maximum File Sizes === + + Each mode can have a different maximum file size that can be uploaded, this + size is a number followed by one of M, KB or B. + + === Suggested Image Dimensions === + + Each mode can have a different "suggested maximum image dimension", when the + user uses the Mootools File Manager to upload a file, they are able to choose + to "resize large images" on upload. This defines what "large" means. + + */ + + $IMConfig['files_allow_upload'] = false; + $IMConfig['files_allow_delete'] = false; + $IMConfig['files_max_upload_size'] = '3M'; + $IMConfig['files_suggested_image_dimension'] = array('width' => 2048, 'height' => 1536); + + $IMConfig['images_allow_upload'] = false; + $IMConfig['images_allow_delete'] = false; + $IMConfig['images_max_upload_size'] = '3M'; + $IMConfig['images_suggested_image_dimension'] = $IMConfig['files_suggested_image_dimension']; + + +// ------------------------------------------------------------------------- +// OPTIONAL SETTINGS +// ------------------------------------------------------------------------- + +/** Expanded Permissions */ + +$IMConfig['images_allow_create_dir'] = NULL; // Defaults to allow_images_upload +$IMConfig['images_allow_move'] = false; +$IMConfig['images_allow_download'] = false; + +$IMConfig['files_allow_create_dir'] = NULL; // Defaults to allow_files_upload +$IMConfig['files_allow_move'] = false; +$IMConfig['files_allow_download'] = false; + +/** Listing Mode Configuration */ + +$IMConfig['images_list_type'] = 'list'; // Or 'thumb' +$IMConfig['images_pagination_size'] = 10000; // By default, a large number to avoid pagination strongly + // The MFM may reduce this automatically however. +$IMConfig['images_list_mode_over'] = 30; // If a folder contains more than this many entries + // it will fall back to 'list' mode when in 'thumb' mode + // the user can switch back to 'thumb' if they want. +$IMConfig['images_list_start_in'] = NULL; // You can set this to a path relative to the images_dir + + +$IMConfig['files_list_type'] = 'list'; // Or 'thumb' +$IMConfig['files_pagination_size'] = 10000; // By default, a large number to avoid pagination strongly + // The MFM may reduce this automatically however. +$IMConfig['files_list_mode_over'] = 30; // If a folder contains more than this many entries + // it will fall back to 'list' mode when in 'thumb' mode + // the user can switch back to 'thumb' if they want. +$IMConfig['files_list_start_in'] = NULL; // You can set this to a path relative to the images_dir + +/** + +== Plugin Path == + + For most people the defaults will work fine, but if you have trouble, you can set + `base_dir` to be the directory path to xinha/plugins/MootoolsFileManager + `base_url` to be the url path to xinha/plugins/MootoolsFileManager +*/ + +$IMConfig['base_dir'] = getcwd(); +$IMConfig['base_url'] = preg_replace('/\/backend\.php.*/', '', $_SERVER['REQUEST_URI']); + +/** + +== HTML Compatability == + + If the HTML you are editing in Xinha is destined for an email you will probably want to use hspace and vspace instead of CSS margins because of poor Email support for CSS. + +*/ + +$IMConfig['images_use_hspace_vspace'] = TRUE; + +//////////////////////////////////////////////////////////////////////////////// +// ================== END OF CONFIGURATION ======================= // +//////////////////////////////////////////////////////////////////////////////// + +// Standard PHP Backend Data Passing +// if data was passed using xinha_pass_to_php_backend() we merge the items +// provided into the Config +require_once(realpath(dirname(__FILE__) . '/../../contrib/php-xinha.php')); + +if($passed_data = xinha_read_passed_data()) +{ + $IMConfig = array_merge($IMConfig, $passed_data); +} + +// Back Compat, Some of our config options have been renamed, +// if the old name is present, that takes precendence. +$RenamedConfigVars = array( + 'UseHSpaceVSpace' => 'images_use_hspace_vspace', + + 'allow_files_upload' => 'files_allow_upload', + 'allow_files_delete' => 'files_allow_delete', + 'allow_files_create_dir' => 'files_allow_create_dir', + 'allow_files_move' => 'files_allow_move', + 'allow_files_download' => 'files_allow_download', + + 'max_files_upload_size' => 'files_max_upload_size', + 'suggested_files_image_dimension' => 'files_suggested_image_dimension', + + 'allow_images_upload' => 'images_allow_upload', + 'allow_images_delete' => 'images_allow_delete', + 'allow_images_create_dir' => 'images_allow_create_dir', + 'allow_images_move' => 'images_allow_move', + 'allow_images_download' => 'images_allow_download', + + 'max_images_upload_size' => 'images_max_upload_size', + 'suggested_images_image_dimension' => 'images_suggested_image_dimension', +); + +foreach($RenamedConfigVars as $Old => $New) +{ + if(isset($IMConfig[$Old])) + { + $New = $IMConfig[$Old]; + unset($IMConfig[$Old]); + } +} + +if(!isset($IMConfig['thumbs_dir'])) +{ + $IMConfig['thumbs_dir'] = (isset($IMConfig['images_dir']) ? $IMConfig['images_dir'] : $IMConfig['files_dir']) . '/.thumbs'; +} + +if(!isset($IMConfig['thumbs_url'])) +{ + $IMConfig['thumbs_url'] = (isset($IMConfig['images_url']) ? $IMConfig['images_url'] : $IMConfig['files_url']) . '/.thumbs'; +} + +if(!isset($IMConfig['images_allow_create_dir'])) +{ + $IMConfig['images_allow_create_dir'] = $IMConfig['images_allow_upload']; +} + +if(!isset($IMConfig['files_allow_create_dir'])) +{ + $IMConfig['files_allow_create_dir'] = $IMConfig['files_allow_upload']; +} + +?> diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/img/ed_linkfile.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/img/ed_linkfile.gif new file mode 100644 index 0000000000..38ac232397 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/img/ed_linkfile.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/img/locked.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/img/locked.gif new file mode 100644 index 0000000000..92472389de Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/img/locked.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/da.js new file mode 100644 index 0000000000..8060aac3e2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/da.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Insert File Link": "Indsæt fil-link", + "You must select some text before making a new link.": "Vælg venligst noget tekst før du laver et nyt link." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/de.js new file mode 100644 index 0000000000..589494808c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/de.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Insert File Link": "Dateilink einfügen", + "You must select some text before making a new link.": "Sie müssen einen Text markieren um einen Link zu erstellen" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/fr.js new file mode 100644 index 0000000000..a8d696c72b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/fr.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Insert File Link": "Insérer un lien vers fichier", + "You must select some text before making a new link.": "Vous devez sélectionner un texte avant de créer un nouveau lien" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/ja.js new file mode 100644 index 0000000000..0ba78e5bad --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/ja.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Insert File Link": "ファイルへのリンクを挿入", + "You must select some text before making a new link.": "リンクを作成するにはテキストを選択する必要があります" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/lc_base.js new file mode 100644 index 0000000000..88039222c3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/lc_base.js @@ -0,0 +1,26 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Insert File Link": "", + "You must select some text before making a new link.": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/nb.js new file mode 100644 index 0000000000..c9b4dab0e0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/nb.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Insert File Link": "Sett inn lenke til fil", + "You must select some text before making a new link.": "Du må markere tekst eller et bilde før du kan lage en lenke." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/nl.js new file mode 100644 index 0000000000..1110b0a673 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/nl.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Insert File Link": "Hypelink van bestandinvoegen", + "You must select some text before making a new link.": "Selecteer de tekst welke gelinkt moet worden." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/pl.js new file mode 100644 index 0000000000..795227600a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/pl.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Insert File Link": "Wstaw odnośnik do pliku na serwerze", + "You must select some text before making a new link.": "Zaznacz tekst przed dodaniem odnośnika." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/pt_br.js new file mode 100644 index 0000000000..2d2295f419 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/lang/pt_br.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Insert File Link": "Inserir Link de Arquivo", + "You must select some text before making a new link.": "Você precisa selecionar algum texto antes de criar um novo link." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/Connector/FileManager.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/Connector/FileManager.php new file mode 100755 index 0000000000..9eb40d3295 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/Connector/FileManager.php @@ -0,0 +1,5462 @@ + 1024, 'height' => 768)*) The maximum number of pixels in height and width an image can have, if the user enables "resize on upload". + * - upload: (boolean, defaults to *false*) allow uploads, this is also set in the FileManager.js (this here is only for security protection when uploads should be deactivated) + * - destroy: (boolean, defaults to *false*) allow files to get deleted, this is also set in the FileManager.js (this here is only for security protection when file/directory delete operations should be deactivated) + * - create: (boolean, defaults to *false*) allow creating new subdirectories, this is also set in the FileManager.js (this here is only for security protection when dir creates should be deactivated) + * - move: (boolean, defaults to *false*) allow file and directory move/rename and copy, this is also set in the FileManager.js (this here is only for security protection when rename/move/copy should be deactivated) + * - download: (boolean, defaults to *false*) allow downloads, this is also set in the FileManager.js (this here is only for security protection when downloads should be deactivated) + * - allowExtChange: (boolean, defaults to *false*) allow the file extension to be changed when performing a rename operation. + * - safe: (boolean, defaults to *true*) If true, disallows 'exe', 'dll', 'php', 'php3', 'php4', 'php5', 'phps' and saves them as 'txt' instead. + * - chmod: (integer, default is 0777) the permissions set to the uploaded files and created thumbnails (must have a leading "0", e.g. 0777) + * - filter: (string, defaults to *null*) If not empty, this is a list of allowed mimetypes (overruled by the GET request 'filter' parameter: single requests can thus overrule the common setup in the constructor for this option) + * - showHiddenFoldersAndFiles: (boolean, defaults to *false*) whether or not to show 'dotted' directories and files -- such files are considered 'hidden' on UNIX file systems + * - ViewIsAuthorized_cb (function/reference, default is *null*) authentication + authorization callback which can be used to determine whether the given directory may be viewed. + * The parameter $action = 'view'. + * - DetailIsAuthorized_cb (function/reference, default is *null*) authentication + authorization callback which can be used to determine whether the given file may be inspected (and the details listed). + * The parameter $action = 'detail'. + * - UploadIsAuthorized_cb (function/reference, default is *null*) authentication + authorization callback which can be used to determine whether the given file may be uploaded. + * The parameter $action = 'upload'. + * - DownloadIsAuthorized_cb (function/reference, default is *null*) authentication + authorization callback which can be used to determine whether the given file may be downloaded. + * The parameter $action = 'download'. + * - CreateIsAuthorized_cb (function/reference, default is *null*) authentication + authorization callback which can be used to determine whether the given subdirectory may be created. + * The parameter $action = 'create'. + * - DestroyIsAuthorized_cb (function/reference, default is *null*) authentication + authorization callback which can be used to determine whether the given file / subdirectory tree may be deleted. + * The parameter $action = 'destroy'. + * - MoveIsAuthorized_cb (function/reference, default is *null*) authentication + authorization callback which can be used to determine whether the given file / subdirectory may be renamed, moved or copied. + * Note that currently support for copying subdirectories is missing. + * The parameter $action = 'move'. + * UploadIsComplete_cb (function/reference, default is *null*) Upload complete callback which can be used to post process a newly upload file. + * The parameter $action = 'upload'. + * DownloadIsComplete_cb (function/reference, default is *null*) Download complete callback which can be used to post process after a file has been downloaded file. + * The parameter $action = 'download'. + * DestroyIsComplete_cb (function/reference, default is *null*) Destroy complete callback which can be used to cleanup after a newly deleted/destroyed file. + * The parameter $action = 'destroy'. + * + * Obsoleted options: + * - maxImageSize: (integer, default is 1024) The maximum number of pixels in both height and width an image can have, if the user enables "resize on upload". (This option is obsoleted by the 'suggestedMaxImageDimension' option.) + * + * + * About the action permissions (upload|destroy|create|move|download): + * + * All the option "permissions" are set to FALSE by default. Developers should always SPECIFICALLY enable a permission to have that permission, for two reasons: + * + * 1. Developers forget to disable permissions, they don't forget to enable them (because things don't work!) + * + * 2. Having open permissions by default leaves potential for security vulnerabilities where those open permissions are exploited. + * + * + * For all authorization hooks (callback functions) the following applies: + * + * The callback should return TRUE for yes (permission granted), FALSE for no (permission denied). + * Parameters sent to the callback are: + * ($this, $action, $fileinfo) + * where $fileinfo is an array containing info about the file being uploaded, $action is a (string) identifying the current operation, $this is a reference to this FileManager instance. + * $action was included as a redundant parameter to each callback as a simple means to allow users to hook a single callback function to all the authorization hooks, without the need to create a wrapper function for each. + * + * For more info about the hook parameter $fileinfo contents and a basic implementation, see further below (section 'Hooks: Detailed Interface Specification') and the examples in + * Demos/FM-common.php, Demos/manager.php and Demos/selectImage.php + * + * + * Notes on relative paths and safety / security: + * + * If any option is specifying a relative path, e.g. '../Assets' or 'Media/Stuff/', this is assumed to be relative to the request URI path, + * i.e. dirname($_SERVER['SCRIPT_NAME']). + * + * Requests may post/submit relative paths as arguments to their FileManager events/actions in $_GET/$_POST, and those relative paths will be + * regarded as relative to the request URI handling script path, i.e. dirname($_SERVER['SCRIPT_NAME']) to make the most + * sense from bother server and client coding perspective. + * + * + * We also assume that any of the paths may be specified from the outside, so each path is processed and filtered to prevent malicious intent + * from succeeding. (An example of such would be an attacker posting his own 'destroy' event request requesting the destruction of + * '../../../../../../../../../etc/passwd' for example. In more complex rigs, the attack may be assisted through attacks at these options' paths, + * so these are subjected to the same scrutiny in here.) + * + * All paths, absolute or relative, as passed to the event handlers (see the onXXX methods of this class) are ENFORCED TO ABIDE THE RULE + * 'every path resides within the options['directory'] a.k.a. BASEDIR rooted tree' without exception. + * Because we can do without exceptions to important rules. ;-) + * + * When paths apparently don't, they are coerced into adherence to this rule; when this fails, an exception is thrown internally and an error + * will be reported and the action temrinated. + * + * 'LEGAL URL paths': + * + * Paths which adhere to the aforementioned rule are so-called LEGAL URL paths; their 'root' equals BASEDIR. + * + * BASEDIR equals the path pointed at by the options['directory'] setting. It is therefore imperative that you ensure this value is + * correctly set up; worst case, this setting will equal DocumentRoot. + * In other words: you'll never be able to reach any file or directory outside this site's DocumentRoot directory tree, ever. + * + * + * Path transformations: + * + * To allow arbitrary directory/path mapping algorithms to be applied (e.g. when implementing Alias support such as available in the + * derived class FileManagerWithAliasSupport), all paths are, on every change/edit, transformed from their LEGAL URL representation to + * their 'absolute URI path' (which is suitable to be used in links and references in HTML output) and 'absolute physical filesystem path' + * equivalents. + * By enforcing such a unidirectional transformation we implicitly support non-reversible and hard-to-reverse path aliasing mechanisms, + * e.g. complex regex+context based path manipulations in the server. + * + * + * When you need your paths to be restricted to the bounds of the options['directory'] tree (which is a subtree of the DocumentRoot based + * tree), you may wish to use the 'legal' class of path transformation member functions: + * + * - legal2abs_url_path() + * - rel2abs_legal_url_path() + * - legal_url_path2file_path() + * + * When you have a 'absolute URI path' or a path relative in URI space (implicitly relative to dirname($_SERVER['SCRIPT_NAME']) ), you can + * transform such a path to either a guaranteed-absolute URI space path or a filesystem path: + * + * - rel2abs_url_path() + * - url_path2file_path() + * + * Any other path transformations are ILLEGAL and DANGEROUS. The only other possibly legal transformation is from absolute URI path to + * BASEDIR-based LEGAL URL path, as the URI path space is assumed to be linear and contiguous. However, this operation is HIGHLY discouraged + * as it is a very strong indicator of other faulty logic, so we do NOT offer a method for this. + * + * + * Hooks: Detailed Interface Specification: + * + * All 'authorization' callback hooks share a common interface specification (function parameter set). This is by design, so one callback + * function can be used to process any and all of these events: + * + * Function prototype: + * + * function CallbackFunction($mgr, $action, &$info) + * + * where + * + * $msg: (object) reference to the current FileManager class instance. Can be used to invoke public FileManager methods inside + * the callback. + * + * $action: (string) identifies the event being processed. Can be one of these: + * + * 'create' create new directory + * 'move' move or copy a file or directory + * 'destroy' delete a file or directory + * 'upload' upload a single file (when performing a bulk upload, each file will be uploaded individually) + * 'download' download a file + * 'view' show a directory listing (in either 'list' or 'thumb' mode) + * 'detail' show detailed information about the file and, whn possible, provide a link to a (largish) thumbnail + * + * $info (array) carries all the details. Some of which can even be manipulated if your callbac is more than just an + * authentication / authorization checker. ;-) + * For more detail, see the next major section. + * + * The callback should return a boolean, where TRUE means the session/client is authorized to execute the action, while FALSE + * will cause the backend to report an authentication error and abort the action. + * + * Exceptions throwing from the callback: + * + * Note that you may choose to throw exceptions from inside the callback; those will be caught and transformed to proper error reports. + * + * You may either throw any exceptions based on either the FileManagerException or Exception classes. When you format the exception + * message as "XYZ:data", where 'XYZ' is a alphanumeric-only word, this will be transformed to a i18n-support string, where + * 'backend.XYZ' must map to a translation string (e.g. 'backend.nofile', see also the Language/Language.XX.js files) and the optional + * 'data' tail will be appended to the translated message. + * + * + * $info: the details: + * + * Here is the list of $info members per $action event code: + * + * 'upload': + * + * $info[] contains: + * + * 'legal_dir_url' (string) LEGAL URI path to the directory where the file is being uploaded. You may invoke + * $dir = $mgr->legal_url_path2file_path($legal_dir_url); + * to obtain the physical filesystem path (also available in the 'dir' $info entry, by the way!), or + * $dir_url = $mgr->legal2abs_url_path($legal_dir_url); + * to obtain the absolute URI path for the given directory. + * + * 'dir' (string) physical filesystem path to the directory where the file is being uploaded. + * + * 'raw_filename' (string) the raw, unprocessed filename of the file being being uploaded, as specified by the client. + * + * WARNING: 'raw_filename' may contain anything illegal, such as directory paths instead of just a filename, + * filesystem-illegal characters and what-not. Use 'name'+'extension' instead if you want to know + * where the upload will end up. + * + * 'filename' (string) the filename, plus extension, of the file being uploaded; this filename is ensured + * to be both filesystem-legal, unique and not yet existing in the given directory. + * + * Note that the file name extension has already been cleaned, including 'safe' mode processing, + * i.e. any uploaded binary executable will have been assigned the extension '.txt' already, when + * FileManager's options['safe'] is enabled. + * + * 'tmp_filepath' (string) filesystem path pointing at the temporary storage location of the uploaded file: you can + * access the file data available here to optionally validate the uploaded content. + * + * 'meta_data' (array) the content sniffed infor as produced by getID3 + * + * 'mime' (string) the mime type as sniffed from the file + * + * 'mime_filter' (optional, string) mime filter as specified by the client: a comma-separated string containing + * full or partial mime types, where a 'partial' mime types is the part of a mime type before + * and including the slash, e.g. 'image/' + * + * 'mime_filters' (optional, array of strings) the set of allowed mime types, derived from the 'mime_filter' setting. + * + * 'size' (integer) number of bytes of the uploaded file + * + * 'maxsize' (integer) the configured maximum number of bytes for any single upload + * + * 'overwrite' (boolean) FALSE: the uploaded file will not overwrite any existing file, it will fail instead. + * + * Set to TRUE (and adjust the 'name' and 'extension' entries as you desire) when you wish to overwrite + * an existing file. + * + * 'resize' (boolean) TRUE: any uploaded images are resized to the configured maximum dimensions before they + * are stored on disk. + * + * 'chmod' (integer) UNIX access rights (default: 0666) for the file-to-be-created (RW for user,group,world). + * + * Note that the eXecutable bits have already been stripped before the callback was invoked. + * + * 'preliminary_json' (array) the JSON data collected so far; when ['status']==1, then we're performing a regular upload + * operation, when the ['status']==0, we are performing a defective upload operation. + * + * 'validation_failure' (string) NULL: no validation error has been detected before the callback was invoked; non-NULL, e.g. + * "nofile": the string passed as message parameter of the FileManagerException, which will be thrown + * after the callback has returned. (You may alter the 'validation_failure' string value to change the + * reported error, or set it to NULL to turn off the validation error report entirely -- we assume you + * will have corrected the other fileinfo[] items as well, when resetting the validation error. + * + * + * Note that this request originates from a Macromedia Flash client: hence you'll need to use the + * $_POST[session_name()] value to manually set the PHP session_id() before you start your your session + * again. + * + * The frontend-specified options.propagateData items will be available as $_POST[] items. + * + * The frontend-specified options.uploadAuthData items will be available as $_POST[] items. + * + * + * 'download': + * + * $info[] contains: + * + * 'legal_url' (string) LEGAL URI path to the file to be downloaded. You may invoke + * $dir = $mgr->legal_url_path2file_path($legal_url); + * to obtain the physical filesystem path (also available in the 'file' $info entry, by the way!), or + * $url = $mgr->legal2abs_url_path($legal_url); + * to obtain the absolute URI path for the given file. + * + * 'file' (string) physical filesystem path to the file being downloaded. + * + * 'meta_data' (array) the content sniffed infor as produced by getID3 + * + * 'mime' (string) the mime type as sniffed from the file + * + * 'mime_filter' (optional, string) mime filter as specified by the client: a comma-separated string containing + * full or partial mime types, where a 'partial' mime types is the part of a mime type before + * and including the slash, e.g. 'image/' + * + * 'mime_filters' (optional, array of strings) the set of allowed mime types, derived from the 'mime_filter' setting. + * + * 'validation_failure' (string) NULL: no validation error has been detected before the callback was invoked; non-NULL, e.g. + * "nofile": the string passed as message parameter of the FileManagerException, which will be thrown + * after the callback has returned. (You may alter the 'validation_failure' string value to change the + * reported error, or set it to NULL to turn off the validation error report entirely -- we assume you + * will have corrected the other fileinfo[] items as well, when resetting the validation error. + * + * The frontend-specified options.propagateData items will be available as $_POST[] items. + * + * + * 'create': // create directory + * + * $info[] contains: + * + * 'legal_url' (string) LEGAL URI path to the parent directory of the directory being created. You may invoke + * $dir = $mgr->legal_url_path2file_path($legal_url); + * to obtain the physical filesystem path (also available in the 'dir' $info entry, by the way!), or + * $url = $mgr->legal2abs_url_path($legal_url); + * to obtain the absolute URI path for this parent directory. + * + * 'dir' (string) physical filesystem path to the parent directory of the directory being created. + * + * 'raw_name' (string) the name of the directory to be created, as specified by the client (unfiltered!) + * + * 'uniq_name' (string) the name of the directory to be created, filtered and ensured to be both unique and + * not-yet-existing in the filesystem. + * + * 'newdir' (string) the filesystem absolute path to the directory to be created; identical to: + * $newdir = $mgr->legal_url_path2file_path($legal_url . $uniq_name); + * Note the above: all paths are transformed from URI space to physical disk every time a change occurs; + * this allows us to map even not-existing 'directories' to possibly disparate filesystem locations. + * + * 'chmod' (integer) UNIX access rights (default: 0777) for the directory-to-be-created (RWX for user,group,world) + * + * 'preliminary_json' (array) the JSON data collected so far; when ['status']==1, then we're performing a regular 'create' + * operation, when the ['status']==0, we are performing a defective 'create' operation. + * + * 'validation_failure' (string) NULL: no validation error has been detected before the callback was invoked; non-NULL, e.g. + * "nofile": the string passed as message parameter of the FileManagerException, which will be thrown + * after the callback has returned. (You may alter the 'validation_failure' string value to change the + * reported error, or set it to NULL to turn off the validation error report entirely -- we assume you + * will have corrected the other fileinfo[] items as well, when resetting the validation error. + * + * The frontend-specified options.propagateData items will be available as $_POST[] items. + * + * + * 'destroy': + * + * $info[] contains: + * + * 'legal_url' (string) LEGAL URI path to the file/directory to be deleted. You may invoke + * $dir = $mgr->legal_url_path2file_path($legal_url); + * to obtain the physical filesystem path (also available in the 'file' $info entry, by the way!), or + * $url = $mgr->legal2abs_url_path($legal_url); + * to obtain the absolute URI path for the given file/directory. + * + * 'file' (string) physical filesystem path to the file/directory being deleted. + * + * 'meta_data' (array) the content sniffed infor as produced by getID3 + * + * 'mime' (string) the mime type as sniffed from the file / directory (directories are mime type: 'text/directory') + * + * 'mime_filter' (optional, string) mime filter as specified by the client: a comma-separated string containing + * full or partial mime types, where a 'partial' mime types is the part of a mime type before + * and including the slash, e.g. 'image/' + * + * 'mime_filters' (optional, array of strings) the set of allowed mime types, derived from the 'mime_filter' setting. + * + * Note that the 'mime_filters', if any, are applied to the 'delete' operation in a special way: only + * files matching one of the mime types in this list will be deleted; anything else will remain intact. + * This can be used to selectively clean a directory tree. + * + * The design idea behind this approach is that you are only allowed what you can see ('view'), so + * all 'view' restrictions should equally to the 'delete' operation. + * + * 'preliminary_json' (array) the JSON data collected so far; when ['status']==1, then we're performing a regular 'destroy' + * operation, when the ['status']==0, we are performing a defective 'destroy' operation. + * + * 'validation_failure' (string) NULL: no validation error has been detected before the callback was invoked; non-NULL, e.g. + * "nofile": the string passed as message parameter of the FileManagerException, which will be thrown + * after the callback has returned. (You may alter the 'validation_failure' string value to change the + * reported error, or set it to NULL to turn off the validation error report entirely -- we assume you + * will have corrected the other fileinfo[] items as well, when resetting the validation error. + * + * The frontend-specified options.propagateData items will be available as $_POST[] items. + * + * + * 'move': // move or copy! + * + * $info[] contains: + * + * 'legal_url' (string) LEGAL URI path to the source parent directory of the file/directory being moved/copied. You may invoke + * $dir = $mgr->legal_url_path2file_path($legal_url); + * to obtain the physical filesystem path (also available in the 'dir' $info entry, by the way!), or + * $url = $mgr->legal2abs_url_path($legal_url); + * to obtain the absolute URI path for the given directory. + * + * 'dir' (string) physical filesystem path to the source parent directory of the file/directory being moved/copied. + * + * 'path' (string) physical filesystem path to the file/directory being moved/copied itself; this is the full source path. + * + * 'name' (string) the name itself of the file/directory being moved/copied; this is the source name. + * + * 'legal_newurl' (string) LEGAL URI path to the target parent directory of the file/directory being moved/copied. You may invoke + * $dir = $mgr->legal_url_path2file_path($legal_url); + * to obtain the physical filesystem path (also available in the 'dir' $info entry, by the way!), or + * $url = $mgr->legal2abs_url_path($legal_url); + * to obtain the absolute URI path for the given directory. + * + * 'newdir' (string) physical filesystem path to the target parent directory of the file/directory being moved/copied; + * this is the full path of the directory where the file/directory will be moved/copied to. (filesystem absolute) + * + * 'newpath' (string) physical filesystem path to the target file/directory being moved/copied itself; this is the full destination path, + * i.e. the full path of where the file/directory should be renamed/moved to. (filesystem absolute) + * + * 'newname' (string) the target name itself of the file/directory being moved/copied; this is the destination name. + * + * This filename is ensured to be both filesystem-legal, unique and not yet existing in the given target directory. + * + * 'rename' (boolean) TRUE when a file/directory RENAME operation is requested (name change, staying within the same + * parent directory). FALSE otherwise. + * + * 'is_dir' (boolean) TRUE when the subject is a directory itself, FALSE when it is a regular file. + * + * 'function' (string) PHP call which will perform the operation. ('rename' or 'copy') + * + * 'preliminary_json' (array) the JSON data collected so far; when ['status']==1, then we're performing a regular 'move' + * operation, when the ['status']==0, we are performing a defective 'move' operation. + * + * 'validation_failure' (string) NULL: no validation error has been detected before the callback was invoked; non-NULL, e.g. + * "nofile": the string passed as message parameter of the FileManagerException, which will be thrown + * after the callback has returned. (You may alter the 'validation_failure' string value to change the + * reported error, or set it to NULL to turn off the validation error report entirely -- we assume you + * will have corrected the other fileinfo[] items as well, when resetting the validation error. + * + * The frontend-specified options.propagateData items will be available as $_POST[] items. + * + * + * 'view': + * + * $info[] contains: + * + * 'legal_url' (string) LEGAL URI path to the directory being viewed/scanned. You may invoke + * $dir = $mgr->legal_url_path2file_path($legal_url); + * to obtain the physical filesystem path (also available in the 'dir' $info entry, by the way!), or + * $url = $mgr->legal2abs_url_path($legal_url); + * to obtain the absolute URI path for the scanned directory. + * + * 'dir' (string) physical filesystem path to the directory being viewed/scanned. + * + * 'collection' (dual array of strings) arrays of files and directories (including '..' entry at the top when this is a + * subdirectory of the FM-managed tree): only names, not full paths. The files array is located at the + * ['files'] index, while the directories are available at the ['dirs'] index. + * + * 'meta_data' (array) the content sniffed infor as produced by getID3 + * + * 'mime_filter' (optional, string) mime filter as specified by the client: a comma-separated string containing + * full or partial mime types, where a 'partial' mime types is the part of a mime type before + * and including the slash, e.g. 'image/' + * + * 'mime_filters' (optional, array of strings) the set of allowed mime types, derived from the 'mime_filter' setting. + * + * 'file_preselect' (optional, string) filename of a file in this directory which should be located and selected. + * When found, the backend will provide an index number pointing at the corresponding JSON files[] + * entry to assist the front-end in jumping to that particular item in the view. + * + * 'preliminary_json' (array) the JSON data collected so far; when ['status']==1, then we're performing a regular view + * operation (possibly as the second half of a copy/move/delete operation), when the ['status']==0, + * we are performing a view operation as the second part of another otherwise failed action, e.g. a + * failed 'create directory'. + * + * 'validation_failure' (string) NULL: no validation error has been detected before the callback was invoked; non-NULL, e.g. + * "nofile": the string passed as message parameter of the FileManagerException, which will be thrown + * after the callback has returned. (You may alter the 'validation_failure' string value to change the + * reported error, or set it to NULL to turn off the validation error report entirely -- we assume you + * will have corrected the other fileinfo[] items as well, when resetting the validation error. + * + * The frontend-specified options.propagateData items will be available as $_POST[] items. + * + * + * 'detail': + * + * $info[] contains: + * + * 'legal_url' (string) LEGAL URI path to the file/directory being inspected. You may invoke + * $dir = $mgr->legal_url_path2file_path($legal_url); + * to obtain the physical filesystem path (also available in the 'file' $info entry, by the way!), or + * $url = $mgr->legal2abs_url_path($legal_url); + * to obtain the absolute URI path for the given file. + * + * 'file' (string) physical filesystem path to the file being inspected. + * + * 'meta_data' (array) the content sniffed infor as produced by getID3 + * + * 'mime' (string) the mime type as sniffed from the file + * + * 'mime_filter' (optional, string) mime filter as specified by the client: a comma-separated string containing + * full or partial mime types, where a 'partial' mime types is the part of a mime type before + * and including the slash, e.g. 'image/' + * + * 'mime_filters' (optional, array of strings) the set of allowed mime types, derived from the 'mime_filter' setting. + * + * 'preliminary_json' (array) the JSON data collected so far; when ['status']==1, then we're performing a regular 'detail' + * operation, when the ['status']==0, we are performing a defective 'detail' operation. + * + * 'validation_failure' (string) NULL: no validation error has been detected before the callback was invoked; non-NULL, e.g. + * "nofile": the string passed as message parameter of the FileManagerException, which will be thrown + * after the callback has returned. (You may alter the 'validation_failure' string value to change the + * reported error, or set it to NULL to turn off the validation error report entirely -- we assume you + * will have corrected the other fileinfo[] items as well, when resetting the validation error. + * + * The frontend-specified options.propagateData items will be available as $_POST[] items. + * + * + * + * Developer Notes: + * + * - member functions which have a commented out 'static' keyword have it removed by design: it makes for easier overloading through + * inheritance that way and meanwhile there's no pressing need to have those (public) member functions acccessible from the outside world + * without having an instance of the FileManager class itself round at the same time. + */ + +// ----------- compatibility checks ---------------------------------------------------------------------------- +if (version_compare(PHP_VERSION, '5.2.0') < 0) +{ + // die horribly: server does not match our requirements! + header('HTTP/1.0 500 FileManager requires PHP 5.2.0 or later', true, 500); // Internal server error + throw Exception('FileManager requires PHP 5.2.0 or later'); // this exception will most probably not be caught; that's our intent! +} + +if (function_exists('UploadIsAuthenticated')) +{ + // die horribly: user has not upgraded his callback hook(s)! + header('HTTP/1.0 500 FileManager callback has not been upgraded!', true, 500); // Internal server error + throw Exception('FileManager callback has not been upgraded!'); // this exception will most probably not be caught; that's our intent! +} + +if(!defined("I_KNOW_ABOUT_SUHOSIN") && ini_get('suhosin.session.cryptua')) +{ + header('HTTP/1.0 500 Developer must read https://github.com/sleemanj/mootools-filemanager/wiki/suhosin', true, 500); // Internal server error + throw Exception('suhosin.session.cryptua: https://github.com/sleemanj/mootools-filemanager/wiki/suhosin" }'); // this exception will most probably not be caught; that's our intent! + exit; +} +//------------------------------------------------------------------------------------------------------------- + +if (!defined('DEVELOPMENT')) define('DEVELOPMENT', 0); // make sure this #define is always known to us + + + +require_once(strtr(dirname(__FILE__), '\\', '/') . '/Tooling.php'); +require_once(strtr(dirname(__FILE__), '\\', '/') . '/Image.class.php'); + + + +// the jpeg quality for the largest thumbnails (smaller ones are automatically done at increasingly higher quality) +define('MTFM_THUMBNAIL_JPEG_QUALITY', 80); + +// the number of directory levels in the thumbnail cache; set to 2 when you expect to handle huge image collections. +// +// Note that each directory level distributes the files evenly across 256 directories; hence, you may set this +// level count to 2 when you expect to handle more than 32K images in total -- as each image will have two thumbnails: +// a 48px small one and a 250px large one. +define('MTFM_NUMBER_OF_DIRLEVELS_FOR_CACHE', 1); + +// minimum number of cached getID3 results; cache is automatically pruned +define('MTFM_MIN_GETID3_CACHESIZE', 16); + +// allow MTFM to use finfo_open() to help us produce mime types for files. This is slower than the basic file extension to mimetype mapping +define('MTFM_USE_FINFO_OPEN', false); + + + + + + +// flags for clean_ID3info_results() +define('MTFM_CLEAN_ID3_STRIP_EMBEDDED_IMAGES', 0x0001); + + + + + + +/** + * Cache element class custom-tailored for the MTFM: includes the code to construct a unique + * (thumbnail) cache filename and derive suitable cache filenames from the same template with + * minimal effort. + * + * Makes sure the generated (thumbpath) template is unique for each source file ('$legal_url'). We prevent + * reduced performance for large file sets: all thumbnails/templates derived from any files in the entire + * FileManager-managed directory tree, rooted by options['directory'], can become a huge collection, + * so we distribute them across a (thumbnail/cache) directory tree, which is created on demand. + * + * The thumbnails cache directory tree is determined by the MD5 of the full path to the source file ($legal_url), + * using the first two characters of the MD5, making for a span of 256 (directories). + * + * Note: when you expect to manage a really HUGE file collection from FM, you may dial up the + * MTFM_NUMBER_OF_DIRLEVELS_FOR_CACHE define to 2 here. + */ +class MTFMCacheItem +{ + protected $store; + + protected $legal_url; + protected $file; + protected $dirty; + protected $persistent_edits; + protected $loaded; + protected $fstat; + + protected $cache_dir; + protected $cache_dir_mode; // UNIX access bits: UGA:RWX + protected $cache_dir_url; + protected $cache_base; // cache filename template base + protected $cache_tnext; // thumbnail extension + + protected $cache_file; + + public function __construct($fm_obj, $legal_url, $prefetch = false, $persistent_edits = true) + { + $this->init($fm_obj, $legal_url, $prefetch, $persistent_edits); + } + + public function init($fm_obj, $legal_url, $prefetch = false, $persistent_edits) + { + $this->dirty = false; + $this->persistent_edits = $persistent_edits; + $this->loaded = false; + $this->store = array(); + + $fmopts = $fm_obj->getSettings(); + + $this->legal_url = $legal_url; + $this->file = $fm_obj->legal_url_path2file_path($legal_url); + $this->fstat = null; + + $fi = pathinfo($legal_url); + if (is_dir($this->file)) + { + $filename = $fi['basename']; + unset($fi['extension']); + $ext = ''; + } + else + { + $filename = $fi['filename']; + $ext = strtolower((isset($fi['extension']) && strlen($fi['extension']) > 0) ? '.' . $fi['extension'] : ''); + switch ($ext) + { + case '.gif': + case '.png': + case '.jpg': + case '.jpeg': + break; + + case '.mp3': + // default to JPG, as embedded images don't contain transparency info: + $ext = '.jpg'; + break; + + default: + //$ext = preg_replace('/[^A-Za-z0-9.]+/', '_', $ext); + + // default to PNG, as it'll handle transparancy and full color both: + $ext = '.png'; + break; + } + } + + // as the cache file is generated, but NOT guaranteed from a safe filepath (FM may be visiting unsafe + // image files when they exist in a preloaded directory tree!) we do the full safe-filename transform + // on the name itself. + // The MD5 is taken from the untrammeled original, though: + $dircode = md5($legal_url); + + $dir = ''; + for ($i = 0; $i < MTFM_NUMBER_OF_DIRLEVELS_FOR_CACHE; $i++) + { + $dir .= substr($dircode, 0, 2) . '/'; + $dircode = substr($dircode, 2); + } + + $fn = substr($dircode, 0, 4) . '_' . preg_replace('/[^A-Za-z0-9]+/', '_', $filename); + $dircode = substr($dircode, 4); + $fn = substr($fn . $dircode, 0, 38); + + $this->cache_dir_url = $fmopts['thumbnailPath'] . $dir; + $this->cache_dir = $fmopts['thumbnailCacheDir'] . $dir; + $this->cache_dir_mode = $fmopts['chmod']; + $this->cache_base = $fn; + $this->cache_tnext = $ext; + + $cache_url = $fn . '-meta.nfo'; + $this->cache_file = $this->cache_dir . $cache_url; + + if ($prefetch) + { + $this->load(); + } + } + + public function load() + { + if (!$this->loaded) + { + $this->loaded = true; // always mark as loaded, even when the load fails + + if (!is_array($this->fstat) && file_exists($this->file)) + { + $this->fstat = @stat($this->file); + } + if (file_exists($this->cache_file)) + { + include($this->cache_file); // unserialize(); + + if ( isset($statdata) && isset($data) && is_array($data) && is_array($this->fstat) && is_Array($statdata) + && $statdata[10] == $this->fstat[10] // ctime + && $statdata[9] == $this->fstat[9] // mtime + && $statdata[7] == $this->fstat[7] // size + ) + { + if (!DEVELOPMENT) + { + // mix disk cache data with items already existing in RAM cache: we use a delayed-load scheme which necessitates this. + $this->store = array_merge($data, $this->store); + } + } + else + { + // nuke disk cache! + @unlink($this->cache_file); + } + } + } + } + + public function delete($every_ting_baby = false) + { + $rv = true; + $dir = $this->cache_dir; + $dir_exists = file_exists($dir); + + // What do I get for ten dollars? + if ($every_ting_baby) + { + if ($dir_exists) + { + $dir_and_mask = $dir . $this->cache_base . '*'; + $coll = safe_glob($dir_and_mask, GLOB_NODOTS | GLOB_NOSORT); + + if ($coll !== false) + { + foreach($coll['files'] as $filename) + { + $file = $dir . $filename; + $rv &= @unlink($file); + } + } + } + } + else if (file_exists($this->cache_file)) + { + // nuke cache! + $rv &= @unlink($this->cache_file); + } + + // as the thumbnail subdirectory may now be entirely empty, try to remove it as well, + // but do NOT yack when we don't succeed: there may be other thumbnails, etc. in there still! + if ($dir_exists) + { + for ($i = 0; $i < MTFM_NUMBER_OF_DIRLEVELS_FOR_CACHE; $i++) + { + @rmdir($dir); + $dir = dirname($dir); + } + } + + // also clear the data cached in RAM: + $this->dirty = false; + $this->loaded = true; // we know the cache file doesn't exist any longer, so don't bother trying to load it again later on! + $this->store = array(); + + return $rv; + } + + public function __destruct() + { + if ($this->dirty && $this->persistent_edits) + { + // store data to persistent storage: + if (!$this->mkCacheDir() && !$this->loaded) + { + // fetch from disk before saving in order to ensure RAM cache is mixed with _existing_ _valid_ disk cache (RAM wins on individual items). + $this->load(); + } + + if (!is_array($this->fstat) && file_exists($this->file)) + { + $this->fstat = @stat($this->file); + } + + $data = 'legal_url . ' + +$statdata = ' . var_export($this->fstat, true) . '; + +$data = ' . var_export($this->store, true) . ';' . PHP_EOL; + + @file_put_contents($this->cache_file, $data); + } + } + + /* + * @param boolean $persistent (default: TRUE) TRUE when we should also check the persistent cache storage for this item/key + */ + public function fetch($key, $persistent = true) + { + if (isset($this->store[$key])) + { + return $this->store[$key]; + } + else if ($persistent && !$this->loaded) + { + // only fetch from disk when we ask for items which haven't been stored yet. + $this->load(); + if (isset($this->store[$key])) + { + return $this->store[$key]; + } + } + + return null; + } + + /* + * @param boolean $persistent (default: TRUE) TRUE when we should also store this item/key in the persistent cache storage + */ + public function store($key, $value, $persistent = true) + { + if (isset($this->store[$key])) + { + $persistent &= ($this->store[$key] !== $value); // only mark cache as dirty when we actully CHANGE the value stored in here! + } + $this->dirty |= ($persistent && $this->persistent_edits); + $this->store[$key] = $value; + } + + + public function getThumbPath($dimensions) + { + assert(!empty($dimensions)); + return $this->cache_dir . $this->cache_base . '-' . $dimensions . $this->cache_tnext; + } + + public function getThumbURL($dimensions) + { + assert(!empty($dimensions)); + return $this->cache_dir_url . $this->cache_base . '-' . $dimensions . $this->cache_tnext; + } + + public function mkCacheDir() + { + if (!is_dir($this->cache_dir)) + { + @mkdir($this->cache_dir, $this->cache_dir_mode, true); + return true; + } + return false; + } + + public function getMimeType() + { + if (!empty($this->store['mime_type'])) + { + return $this->store['mime_type']; + } + //$mime = $fm_obj->getMimeFromExt($file); + return null; + } +} + + + + + + + +class MTFMCache +{ + protected $store; // assoc. array: stores cached data + protected $store_ts; // assoc. array: stores corresponding 'cache timestamps' for use by the LRU algorithm + protected $store_lru_ts; // integer: current 'cache timestamp' + protected $min_cache_size; // integer: minimum cache size limit (maximum is a statistical derivate of this one, about twice as large) + + public function __construct($min_cache_size) + { + $this->store = array(); + $this->store_ts = array(); + // store_lru_ts stores a 'timestamp' counter to track LRU: 'timestamps' older than threshold are discarded when cache is full + $this->store_lru_ts = 0; + $this->min_cache_size = $min_cache_size; + } + + /* + * Return a reference to the cache slot. When the cache slot did not exist before, it will be created, and + * the value stored in the slot will be NULL. + * + * You can store any arbitrary data in a cache slot: it doesn't have to be a MTFMCacheItem instance. + */ + public function &pick($key, $fm_obj = null, $create_if_not_exist = true) + { + assert(!empty($key)); + + $age_limit = $this->store_lru_ts - $this->min_cache_size; + + if (isset($this->store[$key])) + { + // mark as LRU entry; only update the timestamp when it's rather old (age/2) to prevent + // cache flushing due to hammering of a few entries: + if ($this->store_ts[$key] < $age_limit + $this->min_cache_size / 2) + { + $this->store_ts[$key] = $this->store_lru_ts++; + } + } + else if ($create_if_not_exist) + { + // only start pruning when we run the risk of overflow. Heuristic: when we're at 50% fill rate, we can expect more requests to come in, so we start pruning already + if (count($this->store_ts) >= $this->min_cache_size / 2) + { + /* + * Cleanup/cache size restriction algorithm: + * + * Randomly probe the cache and check whether the probe has a 'timestamp' older than the configured + * minimum required lifetime. When the probe is older, it is discarded from the cache. + * + * As the probe is assumed to be perfectly random, further assuming we've got a cache size of N, + * then the chance we pick a probe older then age A is (N - A) / N -- picking any age X has a + * chance of 1/N as random implies flat distribution. Hitting any of the most recent A entries + * is A * 1/N, hence picking any older item is 1 - A/N == (N - A) / N + * + * This means the growth of the cache beyond the given age limit A is a logarithmic curve, but + * we like to have a guaranteed upper limit significantly below N = +Inf, so we probe the cache + * TWICE for each addition: given a cache size of 2N, one of these probes should, on average, + * be successful, thus removing one cache entry on average for a cache size of 2N. As we only + * add 1 item at the same time, the statistically expected bound of the cache will be 2N. + * As chances increase for both probes to be successful when cache size increases, the risk + * of a (very) large cache size at any point in time is dwindingly small, while cost is constant + * per cache transaction (insert + dual probe). + * + * This scheme is expected to be faster (thanks to log growth curve and linear insert/prune costs) + * than the usual where one keeps meticulous track of the entries and their age and entries are + * discarded in order, oldest first. + */ + $probe_index = array_rand($this->store_ts); + if ($this->store_ts[$probe_index] < $age_limit) + { + // discard antiquated entry: + unset($this->store_ts[$probe_index]); + unset($this->store[$probe_index]); + } + $probe_index = array_rand($this->store_ts); + if ($this->store_ts[$probe_index] < $age_limit) + { + // discard antiquated entry: + unset($this->store_ts[$probe_index]); + unset($this->store[$probe_index]); + } + } + + /* + * add this slot (empty for now) to the cache. Only do this AFTER the pruning, so it won't risk being + * picked by the random process in there. We _need_ this one right now. ;-) + */ + $this->store[$key] = (!empty($fm_obj) ? new MTFMCacheItem($fm_obj, $key) : null); + $this->store_ts[$key] = $this->store_lru_ts++; + } + else + { + // do not clutter the cache; all we're probably after this time is the assistance of a MTFMCacheItem: + // provide a dummy cache entry, nulled and all; we won't be saving the stored data, if any, anyhow. + if (isset($this->store['!']) && !empty($fm_obj)) + { + $this->store['!']->init($fm_obj, $key, false, false); + } + else + { + $this->store['!'] = (!empty($fm_obj) ? new MTFMCacheItem($fm_obj, $key, false, false) : null); + } + $this->store_ts['!'] = 0; + $key = '!'; + } + + return $this->store[$key]; + } +} + + + + + + + +class FileManager +{ + protected $options; + protected $getid3; + protected $getid3_cache; + protected $icon_cache; // cache the icon paths per size (large/small) and file extension + + protected $thumbnailCacheDir; + protected $thumbnailCacheParentDir; // assistant precalculated value for scandir/view + protected $managedBaseDir; // precalculated filesystem path eqv. of options['directory'] + + public function __construct($options) + { + $this->options = array_merge(array( + /* + * Note that all default paths as listed below are transformed to DocumentRoot-based paths + * through the getRealPath() invocations further below: + */ + 'directory' => null, // the root of the 'legal URI' directory tree, to be managed by MTFM. MUST be in the DocumentRoot tree. + 'assetBasePath' => null, // may sit outside options['directory'] but MUST be in the DocumentRoot tree + 'thumbnailPath' => null, // may sit outside options['directory'] but MUST be in the DocumentRoot tree + 'thumbSmallSize' => 48, // Used for thumb48 creation + 'thumbBigSize' => 250, // Used for thumb250 creation + 'mimeTypesPath' => strtr(dirname(__FILE__), '\\', '/') . '/MimeTypes.ini', // an absolute filesystem path anywhere; when relative, it will be assumed to be against options['RequestScriptURI'] + 'documentRootPath' => null, // an absolute filesystem path pointing at URI path '/'. Default: SERVER['DOCUMENT_ROOT'] + 'RequestScriptURI' => null, // default is $_SERVER['SCRIPT_NAME'] + 'dateFormat' => 'j M Y - H:i', + 'maxUploadSize' => 2600 * 2600 * 3, + // 'maxImageSize' => 99999, // OBSOLETED, replaced by 'suggestedMaxImageDimension' + 'maxImageDimension' => array('width' => 1024, 'height' => 768), // Allow to specify the "Resize Large Images" tolerance level. + 'upload' => false, + 'destroy' => false, + 'create' => false, + 'move' => false, + 'download' => false, + /* ^^^ this last one is easily circumnavigated if it's about images: when you can view 'em, you can 'download' them anyway. + * However, for other mime types which are not previewable / viewable 'in their full bluntal nugity' ;-) , this will + * be a strong deterent. + * + * Think Springer Verlag and PDFs, for instance. You can have 'em, but only /after/ you've ... + */ + 'allowExtChange' => false, + 'safe' => true, + 'filter' => null, + 'chmod' => 0777, + 'ViewIsAuthorized_cb' => null, + 'DetailIsAuthorized_cb' => null, + 'UploadIsAuthorized_cb' => null, + 'DownloadIsAuthorized_cb' => null, + 'CreateIsAuthorized_cb' => null, + 'DestroyIsAuthorized_cb' => null, + 'MoveIsAuthorized_cb' => null, + + 'UploadIsComplete_cb' => null, + 'DownloadIsComplete_cb' => null, + 'DestroyIsComplete_cb' => null, + + 'showHiddenFoldersAndFiles' => false, // Hide dot dirs/files ? + 'useGetID3IfAvailable' => true, + 'enableXSendFile' => false, + 'readme_file' => '.readme.html', // If a directory contains a file of this name, the contents of this file + // will be returned in the ajax. The MFM front end will display this in + // the preview area, provided there is nothing else to display there. + // Useful for displaying help text. The file should only be an + // html snippet, not a complete html file. + + ), (is_array($options) ? $options : array())); + + // transform the obsoleted/deprecated options: + if (!empty($this->options['maxImageSize']) && $this->options['maxImageSize'] != 1024 && $this->options['maxImageDimension']['width'] == 1024 && $this->options['maxImageDimension']['height'] == 768) + { + $this->options['maxImageDimension'] = array('width' => $this->options['maxImageSize'], 'height' => $this->options['maxImageSize']); + } + + $document_root_fspath = null; + if (!empty($this->options['documentRootPath'])) + { + $document_root_fspath = realpath($this->options['documentRootPath']); + } + if (empty($document_root_fspath)) + { + $document_root_fspath = realpath(isset($_SERVER['REDIRECT_DOCUMENT_ROOT']) ? $_SERVER['REDIRECT_DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT']); + } + $document_root_fspath = strtr($document_root_fspath, '\\', '/'); + $document_root_fspath = rtrim($document_root_fspath, '/'); + $this->options['documentRootPath'] = $document_root_fspath; + + // apply default to RequestScriptURI: + if (empty($this->options['RequestScriptURI'])) + { + $this->options['RequestScriptURI'] = $this->getRequestScriptURI(); + } + + // only calculate the guestimated defaults when they are indeed required: + if ($this->options['directory'] == null || $this->options['assetBasePath'] == null || $this->options['thumbnailPath'] == null) + { + $my_path = @realpath(dirname(__FILE__)); + $my_path = strtr($my_path, '\\', '/'); + $my_path = self::enforceTrailingSlash($my_path); + + // we throw an Exception here because when these do not apply, the user should have specified all three these entries! + if (!FileManagerUtility::startsWith($my_path, $document_root_fspath)) + { + throw new FileManagerException('nofile'); + } + + $my_url_path = str_replace($document_root_fspath, '', $my_path); + + if ($this->options['directory'] == null) + { + $this->options['directory'] = $my_url_path . '../../Demos/Files/'; + } + if ($this->options['assetBasePath'] == null) + { + $this->options['assetBasePath'] = $my_url_path . '../../Assets/'; + } + if ($this->options['thumbnailPath'] == null) + { + $this->options['thumbnailPath'] = $my_url_path . '../../Assets/Thumbs/'; + } + } + + /* + * make sure we start with a very predictable and LEGAL options['directory'] setting, so that the checks applied to the + * (possibly) user specified value for this bugger actually can check out okay AS LONG AS IT'S INSIDE the DocumentRoot-based + * directory tree: + */ + $this->options['directory'] = $this->rel2abs_url_path($this->options['directory'] . '/'); + + $this->managedBaseDir = $this->url_path2file_path($this->options['directory']); + + // now that the correct options['directory'] has been set up, go and check/clean the other paths in the options[]: + + $this->options['thumbnailPath'] = $this->rel2abs_url_path($this->options['thumbnailPath'] . '/'); + $this->thumbnailCacheDir = $this->url_path2file_path($this->options['thumbnailPath']); // precalculate this value; safe as we can assume the entire cache dirtree maps 1:1 to filesystem. + $this->thumbnailCacheParentDir = $this->url_path2file_path(self::getParentDir($this->options['thumbnailPath'])); // precalculate this value as well; used by scandir/view + + $this->options['assetBasePath'] = $this->rel2abs_url_path($this->options['assetBasePath'] . '/'); + + $this->options['mimeTypesPath'] = @realpath($this->options['mimeTypesPath']); + if (empty($this->options['mimeTypesPath'])) + { + throw new FileManagerException('nofile'); + } + $this->options['mimeTypesPath'] = strtr($this->options['mimeTypesPath'], '\\', '/'); + + $this->getid3_cache = new MTFMCache(MTFM_MIN_GETID3_CACHESIZE); + + $this->icon_cache = array(array(), array()); + } + + /** + * @return array the FileManager options and settings. + */ + public function getSettings() + { + return array_merge(array( + 'thumbnailCacheDir' => $this->thumbnailCacheDir, + 'thumbnailCacheParentDir' => $this->thumbnailCacheParentDir, + 'managedBaseDir' => $this->managedBaseDir + ), $this->options); + } + + + + + /** + * Central entry point for any client side request. + */ + public function fireEvent($event = null) + { + $event = (!empty($event) ? 'on' . ucfirst($event) : null); + if (!$event || !method_exists($this, $event)) $event = 'onView'; + + $this->{$event}(); + } + + + + + + + /** + * Generalized 'view' handler, which produces a directory listing. + * + * Return the directory listing in a nested array, suitable for JSON encoding. + */ + protected function _onView($legal_url, $json, $mime_filter, $file_preselect_arg = null, $filemask = '*') + { + $v_ex_code = 'nofile'; + + $dir = $this->legal_url_path2file_path($legal_url); + $doubledot = null; + $coll = null; + if (is_dir($dir)) + { + /* + * Caching notice: + * + * Testing on Win7/64 has revealed that at least on that platform, directories' 'last modified' timestamp does NOT change when + * the contents of the directory are altered (e.g. when a file was added), hence filemtime() cannot be used for directories + * to detect any change and thus steer the cache access. + * + * When one assumes that all file access in the managed directory tree is performed through an MTFM entity, then we can use a + * different tactic (which, due to this risky assumption is dupped part of the group of 'aggressive caching' actions) where + * we check for the existence of a cache file for the given directory; when it does exist, we can use it. + * Also, when any editing activity occurs in a directory, we can either choose to update the dir-cache file (costly, tough, + * rather complex) or simply delete the dir-cache file to signal the next occurrence of the 'view' a fresh dirscan is + * required. + * + * Also, we can keep track of the completed thumbnail generation per file in this dir-cache file. However, the argument against + * such relative sophitication (to prevent a double round-trip per thumbnail in 'thumb' list view) is the heavy cost of + * loading + saving the (edited) dir-cache file for each thumbnail production. The question here is: are those costs significantly + * less then the cost of dirscan + round trips (or 'direct' mode thumbnail file tests) for each 'view' request? How many 'view's + * do you expect compared to the number of directory edits? 'Usually' that ratio should be rather high (few edits, many views), + * thus suggesting a benefit to this aggressive caching and cache updating for thumbnail production. The 'cheaper for the + * thumbnail production' approach would be to consider it a 'directory edit' and thus nuke the dir-cache for every thumbnail (48px) + * produced. This is /probably/ slower than the cahce updating, as the latter requires only a single file access per 'view' + * operation; all we need to store are a flag (Y/N) per file in the directory, so the store size would be small, even for large + * directories. + * + * What to do? We haven't come to a decision yet. + * + * Code: TODO + */ + + $coll = $this->scandir($dir, $filemask, false, 0, ($this->options['showHiddenFoldersAndFiles'] ? ~GLOB_NOHIDDEN : ~0)); + if ($coll !== false) + { + /* + * To ensure '..' ends up at the very top of the view, no matter what the other entries in $coll['dirs'][] are made of, + * we pop the last element off the array, check whether it's the double-dot, and if so, keep it out while we + * let the sort run. + */ + $doubledot = array_pop($coll['dirs']); + if ($doubledot !== null && $doubledot !== '..') + { + $coll['dirs'][] = $doubledot; + $doubledot = null; + } + natcasesort($coll['dirs']); + natcasesort($coll['files']); + + $v_ex_code = null; + } + } + + $mime_filters = $this->getAllowedMimeTypes($mime_filter); + + $fileinfo = array( + 'legal_url' => $legal_url, + 'dir' => $dir, + 'collection' => $coll, + 'mime_filter' => $mime_filter, + 'mime_filters' => $mime_filters, + 'file_preselect' => $file_preselect_arg, + 'preliminary_json' => $json, + 'validation_failure' => $v_ex_code + ); + + if (!empty($this->options['ViewIsAuthorized_cb']) && function_exists($this->options['ViewIsAuthorized_cb']) && !$this->options['ViewIsAuthorized_cb']($this, 'view', $fileinfo)) + { + $v_ex_code = $fileinfo['validation_failure']; + if (empty($v_ex_code)) $v_ex_code = 'authorized'; + } + if (!empty($v_ex_code)) + throw new FileManagerException($v_ex_code); + + $legal_url = $fileinfo['legal_url']; + $dir = $fileinfo['dir']; + $coll = $fileinfo['collection']; + $mime_filter = $fileinfo['mime_filter']; + $mime_filters = $fileinfo['mime_filters']; + $file_preselect_arg = $fileinfo['file_preselect']; + $json = $fileinfo['preliminary_json']; + + $file_preselect_index = -1; + $out = array(array(), array()); + + $mime = 'text/directory'; + $iconspec = false; + + if ($doubledot !== null) + { + $filename = '..'; + + $l_url = $legal_url . $filename; + + // must transform here so alias/etc. expansions inside legal_url_path2file_path() get a chance: + $file = $this->legal_url_path2file_path($l_url); + + $iconspec = 'is.directory_up'; + + $icon48 = $this->getIcon($iconspec, false); + $icon48_e = FileManagerUtility::rawurlencode_path($icon48); + + $icon = $this->getIcon($iconspec, true); + $icon_e = FileManagerUtility::rawurlencode_path($icon); + + $out[1][] = array( + 'path' => $l_url, + 'name' => $filename, + 'mime' => $mime, + 'icon48' => $icon48_e, + 'icon' => $icon_e + ); + } + + // now precalc the directory-common items (a.k.a. invariant computation / common subexpression hoisting) + $iconspec_d = 'is.directory'; + + $icon48_d = $this->getIcon($iconspec_d, false); + $icon48_de = FileManagerUtility::rawurlencode_path($icon48_d); + + $icon_d = $this->getIcon($iconspec_d, true); + $icon_de = FileManagerUtility::rawurlencode_path($icon_d); + + foreach ($coll['dirs'] as $filename) + { + $l_url = $legal_url . $filename; + + $out[1][] = array( + 'path' => $l_url, + 'name' => $filename, + 'mime' => $mime, + 'icon48' => $icon48_de, + 'icon' => $icon_de + ); + } + + // and now list the files in the directory + $idx = 0; + foreach ($coll['files'] as $filename) + { + $l_url = $legal_url . $filename; + + // Do not allow the getFileInfo()/imageinfo() overhead per file for very large directories; just guess the mimetype from the filename alone. + // The real mimetype will show up in the 'details' view anyway as we'll have called getFileInfo() by then! + $mime = $this->getMimeFromExt($filename); + $iconspec = $filename; + + if (!$this->IsAllowedMimeType($mime, $mime_filters)) + continue; + + if ($filename === $file_preselect_arg) + { + $file_preselect_index = $idx; + } + + /* + * offload the thumbnailing process to another event ('event=detail / mode=direct') to be fired by the client + * when it's time to render the thumbnail: the offloading helps us tremendously in coping with large + * directories: + * WE simply assume the thumbnail will be there, so we don't even need to check for its existence + * (which saves us one more file_exists() per item at the very least). And when it doesn't, that's + * for the event=thumbnail handler to worry about (creating the thumbnail on demand or serving + * a generic icon image instead). + * + * For now, simply assign a basic icon to any and all; the 'detail' event will replace this item in the frontend + * when the time has arrives when that 'detail' request has been answered. + */ + $icon48 = $this->getIcon($iconspec, false); + $icon48_e = FileManagerUtility::rawurlencode_path($icon48); + + $icon = $this->getIcon($iconspec, true); + $icon_e = FileManagerUtility::rawurlencode_path($icon); + + $out[0][] = array( + 'path' => $l_url, + 'name' => $filename, + 'mime' => $mime, + // we don't know the thumbnail paths yet --> this will trigger deferred requests: (event=detail, mode=direct) + 'thumbs_deferred' => true, + 'icon48' => $icon48_e, + 'icon' => $icon_e + ); + $idx++; + } + + return array_merge((is_array($json) ? $json : array()), array( + 'root' => substr($this->options['directory'], 1), + 'this_dir' => array( + 'path' => $legal_url, + 'name' => basename($legal_url), + 'date' => date($this->options['dateFormat'], @filemtime($dir)), + 'mime' => 'text/directory', + 'icon48' => $icon48_de, + 'icon' => $icon_de, + 'readme' => file_exists($dir . '/' . $this->options['readme_file']) + ? file_get_contents($dir . '/' . $this->options['readme_file']) + : null, + ), + 'preselect_index' => ($file_preselect_index >= 0 ? $file_preselect_index + count($out[1]) + 1 : 0), + 'preselect_name' => ($file_preselect_index >= 0 ? $file_preselect_arg : null), + 'dirs' => $out[1], + 'files' => $out[0] + )); + } + + /** + * Process the 'view' event (default event fired by fireEvent() method) + * + * Returns a JSON encoded directory view list. + * + * Expected parameters: + * + * $_POST['directory'] path relative to basedir a.k.a. options['directory'] root + * + * $_POST['file_preselect'] optional filename or path: + * when a filename, this is the filename of a file in this directory + * which should be located and selected. When found, the backend will + * provide an index number pointing at the corresponding JSON files[] + * entry to assist the front-end in jumping to that particular item + * in the view. + * + * when a path, it is either an absolute or a relative path: + * either is assumed to be a URI URI path, i.e. rooted at + * DocumentRoot. + * The path will be transformed to a LEGAL URI path and + * will OVERRIDE the $_POST['directory'] path. + * Otherwise, this mode acts as when only a filename was specified here. + * This mode is useful to help a frontend to quickly jump to a file + * pointed at by a URI. + * + * N.B.: This also the only entry which accepts absolute URI paths and + * transforms them to LEGAL URI paths. + * + * When the specified path is illegal, i.e. does not reside inside the + * options['directory']-rooted LEGAL URI subtree, it will be discarded + * entirely (as all file paths, whether they are absolute or relative, + * must end up inside the options['directory']-rooted subtree to be + * considered manageable files) and the process will continue as if + * the $_POST['file_preselect'] entry had not been set. + * + * $_POST['filter'] optional mimetype filter string, amy be the part up to and + * including the slash '/' or the full mimetype. Only files + * matching this (set of) mimetypes will be listed. + * Examples: 'image/' or 'application/zip' + * + * Errors will produce a JSON encoded error report, including at least two fields: + * + * status 0 for error; nonzero for success + * + * error error message + * + * Next to these, the JSON encoded output will, with high probability, include a + * list view of a valid parent or 'basedir' as a fast and easy fallback mechanism for client side + * viewing code, jumping back to a existing directory. However, severe and repetitive errors may not produce this + * 'fallback view list' so proper client code should check the 'status' field in the + * JSON output. + */ + protected function onView() + { + // try to produce the view; if it b0rks, retry with the parent, until we've arrived at the basedir: + // then we fail more severely. + + $emsg = null; + $jserr = array( + 'status' => 1 + ); + + $mime_filter = $this->getPOSTparam('filter', $this->options['filter']); + $legal_url = null; + + try + { + $dir_arg = $this->getPOSTparam('directory'); + $legal_url = $this->rel2abs_legal_url_path($dir_arg . '/'); + + $file_preselect_arg = $this->getPOSTparam('file_preselect'); + try + { + if (!empty($file_preselect_arg)) + { + // check if this a path instead of just a basename, then convert to legal_url and split across filename and directory. + if (strpos($file_preselect_arg, '/') !== false) + { + // this will also convert a relative path to an absolute path before transforming it to a LEGAL URI path: + $legal_presel = $this->abs2legal_url_path($file_preselect_arg); + + $prseli = pathinfo($legal_presel); + $file_preselect_arg = $prseli['basename']; + // override the directory! + $legal_url = $prseli['dirname']; + $legal_url = self::enforceTrailingSlash($legal_url); + } + else + { + $file_preselect_arg = basename($file_preselect_arg); + } + } + } + catch(FileManagerException $e) + { + // discard the preselect input entirely: + $file_preselect_arg = null; + } + } + catch(FileManagerException $e) + { + $emsg = $e->getMessage(); + $legal_url = '/'; + $file_preselect_arg = null; + } + catch(Exception $e) + { + // catching other severe failures; since this can be anything it may not be a translation keyword in the message... + $emsg = $e->getMessage(); + $legal_url = '/'; + $file_preselect_arg = null; + } + + // loop until we drop below the bottomdir; meanwhile getDir() above guarantees that $dir is a subdir of bottomdir, hence dir >= bottomdir. + $original_legal_url = $legal_url; + do + { + try + { + $rv = $this->_onView($legal_url, $jserr, $mime_filter, $file_preselect_arg); + + $this->sendHttpHeaders('Content-Type: application/json'); + + echo json_encode($rv); + return; + } + catch(FileManagerException $e) + { + if ($emsg === null) + $emsg = $e->getMessage(); + } + catch(Exception $e) + { + // catching other severe failures; since this can be anything it may not be a translation keyword in the message... + if ($emsg === null) + $emsg = $e->getMessage(); + } + + // step down to the parent dir and retry: + $legal_url = self::getParentDir($legal_url); + $file_preselect_arg = null; + + $jserr['status']++; + + } while ($legal_url !== false); + + $this->modify_json4exception($jserr, $emsg, 'path = ' . $original_legal_url); + + $this->sendHttpHeaders('Content-Type: application/json'); + + // when we fail here, it's pretty darn bad and nothing to it. + // just push the error JSON and go. + echo json_encode($jserr); + } + + /** + * Process the 'detail' event + * + * Returns a JSON encoded HTML chunk describing the specified file (metadata such + * as size, format and possibly a thumbnail image as well) + * + * Expected parameters: + * + * $_POST['directory'] path relative to basedir a.k.a. options['directory'] root + * + * $_POST['file'] filename (including extension, of course) of the file to + * be detailed. + * + * $_POST['filter'] optional mimetype filter string, amy be the part up to and + * including the slash '/' or the full mimetype. Only files + * matching this (set of) mimetypes will be listed. + * Examples: 'image/' or 'application/zip' + * + * $_POST['mode'] 'auto' or 'direct': in 'direct' mode, all thumbnails are + * forcibly generated _right_ _now_ as the client, using this + * mode, tells us delayed generating and loading of the + * thumbnail image(s) is out of the question. + * 'auto' mode will simply provide direct thumbnail image + * URLs when those are available in cache, while 'auto' mode + * will neglect to provide those, expecting the frontend to + * delay-load them through another 'event=detail / mode=direct' + * request later on. + * 'metaHTML': show the metadata as extra HTML content in + * the preview pane (you can also turn that off using CSS: + * div.filemanager div.filemanager-diag-dump + * { + * display: none; + * } + * 'metaJSON': deliver the extra getID3 metadata in JSON format + * in the json['metadata'] field. + * + * Modes can be mixed by adding a '+' between them. + * + * Errors will produce a JSON encoded error report, including at least two fields: + * + * status 0 for error; nonzero for success + * + * error error message + */ + protected function onDetail() + { + $emsg = null; + $legal_url = null; + $file_arg = null; + $jserr = array( + 'status' => 1 + ); + + try + { + $v_ex_code = 'nofile'; + + $mode = $this->getPOSTparam('mode'); + $mode = explode('+', $mode); + if (empty($mode)) + { + $mode = array(); + } + + $file_arg = $this->getPOSTparam('file'); + + $dir_arg = $this->getPOSTparam('directory'); + $legal_url = $this->rel2abs_legal_url_path($dir_arg . '/'); + + $mime_filter = $this->getPOSTparam('filter', $this->options['filter']); + $mime_filters = $this->getAllowedMimeTypes($mime_filter); + + $filename = null; + $file = null; + $mime = null; + $meta = null; + if (!empty($file_arg)) + { + $filename = basename($file_arg); + // must normalize the combo as the user CAN legitimally request filename == '.' (directory detail view) for this event! + $path = $this->rel2abs_legal_url_path($legal_url . $filename); + //echo " path = $path, ($legal_url . $filename);\n"; + $legal_url = $path; + // must transform here so alias/etc. expansions inside legal_url_path2file_path() get a chance: + $file = $this->legal_url_path2file_path($legal_url); + + if (is_readable($file)) + { + if (is_file($file)) + { + $meta = $this->getFileInfo($file, $legal_url); + $mime = $meta->getMimeType(); + if (!$this->IsAllowedMimeType($mime, $mime_filters)) + { + $v_ex_code = 'extension'; + } + else + { + $v_ex_code = null; + } + } + else if (is_dir($file)) + { + $mime = 'text/directory'; + $v_ex_code = null; + } + } + } + + $fileinfo = array( + 'legal_url' => $legal_url, + 'file' => $file, + 'mode' => $mode, + 'meta_data' => $meta, + 'mime' => $mime, + 'mime_filter' => $mime_filter, + 'mime_filters' => $mime_filters, + 'preliminary_json' => $jserr, + 'validation_failure' => $v_ex_code + ); + + if (!empty($this->options['DetailIsAuthorized_cb']) && function_exists($this->options['DetailIsAuthorized_cb']) && !$this->options['DetailIsAuthorized_cb']($this, 'detail', $fileinfo)) + { + $v_ex_code = $fileinfo['validation_failure']; + if (empty($v_ex_code)) $v_ex_code = 'authorized'; + } + if (!empty($v_ex_code)) + throw new FileManagerException($v_ex_code); + + $legal_url = $fileinfo['legal_url']; + //$file = $fileinfo['file']; + $mode = $fileinfo['mode']; + $meta = $fileinfo['meta_data']; + //$mime = $fileinfo['mime']; + $mime_filter = $fileinfo['mime_filter']; + $mime_filters = $fileinfo['mime_filters']; + $jserr = $fileinfo['preliminary_json']; + + $jserr = $this->extractDetailInfo($jserr, $legal_url, $meta, $mime_filter, $mime_filters, $mode); + + $this->sendHttpHeaders('Content-Type: application/json'); + + echo json_encode($jserr); + return; + } + catch(FileManagerException $e) + { + $emsg = $e->getMessage(); + } + catch(Exception $e) + { + // catching other severe failures; since this can be anything and should only happen in the direst of circumstances, we don't bother translating + $emsg = $e->getMessage(); + } + + $this->modify_json4exception($jserr, $emsg, 'file = ' . $file_arg . ', path = ' . $legal_url); + + $icon48 = $this->getIconForError($emsg, 'is.default-error', false); + $icon48_e = FileManagerUtility::rawurlencode_path($icon48); + $icon = $this->getIconForError($emsg, 'is.default-error', true); + $icon_e = FileManagerUtility::rawurlencode_path($icon); + $jserr['thumb250'] = null; + $jserr['thumb48'] = null; + $jserr['icon48'] = $icon48_e; + $jserr['icon'] = $icon_e; + + $postdiag_err_HTML = '

    ' . $emsg . '

    '; + $preview_HTML = '${nopreview}'; + $content = ''; + //$content .= '

    ${preview}

    '; + $content .= '
    ' . $preview_HTML . '
    '; + //$content .= '

    Diagnostics

    '; + //$content .= '
    ; + $content .= '
    ' . $postdiag_err_HTML . '
    '; + //$content .= '
    '; + + $json['content'] = self::compressHTML($content); + + $this->sendHttpHeaders('Content-Type: application/json'); + + // when we fail here, it's pretty darn bad and nothing to it. + // just push the error JSON and go. + echo json_encode($jserr); + } + + /** + * Process the 'destroy' event + * + * Delete the specified file or directory and return a JSON encoded status of success + * or failure. + * + * Note that when images are deleted, so are their thumbnails. + * + * Expected parameters: + * + * $_POST['directory'] path relative to basedir a.k.a. options['directory'] root + * + * $_POST['file'] filename (including extension, of course) of the file to + * be detailed. + * + * $_POST['filter'] optional mimetype filter string, amy be the part up to and + * including the slash '/' or the full mimetype. Only files + * matching this (set of) mimetypes will be listed. + * Examples: 'image/' or 'application/zip' + * + * Errors will produce a JSON encoded error report, including at least two fields: + * + * status 0 for error; nonzero for success + * + * error error message + */ + protected function onDestroy() + { + $emsg = null; + $file_arg = null; + $legal_url = null; + $jserr = array( + 'status' => 1 + ); + + try + { + if (!$this->options['destroy']) + throw new FileManagerException('disabled:destroy'); + + $v_ex_code = 'nofile'; + + $file_arg = $this->getPOSTparam('file'); + + $dir_arg = $this->getPOSTparam('directory'); + $legal_url = $this->rel2abs_legal_url_path($dir_arg . '/'); + + $mime_filter = $this->getPOSTparam('filter', $this->options['filter']); + $mime_filters = $this->getAllowedMimeTypes($mime_filter); + + $filename = null; + $file = null; + $mime = null; + $meta = null; + if (!empty($file_arg)) + { + $filename = basename($file_arg); + $legal_url .= $filename; + // must transform here so alias/etc. expansions inside legal_url_path2file_path() get a chance: + $file = $this->legal_url_path2file_path($legal_url); + + if (file_exists($file)) + { + if (is_file($file)) + { + $meta = $this->getFileInfo($file, $legal_url); + $mime = $meta->getMimeType(); + if (!$this->IsAllowedMimeType($mime, $mime_filters)) + { + $v_ex_code = 'extension'; + } + else + { + $v_ex_code = null; + } + } + else if (is_dir($file)) + { + $mime = 'text/directory'; + $v_ex_code = null; + } + } + } + + $fileinfo = array( + 'legal_url' => $legal_url, + 'file' => $file, + 'mime' => $mime, + 'meta_data' => $meta, + 'mime_filter' => $mime_filter, + 'mime_filters' => $mime_filters, + 'preliminary_json' => $jserr, + 'validation_failure' => $v_ex_code + ); + + if (!empty($this->options['DestroyIsAuthorized_cb']) && function_exists($this->options['DestroyIsAuthorized_cb']) && !$this->options['DestroyIsAuthorized_cb']($this, 'destroy', $fileinfo)) + { + $v_ex_code = $fileinfo['validation_failure']; + if (empty($v_ex_code)) $v_ex_code = 'authorized'; + } + if (!empty($v_ex_code)) + throw new FileManagerException($v_ex_code); + + $legal_url = $fileinfo['legal_url']; + $file = $fileinfo['file']; + $meta = $fileinfo['meta_data']; + $mime = $fileinfo['mime']; + $mime_filter = $fileinfo['mime_filter']; + $mime_filters = $fileinfo['mime_filters']; + $jserr = $fileinfo['preliminary_json']; + + if (!$this->unlink($legal_url, $mime_filters)) + { + throw new FileManagerException('unlink_failed:' . $legal_url); + } + + $this->sendHttpHeaders('Content-Type: application/json'); + + echo json_encode(array( + 'status' => 1, + 'content' => 'destroyed' + )); + + if (!empty($this->options['DestroyIsComplete_cb']) && function_exists($this->options['DestroyIsComplete_cb'])) + $this->options['DestroyIsComplete_cb']($this, 'destroy', $fileinfo); + + return; + } + catch(FileManagerException $e) + { + $emsg = $e->getMessage(); + } + catch(Exception $e) + { + // catching other severe failures; since this can be anything and should only happen in the direst of circumstances, we don't bother translating + $emsg = $e->getMessage(); + } + + $this->modify_json4exception($jserr, $emsg, 'file = ' . $file_arg . ', path = ' . $legal_url); + + $this->sendHttpHeaders('Content-Type: application/json'); + + // when we fail here, it's pretty darn bad and nothing to it. + // just push the error JSON and go. + echo json_encode($jserr); + } + + /** + * Process the 'create' event + * + * Create the specified subdirectory and give it the configured permissions + * (options['chmod'], default 0777) and return a JSON encoded status of success + * or failure. + * + * Expected parameters: + * + * $_POST['directory'] path relative to basedir a.k.a. options['directory'] root + * + * $_POST['file'] name of the subdirectory to be created + * + * Extra input parameters considered while producing the JSON encoded directory view. + * These may not seem relevant for an empty directory, but these parameters are also + * considered when providing the fallback directory view in case an error occurred + * and then the listed directory (either the parent or the basedir itself) may very + * likely not be empty! + * + * $_POST['filter'] optional mimetype filter string, amy be the part up to and + * including the slash '/' or the full mimetype. Only files + * matching this (set of) mimetypes will be listed. + * Examples: 'image/' or 'application/zip' + * + * Errors will produce a JSON encoded error report, including at least two fields: + * + * status 0 for error; nonzero for success + * + * error error message + */ + protected function onCreate() + { + $emsg = null; + $jserr = array( + 'status' => 1 + ); + + $mime_filter = $this->getPOSTparam('filter', $this->options['filter']); + + $file_arg = null; + $legal_url = null; + + try + { + if (!$this->options['create']) + throw new FileManagerException('disabled:create'); + + $v_ex_code = 'nofile'; + + $file_arg = $this->getPOSTparam('file'); + + $dir_arg = $this->getPOSTparam('directory'); + $legal_url = $this->rel2abs_legal_url_path($dir_arg . '/'); + + // must transform here so alias/etc. expansions inside legal_url_path2file_path() get a chance: + $dir = $this->legal_url_path2file_path($legal_url); + + $filename = null; + $file = null; + $newdir = null; + if (!empty($file_arg)) + { + $filename = basename($file_arg); + + if (!$this->IsHiddenNameAllowed($file_arg)) + { + $v_ex_code = 'authorized'; + } + else + { + if (is_dir($dir)) + { + $file = $this->getUniqueName(array('filename' => $filename), $dir); // a directory has no 'extension'! + if ($file !== null) + { + $newdir = $this->legal_url_path2file_path($legal_url . $file); + $v_ex_code = null; + } + } + } + } + + $fileinfo = array( + 'legal_url' => $legal_url, + 'dir' => $dir, + 'raw_name' => $filename, + 'uniq_name' => $file, + 'newdir' => $newdir, + 'chmod' => $this->options['chmod'], + 'preliminary_json' => $jserr, + 'validation_failure' => $v_ex_code + ); + if (!empty($this->options['CreateIsAuthorized_cb']) && function_exists($this->options['CreateIsAuthorized_cb']) && !$this->options['CreateIsAuthorized_cb']($this, 'create', $fileinfo)) + { + $v_ex_code = $fileinfo['validation_failure']; + if (empty($v_ex_code)) $v_ex_code = 'authorized'; + } + if (!empty($v_ex_code)) + throw new FileManagerException($v_ex_code); + + $legal_url = $fileinfo['legal_url']; + $dir = $fileinfo['dir']; + $filename = $fileinfo['raw_name']; + $file = $fileinfo['uniq_name']; + $newdir = $fileinfo['newdir']; + $jserr = $fileinfo['preliminary_json']; + + if (!@mkdir($newdir, $fileinfo['chmod'], true)) + { + throw new FileManagerException('mkdir_failed:' . $this->legal2abs_url_path($legal_url) . $file); + } + + $this->sendHttpHeaders('Content-Type: application/json'); + + // success, now show the new directory as a list view: + $rv = $this->_onView($legal_url . $file . '/', $jserr, $mime_filter); + + echo json_encode($rv); + return; + } + catch(FileManagerException $e) + { + $emsg = $e->getMessage(); + + $jserr['status'] = 0; + + // and fall back to showing the PARENT directory + try + { + $jserr = $this->_onView($legal_url, $jserr, $mime_filter); + } + catch (Exception $e) + { + // and fall back to showing the BASEDIR directory + try + { + $legal_url = $this->options['directory']; + $jserr = $this->_onView($legal_url, $jserr, $mime_filter); + } + catch (Exception $e) + { + // when we fail here, it's pretty darn bad and nothing to it. + // just push the error JSON and go. + } + } + } + catch(Exception $e) + { + // catching other severe failures; since this can be anything and should only happen in the direst of circumstances, we don't bother translating + $emsg = $e->getMessage(); + + $jserr['status'] = 0; + + // and fall back to showing the PARENT directory + try + { + $jserr = $this->_onView($legal_url, $jserr, $mime_filter); + } + catch (Exception $e) + { + // and fall back to showing the BASEDIR directory + try + { + $legal_url = $this->options['directory']; + $jserr = $this->_onView($legal_url, $jserr, $mime_filter); + } + catch (Exception $e) + { + // when we fail here, it's pretty darn bad and nothing to it. + // just push the error JSON and go. + } + } + } + + $this->modify_json4exception($jserr, $emsg, 'directory = ' . $file_arg . ', path = ' . $legal_url); + + $this->sendHttpHeaders('Content-Type: application/json'); + + // when we fail here, it's pretty darn bad and nothing to it. + // just push the error JSON and go. + echo json_encode($jserr); + } + + /** + * Process the 'download' event + * + * Send the file content of the specified file for download by the client. + * Only files residing within the directory tree rooted by the + * 'basedir' (options['directory']) will be allowed to be downloaded. + * + * Expected parameters: + * + * $_POST['file'] filepath of the file to be downloaded + * + * $_POST['filter'] optional mimetype filter string, amy be the part up to and + * including the slash '/' or the full mimetype. Only files + * matching this (set of) mimetypes will be listed. + * Examples: 'image/' or 'application/zip' + * + * On errors a HTTP 403 error response will be sent instead. + */ + protected function onDownload() + { + $emsg = null; + $file_arg = null; + $file = null; + $jserr = array( + 'status' => 1 + ); + + try + { + if (!$this->options['download']) + throw new FileManagerException('disabled:download'); + + $v_ex_code = 'nofile'; + + $file_arg = $this->getPOSTparam('file'); + + $mime_filter = $this->getPOSTparam('filter', $this->options['filter']); + $mime_filters = $this->getAllowedMimeTypes($mime_filter); + + $legal_url = null; + $file = null; + $mime = null; + $meta = null; + if (!empty($file_arg)) + { + $legal_url = $this->rel2abs_legal_url_path($file_arg); + + // must transform here so alias/etc. expansions inside legal_url_path2file_path() get a chance: + $file = $this->legal_url_path2file_path($legal_url); + + if (is_readable($file)) + { + if (is_file($file)) + { + $meta = $this->getFileInfo($file, $legal_url); + $mime = $meta->getMimeType(); + if (!$this->IsAllowedMimeType($mime, $mime_filters)) + { + $v_ex_code = 'extension'; + } + else + { + $v_ex_code = null; + } + } + else + { + $mime = 'text/directory'; + } + } + } + + $fileinfo = array( + 'legal_url' => $legal_url, + 'file' => $file, + 'mime' => $mime, + 'meta_data' => $meta, + 'mime_filter' => $mime_filter, + 'mime_filters' => $mime_filters, + 'validation_failure' => $v_ex_code + ); + if (!empty($this->options['DownloadIsAuthorized_cb']) && function_exists($this->options['DownloadIsAuthorized_cb']) && !$this->options['DownloadIsAuthorized_cb']($this, 'download', $fileinfo)) + { + $v_ex_code = $fileinfo['validation_failure']; + if (empty($v_ex_code)) $v_ex_code = 'authorized'; + } + if (!empty($v_ex_code)) + throw new FileManagerException($v_ex_code); + + $legal_url = $fileinfo['legal_url']; + $file = $fileinfo['file']; + $meta = $fileinfo['meta_data']; + $mime = $fileinfo['mime']; + $mime_filter = $fileinfo['mime_filter']; + $mime_filters = $fileinfo['mime_filters']; + + + if ($fd = fopen($file, 'rb')) + { + $fsize = filesize($file); + $fi = pathinfo($legal_url); + + // Based on the gist here: https://gist.github.com/854168 + // Reference: http://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/ + // We should: + // 1. try to use Apache mod_xsendfile + // 2. Try to chunk the file into pieces + // 3. If the file is sufficiently small, send it directly + + $hdrs = array(); + // see also: http://www.boutell.com/newfaq/creating/forcedownload.html + switch ($mime) + { + // add here more mime types for different file types and special handling by the client on download + case 'application/pdf': + $hdrs[] = 'Content-Type: ' . $mime; + break; + + default: + $hdrs[] = 'Content-Type: application/octet-stream'; + break; + } + + $hdrs[] = 'Content-Disposition: attachment; filename="' . $fi['basename'] . '"'; // use 'attachment' to force a download + + // Content length isn't requied for mod_xsendfile (Apache handles this for us) + $modx = $this->options['enableXSendFile'] && function_exists('apache_get_modules') && in_array('mod_xsendfile', apache_get_modules()); + if ($modx) + { + $hdrs[] = 'X-Sendfile: '.$file; + } + else + { + $hdrs[] = 'Content-length: ' . $fsize; + $hdrs[] = 'Expires: 0'; + $hdrs[] = 'Cache-Control: must-revalidate, post-check=0, pre-check=0'; + $hdrs[] = '!Cache-Control: private'; // flag as FORCED APPEND; use this to open files directly + } + + $this->sendHttpHeaders($hdrs); + + if (!$modx) + { + $chunksize = 4*1024; // 4KB blocks + if ($fsize > $chunksize) + { + // Turn off compression which prevents files from being re-assembled properly (especially zip files) + function_exists('apache_setenv') && @apache_setenv('no-gzip', 1); + @ini_set('zlib.output_compression', 0); + + // Turn off any additional buffering by the server + @ini_set('implicit_flush', 1); + + // Disable any timeouts + @set_time_limit(0); + while (!feof($fd)) + { + echo @fread($fd, $chunksize); + ob_flush(); + flush(); + } + } + else + { + fpassthru($fd); + } + } + + fclose($fd); + + if (!empty($this->options['DownloadIsComplete_cb']) && function_exists($this->options['DownloadIsComplete_cb'])) + $this->options['DownloadIsComplete_cb']($this, 'download', $fileinfo); + + return; + } + + $emsg = 'read_error'; + + + } + catch(FileManagerException $e) + { + $emsg = $e->getMessage(); + } + catch(Exception $e) + { + // catching other severe failures; since this can be anything and should only happen in the direst of circumstances, we don't bother translating + $emsg = $e->getMessage(); + } + + // we don't care whether it's a 404, a 403 or something else entirely: we feed 'em a 403 and that's final! + send_response_status_header(403); + + $this->modify_json4exception($jserr, $emsg, 'file = ' . $this->mkSafe4Display($file_arg . ', destination path = ' . $file)); + + $this->sendHttpHeaders('Content-Type: text/plain'); // Safer for iframes: the 'application/json' mime type would cause FF3.X to pop up a save/view dialog when transmitting these error reports! + + // when we fail here, it's pretty darn bad and nothing to it. + // just push the error JSON and go. + echo json_encode($jserr); + } + + /** + * Process the 'upload' event + * + * Process and store the uploaded file in the designated location. + * Images will be resized when possible and applicable. A thumbnail image will also + * be preproduced when possible. + * Return a JSON encoded status of success or failure. + * + * Expected parameters: + * + * $_POST['directory'] path relative to basedir a.k.a. options['directory'] root + * + * $_POST['resize'] nonzero value indicates any uploaded image should be resized to the configured + * options['maxImageDimension'] width and height whenever possible + * + * $_POST['filter'] optional mimetype filter string, amy be the part up to and + * including the slash '/' or the full mimetype. Only files + * matching this (set of) mimetypes will be listed. + * Examples: 'image/' or 'application/zip' + * + * $_FILES[] the metadata for the uploaded file + * + * $_POST['reportContentType'] + * if you want a specific content type header set on our response, put it here. + * This is needed for when we are posting an upload response to a hidden iframe, the + * default application/json mimetype breaks down in that case at least for Firefox 3.X + * as the browser will pop up a save/view dialog before JS can access the transmitted data. + * + * Errors will produce a JSON encoded error report, including at least two fields: + * + * status 0 for error; nonzero for success + * + * error error message + */ + protected function onUpload() + { + $emsg = null; + $file_arg = null; + $file = null; + $legal_dir_url = null; + $jserr = array( + 'status' => 1 + ); + + try + { + if (!$this->options['upload']) + throw new FileManagerException('disabled:upload'); + + // MAY upload zero length files! + if (!isset($_FILES) || empty($_FILES['Filedata']) || empty($_FILES['Filedata']['name'])) + throw new FileManagerException('nofile'); + + $v_ex_code = 'nofile'; + + $file_size = (empty($_FILES['Filedata']['size']) ? 0 : $_FILES['Filedata']['size']); + + $file_arg = $_FILES['Filedata']['name']; + + $dir_arg = $this->getPOSTparam('directory'); + $legal_dir_url = $this->rel2abs_legal_url_path($dir_arg . '/'); + // must transform here so alias/etc. expansions inside legal_url_path2file_path() get a chance: + $dir = $this->legal_url_path2file_path($legal_dir_url); + + $mime_filter = $this->getPOSTparam('filter', $this->options['filter']); + $mime_filters = $this->getAllowedMimeTypes($mime_filter); + + $tmppath = $_FILES['Filedata']['tmp_name']; + + $resize_imgs = $this->getPOSTparam('resize', 0); + + $filename = null; + $fi = array('filename' => null, 'extension' => null); + $mime = null; + $meta = null; + if (!empty($file_arg)) + { + if (!$this->IsHiddenNameAllowed($file_arg)) + { + $v_ex_code = 'fmt_not_allowed'; + } + else + { + if ($this->options['safe']) + { + $safeext = $this->getSafeExtension(preg_replace('/^.*\./', '', $file_arg)); + $file_arg = preg_replace('/\..*$/', '', $file_arg) . ".$safeext"; + } + + $filename = $this->getUniqueName($file_arg, $dir); + if ($filename !== null) + { + /* + * Security: + * + * Upload::move() processes the unfiltered version of $_FILES[]['name'], at least to get the extension, + * unless we ALWAYS override the filename and extension in the options array below. That's why we + * calculate the extension at all times here. + */ + if ($this->options['safe']) + { + $fi = pathinfo($filename); + $fi['extension'] = $this->getSafeExtension(isset($fi['extension']) ? $fi['extension'] : ''); + $filename = $fi['filename'] . ((isset($fi['extension']) && strlen($fi['extension']) > 0) ? '.' . $fi['extension'] : ''); + } + + $legal_url = $legal_dir_url . $filename; + + // UPLOAD delivers files in temporary storage with extensions NOT matching the mime type, so we don't + // filter on extension; we just let getID3 go ahead and content-sniff the mime type. + // Since getID3::analyze() is a quite costly operation, we like to do it only ONCE per file, + // so we cache the last entries. + $meta = $this->getFileInfo($tmppath, $legal_url); + $mime = $meta->getMimeType(); + if (!$this->IsAllowedMimeType($mime, $mime_filters)) + { + $v_ex_code = 'extension'; + } + else + { + $v_ex_code = null; + } + } + } + } + + $fileinfo = array( + 'legal_dir_url' => $legal_dir_url, + 'dir' => $dir, + 'raw_filename' => $file_arg, + 'filename' => $filename, + 'meta_data' => $meta, + 'mime' => $mime, + 'mime_filter' => $mime_filter, + 'mime_filters' => $mime_filters, + 'tmp_filepath' => $tmppath, + 'size' => $file_size, + 'maxsize' => $this->options['maxUploadSize'], + 'overwrite' => false, + 'resize' => $resize_imgs, + 'chmod' => $this->options['chmod'] & 0666, // security: never make those files 'executable'! + 'preliminary_json' => $jserr, + 'validation_failure' => $v_ex_code + ); + if (!empty($this->options['UploadIsAuthorized_cb']) && function_exists($this->options['UploadIsAuthorized_cb']) && !$this->options['UploadIsAuthorized_cb']($this, 'upload', $fileinfo)) + { + $v_ex_code = $fileinfo['validation_failure']; + if (empty($v_ex_code)) $v_ex_code = 'authorized'; + } + if (!empty($v_ex_code)) + throw new FileManagerException($v_ex_code); + + $legal_dir_url = $fileinfo['legal_dir_url']; + $dir = $fileinfo['dir']; + $file_arg = $fileinfo['raw_filename']; + $filename = $fileinfo['filename']; + $meta = $fileinfo['meta_data']; + $mime = $fileinfo['mime']; + $mime_filter = $fileinfo['mime_filter']; + $mime_filters = $fileinfo['mime_filters']; + //$tmppath = $fileinfo['tmp_filepath']; + $resize_imgs = $fileinfo['resize']; + $jserr = $fileinfo['preliminary_json']; + + if ($fileinfo['maxsize'] && $fileinfo['size'] > $fileinfo['maxsize']) + throw new FileManagerException('size'); + + //if (!isset($fileinfo['extension'])) + // throw new FileManagerException('extension'); + + // must transform here so alias/etc. expansions inside legal_url_path2file_path() get a chance: + $legal_url = $legal_dir_url . $filename; + $file = $this->legal_url_path2file_path($legal_url); + + if (!$fileinfo['overwrite'] && file_exists($file)) + throw new FileManagerException('exists'); + + if (!@move_uploaded_file($_FILES['Filedata']['tmp_name'], $file)) + { + $emsg = 'path'; + switch ($_FILES['Filedata']['error']) + { + case 1: + case 2: + $emsg = 'size'; + break; + + case 3: + $emsg = 'partial'; + break; + + default: + $dir = $this->legal_url_path2file_path($legal_dir_url); + if (!is_dir($dir)) + { + $emsg = 'path'; + } + else if (!is_writable($dir)) + { + $emsg = 'path_not_writable'; + } + else + { + $emsg = 'filename_maybe_too_large'; + } + + if (!empty($_FILES['Filedata']['error'])) + { + $emsg .= ': error code = ' . strtolower($_FILES['Filedata']['error']) . ', ' . $emsg_add; + } + break; + } + throw new FileManagerException($emsg); + } + + @chmod($file, $fileinfo['chmod']); + + /* + * NOTE: you /can/ (and should be able to, IMHO) upload 'overly large' image files to your site, but the resizing process step + * happening here will fail; we have memory usage estimators in place to make the fatal crash a non-silent one, i,e, one + * where we still have a very high probability of NOT fatally crashing the PHP iunterpreter but catching a suitable exception + * instead. + * Having uploaded such huge images, a developer/somebody can always go in later and up the memory limit if the site admins + * feel it is deserved. Until then, no thumbnails of such images (though you /should/ be able to milkbox-view the real thing!) + */ + $thumb250 = false; + $thumb250_e = false; + $thumb48 = false; + $thumb48_e = false; + if (FileManagerUtility::startsWith($mime, 'image/')) + { + if (!empty($resize_imgs)) + { + $img = new Image($file); + $size = $img->getSize(); + // Image::resize() takes care to maintain the proper aspect ratio, so this is easy + // (default quality is 100% for JPEG so we get the cleanest resized images here) + $img->resize($this->options['maxImageDimension']['width'], $this->options['maxImageDimension']['height'])->save(); + unset($img); + + // source image has changed: nuke the cached metadata and then refetch the metadata = forced refetch + $meta = $this->getFileInfo($file, $legal_url, true); + } + } + + /* + * 'abuse' the info extraction process to generate the thumbnails. Besides, doing it this way will also prime the metadata cache for this item, + * so we'll have a very fast performance viewing this file's details and thumbnails both from this point forward! + */ + $jsbogus = array('status' => 1); + $jsbogus = $this->extractDetailInfo($jsbogus, $legal_url, $meta, $mime_filter, $mime_filters, array('direct')); + + $this->sendHttpHeaders('Content-Type: ' . $this->getPOSTparam('reportContentType', 'application/json')); + + echo json_encode(array( + 'status' => 1, + 'name' => basename($file) + )); + + if (!empty($this->options['UploadIsComplete_cb']) && function_exists($this->options['UploadIsComplete_cb'])) + $this->options['UploadIsComplete_cb']($this, 'upload', $fileinfo); + + return; + } + catch(FileManagerException $e) + { + $emsg = $e->getMessage(); + } + catch(Exception $e) + { + // catching other severe failures; since this can be anything and should only happen in the direst of circumstances, we don't bother translating + $emsg = $e->getMessage(); + } + + $this->modify_json4exception($jserr, $emsg, 'file = ' . $this->mkSafe4Display($file_arg . ', destination path = ' . $file . ', target directory (URI path) = ' . $legal_dir_url)); + + $this->sendHttpHeaders('Content-Type: ' . $this->getPOSTparam('reportContentType', 'application/json')); + + // when we fail here, it's pretty darn bad and nothing to it. + // just push the error JSON and go. + echo json_encode(array_merge($jserr, $_FILES)); + } + + /** + * Process the 'move' event (with is used by both move/copy and rename client side actions) + * + * Copy or move/rename a given file or directory and return a JSON encoded status of success + * or failure. + * + * Expected parameters: + * + * $_POST['copy'] nonzero value means copy, zero or nil for move/rename + * + * Source filespec: + * + * $_POST['directory'] path relative to basedir a.k.a. options['directory'] root + * + * $_POST['file'] original name of the file/subdirectory to be renamed/copied + * + * Destination filespec: + * + * $_POST['newDirectory'] path relative to basedir a.k.a. options['directory'] root; + * target directory where the file must be moved / copied + * + * $_POST['name'] target name of the file/subdirectory to be renamed + * + * Errors will produce a JSON encoded error report, including at least two fields: + * + * status 0 for error; nonzero for success + * + * error error message + */ + protected function onMove() + { + $emsg = null; + $file_arg = null; + $legal_url = null; + $newpath = null; + $jserr = array( + 'status' => 1 + ); + + try + { + if (!$this->options['move']) + throw new FileManagerException('disabled:rn_mv_cp'); + + $v_ex_code = 'nofile'; + + $file_arg = $this->getPOSTparam('file'); + + $dir_arg = $this->getPOSTparam('directory'); + $legal_url = $this->rel2abs_legal_url_path($dir_arg . '/'); + + // must transform here so alias/etc. expansions inside legal_url_path2file_path() get a chance: + $dir = $this->legal_url_path2file_path($legal_url); + + $newdir_arg = $this->getPOSTparam('newDirectory'); + $newname_arg = $this->getPOSTparam('name'); + $rename = (empty($newdir_arg) && !empty($newname_arg)); + + $is_copy = !!$this->getPOSTparam('copy'); + + $filename = null; + $path = null; + $fn = null; + $legal_newurl = null; + $newdir = null; + $newname = null; + $newpath = null; + $is_dir = false; + if (!$this->IsHiddenPathAllowed($newdir_arg) || !$this->IsHiddenNameAllowed($newname_arg)) + { + $v_ex_code = 'authorized'; + } + else + { + if (!empty($file_arg)) + { + $filename = basename($file_arg); + $path = $this->legal_url_path2file_path($legal_url . $filename); + + if (file_exists($path)) + { + $is_dir = is_dir($path); + + // note: we do not support copying entire directories, though directory rename/move is okay + if ($is_copy && $is_dir) + { + $v_ex_code = 'disabled:rn_mv_cp'; + } + else if ($rename) + { + $fn = 'rename'; + $legal_newurl = $legal_url; + $newdir = $dir; + + $newname = basename($newname_arg); + if ($is_dir) + $newname = $this->getUniqueName(array('filename' => $newname), $newdir); // a directory has no 'extension' + else + $newname = $this->getUniqueName($newname, $newdir); + + if ($newname === null) + { + $v_ex_code = 'nonewfile'; + } + else + { + // when the new name seems to have a different extension, make sure the extension doesn't change after all: + // Note: - if it's only 'case' we're changing here, then exchange the extension instead of appending it. + // - directories do not have extensions + $extOld = pathinfo($filename, PATHINFO_EXTENSION); + $extNew = pathinfo($newname, PATHINFO_EXTENSION); + if ((!$this->options['allowExtChange'] || (!$is_dir && empty($extNew))) && !empty($extOld) && strtolower($extOld) != strtolower($extNew)) + { + $newname .= '.' . $extOld; + } + $v_ex_code = null; + } + } + else + { + $fn = ($is_copy ? 'copy' : 'rename' /* 'move' */); + $legal_newurl = $this->rel2abs_legal_url_path($newdir_arg . '/'); + $newdir = $this->legal_url_path2file_path($legal_newurl); + + if ($is_dir) + $newname = $this->getUniqueName(array('filename' => $filename), $newdir); // a directory has no 'extension' + else + $newname = $this->getUniqueName($filename, $newdir); + + if ($newname === null) + $v_ex_code = 'nonewfile'; + else + $v_ex_code = null; + } + + if (empty($v_ex_code)) + { + $newpath = $this->legal_url_path2file_path($legal_newurl . $newname); + } + } + } + } + + $fileinfo = array( + 'legal_url' => $legal_url, + 'dir' => $dir, + 'path' => $path, + 'name' => $filename, + 'legal_newurl' => $legal_newurl, + 'newdir' => $newdir, + 'newpath' => $newpath, + 'newname' => $newname, + 'rename' => $rename, + 'is_dir' => $is_dir, + 'function' => $fn, + 'preliminary_json' => $jserr, + 'validation_failure' => $v_ex_code + ); + + if (!empty($this->options['MoveIsAuthorized_cb']) && function_exists($this->options['MoveIsAuthorized_cb']) && !$this->options['MoveIsAuthorized_cb']($this, 'move', $fileinfo)) + { + $v_ex_code = $fileinfo['validation_failure']; + if (empty($v_ex_code)) $v_ex_code = 'authorized'; + } + if (!empty($v_ex_code)) + throw new FileManagerException($v_ex_code); + + $legal_url = $fileinfo['legal_url']; + $dir = $fileinfo['dir']; + $path = $fileinfo['path']; + $filename = $fileinfo['name']; + $legal_newurl = $fileinfo['legal_newurl']; + $newdir = $fileinfo['newdir']; + $newpath = $fileinfo['newpath']; + $newname = $fileinfo['newname']; + $rename = $fileinfo['rename']; + $is_dir = $fileinfo['is_dir']; + $fn = $fileinfo['function']; + $jserr = $fileinfo['preliminary_json']; + + if ($rename) + { + // try to remove the thumbnail & other cache entries related to the original file; don't mind if it doesn't exist + $flurl = $legal_url . $filename; + $meta = &$this->getid3_cache->pick($flurl, $this, false); + assert($meta != null); + if (!$meta->delete(true)) + { + throw new FileManagerException('delete_cache_entries_failed'); + } + unset($meta); + } + + if (!function_exists($fn)) + throw new FileManagerException((empty($fn) ? 'rename' : $fn) . '_failed'); + if (!@$fn($path, $newpath)) + throw new FileManagerException($fn . '_failed'); + + $this->sendHttpHeaders('Content-Type: application/json'); + + // jserr['status'] == 1 + $jserr['name'] = $newname; + + echo json_encode($jserr); + return; + } + catch(FileManagerException $e) + { + $emsg = $e->getMessage(); + } + catch(Exception $e) + { + // catching other severe failures; since this can be anything and should only happen in the direst of circumstances, we don't bother translating + $emsg = $e->getMessage(); + } + + $this->modify_json4exception($jserr, $emsg, 'file = ' . $file_arg . ', path = ' . $legal_url . ', destination path = ' . $newpath); + + $this->sendHttpHeaders('Content-Type: application/json'); + + // when we fail here, it's pretty darn bad and nothing to it. + // just push the error JSON and go. + echo json_encode($jserr); + } + + + + + + + + + + + /** + * Send the listed headers when possible; the input parameter is an array of header strings or a single header string. + * + * NOTE: when a header string starts with the '!' character, it means that header is required + * to be appended to the header output set and not overwrite any existing equal header. + */ + public function sendHttpHeaders($headers) + { + if (!headers_sent()) + { + $headers = array_merge(array( + 'Expires: Fri, 01 Jan 1990 00:00:00 GMT', + 'Cache-Control: no-cache, no-store, max-age=0, must-revalidate' + ), (is_array($headers) ? $headers : array($headers))); + + foreach($headers as $h) + { + $append_flag = ($h[0] == '!'); + $h = ltrim($h, '!'); + header($h, $append_flag); + } + } + } + + + + + // derived from http://www.php.net/manual/en/function.filesize.php#100097 + public function format_bytes($bytes) + { + if ($bytes < 1024) + return $bytes . ' Bytes'; + elseif ($bytes < 1048576) + return round($bytes / 1024, 2) . ' KB (' . $bytes . ' Bytes)'; + elseif ($bytes < 1073741824) + return round($bytes / 1048576, 2) . ' MB (' . $bytes . ' Bytes)'; + else + return round($bytes / 1073741824, 2) . ' GB (' . $bytes . ' Bytes)'; + } + + /** + * Produce a HTML snippet detailing the given file in the JSON 'content' element; place additional info + * in the JSON elements 'thumbnail', 'thumb48', 'thumb250', 'width', 'height', ... + * + * Return an augmented JSON array. + * + * Throw an exception on error. + */ + public function extractDetailInfo($json_in, $legal_url, &$meta, $mime_filter, $mime_filters, $mode) + { + $auto_thumb_gen_mode = !in_array('direct', $mode, true); + $metaHTML_mode = in_array('metaHTML', $mode, true); + $metaJSON_mode = in_array('metaJSON', $mode, true); + + $url = $this->legal2abs_url_path($legal_url); + $filename = basename($url); + + // must transform here so alias/etc. expansions inside url_path2file_path() get a chance: + $file = $this->url_path2file_path($url); + + $isdir = !is_file($file); + $bad_ext = false; + $mime = null; + // only perform the (costly) getID3 scan when it hasn't been done before, i.e. can we re-use previously obtained data or not? + if (!is_object($meta)) + { + $meta = $this->getFileInfo($file, $legal_url); + } + if (!$isdir) + { + $mime = $meta->getMimeType(); + + $mime2 = $this->getMimeFromExt($file); + $meta->store('mime_type from file extension', $mime2); + + $bad_ext = ($mime2 != $mime); + if ($bad_ext) + { + $iconspec = 'is.' + $this->getExtFromMime($mime); + } + else + { + $iconspec = $filename; + } + + if (!$this->IsAllowedMimeType($mime, $mime_filters)) + throw new FileManagerException('extension'); + } + else if (is_dir($file)) + { + $mime = $meta->getMimeType(); + // $mime = 'text/directory'; + $iconspec = 'is.directory'; + } + else + { + // simply do NOT list anything that we cannot cope with. + // That includes clearly inaccessible files (and paths) with non-ASCII characters: + // PHP5 and below are a real mess when it comes to handling Unicode filesystems + // (see the php.net site too: readdir / glob / etc. user comments and the official + // notice that PHP will support filesystem UTF-8/Unicode only when PHP6 is released. + // + // Big, fat bummer! + throw new FileManagerException('nofile'); + } + + // as all the work below is quite costly, we check whether the already loaded cache entry got our number: + // several chunks of work below may have been cached and when they have been, use the cached data. + + // it's an internal error when this entry do not exist in the cache store by now! + $fi = $meta->fetch('analysis'); + //assert(!empty($fi)); + + $icon48 = $this->getIcon($iconspec, false); + $icon = $this->getIcon($iconspec, true); + + $thumb250 = $meta->fetch('thumb250_direct'); + $thumb48 = $meta->fetch('thumb48_direct'); + $thumb250_e = false; + $thumb48_e = false; + + $tstamp_str = date($this->options['dateFormat'], @filemtime($file)); + $fsize = @filesize($file); + $fsize_str = empty($fsize) ? '-' : $this->format_bytes($fsize); // convert to T/G/M/K-bytes: + + $json = array_merge(array( + //'status' => 1, + //'mimetype' => $mime, + 'content' => self::compressHTML('
    + ${nopreview} +
    ') + ), + array( + 'path' => $legal_url, + 'url' => $url, + 'name' => $filename, + 'date' => $tstamp_str, + 'mime' => $mime, + 'size' => $fsize, + 'modified' => @filemtime($file), + 'size_str' => $fsize_str + )); + + $content = '
    +
    ${modified}
    +
    ' . $tstamp_str . '
    +
    ${type}
    +
    ' . $mime . '
    +
    ${size}
    +
    ' . $fsize_str . '
    '; + $content_dl_term = false; + + $preview_HTML = null; + $postdiag_err_HTML = ''; + $postdiag_dump_HTML = ''; + $thumbnails_done_or_deferred = false; // TRUE: mark our thumbnail work as 'done'; any NULL thumbnails represent deferred generation entries! + $check_for_embedded_img = false; + + $mime_els = explode('/', $mime); + for(;;) // bogus loop; only meant to assist the [mime remapping] state machine in here + { + switch ($mime_els[0]) + { + case 'image': + /* + * thumbnail_gen_mode === 'auto': + * + * offload the thumbnailing process to another event ('event=thumbnail') to be fired by the client + * when it's time to render the thumbnail: + * WE simply assume the thumbnail will be there, and when it doesn't, that's + * for the event=thumbnail handler to worry about (creating the thumbnail on demand or serving + * a generic icon image instead). Meanwhile, we are able to speed up the response process here quite + * a bit (rendering thumbnails from very large images can take a lot of time!) + * + * To further improve matters, we first generate the 250px thumbnail and then generate the 48px + * thumbnail from that one (if it doesn't already exist). That saves us one more time processing + * the (possibly huge) original image; downscaling the 250px file is quite fast, relatively speaking. + * + * That bit of code ASSUMES that the thumbnail will be generated from the file argument, while + * the url argument is used to determine the thumbnail name/path. + */ + $emsg = null; + try + { + if (empty($thumb250)) + { + $thumb250 = $this->getThumb($meta, $file, $this->options['thumbBigSize'], $this->options['thumbBigSize'], $auto_thumb_gen_mode); + } + if (!empty($thumb250)) + { + $thumb250_e = FileManagerUtility::rawurlencode_path($thumb250); + } + if (empty($thumb48)) + { + $thumb48 = $this->getThumb($meta, (!empty($thumb250) ? $this->url_path2file_path($thumb250) : $file), $this->options['thumbSmallSize'], $this->options['thumbSmallSize'], $auto_thumb_gen_mode); + } + if (!empty($thumb48)) + { + $thumb48_e = FileManagerUtility::rawurlencode_path($thumb48); + } + + if (empty($thumb48) || empty($thumb250)) + { + /* + * do NOT generate the thumbnail itself yet (it takes too much time!) but do check whether it CAN be generated + * at all: THAT is a (relatively speaking) fast operation! + */ + $imginfo = Image::checkFileForProcessing($file); + } + $thumbnails_done_or_deferred = true; + } + catch (Exception $e) + { + $emsg = $e->getMessage(); + $icon48 = $this->getIconForError($emsg, $legal_url, false); + $icon = $this->getIconForError($emsg, $legal_url, true); + // even cache the fail: that means next time around we don't suffer the failure but immediately serve the error icon instead. + } + + $width = round($this->getID3infoItem($fi, 0, 'video', 'resolution_x')); + $height = round($this->getID3infoItem($fi, 0, 'video', 'resolution_y')); + $json['width'] = $width; + $json['height'] = $height; + + $content .= ' +
    ${width}
    ' . $width . 'px
    +
    ${height}
    ' . $height . 'px
    +
    '; + $content_dl_term = true; + + $sw_make = $this->mkSafeUTF8($this->getID3infoItem($fi, null, 'jpg', 'exif', 'IFD0', 'Software')); + $time_make = $this->mkSafeUTF8($this->getID3infoItem($fi, null, 'jpg', 'exif', 'IFD0', 'DateTime')); + + if (!empty($sw_make) || !empty($time_make)) + { + $content .= '

    Made with ' . (empty($sw_make) ? '???' : $sw_make) . ' @ ' . (empty($time_make) ? '???' : $time_make) . '

    '; + } + + // are we delaying the thumbnail generation? When yes, then we need to infer the thumbnail dimensions *anyway*! + if (empty($thumb48) && $thumbnails_done_or_deferred) + { + $dims = $this->predictThumbDimensions($width, $height, $this->options['thumbSmallSize'], $this->options['thumbSmallSize']); + + $json['thumb48_width'] = $dims['width']; + $json['thumb48_height'] = $dims['height']; + } + if (empty($thumb250)) + { + if ($thumbnails_done_or_deferred) + { + // to show the loader.gif in the preview tag, we MUST set a width+height there, so we guestimate the thumbnail250 size as accurately as possible + // + // derive size from original: + $dims = $this->predictThumbDimensions($width, $height, $this->options['thumbBigSize'], $this->options['thumbBigSize']); + + $preview_HTML = ' + preview + '; + + $json['thumb250_width'] = $dims['width']; + $json['thumb250_height'] = $dims['height']; + } + else + { + // when we get here, a failure occurred before, so we only will have the icons. So we use those: + $preview_HTML = ' + preview + '; + } + } + // else: defer the $preview_HTML production until we're at the end of this and have fetched the actual thumbnail dimensions + + if (!empty($emsg)) + { + // use the abilities of modify_json4exception() to munge/format the exception message: + $jsa = array('error' => ''); + $this->modify_json4exception($jsa, $emsg, 'path = ' . $url); + $postdiag_err_HTML .= "\n" . '

    ' . $jsa['error'] . '

    '; + + if (strpos($emsg, 'img_will_not_fit') !== false) + { + $earr = explode(':', $emsg, 2); + $postdiag_err_HTML .= "\n" . '

    Estimated minimum memory requirements to create thumbnails for this image: ' . $earr[1] . '

    '; + } + } + break; + + case 'text': + switch ($mime_els[1]) + { + case 'directory': + $preview_HTML = ''; + break; + + default: + // text preview: + $filecontent = @file_get_contents($file, false, null, 0); + if ($filecontent === false) + throw new FileManagerException('nofile'); + + if (!FileManagerUtility::isBinary($filecontent)) + { + $preview_HTML = '
    ' . str_replace(array('$', "\t"), array('$', '  '), htmlentities($filecontent, ENT_NOQUOTES, 'UTF-8')) . '
    '; + } + else + { + // else: fall back to 'no preview available' (if getID3 didn't deliver instead...) + $mime_els[0] = 'unknown'; // remap! + continue 3; + } + break; + } + break; + + case 'application': + switch ($mime_els[1]) + { + case 'x-javascript': + $mime_els[0] = 'text'; // remap! + continue 3; + + case 'zip': + $out = array(array(), array()); + $info = $this->getID3infoItem($fi, null, 'zip', 'files'); + if (is_array($info)) + { + foreach ($info as $name => $size) + { + $name = $this->mkSafeUTF8($name); + $isdir = is_array($size); + $out[$isdir ? 0 : 1][$name] = '
  • ' . $name . '
  • '; + } + natcasesort($out[0]); + natcasesort($out[1]); + $preview_HTML = '
      ' . implode(array_merge($out[0], $out[1])) . '
    '; + } + break; + + case 'x-shockwave-flash': + $check_for_embedded_img = true; + + $info = $this->getID3infoItem($fi, null, 'swf', 'header'); + if (is_array($info)) + { + $width = round($this->getID3infoItem($fi, 0, 'swf', 'header', 'frame_width') / 10); + $height = round($this->getID3infoItem($fi, 0, 'swf', 'header', 'frame_height') / 10); + $json['width'] = $width; + $json['height'] = $height; + + $content .= ' +
    ${width}
    ' . $width . 'px
    +
    ${height}
    ' . $height . 'px
    +
    ${length}
    ' . round($this->getID3infoItem($fi, 0, 'swf', 'header', 'length') / $this->getID3infoItem($fi, 25, 'swf', 'header', 'frame_count')) . 's
    + '; + $content_dl_term = true; + } + break; + + default: + // else: fall back to 'no preview available' (if getID3 didn't deliver instead...) + $mime_els[0] = 'unknown'; // remap! + continue 3; + } + break; + + case 'audio': + $check_for_embedded_img = true; + + $title = $this->mkSafeUTF8($this->getID3infoItem($fi, $this->getID3infoItem($fi, '???', 'tags', 'id3v1', 'title', 0), 'tags', 'id3v2', 'title', 0)); + $artist = $this->mkSafeUTF8($this->getID3infoItem($fi, $this->getID3infoItem($fi, '???', 'tags', 'id3v1', 'artist', 0), 'tags', 'id3v2', 'artist', 0)); + $album = $this->mkSafeUTF8($this->getID3infoItem($fi, $this->getID3infoItem($fi, '???', 'tags', 'id3v1', 'album', 0), 'tags', 'id3v2', 'album', 0)); + $length = $this->mkSafeUTF8($this->getID3infoItem($fi, '???', 'playtime_string')); + $bitrate = round($this->getID3infoItem($fi, 0, 'bitrate') / 1000); + + $json = array_merge($json, array('title' => $title, 'artist' => $artist, 'album' => $album, 'length' => $length, 'bitrate' => $bitrate)); + + $content .= ' +
    ${title}
    ' . $title . '
    +
    ${artist}
    ' . $artist . '
    +
    ${album}
    ' . $album . '
    +
    ${length}
    ' . $length . '
    +
    ${bitrate}
    ' . $bitrate . 'kbps
    + '; + $content_dl_term = true; + break; + + case 'video': + $check_for_embedded_img = true; + + $a_fmt = $this->mkSafeUTF8($this->getID3infoItem($fi, '???', 'audio', 'dataformat')); + $a_samplerate = round($this->getID3infoItem($fi, 0, 'audio', 'sample_rate') / 1000, 1); + $a_bitrate = round($this->getID3infoItem($fi, 0, 'audio', 'bitrate') / 1000, 1); + $a_bitrate_mode = $this->mkSafeUTF8($this->getID3infoItem($fi, '???', 'audio', 'bitrate_mode')); + $a_channels = round($this->getID3infoItem($fi, 0, 'audio', 'channels')); + $a_codec = $this->mkSafeUTF8($this->getID3infoItem($fi, '', 'audio', 'codec')); + $a_streams = $this->getID3infoItem($fi, '???', 'audio', 'streams'); + $a_streamcount = (is_array($a_streams) ? count($a_streams) : 0); + + $v_fmt = $this->mkSafeUTF8($this->getID3infoItem($fi, '???', 'video', 'dataformat')); + $v_bitrate = round($this->getID3infoItem($fi, 0, 'video', 'bitrate') / 1000, 1); + $v_bitrate_mode = $this->mkSafeUTF8($this->getID3infoItem($fi, '???', 'video', 'bitrate_mode')); + $v_framerate = round($this->getID3infoItem($fi, 0, 'video', 'frame_rate'), 5); + $v_width = round($this->getID3infoItem($fi, '???', 'video', 'resolution_x')); + $v_height = round($this->getID3infoItem($fi, '???', 'video', 'resolution_y')); + $v_par = round($this->getID3infoItem($fi, 1.0, 'video', 'pixel_aspect_ratio'), 7); + $v_codec = $this->mkSafeUTF8($this->getID3infoItem($fi, '', 'video', 'codec')); + + $g_bitrate = round($this->getID3infoItem($fi, 0, 'bitrate') / 1000, 1); + $g_playtime_str = $this->mkSafeUTF8($this->getID3infoItem($fi, '???', 'playtime_string')); + + $content .= ' +
    Audio
    '; + if ($a_fmt === '???' && $a_samplerate == 0 && $a_bitrate == 0 && $a_bitrate_mode === '???' && $a_channels == 0 && empty($a_codec) && $a_streams === '???' && $a_streamcount == 0) + { + $content .= '-'; + } + else + { + $content .= $a_fmt . (!empty($a_codec) ? ' (' . $a_codec . ')' : '') . + (!empty($a_channels) ? ($a_channels === 1 ? ' (mono)' : ($a_channels === 2 ? ' (stereo)' : ' (' . $a_channels . ' channels)')) : '') . + ': ' . $a_samplerate . ' kHz @ ' . $a_bitrate . ' kbps (' . strtoupper($a_bitrate_mode) . ')' . + ($a_streamcount > 1 ? ' (' . $a_streamcount . ' streams)' : ''); + } + $content .= '
    +
    Video
    ' . $v_fmt . (!empty($v_codec) ? ' (' . $v_codec . ')' : '') . ': ' . $v_framerate . ' fps @ ' . $v_bitrate . ' kbps (' . strtoupper($v_bitrate_mode) . ')' . + ($v_par != 1.0 ? ', PAR: ' . $v_par : '') . + '
    +
    ${width}
    ' . $v_width . 'px
    +
    ${height}
    ' . $v_height . 'px
    +
    ${length}
    ' . $g_playtime_str . '
    +
    ${bitrate}
    ' . $g_bitrate . 'kbps
    + '; + $content_dl_term = true; + break; + + default: + // fall back to 'no preview available' (if getID3 didn't deliver instead...) + break; + } + break; + } + + if (!$content_dl_term) + { + $content .= ''; + } + + if (!empty($fi['error'])) + { + $postdiag_err_HTML .= '

    ' . $this->mkSafeUTF8(implode(', ', $fi['error'])) . '

    '; + } + + $emsgX = null; + if (empty($thumb250)) + { + if (!$thumbnails_done_or_deferred) + { + // check if we have stored a thumbnail for this file anyhow: + $thumb250 = $this->getThumb($meta, $file, $this->options['thumbBigSize'], $this->options['thumbBigSize'], true); + if (empty($thumb250)) + { + if (!empty($fi) && $check_for_embedded_img) + { + /* + * No thumbnail available yet, so find me one! + * + * When we find a thumbnail during the 'cleanup' scan, we don't know up front if it's suitable to be used directly, + * so we treat it as an alternative 'original' file and generate a 250px/48px thumbnail set from it. + * + * When the embedded thumbnail is small enough, the thumbnail creation process will be simply a copy action, so relatively + * low cost. + */ + $embed = $this->extract_ID3info_embedded_image($fi); + //@file_put_contents(dirname(__FILE__) . '/extract_embedded_img.log', print_r(array('html' => $preview_HTML, 'json' => $json, 'thumb250_e' => $thumb250_e, 'thumb250' => $thumb250, 'embed' => $embed, 'fileinfo' => $fi), true)); + if (is_object($embed)) + { + $thumbX = $meta->getThumbURL('embed'); + $tfi = pathinfo($thumbX); + $tfi['extension'] = image_type_to_extension($embed->metadata[2]); + $thumbX = $tfi['dirname'] . '/' . $tfi['filename'] . '.' . $tfi['extension']; + $thumbX = $this->normalize($thumbX); + $thumbX_f = $this->url_path2file_path($thumbX); + // as we've spent some effort to dig out the embedded thumbnail, and 'knowing' (assuming) that generally + // embedded thumbnails are not too large, we don't concern ourselves with delaying the thumbnail generation (the + // source file mapping is not bidirectional, either!) and go straight ahead and produce the 250px thumbnail at least. + $thumb250 = false; + $thumb250_e = false; + $thumb48 = false; + $thumb48_e = false; + $meta->mkCacheDir(); + if (false === file_put_contents($thumbX_f, $embed->imagedata)) + { + @unlink($thumbX_f); + $emsgX = 'Cannot save embedded image data to cache.'; + $icon48 = $this->getIcon('is.default-error', false); + $icon = $this->getIcon('is.default-error', true); + } + else + { + try + { + $thumb250 = $this->getThumb($meta, $thumbX_f, $this->options['thumbBigSize'], $this->options['thumbBigSize'], false); + if (!empty($thumb250)) + { + $thumb250_e = FileManagerUtility::rawurlencode_path($thumb250); + } + $thumb48 = $this->getThumb($meta, (!empty($thumb250) ? $this->url_path2file_path($thumb250) : $thumbX_f), $this->options['thumbSmallSize'], $this->options['thumbSmallSize'], false); + if (!empty($thumb48)) + { + $thumb48_e = FileManagerUtility::rawurlencode_path($thumb48); + } + } + catch (Exception $e) + { + $emsgX = $e->getMessage(); + $icon48 = $this->getIconForError($emsgX, $legal_url, false); + $icon = $this->getIconForError($emsgX, $legal_url, true); + } + } + } + } + } + else + { + // !empty($thumb250) + $thumb250_e = FileManagerUtility::rawurlencode_path($thumb250); + try + { + $thumb48 = $this->getThumb($meta, $this->url_path2file_path($thumb250), $this->options['thumbSmallSize'], $this->options['thumbSmallSize'], false); + assert(!empty($thumb48)); + $thumb48_e = FileManagerUtility::rawurlencode_path($thumb48); + } + catch (Exception $e) + { + $emsgX = $e->getMessage(); + $icon48 = $this->getIconForError($emsgX, $legal_url, false); + $icon = $this->getIconForError($emsgX, $legal_url, true); + $thumb48 = false; + $thumb48_e = false; + } + } + } + } + else // if (!empty($thumb250)) + { + if (empty($thumb250_e)) + { + $thumb250_e = FileManagerUtility::rawurlencode_path($thumb250); + } + if (empty($thumb48)) + { + try + { + $thumb48 = $this->getThumb($meta, $this->url_path2file_path($thumb250), $this->options['thumbSmallSize'], $this->options['thumbSmallSize'], false); + assert(!empty($thumb48)); + $thumb48_e = FileManagerUtility::rawurlencode_path($thumb48); + } + catch (Exception $e) + { + $emsgX = $e->getMessage(); + $icon48 = $this->getIconForError($emsgX, $legal_url, false); + $icon = $this->getIconForError($emsgX, $legal_url, true); + $thumb48 = false; + $thumb48_e = false; + } + } + if (empty($thumb48_e)) + { + $thumb48_e = FileManagerUtility::rawurlencode_path($thumb48); + } + } + + // also provide X/Y size info with each direct-access thumbnail file: + if (!empty($thumb250)) + { + $json['thumb250'] = $thumb250_e; + $meta->store('thumb250_direct', $thumb250); + + $tnsize = $meta->fetch('thumb250_info'); + if (empty($tnsize)) + { + $tnsize = getimagesize($this->url_path2file_path($thumb250)); + $meta->store('thumb250_info', $tnsize); + } + if (is_array($tnsize)) + { + $json['thumb250_width'] = $tnsize[0]; + $json['thumb250_height'] = $tnsize[1]; + + if (empty($preview_HTML)) + { + $preview_HTML = ' + ' . (!empty($emsgX) ? $this->mkSafe4HTMLattr($emsgX) : 'preview') . ' + '; + } + } + } + if (!empty($thumb48)) + { + $json['thumb48'] = $thumb48_e; + $meta->store('thumb48_direct', $thumb48); + + $tnsize = $meta->fetch('thumb48_info'); + if (empty($tnsize)) + { + $tnsize = getimagesize($this->url_path2file_path($thumb48)); + $meta->store('thumb48_info', $tnsize); + } + if (is_array($tnsize)) + { + $json['thumb48_width'] = $tnsize[0]; + $json['thumb48_height'] = $tnsize[1]; + } + } + if ($thumbnails_done_or_deferred && (empty($thumbs250) || empty($thumbs48))) + { + $json['thumbs_deferred'] = true; + } + else + { + $json['thumbs_deferred'] = false; + } + + if (!empty($icon48)) + { + $icon48_e = FileManagerUtility::rawurlencode_path($icon48); + $json['icon48'] = $icon48_e; + } + if (!empty($icon)) + { + $icon_e = FileManagerUtility::rawurlencode_path($icon); + $json['icon'] = $icon_e; + } + + $fi4dump = null; + if (!empty($fi)) + { + try + { + $fi4dump = $meta->fetch('file_info_dump'); + if (empty($fi4dump)) + { + $fi4dump = array_merge(array(), $fi); // clone $fi + $this->clean_ID3info_results($fi4dump); + $meta->store('file_info_dump', $fi4dump); + } + + $dump = FileManagerUtility::table_var_dump($fi4dump, false); + + $postdiag_dump_HTML .= "\n" . $dump . "\n"; + //@file_put_contents(dirname(__FILE__) . '/getid3.log', print_r(array('html' => $preview_HTML, 'json' => $json, 'thumb250_e' => $thumb250_e, 'thumb250' => $thumb250, 'embed' => $embed, 'fileinfo' => $fi), true)); + } + catch(Exception $e) + { + $postdiag_err_HTML .= '

    ' . $e->getMessage() . '

    '; + } + } + + if ($preview_HTML === null) + { + $preview_HTML = '${nopreview}'; + } + + if (!empty($preview_HTML)) + { + //$content .= '

    ${preview}

    '; + $content .= '
    ' . $preview_HTML . '
    '; + } + if (!empty($postdiag_err_HTML)) + { + $content .= '
    ' . $postdiag_err_HTML . '
    '; + } + if (!empty($postdiag_dump_HTML) && $metaHTML_mode) + { + $content .= '
    ' . $postdiag_dump_HTML . '
    '; + } + + $json['content'] = self::compressHTML($content); + $json['metadata'] = ($metaJSON_mode ? $fi4dump : null); + + return array_merge((is_array($json_in) ? $json_in : array()), $json); + } + + /** + * Traverse the getID3 info[] array tree and fetch the item pointed at by the variable number of indices specified + * as additional parameters to this function. + * + * Return the default value when the indicated element does not exist in the info[] set; otherwise return the located item. + * + * The purpose of this method is to act as a safe go-in-between for the fileManager to collect arbitrary getID3 data and + * not get a PHP error when some item in there does not exist. + */ + public /* static */ function getID3infoItem($getid3_info_obj, $default_value /* , ... */ ) + { + $rv = false; + $argc = func_num_args(); + + for ($i = 2; $i < $argc; $i++) + { + $index = func_get_arg($i); + if (!is_array($getid3_info_obj)) + { + // the getID3 library seems to return an array for id3 tags, the fall back does not, we + // will just short circuit this, it'll be fine. + if($i == $argc-1 && $index === 0) return $getid3_info_obj; + + return $default_value; + } + + if (array_key_exists($index, $getid3_info_obj)) + { + $getid3_info_obj = $getid3_info_obj[$index]; + } + else + { + return $default_value; + } + } + // WARNING: convert '$' to the HTML entity to prevent the JS/client side from 'seeing' the $ and start ${xyz} template variable replacement erroneously + return str_replace('$', '$', $getid3_info_obj); + } + + /** Return an array of information about a file. + * + * IFF the getID3 library (GPL) is available, it will be used. + * ELSE IF FileInfo extention is available, we will try that for getting mimetype + * ELSE do it manually + * + * == All Files == + * mime_type + * + * == Images == + * video:[resolution_x, resolution_y] + * jpg:exif:IFD0:[Software, DateTime] + * + * == Zip Files == + * zip:files (an array (name => size|files)) + * + * == Flash Files == + * swf:header:[frame_width, frame_height, frame_count, length] + * + * == Audio Files == + * tags:id3v1:[title,artist,album] + * playtime_string + * bitrate + * + * == Video Files == + * audio:[dataformat,sample_rate,bitrate,bitrate_mode,channels,codec,streams] + * video:[dataformat,bitrate,bitrate_mode,frame_rate,resolution_x,resolution_y,pixel_aspect_ratio,codec] + * bitrate + * playtime_string + */ + + public function analyze_file($file, $legal_url) + { + if($this->options['useGetID3IfAvailable'] && (class_exists('getID3') || file_exists(strtr(dirname(__FILE__), '\\', '/') . '/Assets/getid3/getid3.php'))) + { + // Note delaying requiring getiD3 until now, because it is big and we don't need it if the data is cached already. + if(!class_exists('GetId3')) + { + require(strtr(dirname(__FILE__), '\\', '/') . '/Assets/getid3/getid3.php'); + } + + $id3 = new getID3(); + $id3->setOption(array('encoding' => 'UTF-8')); + $id3->analyze($file); + $rv = $id3->info; + if (empty($rv['mime_type'])) + { + // guarantee to produce a mime type, at least! + $rv['mime_type'] = $this->getMimeFromExt($legal_url); // guestimate mimetype when content sniffing didn't work + } + + return $rv; + } + else + { + $rv = array(); + + if(function_exists('finfo_open') && defined('FILEINFO_MIME_TYPE')) + { + if(!isset($this->_finfo)) $this->_finfo = finfo_open(FILEINFO_MIME_TYPE); + $rv['mime_type'] = finfo_file($this->_finfo, $file); + } + + if(!@$rv['mime_type']) + { + $rv['mime_type'] = $this->getMimeFromExt($legal_url); // guestimate mimetype when content sniffing didn't work + } + + switch(preg_replace('/\/.*$/', '', $rv['mime_type'])) + { + case 'image': + { + $size = getimagesize($file); + if($size !== FALSE) + { + $rv['video']['resolution_x'] = $size[0]; + $rv['video']['resolution_y'] = $size[1]; + } + + if(function_exists('exif_imagetype') && exif_imagetype($file) !== FALSE) + { + $rv['exif'] = @exif_read_data($file, 0, true); + $rv['jpg']['exif'] = $rv['exif']; // Not strictly true! + } + } + break; + + case 'audio': + { + switch($rv['mime_type']) + { + case 'audio/mpeg': + { + require_once(strtr(dirname(__FILE__), '\\', '/') . '/ID3.class.php'); + $ID3 = new id3Parser(); + $tags = $ID3->read($file); + switch($tags['id3']) + { + case 1: $rv['tags']['id3v1'] = $tags; + default: $rv['tags']['id3v2'] = $tags; + } + + } + break; + } + } + break; + } + + return $rv; + } + } + + + + /** + * Extract an embedded image from the getID3 info data. + * + * Return FALSE when no embedded image was found, otherwise return an array of the metadata and the binary image data itself. + */ + protected function extract_ID3info_embedded_image(&$arr) + { + if (is_array($arr)) + { + foreach ($arr as $key => &$value) + { + if ($key === 'data' && isset($arr['image_mime'])) + { + // first make sure this is a valid image + $imageinfo = array(); + $imagechunkcheck = getid3_lib::GetDataImageSize($value, $imageinfo); + if (is_array($imagechunkcheck) && isset($imagechunkcheck[2]) && in_array($imagechunkcheck[2], array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG))) + { + return new EmbeddedImageContainer($imagechunkcheck, $value); + } + } + else if (is_array($value)) + { + $rv = $this->extract_ID3info_embedded_image($value); + if ($rv !== false) + return $rv; + } + } + } + return false; + } + + protected function fold_quicktime_subatoms(&$arr, &$inject, $key_prefix) + { + $satms = false; + if (!empty($arr['subatoms']) && is_array($arr['subatoms']) && !empty($arr['hierarchy']) && !empty($arr['name']) && $arr['hierarchy'] == $arr['name']) + { + // fold these up all the way to the root: + $key_prefix .= '.' . $arr['hierarchy']; + + $satms = $arr['subatoms']; + unset($arr['subatoms']); + $inject[$key_prefix] = $satms; + } + + foreach ($arr as $key => &$value) + { + if (is_array($value)) + { + $this->fold_quicktime_subatoms($value, $inject, $key_prefix); + } + } + + if ($satms !== false) + { + $this->fold_quicktime_subatoms($inject[$key_prefix], $inject, $key_prefix); + } + } + + // assumes an input array with the keys in CamelCase semi-Hungarian Notation. Convert those keys to something humanly grokkable after it is processed by table_var_dump(). + protected function clean_AVI_Hungarian(&$arr) + { + $dst = array(); + foreach($arr as $key => &$value) + { + $nk = explode('_', preg_replace('/([A-Z])/', '_\\1', $key)); + switch ($nk[0]) + { + case 'dw': + case 'n': + case 'w': + case 'bi': + unset($nk[0]); + break; + } + $dst[strtolower(implode('_', $nk))] = $value; + } + $arr = $dst; + } + + // another round of scanning to rewrite the keys to human legibility: as this changes the keys, we'll need to rewrite all entries to keep order intact + protected function clean_ID3info_keys(&$arr) + { + $dst = array(); + foreach($arr as $key => &$value) + { + $key = strtr($key, "_\x00", ' '); + + // custom transformations: (hopefully switch/case/case/... is faster than str_replace/strtr here) + switch ((string)$key) + { + default: + //$key = $this->mkSafeUTF8($key); + if (preg_match('/[^ -~]/', $key)) + { + // non-ASCII values in the key: hexdump those characters! + $klen = strlen($key); + $nk = ''; + for ($i = 0; $i < $klen; ++$i) + { + $c = ord($key[$i]); + + if ($c >= 32 && $c <= 127) + { + $nk .= chr($c); + } + else + { + $nk .= sprintf('$%02x', $c); + } + } + $key = $nk; + } + break; + + case 'avdataend': + $key = 'AV data end'; + break; + + case 'avdataoffset': + $key = 'AV data offset'; + break; + + case 'channelmode': + $key = 'channel mode'; + break; + + case 'dataformat': + $key = 'data format'; + break; + + case 'fileformat': + $key = 'file format'; + break; + + case 'modeextension': + $key = 'mode extension'; + break; + } + + $dst[$key] = $value; + if (is_array($value)) + { + $this->clean_ID3info_keys($dst[$key]); + } + } + $arr = $dst; + } + + protected function clean_ID3info_results_r(&$arr, $flags) + { + if (is_array($arr)) + { + // heuristic #1: fold all the quickatoms subatoms using their hierarchy and name fields; this is a tree rewrite + if (array_key_exists('quicktime', $arr) && is_array($arr['quicktime'])) + { + $inject = array(); + $this->fold_quicktime_subatoms($arr['quicktime'], $inject, 'quicktime'); + + // can't use array_splice on associative arrays, so we rewrite $arr now: + $newarr = array(); + foreach ($arr as $key => &$value) + { + $newarr[$key] = $value; + if ($key === 'quicktime') + { + foreach ($inject as $ik => &$iv) + { + $newarr[$ik] = $iv; + } + } + } + $arr = $newarr; + unset($inject); + unset($newarr); + } + + $activity = true; + while ($activity) + { + $activity = false; // assume there's nothing to do anymore. Prove us wrong now... + + // heuristic #2: when the number of items in the array which are themselves arrays is 80%, contract the set + $todo = array(); + foreach ($arr as $key => &$value) + { + if (is_array($value)) + { + $acnt = 0; + foreach ($value as $sk => &$sv) + { + if (is_array($sv)) + { + $acnt++; + } + } + + // the floor() here helps to fold single-element arrays alongside! :-) + if (floor(0.5 * count($value)) <= $acnt) + { + $todo[] = $key; + } + } + } + if (count($todo) > 0) + { + $inject = array(); + foreach ($arr as $key => &$value) + { + if (is_array($value) && in_array($key, $todo)) + { + unset($todo[$key]); + + foreach ($value as $sk => &$sv) + { + $nk = $key . '.' . $sk; + + // pull up single entry subsubarrays at the same time! + if (is_array($sv) && count($sv) == 1) + { + foreach ($sv as $sk2 => &$sv2) + { + $nk .= '.' . $sk2; + $inject[$nk] = $sv2; + } + } + else + { + $inject[$nk] = $sv; + } + } + } + else + { + $inject[$key] = $value; + } + } + $arr = $inject; + $activity = true; + } + } + + foreach ($arr as $key => &$value) + { + if ($key === 'data' && isset($arr['image_mime'])) + { + // when this is a valid image, it's already available as a thumbnail, most probably + $imageinfo = array(); + $imagechunkcheck = getid3_lib::GetDataImageSize($value, $imageinfo); + if (is_array($imagechunkcheck) && isset($imagechunkcheck[2]) && in_array($imagechunkcheck[2], array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG))) + { + if ($flags & MTFM_CLEAN_ID3_STRIP_EMBEDDED_IMAGES) + { + $value = new BinaryDataContainer('(embedded image ' . image_type_to_extension($imagechunkcheck[2]) . ' data...)'); + } + else + { + $value = new EmbeddedImageContainer($imagechunkcheck, $value); + } + } + else + { + if ($flags & MTFM_CLEAN_ID3_STRIP_EMBEDDED_IMAGES) + { + $value = new BinaryDataContainer('(unidentified image data ... ' . (is_string($value) ? 'length = ' . strlen($value) : '') . ' -- ' . print_r($imagechunkcheck) . ')'); + } + else + { + $this->clean_ID3info_results_r($value, $flags); + } + } + } + else if (isset($arr[$key . '_guid'])) + { + // convert guid raw binary data to hex: + $temp = unpack('H*', $value); + $value = new BinaryDataContainer($temp[1]); + } + else if ( $key === 'non_intra_quant' // MPEG quantization matrix + || $key === 'error_correct_type' + ) + { + // convert raw binary data to hex in 32 bit chunks: + $temp = unpack('H*', $value); + $temp = str_split($temp[1], 8); + $value = new BinaryDataContainer(implode(' ', $temp)); + } + else if ($key === 'data' && is_string($value) && isset($arr['frame_name']) && isset($arr['encoding']) && isset($arr['datalength'])) // MP3 tag chunk + { + $str = $this->mkSafeUTF8(trim(strtr(getid3_lib::iconv_fallback($arr['encoding'], 'UTF-8', $value), "\x00", ' '))); + $temp = unpack('H*', $value); + $temp = str_split($temp[1], 8); + $value = new BinaryDataContainer(implode(' ', $temp) . (!empty($str) ? ' (' . $str . ')' : '')); + } + else if ( ($key === 'data' && is_string($value) && isset($arr['offset']) && isset($arr['size'])) // AVI offset/size/data items: data = binary + || ($key === 'type_specific_data' && is_string($value) /* && isset($arr['type_specific_len']) */ ) // munch WMV/RM 'type specific data': binary ('type specific len' will occur alongside, but not in WMV) + ) + { + // a bit like UNIX strings tool: strip out anything which isn't at least possibly legible + $str = ' ' . preg_replace('/[^ !#-~]/', ' ', strtr($value, "\x00", ' ')) . ' '; // convert non-ASCII and double quote " to space + do + { + $repl_count = 0; + $str = preg_replace(array('/ [^ ] /', + '/ [^A-Za-z0-9\\(.]/', + '/ [A-Za-z0-9][^A-Za-z0-9\\(. ] /' + ), ' ', $str, -1, $repl_count); + } while ($repl_count > 0); + $str = trim($str); + + if (strlen($value) <= 256) + { + $temp = unpack('H*', $value); + $temp = str_split($temp[1], 8); + $temp = implode(' ', $temp); + $value = new BinaryDataContainer($temp . (!empty($str) > 0 ? ' (' . $str . ')' : '')); + } + else + { + $value = new BinaryDataContainer('binary data... (length = ' . strlen($value) . ' bytes)'); + } + } + else if (is_scalar($value) && preg_match('/^(dw[A-Z]|n[A-Z]|w[A-Z]|bi[A-Z])[a-zA-Z]+$/', $key)) + { + // AVI sections which use Hungarian notation, at least partially + $this->clean_AVI_Hungarian($arr); + // and rescan the transformed key set... + $this->clean_ID3info_results($arr); + break; // exit this loop + } + else if (is_array($value)) + { + // heuristic #3: when the value is an array of integers, implode them to a comma-separated list (string) instead: + $is_all_ints = true; + for ($sk = count($value) - 1; $sk >= 0; --$sk) + { + if (!array_key_exists($sk, $value) || !is_int($value[$sk])) + { + $is_all_ints = false; + break; + } + } + if ($is_all_ints) + { + $s = implode(', ', $value); + $value = $s; + } + else + { + $this->clean_ID3info_results_r($value, $flags); + } + } + else + { + $this->clean_ID3info_results_r($value, $flags); + } + } + } + else if (is_string($arr)) + { + // is this a cleaned up item? Yes, then there's a full-ASCII string here, sans newlines, etc. + $len = strlen($arr); + $value = rtrim($arr, "\x00"); + $value = strtr($value, "\x00", ' '); // because preg_match() doesn't 'see' NUL bytes... + if (preg_match("/[^ -~\n\r\t]/", $value)) + { + if ($len > 0 && $len < 256) + { + // check if we can turn it into something UTF8-LEGAL; when not, we hexdump! + $im = str_replace('?', '&QMaRK;', $value); + $dst = $this->mkSafeUTF8($im); + if (strpos($dst, '?') === false) + { + // it's a UTF-8 legal string now! + $arr = str_replace('&QMaRK;', '?', $dst); + } + else + { + // convert raw binary data to hex in 32 bit chunks: + $temp = unpack('H*', $arr); + $temp = str_split($temp[1], 8); + $arr = new BinaryDataContainer(implode(' ', $temp)); + } + } + else + { + $arr = new BinaryDataContainer('(unidentified binary data ... length = ' . strlen($arr) . ')'); + } + } + else + { + $arr = $value; // don't store as a 'processed' item (shortcut) + } + } + else if (is_bool($arr) || + is_int($arr) || + is_float($arr) || + is_null($arr)) + { + } + else if (is_object($arr) && !isset($arr->id3_procsupport_obj)) + { + $arr = new BinaryDataContainer('(object) ' . $this->mkSafeUTF8(print_r($arr, true))); + } + else if (is_resource($arr)) + { + $arr = new BinaryDataContainer('(resource) ' . $this->mkSafeUTF8(print_r($arr, true))); + } + else + { + $arr = new BinaryDataContainer('(unidentified type: ' . gettype($arr) . ') ' . $this->mkSafeUTF8(print_r($arr, true))); + } + } + + protected function clean_ID3info_results(&$arr, $flags = 0) + { + unset($arr['GETID3_VERSION']); + unset($arr['filepath']); + unset($arr['filename']); + unset($arr['filenamepath']); + unset($arr['cache_hash']); + unset($arr['cache_file']); + + $this->clean_ID3info_results_r($arr, $flags); + + // heuristic #4: convert keys to something legible: + if (is_array($arr)) + { + $this->clean_ID3info_keys($arr); + } + } + + + + + + + + + /** + * Delete a file or directory, inclusing subdirectories and files. + * + * Return TRUE on success, FALSE when an error occurred. + * + * Note that the routine will try to persevere and keep deleting other subdirectories + * and files, even when an error occurred for one or more of the subitems: this is + * a best effort policy. + */ + protected function unlink($legal_url, $mime_filters) + { + $rv = true; + + // must transform here so alias/etc. expansions inside legal_url_path2file_path() get a chance: + $file = $this->legal_url_path2file_path($legal_url); + + if (is_dir($file)) + { + $dir = self::enforceTrailingSlash($file); + $url = self::enforceTrailingSlash($legal_url); + $coll = $this->scandir($dir, '*', false, 0, ~GLOB_NOHIDDEN); + if ($coll !== false) + { + foreach ($coll['dirs'] as $f) + { + if ($f === '.' || $f === '..') + continue; + + $rv &= $this->unlink($url . $f, $mime_filters); + } + foreach ($coll['files'] as $f) + { + $rv &= $this->unlink($url . $f, $mime_filters); + } + } + else + { + $rv = false; + } + + $rv &= @rmdir($file); + } + else if (file_exists($file)) + { + if (is_file($file)) + { + $mime = $this->getMimeFromExt($file); // take the fast track to mime type sniffing; we'll live with the (rather low) risk of being inacurate due to accidental/intentional misnaming of the files + if (!$this->IsAllowedMimeType($mime, $mime_filters)) + return false; + } + + $meta = &$this->getid3_cache->pick($legal_url, $this, false); + assert($meta != null); + + $rv &= @unlink($file); + $rv &= $meta->delete(true); + + unset($meta); + } + return $rv; + } + + /** + * glob() wrapper: accepts the same options as Tooling.php::safe_glob() + * + * However, this method will also ensure the '..' directory entry is only returned, + * even while asked for, when the parent directory can be legally traversed by the FileManager. + * + * Return a dual array (possibly empty) of directories and files, or FALSE on error. + * + * IMPORTANT: this function GUARANTEES that, when present at all, the double-dot '..' + * entry is the very last entry in the array. + * This guarantee is important as onView() et al depend on it. + */ + public function scandir($dir, $filemask, $see_thumbnail_dir, $glob_flags_or, $glob_flags_and) + { + // list files, except the thumbnail folder itself or any file in it: + $dir = self::enforceTrailingSlash($dir); + + $just_below_thumbnail_dir = false; + if (!$see_thumbnail_dir) + { + $tnpath = $this->thumbnailCacheDir; + if (FileManagerUtility::startswith($dir, $tnpath)) + return false; + + $tnparent = $this->thumbnailCacheParentDir; + $just_below_thumbnail_dir = ($dir == $tnparent); + + $tndir = basename(substr($this->options['thumbnailPath'], 0, -1)); + } + + $at_basedir = ($this->managedBaseDir == $dir); + + $flags = GLOB_NODOTS | GLOB_NOHIDDEN | GLOB_NOSORT; + $flags &= $glob_flags_and; + $flags |= $glob_flags_or; + $coll = safe_glob($dir . $filemask, $flags); + + if ($coll !== false) + { + if ($just_below_thumbnail_dir) + { + foreach($coll['dirs'] as $k => $dir) + { + if ($dir === $tndir) + { + unset($coll['dirs'][$k]); + break; + } + } + } + + if (!$at_basedir) + { + $coll['dirs'][] = '..'; + } + } + + return $coll; + } + + + + /** + * Check the $extension argument and replace it with a suitable 'safe' extension. + */ + public function getSafeExtension($extension, $safe_extension = 'txt', $mandatory_extension = 'txt') + { + if (!is_string($extension) || $extension === '') // can't use 'empty($extension)' as "0" is a valid extension itself. + { + //enforce a mandatory extension, even when there isn't one (due to filtering or original input producing none) + return (!empty($mandatory_extension) ? $mandatory_extension : (!empty($safe_extension) ? $safe_extension : $extension)); + } + $extension = strtolower($extension); + switch ($extension) + { + case 'exe': + case 'dll': + case 'com': + case 'sys': + case 'bat': + case 'pl': + case 'sh': + case 'php': + case 'php3': + case 'php4': + case 'php5': + case 'php6': + case 'php7': + case 'php8': + case 'phps': + return (!empty($safe_extension) ? $safe_extension : $extension); + + default: + return $extension; + } + } + + /** + * Only allow a 'dotted', i.e. UNIX hidden filename when options['safe'] == FALSE + */ + public function IsHiddenNameAllowed($file) + { + if ($this->options['safe'] && !empty($file)) + { + if ($file !== '.' && $file !== '..' && $file[0] === '.') + { + return false; + } + } + return true; + } + + public function IsHiddenPathAllowed($path) + { + if ($this->options['safe'] && !empty($path)) + { + $path = strtr($path, '\\', '/'); + $segs = explode('/', $path); + foreach($segs as $file) + { + if (!$this->IsHiddenNameAllowed($file)) + { + return false; + } + } + } + return true; + } + + + /** + * Make a cleaned-up, unique filename + * + * Return the file (dir + name + ext), or a unique, yet non-existing, variant thereof, where the filename + * is appended with a '_' and a number, e.g. '_1', when the file itself already exists in the given + * directory. The directory part of the returned value equals $dir. + * + * Return NULL when $file is empty or when the specified directory does not reside within the + * directory tree rooted by options['directory'] + * + * Note that the given filename will be converted to a legal filename, containing a filesystem-legal + * subset of ASCII characters only, before being used and returned by this function. + * + * @param mixed $fileinfo either a string containing a filename+ext or an array as produced by pathinfo(). + * @daram string $dir path pointing at where the given file may exist. + * + * @return a filepath consisting of $dir and the cleaned up and possibly sequenced filename and file extension + * as provided by $fileinfo, or NULL on error. + */ + public function getUniqueName($fileinfo, $dir) + { + $dir = self::enforceTrailingSlash($dir); + + if (is_string($fileinfo)) + { + $fileinfo = pathinfo($fileinfo); + } + + if (!is_array($fileinfo)) + { + return null; + } + $dotfile = (strlen($fileinfo['filename']) == 0); + + /* + * since 'pagetitle()' is used to produce a unique, non-existing filename, we can forego the dirscan + * and simply check whether the constructed filename/path exists or not and bump the suffix number + * by 1 until it does not, thus quickly producing a unique filename. + * + * This is faster than using a dirscan to collect a set of existing filenames and feeding them as + * an option array to pagetitle(), particularly for large directories. + */ + $filename = FileManagerUtility::pagetitle($fileinfo['filename'], null, '-_.,[]()~!@+' /* . '#&' */, '-_,~@+#&'); + if (!$filename && !$dotfile) + return null; + + // also clean up the extension: only allow alphanumerics in there! + $ext = FileManagerUtility::pagetitle(isset($fileinfo['extension']) ? $fileinfo['extension'] : null); + $ext = (strlen($ext) > 0 ? '.' . $ext : null); + // make sure the generated filename is SAFE: + $fname = $filename . $ext; + $file = $dir . $fname; + if (file_exists($file)) + { + if ($dotfile) + { + $filename = $fname; + $ext = ''; + } + + /* + * make a unique name. Do this by postfixing the filename with '_X' where X is a sequential number. + * + * Note that when the input name is already such a 'sequenced' name, the sequence number is + * extracted from it and sequencing continues from there, hence input 'file_5' would, if it already + * existed, thus be bumped up to become 'file_6' and so on, until a filename is found which + * does not yet exist in the designated directory. + */ + $i = 1; + if (preg_match('/^(.*)_([1-9][0-9]*)$/', $filename, $matches)) + { + $i = intval($matches[2]); + if ('P'.$i !== 'P'.$matches[2] || $i > 100000) + { + // very large number: not a sequence number! + $i = 1; + } + else + { + $filename = $matches[1]; + } + } + do + { + $fname = $filename . ($i ? '_' . $i : '') . $ext; + $file = $dir . $fname; + $i++; + } while (file_exists($file)); + } + + // $fname is now guaranteed to NOT exist in the given directory + return $fname; + } + + + + /** + * Predict the actual width/height dimensions of the thumbnail, given the original image's dimensions and the given size limits. + * + * Note: exists as a method in this class, so you can override it when you override getThumb(). + */ + public function predictThumbDimensions($orig_x, $orig_y, $max_x = null, $max_y = null, $ratio = true, $resizeWhenSmaller = false) + { + return Image::calculate_resize_dimensions($orig_x, $orig_y, $max_x, $max_y, $ratio, $resizeWhenSmaller); + } + + + /** + * Returns the URI path to the apropriate icon image for the given file / directory. + * + * NOTES: + * + * 1) any $path with an 'extension' of '.directory' is assumed to be a directory. + * + * 2) This method specifically does NOT check whether the given path exists or not: it just looks at + * the filename extension passed to it, that's all. + * + * Note #2 is important as this enables this function to also serve as icon fetcher for ZIP content viewer, etc.: + * after all, those files do not exist physically on disk themselves! + */ + public function getIcon($file, $smallIcon) + { + $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); + + if (array_key_exists($ext, $this->icon_cache[!$smallIcon])) + { + return $this->icon_cache[!$smallIcon][$ext]; + } + + $largeDir = (!$smallIcon ? 'Large/' : ''); + $url_path = $this->options['assetBasePath'] . 'Images/Icons/' . $largeDir . $ext . '.png'; + $path = (is_file($this->url_path2file_path($url_path))) + ? $url_path + : $this->options['assetBasePath'] . 'Images/Icons/' . $largeDir . 'default.png'; + + $this->icon_cache[!$smallIcon][$ext] = $path; + + return $path; + } + + /** + * Return the path to the thumbnail of the specified image, the thumbnail having its + * width and height limited to $width pixels. + * + * When the thumbnail image does not exist yet, it will created on the fly. + * + * @param object $meta + * the cache record instance related to the original image. Is used + * to access the cache and generate a suitable thumbnail filename. + * + * @param string $path filesystem path to the original image. Is used to derive + * the thumbnail content from. + * + * @param integer $width the maximum number of pixels for width of the + * thumbnail. + * + * @param integer $height the maximum number of pixels for height of the + * thumbnail. + */ + public function getThumb($meta, $path, $width, $height, $onlyIfExistsInCache = false) + { + $thumbPath = $meta->getThumbPath($width . 'x' . $height); + if (!is_file($thumbPath)) + { + if ($onlyIfExistsInCache) + return false; + + // make sure the cache subdirectory exists where we are going to store the thumbnail: + $meta->mkCacheDir(); + + $img = new Image($path); + // generally save as lossy / lower-Q jpeg to reduce filesize, unless orig is PNG/GIF, higher quality for smaller thumbnails: + $img->resize($width, $height)->save($thumbPath, min(98, max(MTFM_THUMBNAIL_JPEG_QUALITY, MTFM_THUMBNAIL_JPEG_QUALITY + 0.15 * (250 - min($width, $height)))), true); + + if (DEVELOPMENT) + { + $imginfo = $img->getMetaInfo(); + $meta->store('img_info', $imginfo); + + $meta->store('memory used', number_format(memory_get_peak_usage() / 1E6, 1) . ' MB'); + $meta->store('memory estimated', number_format(@$imginfo['fileinfo']['usage_guestimate'] / 1E6, 1) . ' MB'); + $meta->store('memory suggested', number_format(@$imginfo['fileinfo']['usage_min_advised'] / 1E6, 1) . ' MB'); + } + + unset($img); + } + return $meta->getThumbURL($width . 'x' . $height); + } + + /** + * Assistant function which produces the best possible icon image path for the given error/exception message. + */ + public function getIconForError($emsg, $original_filename, $small_icon) + { + if (empty($emsg)) + { + // just go and pick the extension-related icon for this one; nothing is wrong today, it seems. + $thumb_path = (!empty($original_filename) ? $original_filename : 'is.default-missing'); + } + else + { + $thumb_path = 'is.default-error'; + + if (strpos($emsg, 'img_will_not_fit') !== false) + { + $thumb_path = 'is.oversized_img'; + } + else if (strpos($emsg, 'nofile') !== false) + { + $thumb_path = 'is.default-missing'; + } + else if (strpos($emsg, 'unsupported_imgfmt') !== false) + { + // just go and pick the extension-related icon for this one; nothing seriously wrong here. + $thumb_path = (!empty($original_filename) ? $original_filename : $thumb_path); + } + else if (strpos($emsg, 'image') !== false) + { + $thumb_path = 'badly.broken_img'; + } + } + + $img_filepath = $this->getIcon($thumb_path, $small_icon); + + return $img_filepath; + } + + + + + + + + + + /** + * Convert the given content to something that is safe to copy straight to HTML + */ + public function mkSafe4Display($str) + { + // only allow ASCII to pass: + $str = preg_replace("/[^ -~\t\r\n]/", '?', $str); + $str = str_replace('%3C', '?', $str); // in case someone want's to get really fancy: nuke the URLencoded '<' + + // anything that's more complex than a simple is nuked: + $str = preg_replace('/<([\/]?script\s*[\/]?)>/', '?', $str); // but first make sure ' + + + + + + +
    +
    +
    + + + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/jsGET.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/jsGET.js new file mode 100644 index 0000000000..52087fd79f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/jsGET.js @@ -0,0 +1,294 @@ +/** +* +* jsGET +* +* jsGET is a http GET-Variables clone for javascript, using the hash part of the URL (index.html#...). +* You can set and get variables, and run a listener to hash changes, e.g. when the the history back button gets pressed. +* This allows you to create a usable history navigation in your ajax application. It should work with all A-grade browsers. +* +* @author Fabian Vogelsteller +* @copyright Fabian Vogelsteller +* @license http://www.gnu.org/licenses GNU General Public License version 3 +* +* @version 0.2 +* +* ### Properties +* - vars: (object) the hash variables object loaded by get(), set(), remove(), or clear() or load() plus various indicators and trackers: +* - vars.current: (object) the current variables. +* - vars.old: (object) the old variables, before they where changed with set(), remove(), clear() or the browser history back button. *WARNING*: this is one is only valid while the listener is invoked. +* - vars.changed: (object) the variables which have changed since the last call of get(), set(), remove(), clear(), load() or the browser history back button. *WARNING*: this is one is updated by setChangedVars() depending on 'vars.old' and usually is only valid while the listener is invoked. +* - vars.change_count: (integer) a number of variables changed/added/removed since the last time the listener was invoked. *WARNING*: this is one is updated by setChangedVars() depending on 'vars.old' and usually is only valid while the listener is invoked. +* - vars.last_hash_loaded: (string, internal use only) the raw hash string which was just processed; in the listener, this equals the current hash. +* - vars.last_hash_saved: (string, internal use only) the hash section string which was the last one generated by set(), clear() or remove(). +* - vars.foreign_hash_change: (boolean) TRUE when the hash was changed from outside our control, e.g. when the user hit the 'back/history' button in the browser, after the previous invocation of the listener. +* - vars.hash_changed: (boolean) TRUE when the hash has changed after the previous invocation of the listener. +* +* ### Methods +* - load(): loads the current hash variables into the vars.current property as JSON object. Return the updated set of key/value pairs. +* - clear(): clears the hash part of the URL. (because it's not completely possible, it sets it to "#_") +* - get(get): (string) try to get a hash variable with the given name. +* - set(set): (string,object) sets the given parameters to the hash variables. If it's a string it should have the following format: "key=value". Return the updated set of key/value pairs. +* - remove(remove): (string,array) the variable name(s) which should be removed from the hash variables. Return the old set of key/value pairs. +* - addListener(listener,callAlways,bind): (listener: function, callAlways: boolean, bind: object instance) creates a listener which calls the given function when a hash change occurs. The called function will get the vars property (vars.current,vars.old,vars.changed) and use the "bind" parameter as "this", when specified. +* The return of the addListener() method is a setInterval ID and must be passed to the removeListener() method to stop the listening. +* When callAlways is FALSE, it only calls when the browser history buttons are pressed and not when get(), set(), remove() or clear() is called. +* - removeListener(listenerID): (the setInterval Id received from a addListener() method) removes a listener set with the addListener() method. +* - setChangedVars(): (internal use) updates the vars.changed collection and vars.change_count value. +* +* ### ATTENTION! +* Everytime you call set(), remove() or clear() a new hash string will be set, +* that means you also create a new history step in the browser history! +* +* These are 'special' characters to jsGET and will therefor be encoded when they are part of a key or value: +* # & = +*/ + +var jsGET = { + vars: { + old: {}, + current: {}, + changed: {}, + change_count: 0, + last_hash_loaded: '', + last_hash_saved: window.location.hash, + foreign_hash_change: false, + hash_changed: false + }, + load: function() { + // only load hash variables when anything changed in the hash since last time we loaded them: + var i; + var new_hash = window.location.hash; + + if (this.vars.last_hash_loaded !== new_hash) { + // detect whether the hash was changed outside our control, e.g. when user pushed BACK/HISTORY button in browser: + if (new_hash !== this.vars.last_hash_saved) { + this.vars.foreign_hash_change = true; + } + this.vars.hash_changed = true; + + var hashVars = new_hash.split('#'); + this.vars.current = {}; + if (typeof hashVars[1] !== 'undefined' && hashVars[1] && hashVars[1] !== '_') { + hashVars = hashVars[1].split('&'); + for(i = 0; i < hashVars.length; i++) { + var hashVar = hashVars[i].split('='); + this.vars.current[this.decode(hashVar[0])] = (typeof hashVar[1] !== 'undefined' ? this.decode(hashVar[1]) : ''); + } + } + this.vars.last_hash_loaded = new_hash; + } + return this.vars.current; + }, + // encode special characters in the input string; use encodeURIComponent() to encode as that one is fast and ensures proper Unicode handling as well: bonus! + encode: function(s) { + s = encodeURIComponent(s); + // BUT! browsers take things like '%26' in the URL anywhere and translate it to '&' before we get our hands on the fragment part, so we need to prevent the browsers from doing this: + s = s.replace(/%/g, '$'); // we can do this safely as encodeURIComponent() will have encoded any '$' in the original string! + return s; + }, + decode: function(s) { + s = s.replace(/\$/g, '%'); + s = decodeURIComponent(s); + return s; + }, + clear: function() { + this.vars.last_hash_saved = window.location.hash = "#_"; + //window.location.href = window.location.href.replace( /#.*$/, ""); + return false; + }, + get: function(key) { + this.load(); + return (this.vars.current.hasOwnProperty(key) ? this.vars.current[key] : null); + }, + set: function(set) { + var key; + + //if (typeof console !== 'undefined' && console.log) console.log('savedHistory'); + this.load(); + + if (typeof set !== 'object') { + var setSplit = set.split('='); + set = {}; + // be aware that the _value_ of the key, value pair can have an embedded '=' (or more) itself: + key = setSplit.shift(); + var value = setSplit.join('='); + set[key] = value; + } + else { + // do not damage the set passed in as a parameter + set = this.helpers.cloneObject(set); + } + + // var + var hashString = ''; + var sep = '#'; + + // check for change in existing vars + for(key in this.vars.current) { + if (this.vars.current.hasOwnProperty(key)) { + if (set.hasOwnProperty(key)) { + hashString += sep+this.encode(key)+'='+this.encode(set[key]); + delete set[key]; + } + else { + hashString += sep+this.encode(key)+'='+this.encode(this.vars.current[key]); + } + sep = '&'; + } + } + + // add new vars + for(key in set) { + if (set.hasOwnProperty(key)) { + hashString += sep+this.encode(key)+'='+this.encode(set[key]); + sep = '&'; + } + } + this.vars.last_hash_saved = window.location.hash = hashString; + return this.load(); + }, + remove: function(remove) { + var removes; + var i; + var key; + + this.load(); + + if (typeof remove !== 'object') { + removes = [remove]; + } else { + removes = remove; + } + + // var + var hashString = ''; + var sep = '#'; + + for (i = 0; i < removes.length; i++) { + if (this.vars.current.hasOwnProperty(removes[i])) { + delete this.vars.current[removes[i]]; + } + } + + // create new hash string + for(key in this.vars.current) { + if (this.vars.current.hasOwnProperty(key)) { + hashString += sep+this.encode(key)+'='+this.encode(this.vars.current[key]); + sep = '&'; + } + } + this.vars.last_hash_saved = window.location.hash = hashString; + + this.load(); + // a bit odd: this one returns the OLD set, while set() returns the UPDATED set... + return this.vars.current; + }, + setChangedVars: function() { + var change_count; + var key; + var oldVars = this.helpers.cloneObject(this.vars.old); + this.vars.changed = this.helpers.cloneObject(this.vars.current); + + // check for changed vars + change_count = 0; + for (key in this.vars.changed) { + if (this.vars.changed.hasOwnProperty(key)) { + if (oldVars.hasOwnProperty(key)) { + if (oldVars[key] === this.vars.changed[key]) { + change_count--; // faster?/simpler than multiple 'else' branches just to track change_count + delete this.vars.changed[key]; + } + delete oldVars[key]; + } + change_count++; + } + } + // merge the rest of this.vars.old with the changedVars + for (key in oldVars) { + if (oldVars.hasOwnProperty(key) /* && !this.vars.changed.hasOwnProperty(key) */ ) { + this.vars.changed[key] = oldVars[key]; + change_count++; + } + } + this.vars.change_count = change_count; + }, + addListener: function(listener, callAlways, bind, freq) { // use the returned interval ID for removeListener + + this.load(); + this.vars.hash_changed = false; + this.vars.foreign_hash_change = false; + this.vars.old = this.helpers.cloneObject(this.vars.current); + + this.pollHash = function() { + var key; + + this.load(); // side effect: an immediate check (one more) to see whether the hash has changed by us or others + + // and make sure listener always fires whn callAlways==FALSE and user is going back&forth in the browser history (one or more history entries may match this.vars.last_hash_saved !) + this.vars.last_hash_saved = window.location.hash; + + if (this.vars.hash_changed) { + this.setChangedVars(); + if (callAlways || this.vars.foreign_hash_change) { + // var + /* + if (typeof console !== 'undefined' && console.log) console.log('-----'); + if (typeof console !== 'undefined' && console.log) console.log(this.vars.old); + if (typeof console !== 'undefined' && console.log) console.log(this.vars.changed); + */ + // call the given listener function + if (typeof listener === 'function') { + listener.apply(bind, [this.vars]); + } + + // only reset the 'old' array, i.e. effect the '.changed' set, when the listener was actually (to be) invoked. + // + // also reset the 'changed' markers so changes applied inside the listener don't 'recursively' trigger the listener: + this.load(); + this.vars.hash_changed = false; + this.vars.foreign_hash_change = false; + + /* + if (typeof console !== 'undefined' && console.log) console.log('-----'); + if (typeof console !== 'undefined' && console.log) console.log(this.vars.current); + if (typeof console !== 'undefined' && console.log) console.log(this.vars.old); + if (typeof console !== 'undefined' && console.log) console.log(this.vars.changed); + */ + this.vars.old = new this.vars.current.constructor(); + for (key in this.vars.current) { + if (this.vars.current.hasOwnProperty(key)) { + this.vars.old[key] = this.vars.current[key]; + } + } + } + } + }; + + var self = this; + return setInterval(function() { + self.pollHash(); + }, (freq || 500)); + }, + removeListener: function(listenerID) { // use the interval ID returned by addListener + delete this.pollHash; + return clearInterval(listenerID); + }, + helpers: + { + // eqv. of mootools Object.clone(): + cloneObject: function(obj) { + var key; + var rv = new obj.constructor(); + for (key in obj) { + if (obj.hasOwnProperty(key)) { + rv[key] = obj[key]; + } + } + return rv; + } + } +}; + + +/* settings for jsLint: undef: true, browser: true, indent: 4 */ + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/close.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/close.gif new file mode 100644 index 0000000000..9d7206f077 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/close.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/loading.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/loading.gif new file mode 100644 index 0000000000..53dd589fa1 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/loading.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/loading.old.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/loading.old.gif new file mode 100644 index 0000000000..f864d5fd38 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/loading.old.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/milkbox.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/milkbox.css new file mode 100644 index 0000000000..0fb6367423 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/milkbox.css @@ -0,0 +1,106 @@ +/* MILKBOX CSS */ + +#mbox-overlay{ + background-color: #000; /* set the Milkbox overlay color // opacity: see the js options */ + z-index:50000; + cursor: pointer; +} + +/* Main box */ +#mbox-mainbox{ + /* For default width and height, see the js options */ + top:10%;/* overwritten in the js options to properly position the main box when activated in a scrolled window */ + background-color: #fff;/* set the main box background color */ + border: 5px solid #fff;/* set the main box border */ + padding:5px;/* set the main box padding */ +} + +/* Where the files actually are injected */ +#mbox-filebox{ margin:0; padding:0; border:none; overflow:hidden; } + +#mbox-filebox img, +#mbox-filebox iframe, +#mbox-filebox swf{ + border:none; +} + +/*this class is for styling the inner file box*/ +/*these styles will be visible after the first is loaded */ +.mbox-filebox-decorations{ + border:none; + padding:0; +} + +/* *** BOTTOM *** */ + +/* container for controls and caption */ +#mbox-bottom { + /* set text options */ + font-family: Arial, Verdana, Geneva, Helvetica, sans-serif; + font-size: 12px; + color: #656565; + line-height: 1.4em; + text-align: left; + padding-top:8px; + margin:0; +} + +/* controls/navigation */ +/* be careful if you change buttons dimensions */ + +#mbox-controls{ + /*background-color:#0f0;*/ + float:right; + width:27px; + padding-top:3px; + border-left:1px solid #9c9c9c;/* set nav border */ +} + +#mbox-count{ + overflow:hidden; + padding-top:1px; + float:right; + text-align:right; + font-size:9px; /* count font size */ +} + +#mbox-close, +#mbox-prev, +#mbox-next, +#mbox-playpause{ + float:right; + height:19px; +} + +#mbox-prev,#mbox-next{ width:15px; } +#mbox-prev{ background: url(prev.gif) no-repeat; }/* IMAGE: prev */ +#mbox-next{ background: url(next.gif) no-repeat; }/* IMAGE: next */ + +#mbox-playpause{ width:13px; } +#mbox-playpause{ background: url(play-pause.gif) no-repeat; }/* IMAGE: prev */ + +#mbox-close{ + width:17px; + background:url(close.gif) no-repeat;/* IMAGE: close */ +} + +#mbox-prev:hover, +#mbox-next:hover, +#mbox-close:hover, +#mbox-playpause:hover{ + background-position:0 -22px; +} + +/* description */ +#mbox-caption{ + /*background-color:#f00;*/ + margin-right:27px; + padding:0px 10px 0 0; + font-weight: normal; + text-align:justify; + overflow-x: hidden; /* make sure the controls at the right remain accessible, even for small images with very large filenames: those would otherwise overlap those controls at right */ +} + +.mbox-loading{ background:url(loading.gif) no-repeat center; }/* IMAGE: loading gif */ +.mbox-reset{ clear:both; height:0; margin:0; padding:0; font-size:0; overflow:hidden; } + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/next.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/next.gif new file mode 100644 index 0000000000..874835f6b4 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/next.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/play-pause.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/play-pause.gif new file mode 100644 index 0000000000..7301b65a65 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/play-pause.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/prev.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/prev.gif new file mode 100644 index 0000000000..d5311991ba Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/css/prev.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/milkbox.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/milkbox.js new file mode 100644 index 0000000000..308b9730bc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Assets/js/milkbox/milkbox.js @@ -0,0 +1,1186 @@ +/* + Milkbox v3.0.3 - required: mootools.js v1.3 core + more (see the relative js file for details about used modules) + + by Luca Reghellin (http://www.reghellin.com) September 2011, MIT-style license. + Inspiration Lokesh Dhakar (http://www.lokeshdhakar.com/projects/lightbox2/) + AND OF COURSE, SPECIAL THANKS TO THE MOOTOOLS DEVELOPERS AND THE OTHER DEVELOPERS HELPING ALL AROUND THE WORLD +*/ + + +//Class: Milkbox (singleton) +(function(){ + +var milkbox_singleton = null; + +this.Milkbox = new Class({ + + Implements:[Options,Events], + + options:{//set all the options here + overlayOpacity:0.7, + marginTop:50, + initialWidth:250, + initialHeight:250, + fileboxBorderWidth:'0px', + fileboxBorderColor:'#000000', + fileboxPadding:'0px', + resizeDuration:.5, + resizeTransition:'sine:in:out',/*function (ex. Transitions.Sine.easeIn) or string (ex. 'bounce:out')*/ + autoPlay:false, + autoPlayDelay:7, + removeTitle:true, + autoSize:true, + autoSizeMaxHeight:0,//only if autoSize==true + centered:false, + imageOfText:'of', + onXmlGalleries:function(){}, + onClosed:function(){}, + onFileReady:function(){}, + zIndex: 50001, + }, + + initialize: function(options){ + if (milkbox_singleton) return milkbox_singleton; + milkbox_singleton = this; + + this.setOptions(options); + this.autoPlayBkup = { autoPlayDelay:this.options.autoPlayDelay, autoPlay:this.options.autoPlay }; + this.fullOptionsBkup = {}; + this.galleries = []; + this.formElements = []; + this.activated; + this.busy = false; + this.paused = false; + this.closed = true; + this.intId; + this.loadCheckerId; + this.externalGalleries = []; + this.singlePageLinkId = 0; + + this.currentIndex; + this.currentGallery; + this.fileReady; + this.loadedImages = []; + this.currentFile; + this.options_bkup; + + this.display; + + this.getPageGalleries(); + if(this.galleries.length != 0){ this.prepare(true); } + }, + + prepare:function(checkForm){ + if(checkForm){ this.checkFormElements(); } + this.prepareHTML(); + this.prepareEventListeners(); + this.activated = true; + }, + + //utility + open:function(gallery,index){ + var i; + + if(!this.activated){ this.prepare(true); } + + var g = (instanceOf(gallery,MilkboxGallery)) ? gallery : this.getGallery(gallery); + if(!g) return false; + + // [i_a] when 'index' is not an number, it may be a element reference or string: resolve such indexes too + if (typeOf(index) !== 'number') { + i = g.get_index_of(index); + if(i !== -1){ index = i; } + } + + i = parseInt(index, 10); + if(isNaN(i)){ i = 0; } + + this.closed = false; + var item = g.get_item(i); + if(!item) return false; + + this.currentGallery = g; + this.currentIndex = i; + + this.hideFormElements(); + + this.display.set_mode(this.currentGallery.type); + this.display.appear(); + + + if(this.options.autoPlay || g.options.autoplay){ this.startAutoPlay(true); } + + this.loadFile(item,this.getPreloads()); + return true; + }, + + + //utility + close:function(hideDisplay){ + if(hideDisplay){ this.display.disappear(); } + this.showFormElements(); + this.pauseAutoPlay(); + this.stopLoadingCheck(); + this.currentGallery = null; + this.currentIndex = null; + this.currentFile = null; + this.busy = false; + this.paused = false; + this.fileReady = false; + this.closed = true; + + this.fireEvent('closed'); + }, + + startAutoPlay:function(opening){ + var d = this.currentGallery.options.autoplay_delay || this.options.autoPlayDelay; + if(d < this.options.resizeDuration*2){ d = this.options.resizeDuration*2 }; + + var f = function(){ + this.removeEvent('fileReady',f); + this.intId = this.navAux.periodical(d*1000,this,[null,'next']); + } + + if(opening){ + this.addEvent('fileReady',f); + } else { + this.intId = this.navAux.periodical(d*1000,this,[null,'next']); + } + + this.paused = false; + }, + + pauseAutoPlay:function(){ + if(this.intId){ + clearInterval(this.intId); + this.intId = null; + } + + this.paused = true; + }, + + //utility + //list:Array of objects or an object > [ { gallery:'gall1', autoplay:true, delay:6 } ] + //to permanently define autoplay options for any gallery + setAutoPlay:function(list){ + var l = (typeOf(list) == 'object') ? [list] : list; + l.each(function(item){ + var g = this.getGallery(item.gallery); + if(!g){ return; } + var a = (item.autoplay == true) ? item.autoplay : false; + var d = (item.delay && a) ? item.delay : this.options.autoPlayDelay; + g.setOptions({ autoplay:a, autoplay_delay:d }).refresh(); + },this); + }, + + + //utility + //{href:'file1.jpg',size:'width:900,height:100', title:'text'} + //show a file on the fly without gallery functionalities + openWithFile:function(file, options){ + if(!this.activated){ this.prepare(); } + + if(options){ + this.refreshDisplay(options,true);//set custom options + } + + var g = new MilkboxGallery([file],{ remove_title:this.options.removeTitle }); + this.open(g,0); + }, + + getPreloads:function(){ + var items = this.currentGallery.items; + var index = this.currentIndex; + if(items.length == 1) return null; + + var next = (index != items.length-1) ? items[index+1] : items[0]; + var prev = (index != 0) ? items[index-1] : items[items.length-1]; + var preloads = (prev == next) ? [prev] : [prev,next]; //if gallery.length == 2, then prev == next + return preloads; + }, + + //LOADING + loadFile:function(fileObj,preloads){ + + this.fileReady = false; + this.display.clear_content(); + this.display.hide_bottom(); + + if(this.checkFileType(fileObj,'swf')){ + this.loadSwf(fileObj); + } else if (this.checkFileType(fileObj,'html')){ + this.loadHtml(fileObj); + } else {//filetype:image + this.loadImage(fileObj); + } + + if(!this.checkFileType(fileObj,'swf')) this.startLoadingCheck(); + if(preloads){ this.preloadFiles(preloads); } + }, + + //to prevent the loader to show if the file is cached + startLoadingCheck:function(){ + var t = 0; + if (!this.loadCheckerId) { + this.loadCheckerId = (function(){ + t+=1; + if(t > 5){ + if (this.loadCheckerId) { + // only show the loader when the timer has not been cleared yet! + this.display.show_loader(); + } + this.stopLoadingCheck(); + } + }).periodical(100,this); + }//end if + }, + + stopLoadingCheck:function(){ + clearInterval(this.loadCheckerId); + }, + + preloadFiles:function(preloads){ + preloads.each(function(fileObj,index){ + if(!this.checkFileType(fileObj,"swf") && !this.checkFileType(fileObj,"html")){ + this.preloadImage(fileObj.href); + } + },this); + }, + + preloadImage:function(file){ + if(!this.loadedImages.contains(file)){ + var imageAsset = new Asset.image(file, { + onLoad:function(){ + this.loadedImages.push(file); + }.bind(this) + }); + } + }, + + loadImage:function(fileObj){ + var file = fileObj.href; + var imageAsset = new Asset.image(file, { + onLoad:function(img){ + if(!this.loadedImages.contains(file)){ this.loadedImages.push(file); };//see next/prev events + this.loadComplete(img,fileObj.caption); + }.bind(this) + }); + }, + + loadSwf:function(fileObj){ + var swfObj = new Swiff(fileObj.href,{ + width:fileObj.size.width, + height:fileObj.size.height, + vars:fileObj.vars, + params:{ wMode:'opaque', swLiveConnect:'false' } + }); + + this.loadComplete(document.id(swfObj),fileObj.caption); + }, + + loadHtml:function(fileObj){ + + var query = (fileObj.vars ? '?' + Object.toQueryString(fileObj.vars) : ''); + var extras = (fileObj.extras ? fileObj.extras : ''); + + var iFrame = new Element('iframe',{ + 'src':fileObj.href+query, + 'frameborder':0,//for IE... + styles:{ + 'border':'none' + } + }); + + if(fileObj.size){ + iFrame.set({ + 'width':fileObj.size.width, + 'height':fileObj.size.height + }); + } + + this.loadComplete(iFrame,fileObj.caption); + },//loadHtml + + + //LOAD COMPLETE ********// + loadComplete:function(file,caption){ + + if(this.closed) return;//if an onload event were still running + + this.fileReady = true;//the file is loaded and ready to be showed (see next_prev_aux()) + this.stopLoadingCheck(); + this.currentFile = file; + var timer; + timer = (function(){ + if(this.display.ready){ + if (this.currentGallery.items != null) { + this.display.show_file(file,caption,this.currentIndex+1,this.currentGallery.items.length); + } + clearInterval(timer); + }//end if + }).periodical(100,this); + + this.fireEvent('fileReady'); + },//end loadComplete + + checkFileType:function(file,type){ + var href = (typeOf(file) != 'string') ? file.href : file; + var splitted = href.split('?')[0]; + var regexp = new RegExp("\.("+type+")$","i"); + var test = splitted.test(regexp); + + if(!test && type=="html"){ + test = splitted.test(/\/\d+$/); + } + + return test; + }, + + //GALLERIES + getPageGalleries:function(){ + var names = []; + var links = $$('a[data-milkbox]'); + + //check names + links.each(function(link){ + var name = link.get('data-milkbox'); + if(name == 'single'){ + this.galleries.push(new MilkboxGallery(link,{name:'single'+this.singlePageLinkId++, remove_title:this.options.removeTitle })); + } else if(!names.contains(name)){ + names.push(name); + } + },this); + + names.each(function(name){ + this.galleries.push(new MilkboxGallery($$('a[data-milkbox='+name+']'),{ name:name, remove_title:this.options.removeTitle })); + },this); + + //set default autoplay // override with setAutoPlay + if(this.options.autoPlay){ + this.galleries.each(function(g){ + g.setOptions({autoplay:this.options.autoPlay,autoplay_delay:this.options.autoPlayDelay}); + g.refresh(); + }.bind(this)); + } + + },//getPageGalleries + + reloadPageGalleries:function(){ + //reload page galleries + this.removePageGalleryEvents(); + + this.galleries = this.galleries.filter(function(gallery){ + if(!gallery.external) gallery.clear(); + return gallery.external; + }); + + this.getPageGalleries(); + this.addPageGalleriesEvents(); + + if(!this.activated){ this.prepare(true); } + },//end reloadPageGalleries + + //list: optional. Can be a single string/object or an array of strings/objects + resetExternalGalleries:function(list){ + this.galleries = this.galleries.filter(function(gallery){ + if(gallery.external) gallery.clear(); + return !gallery.external; + }); + + if(!list) return; + var array = (typeOf(list) == 'array') ? list : [list]; + array.each(function(data){ this.addGalleries(data); }, this); + }, + + //utility + addGalleries:function(data){ + if(!this.activated){ this.prepare(true); } + if (typeOf(data) == 'string' && data.split('?')[0].test(/\.(xml)$/i)) { + this.loadXml(data); + } else {//array or object + this.setObjectGalleries(data); + } + if(!this.activated){ this.prepare(true); } + }, + + loadXml:function(xmlfile){ + var r = new Request({ + method:'get', + autoCancel:true, + url:xmlfile, + onRequest:function(){ + //placeholder + }.bind(this), + onSuccess:function(text,xml){ + var t = text.replace(/(/gi,"$1>"); + this.setXmlGalleries(new Element('div',{ html:t })); + }.bind(this), + onFailure:function(transport){ alert('Milkbox :: loadXml: XML file path error or local Ajax test: please test xml galleries on-line'); } + }).send(); + }, + + setXmlGalleries:function(container){ + var c = container; + var xml_galleries = c.getElements('.gallery'); + var links; + var aplist = []; + xml_galleries.each(function(xml_gallery,i){ + + var options = { + name:xml_gallery.getProperty('name'), + autoplay:Boolean(xml_gallery.getProperty('autoplay')), + autoplay_delay:Number(xml_gallery.getProperty('autoplay_delay')) + } + + var links = xml_gallery.getChildren('a').map(function(tag){ + return { href:tag.href, size:tag.get('data-milkbox-size'), title:tag.get('title') } + },this); + + this.galleries.push(new MilkboxGallery(links,options)); + },this); + + this.fireEvent('xmlGalleries'); + },//end setXmlGalleries + + //[{ name:'gall1', autoplay:true, autoplay_delay:7, files:[{href:'file1.jpg',size:'width:900,height:100', title:'text'},{href:'file2.html',size:'w:800,h:200', title:'text'}] },{...},{...}] + setObjectGalleries:function(data){ + var array = (typeOf(data) == 'array') ? data : [data]; + array.each(function(newobj){ + var options = { + name:newobj.name, + autoplay:newobj.autoplay, + autoplay_delay:newobj.autoplay_delay + } + this.galleries.push(new MilkboxGallery(newobj.files,options)); + },this); + }, + + //utility + getGallery:function(name){ + var g = this.galleries.filter(function(gallery){ return gallery.name == name; },this); + return g[0] || null; + }, + + //HTML + prepareHTML:function(){ + this.display = new MilkboxDisplay({ + initialWidth:this.options.initialWidth, + initialHeight:this.options.initialHeight, + overlayOpacity:this.options.overlayOpacity, + marginTop:this.options.marginTop, + fileboxBorderWidth:this.options.fileboxBorderWidth, + fileboxBorderColor:this.options.fileboxBorderColor, + fileboxPadding:this.options.fileboxPadding, + resizeDuration:this.options.resizeDuration, + resizeTransition:this.options.resizeTransition, + centered:this.options.centered, + autoSize:this.options.autoSize, + autoSizeMaxHeight:this.options.autoSizeMaxHeight, + imageOfText:this.options.imageOfText, + zIndex:this.options.zIndex + }); + }, + + refreshDisplay:function(options,keepBackup){ + if(!this.activated) return; + + var options_bkup = this.display.options;//save original options + var new_options = Object.merge({},options_bkup,options); + if(this.display){ this.display.clear() } + this.display = new MilkboxDisplay(new_options); + this.addDisplayEvents(); + + if(keepBackup){ + this.options_bkup = options_bkup;//restored in close(); + } else { + this.options_bkup = null; + } + }, + + checkFormElements:function(){ + this.formElements = $$('select, textarea'); + if(this.formElements.length == 0) return; + + this.formElements = this.formElements.filter(function(elem){ + var vis = elem.getStyle('visibility'); + var dis = elem.getStyle('display'); + return (dis !== 'none' && vis !== 'hidden'); + }).map(function(elem){ + elem.store('visibility',elem.getStyle('visibility')); + elem.store('display',elem.getStyle('display')); + return elem; + }); + }, + + hideFormElements:function(){ + if(this.formElements.length == 0) return; + this.formElements.each(function(elem){ elem.setStyle('display','none'); }); + }, + + showFormElements:function(){ + if(this.formElements.length == 0) return; + this.formElements.each(function(elem){ + elem.setStyle('visibility',elem.retrieve('visibility')); + elem.setStyle('display',elem.retrieve('display')); + }) + }, + + //EVENTS + addPageGalleriesEvents:function(){ + var pageGalleries = this.galleries.filter(function(gallery){ return !gallery.external }); + pageGalleries.each(function(gallery){ + gallery.items.each(function(item){ + item.element.addEvent('click',function(e){ + e.preventDefault(); + this.open(gallery.name,gallery.get_index_of(item)); + }.bind(this)); + },this); + },this); + }, + + removePageGalleryEvents:function(){ + var pageGalleries = this.galleries.filter(function(gallery){ return !gallery.external }); + pageGalleries.each(function(gallery){ + gallery.items.each(function(item){ + item.element.removeEvents('click'); + }); + }); + }, + + addDisplayEvents:function(){ + this.display.addEvent('nextClick',function(){ + this.navAux(true,'next'); + }.bind(this)); + + this.display.addEvent('prevClick',function(){ + this.navAux(true,'prev'); + }.bind(this)); + + this.display.addEvent('playPauseClick',function(){ + if(this.paused){ + this.startAutoPlay(); + } else { + this.pauseAutoPlay(); + } + this.display.set_paused(this.paused); + }.bind(this)); + + this.display.addEvent('disappear',function(){ + if(this.options_bkup){ this.refreshDisplay(this.options_bkup); } + this.close(false); + }.bind(this)); + + this.display.addEvent('resizeComplete',function(){ + this.busy = false;//see navAux + }.bind(this)); + }, + + prepareEventListeners:function(){ + + this.addPageGalleriesEvents(); + this.addDisplayEvents(); + + //reset overlay height and position onResize + window.addEvent('resize',function(){ + if(this.display.ready){ this.display.resetOverlaySize(); } + }.bind(this)); + + //keyboard next/prev/close + window.document.addEvent('keydown',function(e){ + if(this.busy == true || this.closed){ return; } + if(e.key == 'right' || e.key == 'left' || e.key == 'space'){ e.preventDefault(); } + + if(this.display.mode != 'single'){ + if(e.key == 'right' || e.key == 'space'){ this.navAux(e,'next'); } + else if(e.key == 'left'){ this.navAux(e,'prev'); } + } + + if(e.key == 'esc'){ this.display.disappear(); } + }.bind(this)); + }, + + navAux:function(e,direction){ + + if(e){//called from a button/key event + this.pauseAutoPlay(); + } else {//called from autoplay + if(this.busy || !this.fileReady){ return; }//prevent autoplay() + } + + this.busy = true; //for keyboard and autoplay + + var i, _i; + + if(direction == "next"){ + i= (this.currentIndex != this.currentGallery.items.length-1) ? this.currentIndex += 1 : this.currentIndex = 0; + _i= (this.currentIndex != this.currentGallery.items.length-1) ? this.currentIndex + 1 : 0; + } else { + i= (this.currentIndex != 0) ? this.currentIndex -= 1 : this.currentIndex = this.currentGallery.items.length-1; + _i= (this.currentIndex != 0) ? this.currentIndex - 1 : this.currentGallery.items.length-1; + }; + + this.loadFile(this.currentGallery.get_item(i),[this.currentGallery.get_item(_i)]); + } + + +});//END MILKBOX CLASS CODE + +})();//END SINGLETON CODE + + + + + + +var MilkboxDisplay= new Class({ + + Implements:[Options,Events], + + options:{ + initialWidth:100, + initialHeight:100, + overlayOpacity:1, + marginTop:0, + fileboxBorderWidth:'0px', + fileboxBorderColor:'#000000', + fileboxPadding:'0px', + resizeDuration:.5, + resizeTransition:'sine:in:out', + centered:false, + autoSize:false, + autoSizeMaxHeight:0, + imageOfText:'of', + onNextClick:function(){}, + onPrevClick:function(){}, + onPlayPause:function(){}, + onDisappear:function(){}, + onResizeComplete:function(){} + }, + + initialize: function(options){ + this.setOptions(options); + + this.overlay; + this.mainbox; + this.filebox; + this.bottom; + this.controls; + this.caption; + this.close; + this.next; + this.prev; + this.playpause; + this.paused = false; + this.count; + + this.mode = 'standard'; + this.ready = false;//after overlay and mainbox become visible == true + + this.overlay_show_fx; + this.overlay_hide_fx; + + this.mainbox_show_fx; + this.mainbox_hide_fx; + this.mainbox_resize_fx; + + this.current_file = null; + + this.build_html(); + this.prepare_effects(); + this.prepare_events(); + + },//end init + + build_html:function(){ + this.overlay = new Element('div', { + 'id':'mbox-overlay', + 'styles':{ + 'visibility':'visible', + 'position':'fixed', + 'display':'none', + 'left':0, + 'width':'100%', + 'opacity':0, + 'height':0, + 'overflow':'hidden', + 'margin':0, + 'padding':0 + } + }).inject(document.id(document.body)); + + this.mainbox = new Element('div', { + 'id':'mbox-mainbox', + 'styles': { + 'position':(this.options.centered) ? 'fixed' : 'absolute', + 'overflow':'hidden', + 'display':'none', + 'z-index':this.options.zIndex,//50001,//overlay z-index (see css) + 1 + 'width':this.options.initialWidth, + 'height':this.options.initialHeight, + 'opacity':0, + 'margin':0, + 'left':'50%', + 'marginLeft':-(this.options.initialWidth/2), + 'marginTop':(this.options.centered) ? -(this.options.initialHeight/2) : '', + 'top':(this.options.centered) ? '50%' : '' + } + }).inject(document.id(document.body)); + + this.filebox = new Element('div',{ + 'id':'mbox-filebox', + 'styles':{ + 'border-style':'solid', + 'border-width':this.options.fileboxBorderWidth, + 'border-color':this.options.fileboxBorderColor, + 'padding':this.options.fileboxPadding, + 'opacity':0 + } + }).inject(this.mainbox); + + this.bottom = new Element('div#mbox-bottom').setStyle('visibility','hidden').inject(this.mainbox); + this.controls = new Element('div#mbox-controls'); + this.caption = new Element('div#mbox-caption',{'html':'test'}).setStyle('display','none'); + + this.bottom.adopt(new Element('div.mbox-reset'),this.controls, this.caption, new Element('div.mbox-reset')); + + this.close = new Element('div#mbox-close'); + this.next = new Element('div#mbox-next'); + this.prev = new Element('div#mbox-prev'); + this.playpause = new Element('div#mbox-playpause'); + this.count = new Element('div#mbox-count'); + + $$(this.next, this.prev, this.close, this.playpause).setStyles({ + 'outline':'none', + 'cursor':'pointer' + }); + + this.controls.adopt(new Element('div.mbox-reset'), this.close, this.next, this.prev, this.playpause, new Element('div.mbox-reset'), this.count); + }, + + prepare_effects:function(){ + this.overlay_show_fx = new Fx.Tween(this.overlay,{ + duration:'short', + link:'cancel', + property:'opacity', + onStart:function(){ + this.element.setStyles({ + 'top':-window.getScroll().y, + 'height':window.getScrollSize().y+window.getScroll().y, + 'display':'block' + }); + }, + onComplete:function(){ + this.mainbox_show_fx.start(1); + }.bind(this) + }); + + this.overlay_hide_fx = new Fx.Tween(this.overlay,{ + duration:'short', + link:'cancel', + property:'opacity', + onStart:function(){}, + onComplete:function(){ + this.overlay.setStyle('display','none'); + this.fireEvent('disappear'); + }.bind(this) + }); + + this.mainbox_show_fx = new Fx.Tween(this.mainbox,{ + duration:'short', + link:'cancel', + property:'opacity', + onStart:function(){ + this.mainbox.setStyle('display','block'); + }.bind(this), + onComplete:function(){ + this.ready = true; + }.bind(this) + }); + + this.mainbox_hide_fx = new Fx.Tween(this.mainbox,{ + duration:'short', + link:'cancel', + property:'opacity', + onStart:function(){ + this.ready = false; + }.bind(this), + onComplete:function(){ + this.overlay.setStyle('display','none'); + }.bind(this) + }); + + + this.mainbox_resize_fx = new Fx.Morph(this.mainbox,{ + duration:this.options.resizeDuration*1000, + transition:this.options.resizeTransition, + link:'cancel', + onStart:function(){ + this.filebox.setStyle('opacity',0) + }.bind(this), + onComplete:function(){ + this.show_bottom(); + this.filebox.setStyle('height',this.current_file.height+'px'); + this.filebox.grab(this.current_file).tween('opacity',1); + this.fireEvent('resizeComplete'); + }.bind(this) + }); + + this.filebox.set('tween',{ duration:'short', link:'chain' }); + },//end prepare_effects + + prepare_events:function(){ + $$(this.overlay,this.close).addEvent('click', function(){ this.disappear(); }.bind(this)); + this.prev.addEvent('click',function(){ this.fireEvent('prevClick') }.bind(this)); + this.next.addEvent('click',function(){ this.fireEvent('nextClick') }.bind(this)); + this.playpause.addEvent('click',function(){ this.fireEvent('playPauseClick') }.bind(this) ); + }, + + show_file:function(file,caption,index,length){ + + this.hide_loader(); + + if(file.match && file.match('img') && (this.options.autoSize || this.options.centered)){ + var file = this.get_resized_image(file); + }; + + var file_size = { w:file.width.toInt(), h:file.height.toInt() }; + if(!file_size.w || !file_size.h){ alert('Milkbox error: you must pass size values if the file is swf or html or a free file (openWithFile)'); return; }//data-milkbox-size not passed + file_size = Object.map(file_size,function(value){ return value.toInt(); }); + + this.caption.innerHTML = (caption) ? caption : ''; + this.update_count(index,length); + + var filebox_addsize = this.filebox.getStyle('border-width').toInt()*2+this.filebox.getStyle('padding').toInt()*2; + + var final_w = file_size.w+filebox_addsize; + + //so now I can predict the caption height + var caption_adds = this.caption.getStyles('paddingRight','marginRight'); + this.caption.setStyle('width',final_w-caption_adds.paddingRight.toInt()-caption_adds.marginRight.toInt() - 2); + $$(this.bottom,this.controls).setStyle('height',Math.max(this.caption.getDimensions().height,this.controls.getComputedSize().totalHeight)); + var mainbox_size = this.mainbox.getComputedSize(); + + var final_h = file_size.h+filebox_addsize+this.bottom.getComputedSize().totalHeight; + + var target_size = { + w:final_w, + h:final_h, + total_w:final_w+mainbox_size.totalWidth-mainbox_size.width, + total_h:final_h+mainbox_size.totalHeight-mainbox_size.height + } + + this.current_file = file; + this.resize_to(target_size); + },//show_file + + //image:, maxsize:{ w,h } + get_resized_image:function(image){ + + var max_size; + var ratio; + var check; + + var i_size = { w:image.get('width').toInt(), h:image.get('height').toInt() }; + + //cut out some pixels to make it better + var w_size = window.getSize(); + var max_size = { + w:w_size.x-60, + h:w_size.y-68-this.options.marginTop*2 + }; + + var max_dim = Math.max( max_size.h, max_size.w ); + + if(max_dim == max_size.w){ + ratio = max_dim/i_size.w; + check = 'h'; + } else { + ratio = max_dim/i_size.h; + check = 'w'; + } + + ratio = (ratio <= 1) ? ratio : 1; + + i_size = Object.map(i_size,function(value){ return Math.floor(value*ratio); }); + + ratio = (max_size[check]/i_size[check] <= 1) ? max_size[check]/i_size[check] : 1; + i_size = Object.map(i_size,function(value){ return Math.floor(value*ratio); }); + + if(this.options.autoSizeMaxHeight > 0){ + ratio = (this.options.autoSizeMaxHeight/i_size.height < 1) ? this.options.autoSizeMaxHeight/i_size.height : 1; + i_size = Object.map(i_size,function(value){ return Math.floor(value*ratio); }); + } + + image.set({ 'width':i_size.w, 'height':i_size.h }); + + return image; + },//get_resized_image + + resize_to:function(target_size){ + this.mainbox_resize_fx.start({ + 'width':target_size.w, + 'height':target_size.h, + 'marginLeft':-(target_size.total_w/2).round(), + 'marginTop':(this.options.centered) ? -(target_size.total_h/2).round() : '' + }); + }, + + show_loader:function(){ + this.mainbox.addClass('mbox-loading'); + }, + + hide_loader:function(){ + this.mainbox.removeClass('mbox-loading'); + }, + + clear_content:function(){ + this.filebox.empty(); + this.caption.empty(); + this.count.empty(); + $$(this.bottom,this.controls).setStyle('height',''); + }, + + hide_bottom:function(){ + this.caption.setStyle('display','none'); + this.bottom.setStyle('visibility','hidden'); + }, + + show_bottom:function(){ + this.caption.setStyle('display','block'); + this.bottom.setStyle('visibility','visible'); + }, + + appear:function(){ + if(!this.options.centered){ this.mainbox.setStyle('top',window.getScroll().y+this.options.marginTop); } + this.overlay_show_fx.start(this.options.overlayOpacity); + }, + + disappear:function(){ + this.cancel_effects(); + + this.current_file = null; + this.ready = false; + this.mode = 'standard'; + + $$(this.prev, this.next, this.playpause, this.count).setStyle('display','none'); + this.playpause.setStyle('backgroundPosition','0 0'); + + this.count.empty(); + this.caption.setStyle('display','none').empty(); + this.bottom.setStyle('visibility','hidden'); + + //TODO anche opacity a 0 se si usa un tween per il file + this.filebox.setStyle('height','').empty(); + + this.mainbox.setStyles({ + 'opacity':0, + 'display':'none', + 'width':this.options.initialWidth, + 'height':this.options.initialHeight, + 'marginLeft':-(this.options.initialWidth/2), + 'marginTop':(this.options.centered) ? -(this.options.initialHeight/2) : '', + 'top':(this.options.centered) ? '50%' : '' + }); + + this.filebox.setStyle('opacity',0); + + this.overlay_hide_fx.start(0); + + //this.fireEvent('disappear'); + },//end disappear + + cancel_effects:function(){ + [this.mainbox_resize_fx, + this.mainbox_hide_fx, + this.mainbox_show_fx, + this.overlay_hide_fx, + this.overlay_show_fx + ].each(function(fx){ fx.cancel(); }); + }, + + set_mode:function(gallery_type){ + + this.mode = gallery_type; + var close_w = this.close.getComputedSize().width; + var prev_w = this.prev.getComputedSize().width; + var next_w = this.next.getComputedSize().width; + var playpause_w = this.playpause.getComputedSize().width; + var offset = this.mainbox.getStyle('border-right-width').toInt();//for design purposes + + switch(gallery_type){ + case 'autoplay': + $$(this.playpause,this.close,this.next,this.prev,this.count).setStyle('display','block'); + this.controls.setStyle('width',close_w+prev_w+next_w+playpause_w+offset); + break; + case 'single': + $$(this.playpause,this.next,this.prev,this.count).setStyle('display','none'); + this.controls.setStyle('width',close_w+offset); + break; + case 'standard': + $$(this.close,this.next,this.prev,this.count).setStyle('display','block'); + this.playpause.setStyle('display','none'); + this.controls.setStyle('width',close_w+prev_w+next_w+offset); + break; + default: + return; + } + + this.caption.setStyle('margin-right',this.controls.getComputedSize().totalWidth); + },//end set_mode + + set_paused:function(paused){ + this.paused = paused; + var pos = (this.paused) ? '0 -66px' : ''; + this.playpause.setStyle('background-position',pos); + }, + + update_count:function(index,length){ + this.count.set('text',index+' '+this.options.imageOfText+' '+length); + }, + + resetOverlaySize:function(){ + if(this.overlay.getStyle('opacity') == 0){ return; };//resize only if visible + var h = window.getScrollSize().y+window.getScroll().y; + this.overlay.setStyles({ 'height':h, 'top':-window.getScroll().y }); + }, + + clear:function(){ + this.overlay.destroy(); + this.mainbox.destroy(); + } + +});//END + + + + + +//Class: MilkboxGallery +//args: source,options +// *source: element, elements, array +// *options: name, autoplay, autoplay_delay + +var MilkboxGallery = new Class({ + + Implements:[Options,Events], + + options:{//set all the options here + name:null, + autoplay:null, + autoplay_delay:null, + remove_title:true + }, + + initialize:function(source,options){ + + this.setOptions(options); + + this.source = source; + this.external = false; + this.items = null; + this.name = this.options.name; + this.type = null;//'autoplay','standard','single' + this.prepare_gallery(); + this.prepare_elements(); + }, + + prepare_gallery:function(){ + switch(typeOf(this.source)){ + case 'element'://single + if(this.check_extension(this.source.href)){ this.items = [this.source]; } + else{ alert('Wrong file extension: '+this.source.href); } + break; + case 'elements'://html + this.items = this.source.filter(function(link){ return this.check_extension(link.href); },this); + break; + case 'array'://xml, array + this.items = this.source.filter(function(link){ return this.check_extension(link.href); },this); + this.external = true; + break; + default: + return; + } + + if(this.items.length == 0){ alert('Warning: gallery '+this.name+' is empty'); } + }, + + //turns everything into an object + prepare_elements:function(){ + this.items = this.items.map(function(item){ + var splitted_url = item.href.split('?'); + var output = {}; + output.element = (typeOf(item) == 'element') ? item : null; + output.href = splitted_url[0]; + output.vars = (splitted_url[1]) ? splitted_url[1].parseQueryString() : null; + output.size = null; + output.caption = (output.element) ? output.element.get('title') : item.title; + if(this.options.remove_title && output.element){ output.element.removeProperty('title') } + + var size_string = (output.element) ? output.element.get('data-milkbox-size') : item.size; + if(size_string){ output.size = Object.map(this.get_item_props(size_string),function(value,key){ return value.toInt(); }); } + + var extras = (output.element) ? output.element.get('data-milkbox-extras') : item.extras; + output.extras = (extras) ? extras : ''; + + return output; + },this); + + if(this.items.length == 0) return; + + this.type = (this.items.length == 1) ? 'single' : (this.options.autoplay) ? 'autoplay' : 'standard'; + }, + + check_extension:function(string){ + var splitted, regular_file, dyn_url; + + splitted = string.split('?')[0]; + + regular_file = splitted.test(/\.(gif|jpg|jpeg|png|swf|html)$/i); + if(!regular_file){ dyn_url = splitted.test(/\/\d+$/); } + + var pass = (regular_file || dyn_url) ? true : false; + + return pass; + }, + + get_index_of:function(item){ + var index = (typeOf(item) == 'string') ? this.items.indexOf(this.items.filter(function(i){ return i.href === item; })[0]) : this.items.indexOf(item); + return this.items.indexOf(item); + }, + + get_item:function(index){ + return this.items[index]; + }, + + get_item_props:function(prop_string){ + var props = {}; + var s = prop_string.split(',').each(function(p,i){ + var clean = p.trim().split(':'); + props[clean[0].trim()] = clean[1].trim(); + },this); + return props; + }, + + refresh:function(){ + this.type = (this.items.length == 1) ? 'single' : (this.options.autoplay) ? 'autoplay' : 'standard'; + }, + + clear:function(){ + this.source = null; + this.items = null; + } + +});//end MilkboxGallery + + + +//Creating Milkbox instance: you can comment this code and instantiate Milkbox somewhere else instead. +if( typeof __MILKBOX_NO_AUTOINIT__ == 'undefined' || __MILKBOX_NO_AUTOINIT__ == false) +{ + window.addEvent('domready', function(){ + //milkbox = new Milkbox({overlayOpacity:1, fileboxBorderWidth:'10px', fileboxBorderColor:'#ff0000', fileboxPadding:'20px', centered:true}); + milkbox = new Milkbox({ + //autoPlay:true + }); + }); +} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/LICENSE b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/LICENSE new file mode 100644 index 0000000000..143adfeac7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/LICENSE @@ -0,0 +1,24 @@ +MooTools FileManager - MIT License + +Copyright (c) 2011 Christoph Pojer + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.br.js new file mode 100644 index 0000000000..f8bd2ff68f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.br.js @@ -0,0 +1,125 @@ +/* +Script: Language.br.js + MooTools FileManager - Language Strings in Brazilian Portuguese + +Translation: + [Fabiana Pires](http://twitter.com/nervosinha) +*/ + +FileManager.Language.br = { + more: 'Detalhes', + width: 'Largura:', + height: 'Altura:', + + ok: 'Ok', + open: 'Selecione o arquivo', + upload: 'Upload', + create: 'Criar pasta', + createdir: 'Por favor especifique o nome da pasta:', + cancel: 'Cancelar', + error: 'Erro', + + information: 'Informao', + type: 'Tipo:', + size: 'Tamanho:', + dir: 'Caminho:', + modified: 'ltima modificao:', + preview: 'Pr-visualizao', + close: 'Fechar', + destroy: 'Apagar', + destroyfile: 'Tem certeza que deseja apagar este arquivo?', + + rename: 'Renomear', + renamefile: 'Por favor especifique o novo nome do arquivo:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Download', + nopreview: 'Pr-visualizao indisponvel', + + title: 'Ttulo:', + artist: 'Artista:', + album: 'Album:', + length: 'Tamanho:', + bitrate: 'Bitrate:', + + deselect: 'Desfazer', + + nodestroy: 'Apagar arquivos est desabilitado neste servidor.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'No permitido enviar arquivos neste servidor.', + 'backend.authorized': 'Voc no est autenticado para enviar arquivos neste servidor.', + 'backend.path': 'A pasta especificada no existe. Por favor contate o administrador do site.', + 'backend.exists': 'A pasta especificada j existe. Por favor contate o administrador do site.', + 'backend.mime': 'O tipo de arquivo especificado no permitido.', + 'backend.extension': 'O arquivo enviado de tipo desconhecido ou proibido.', + 'backend.size': 'O tamanho do arquivo enviado muito grande para ser processado neste servidor. Por favor, envie um arquivo menor.', + 'backend.partial': 'O arquivo enviado foi corrompido, por favor envie o arquivo novamente.', + 'backend.nofile': 'No existe arquivo especificado para ser enviado.', + 'backend.default': 'Erro no envio do arquivo.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Erro desconhecido', + sizeLimitMin: 'No permitido anexar "${name}" (${size}), o tamanho mnimo para o arquivo de ${size_min}!', + sizeLimitMax: 'No permitido anexar "${name}" (${size}), o tamanho mximo para o arquivo de ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: 'Para habilitar o uploader, desbloqueie a funo em seu browser e recarregue a pgina (veja Adblock).', + disabled: 'Para habilitar o uploader, habilite o arquivo Flash e recarregue a pgina (veja Flashblock).', + flash: 'Para enviar arquivos necessrio instalar o Adobe Flash Player.' + }, + + resizeImages: 'Redimensionar imagens grandes ao enviar', + + serialize: 'Save gallery', + gallery: { + text: 'Image caption', + save: 'Save', + remove: 'Remove from gallery', + drag: 'Drag items here to create a gallery...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.cs.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.cs.js new file mode 100644 index 0000000000..bb3b326e83 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.cs.js @@ -0,0 +1,125 @@ +/* +Script: Language.cs.js + MooTools FileManager - Language Strings in Czech + +Translation: + [Matěj Grabovský](http://mgrabovsky.is-game.com) +*/ + +FileManager.Language.cs = { + more: 'Podrobnosti', + width: 'Šířka:', + height: 'Výška:', + + ok: 'Ok', + open: 'Vybrat soubor', + upload: 'Nahrát', + create: 'Vytvořit složku', + createdir: 'Prosím zadejte název složky:', + cancel: 'Storno', + error: 'Chyba', + + information: 'Informace', + type: 'Typ:', + size: 'Velikost:', + dir: 'Cesta:', + modified: 'Naposledy změněno:', + preview: 'Náhled', + close: 'Zavřít', + destroy: 'Smazat', + destroyfile: 'Určitě chcete smazat tento soubor?', + + rename: 'Přejmenovat', + renamefile: 'Prosím zadejte název nového souboru:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Stáhnout', + nopreview: 'Náhled není dostupný', + + title: 'Název:', + artist: 'Umělec:', + album: 'Album:', + length: 'Délka:', + bitrate: 'Přenosová rychlost:', + + deselect: 'Odstranit z výběru', + + nodestroy: 'Mazání souborů je na tomto serveru zakázáno.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'Nahrávání souborů je na tomto serveru zakázáno.', + 'backend.authorized': 'Nemáte právo nahrávat soubory.', + 'backend.path': 'Specifikovaná složka pro nahrávání neexistuje. Prosím kontaktujte správce těchto stránek.', + 'backend.exists': 'Specifikovaný soubor již existuje. Prosím kontaktujte správce těchto stránek.', + 'backend.mime': 'Specifikovaný typ souboru není povolen.', + 'backend.extension': 'Nahrávaný soubor má neznámou nebo zakázanou příponu.', + 'backend.size': 'Velikost nahrávaného souboru je přílíš velká. Prosím nahrajte menší soubor.', + 'backend.partial': 'Nahrávaný soubor byl nahrán jen zčásti. Prosím nahrajte ho znovu.', + 'backend.nofile': 'Nebyl vybrán žádný soubor pro nahrání.', + 'backend.default': 'Něco se nepovedlo při nahrávání souboru.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Neznámá chyba', + sizeLimitMin: 'Nelze přidat soubor „${name}“ (${size}), minimální povolená velikost souboru je ${size_min}!', + sizeLimitMax: 'Nelze přidat soubor „${name}“ (${size}), maximální povolená velikost souboru je ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: null, + disabled: null, + flash: 'Pokud chcete nahrávat soubory, musíte mít nainstalovaný Adobe Flash' + }, + + resizeImages: 'Změnšit velké obrázky při nahrávání', + + serialize: 'Save gallery', + gallery: { + text: 'Image caption', + save: 'Save', + remove: 'Remove from gallery', + drag: 'Drag items here to create a gallery...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.da.js new file mode 100644 index 0000000000..24873b0005 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.da.js @@ -0,0 +1,125 @@ +/* +Script: Language.da.js + MooTools FileManager - Language Strings in Danish + +Translation: + Jan Ebsen +*/ + +FileManager.Language.da = { + more: 'Detaljer', + width: 'Bredde:', + height: 'Højde:', + + ok: 'Ok', + open: 'Vælg fil', + upload: 'Upload', + create: 'Opret mappe', + createdir: 'Angiv venligst mappe navn:', + cancel: 'Anuller', + error: 'Fejl', + + information: 'Information', + type: 'Type:', + size: 'Størrelse:', + dir: 'Sti:', + modified: 'Sidst ændret:', + preview: 'Miniature', + close: 'Luk', + destroy: 'Slet', + destroyfile: 'Er du sikker på du vil slette denne fil?', + + rename: 'Omdøb', + renamefile: 'Skriv nyt filnavn:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Download', + nopreview: 'Ingen miniature tilgængelig', + + title: 'Titel:', + artist: 'Kunstner:', + album: 'Album:', + length: 'Længde:', + bitrate: 'Bitrate:', + + deselect: 'Fravælg', + + nodestroy: 'Det er ikke muligt at slette filer på serveren.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'Det er ikke muligt at uploade filer på serveren.', + 'backend.authorized': 'Du har ikke rettigheder til at uploade filer.', + 'backend.path': 'Upload mappen findes ikke. Kontakt venligst sidens administrator.', + 'backend.exists': 'Upload mappen findes allerede. Kontakt venligst sidens administrator.', + 'backend.mime': 'Fil-typen er ikke tilladt.', + 'backend.extension': 'Filen er af en ukendt, eller ulovlig type.', + 'backend.size': 'Filen er for stor, upload venligst en mindre fil.', + 'backend.partial': 'Filen blev kun delvist uploaded, prøv venligst igen.', + 'backend.nofile': 'Der er ikke angivet nogen fil til upload.', + 'backend.default': 'Noget gik galt med fil-uploaderen.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Ukendt fejl', + sizeLimitMin: 'Du kan ikke tilføje "${name}" (${size}), mindst tilladte filstørrelse er ${size_min}!', + sizeLimitMax: 'Du kan ikke tilføje "${name}" (${size}), højst tilladte filstørrelse er ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: null, + disabled: null, + flash: 'For at uploade filer skal du installere Adobe Flash.' + }, + + resizeImages: 'Scaler store billeder ved upload', + + serialize: 'Save gallery', + gallery: { + text: 'Image caption', + save: 'Save', + remove: 'Remove from gallery', + drag: 'Drag items here to create a gallery...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.de.js new file mode 100644 index 0000000000..d47bd616a0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.de.js @@ -0,0 +1,125 @@ +/* +Script: Language.de.js + MooTools FileManager - Language Strings in German + +Translation: + [Christoph Pojer](http://cpojer.net) +*/ + +FileManager.Language.de = { + more: 'Details', + width: 'Breite:', + height: 'Höhe:', + + ok: 'Ok', + open: 'Datei wählen', + upload: 'Datei hochladen', + create: 'Ordner erstellen', + createdir: 'Bitte gib einen Ordnernamen ein:', + cancel: 'Abbrechen', + error: 'Fehler', + + information: 'Information', + type: 'Typ:', + size: 'Größe:', + dir: 'Verzeichnis:', + modified: 'Zuletzt bearbeitet:', + preview: 'Vorschau', + close: 'Schließen', + destroy: 'Löschen', + destroyfile: 'Bist du sicher, dass du diese Datei löschen möchtest?', + + rename: 'Umbenennen', + renamefile: 'Gib einen neuen Dateinamen ein:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Download', + nopreview: 'Keine Vorschau verfügbar', + + title: 'Titel:', + artist: 'Artist:', + album: 'Album:', + length: 'Länge:', + bitrate: 'Bitrate:', + + deselect: 'Entfernen', + + nodestroy: 'Dateien löschen wurde auf diesem Server deaktiviert.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'Dieser Funktion wurde auf diesem Server deaktiviert.', + 'backend.authorized': 'Akt fehlgeschlagen: Du hast keine Genehmigung.', + 'backend.path': 'Der angegebene Ordner oder Datei existiert nicht. Bitte kontaktiere den Administrator dieser Website.', + 'backend.exists': 'Der angegebene Speicherort existiert bereits. Bitte kontaktiere den Administrator dieser Website.', + 'backend.mime': 'Der angegebene Dateityp ist nicht erlaubt.', + 'backend.extension': 'Die Datei hat eine unbekannte oder unerlaubte Datei-Erweiterung.', + 'backend.size': 'Die Datei, die du hochgeladen hast, ist zu groß um sie auf diesem Server zu verarbeiten. Bitte lade eine kleinere Datei hoch.', + 'backend.partial': 'Die Datei wurde nur teilweise hochgeladen. Bitte lade sie erneut hoch.', + 'backend.nofile': 'Es wurde keine Datei angezeigt/hochgeladen oder der Datei konnte nicht gefunden werden.', + 'backend.default': 'Der Datei-Upload ist fehlgeschlagen.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Unbekannter Fehler', + sizeLimitMin: 'Die Datei "${name}" (${size}), ist zu klein. Minimaldateigröße: ${size_min}!', + sizeLimitMax: 'Die Datei "${name}" (${size}), ist zu groß. Dateigrößen-Limit: ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: 'Um den Uploader benutzen zu können, muss er im Browser freigegeben werden und die Seite muss neu geladen werden (Adblock).', + disabled: 'Um den Uploader benutzen zu können, muss die geblockte Flash Datei freigegeben werden und die Seite muss neu geladen werden (Flashblock).', + flash: 'Um Dateien hochzuladen muss Adobe Flash installiert werden.' + }, + + resizeImages: 'Große Bilder bei Upload verkleinern', + + serialize: 'Galerie speichern', + gallery: { + text: 'Bildtext', + save: 'Speichern', + remove: 'Entfernen', + drag: 'Verschiebe Bilder in diesen Bereich um eine Galerie zu erstellen...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.en.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.en.js new file mode 100644 index 0000000000..787a085c6c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.en.js @@ -0,0 +1,125 @@ +/* +Script: Language.en.js + MooTools FileManager - Language Strings in English + +Translation: + [Christoph Pojer](http://cpojer.net) +*/ + +FileManager.Language.en = { + more: 'Details', + width: 'Width:', + height: 'Height:', + + ok: 'Ok', + open: 'Select file', + upload: 'Upload', + create: 'Create folder', + createdir: 'Please specify a folder name:', + cancel: 'Cancel', + error: 'Error', + + information: 'Information', + type: 'Type:', + size: 'Size:', + dir: 'Path:', + modified: 'Last modified:', + preview: 'Preview', + close: 'Close', + destroy: 'Delete', + destroyfile: 'Are you sure to delete this file?', + + rename: 'Rename', + renamefile: 'Please enter a new file name:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Download', + nopreview: 'No preview available', + + title: 'Title:', + artist: 'Artist:', + album: 'Album:', + length: 'Length:', + bitrate: 'Bitrate:', + + deselect: 'Deselect', + + nodestroy: 'Deleting files has been disabled on this Server.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'This operation has been disabled on this Server.', + 'backend.authorized': 'You are not authorized to perform this operation.', + 'backend.path': 'The specified Folder does not exist. Please contact the administrator of this Website.', + 'backend.exists': 'The specified Location does already exist. Please contact the administrator of this Website.', + 'backend.mime': 'The specified file-type is not allowed.', + 'backend.extension': 'The uploaded file has an unknown or forbidden file extension.', + 'backend.size': 'The size of the file you uploaded is too big to be processed on this server. Please upload a smaller file.', + 'backend.partial': 'The file you uploaded was only partially uploaded, please upload the file again.', + 'backend.nofile': 'There was no file specified or the file does not exist.', + 'backend.default': 'Something went wrong with the File-Upload.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Unknown Error', + sizeLimitMin: 'You can not attach "${name}" (${size}), the file size minimum is ${size_min}!', + sizeLimitMax: 'You can not attach "${name}" (${size}), the file size limit is ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: 'To enable the embedded uploader, unblock it in your browser and refresh (see Adblock).', + disabled: 'To enable the embedded uploader, enable the blocked Flash movie and refresh (see Flashblock).', + flash: 'In order to upload files you need to install Adobe Flash.' + }, + + resizeImages: 'Resize big images on upload', + + serialize: 'Save gallery', + gallery: { + text: 'Image caption', + save: 'Save', + remove: 'Remove from gallery', + drag: 'Drag items here to create a gallery...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.es.js new file mode 100644 index 0000000000..d06d46249d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.es.js @@ -0,0 +1,126 @@ +/* +Script: Language.es.js + MooTools FileManager - Language Strings in Spanish + +Translation: + [Sergio Rubio](http://rubiojr.netcorex.org) +*/ + +FileManager.Language.es = { + more: 'Detalles', + width: 'Anchura:', + height: 'Altura:', + + ok: 'Ok', + open: 'Seleccionar Fichero', + upload: 'Subir ficheros', + create: 'Crear carpeta', + createdir: 'Especifica el nombre de la carpeta:', + cancel: 'Cancelar', + error: 'Error', + + information: 'Información', + type: 'Tipo:', + size: 'Tamaño:', + dir: 'Ruta:', + modified: 'Última modificación:', + preview: 'Previsualización', + close: 'Cerrar', + destroy: 'Borrar', + destroyfile: '¿Seguro que deseas borrar el fichero?', + + rename: 'Renombrar', + renamefile: 'Especifica un nuevo nombre para el fichero:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Descargar', + nopreview: 'No hay previsualizacion disponible', + + title: 'Título:', + artist: 'Artista:', + album: 'Album:', + length: 'Duración:', + bitrate: 'Bitrate:', + + deselect: 'Desmarcar', + + nodestroy: 'El borrado de ficheros ha sido deshabilitado.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'La carga de archivos ha sido deshabilitada.', + 'backend.authorized': 'Necesitas autorización para subir ficheros.', + 'backend.path': 'La carpeta destino especificada no existe. Contacta con el administrador del sitio web.', + 'backend.exists': 'El la ruta destino ya existe. Por favor, contacta con el administrador del sitio web.', + 'backend.mime': 'No se permite subir el tipo de fichero especificado.', + 'backend.extension': 'El fichero subido tienen una extensión no permitida o desconocida.', + 'backend.size': 'El tamaño del fichero que intentas subir es demasiado grande para ser procesado por el servidor. Por favor, sube un fichero mas pequeño.', + 'backend.partial': 'El fichero se ha subido parcialmente, por favor, sube el fichero de nuevo.', + 'backend.nofile': 'No se especificó el fichero a subir.', + 'backend.default': 'Algo falló durante la carga del fichero.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Error desconocido', + duplicate: 'No se puede subir "${name}" (${size}), ya ha sido añadido!', + sizeLimitMin: 'No se puede subir "${name}" (${size}), el tamaño mínimo de fichero es ${size_min}!', + sizeLimitMax: 'No se puede subir "${name}" (${size}), el tamaño máximo de fichero es ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: null, + disabled: null, + flash: 'Para poder subir ficheros necesitas instalar Adobe Flash.' + }, + + resizeImages: 'Redimensionar las imágenes grandes al subirlas', + + serialize: 'Save gallery', + gallery: { + text: 'Image caption', + save: 'Save', + remove: 'Remove from gallery', + drag: 'Drag items here to create a gallery...' + } +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.fi.js new file mode 100644 index 0000000000..2d316d8698 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.fi.js @@ -0,0 +1,126 @@ +/* +Script: Language.fi.js + MooTools FileManager - Language Strings in Finnish + +Translation: + [Jabis Sevón](http://pumppumedia.com) +*/ + +FileManager.Language.fi = { + more: 'Lisätiedot', + width: 'Leveys:', + height: 'Korkeus:', + + ok: 'Ok', + open: 'Valitse tiedosto', + upload: 'Lähetä', + create: 'Luo kansio', + createdir: 'Kansion nimi:', + cancel: 'Peruuta', + error: 'Virhe', + + information: 'Tiedot', + type: 'Tyyppi:', + size: 'Koko:', + dir: 'Polku:', + modified: 'Viimeksi muokattu:', + preview: 'Esikatselu', + close: 'Sulje', + destroy: 'Poista', + destroyfile: 'Haluatko varmasti poistaa tiedoston?', + + rename: 'Nimeä uudelleen', + renamefile: 'Syötä tiedoston uusi nimi:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Lataa', + nopreview: 'Esikatselua ei voida näyttää', + + title: 'Kappaleen nimi:', + artist: 'Artisti:', + album: 'Albumi:', + length: 'Pituus:', + bitrate: 'Bitrate:', + + deselect: 'Poista valinta', + + nodestroy: 'Tiedostojen poisto otettu käytöstä.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'Tiedostojen lähetys otettu käytöstä.', + 'backend.authorized': 'Sinulla ei ole oikeuksia tiedostojen lähettämiseen.', + 'backend.path': 'Määritettyä kansiota ei löydy. Ole hyvä ja ota yhteyttä sivuston ylläpitäjään.', + 'backend.exists': 'Tiedosto on jo olemassa - siirto peruttu. Ole hyvä ja ota yhteyttä sivuston ylläpitäjään.', + 'backend.mime': 'Tiedostotyyppi ei ole sallittujen listalla - siirto peruttu.', + 'backend.extension': 'Tiedostopääte tuntematon, tai ei sallittujen listalla - siirto peruttu.', + 'backend.size': 'Tiedostokoko liian suuri palvelimelle. Ole hyvä ja siirrä pienempiä tiedostoja.', + 'backend.partial': 'Tiedonsiirto onnistui vain osittain - siirto epäonnistui. Ole hyvä ja siirrä tiedosto uudestaan', + 'backend.nofile': 'Tiedostoa ei määritetty.', + 'backend.default': 'Tiedonsiirto epäonnistui tunnistamattomasta syystä.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Tunnistamaton virhe', + duplicate: 'Et voi lisätä seuraavaa tiedostoa: "${name}" (${size}), koska se on jo siirtolistalla!', + sizeLimitMin: 'Et voi lisätä seuraavaa tiedostoa: "${name}" (${size}). Tiedostojen minimikoko on ${size_min}!', + sizeLimitMax: 'Et voi lisätä seuraavaa tiedostoa: "${name}" (${size}). Tiedostojen maksimikoko on ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: null, + disabled: null, + flash: 'Käyttääksesi FileManageria, tarvitset Adobe Flash Playerin. Lataa tästä.' + }, + + resizeImages: 'Pienennä liian suuret kuvat automaattisesti siirron yhteydessä', + + serialize: 'Save gallery', + gallery: { + text: 'Image caption', + save: 'Save', + remove: 'Remove from gallery', + drag: 'Drag items here to create a gallery...' + } +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.fr.js new file mode 100644 index 0000000000..6ef3ae688d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.fr.js @@ -0,0 +1,126 @@ +/* +Script: Language.fr.js + MooTools FileManager - Language Strings in French + +Translation: + [Samuel Sanchez](http://www.kromack.com) +*/ + +FileManager.Language.fr = { + more: 'Détails', + width: 'Largeur :', + height: 'Hauteur :', + + ok: 'Ok', + open: 'Sélectionner un fichier', + upload: 'Téléverser', + create: 'Créer un dossier', + createdir: 'Merci de spécifier un nom de dossier :', + cancel: 'Annuler', + error: 'Erreur', + + information: 'Informations', + type: 'Type :', + size: 'Taille :', + dir: 'Chemin :', + modified: 'Modifié le :', + preview: 'Aperçu', + close: 'Fermer', + destroy: 'Supprimer', + destroyfile: 'Voulez-vous vraiment supprimer ce fichier ?', + + rename: 'Renommer', + renamefile: 'Merci de spécifier un nouveau nom de fichier :', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Télécharger', + nopreview: 'Aucun aperçu disponible', + + title: 'Titre :', + artist: 'Artiste :', + album: 'Album :', + length: 'Durée :', + bitrate: 'Débit :', + + deselect: 'Désélectionner', + + nodestroy: 'La suppression de fichier a été désactivée sur ce serveur.', + + toggle_side_boxes: 'Vue miniatures', + toggle_side_list: 'Vue liste', + show_dir_thumb_gallery: 'Voir les miniatures dans le panneau de prévisualisation', + drag_n_drop: 'Le glisser / déposé est actif pour ce dossier', + drag_n_drop_disabled: 'Le glisser / déposé est temporairement inactif pour ce dossier', + goto_page: 'Aller à la page', + + 'backend.disabled': 'L\'upload de fichier a été désactivé sur ce serveur.', + 'backend.authorized': 'Vous n\'êtes pas authentifié et ne pouvez pas téléverser de fichier.', + 'backend.path': 'Le répertoire d\'upload spécifié n\'existe pas. Merci de contacter l\'administrateur de ce site Internet.', + 'backend.exists': 'Le chemin de d\'upload spécifié existe déjà. Merci de contacter l\'administrateur de ce site Internet.', + 'backend.mime': 'Le type de fichier spécifié n\'est pas autorisé.', + 'backend.extension': 'Le fichier uploadé a une extension inconnue ou interdite.', + 'backend.size': 'La taille de votre fichier est trop grande pour être uploadée sur ce serveur. Merci de sélectionner un fichier moins lourd.', + 'backend.partial': 'Le fichier a été partiellement uploadé, merci de recommencer l\'opération.', + 'backend.nofile': 'Aucun fichier n\'a été spécifié.', + 'backend.default': 'Une erreur s\'est produite.', + 'backend.path_not_writable': 'Problème de droit d\'écriture sur le dossier.', + 'backend.filename_maybe_too_large': 'Le chemin ou nom de fichier est probablement trop long. Réessayez avec un nom plus court.', + 'backend.fmt_not_allowed': 'Le format ou nom de fichier que vous souhaitez uploader n\'est pas autorisé.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'Une erreur inconnue est survenue lors de la communication avec le serveur.', + + 'backend.nonewfile': 'Le nouveau nom de fichier est manquant.', + 'backend.corrupt_img': 'Ce fichier est corrompu ou n\'est pas une image : ', // path + 'backend.resize_inerr': 'Ce fichier ne peut être redimensionné (erreur interne).', + 'backend.copy_failed': 'Une erreur est survenue lors de la copie de ce fichier / dossier : ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'Une erreur est survenue lors de la suppression du cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'Une erreur est survenue lors de la création du dossier : ', // path + 'backend.move_failed': 'Une erreur est survenue lors du déplacement / renommage du fichier / dossier : ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Altération de chemin détectée.', + 'backend.realpath_failed': 'Impossible de traduire le chemin de ce fichier en emplacement valide : ', // $path + 'backend.unlink_failed': 'Une erreur est survenue lors de la suppression du fichier / dossier : ', // path + + // Image.class.php: + 'backend.process_nofile': 'Le chemin du fichier à traiter n\'est pas valide.', + 'backend.imagecreatetruecolor_failed': 'Le traitement de l\'image a échoué : GD imagecreatetruecolor().', + 'backend.imagealphablending_failed': 'Le traitement de l\'image a échoué : Blending alpha impossible.', + 'backend.imageallocalpha50pctgrey_failed': 'Le traitement de l\'image a échoué : Mémoire insuffisante pour alpha channel et fond 50%.', + 'backend.imagecolorallocatealpha_failed': 'Le traitement de l\'image a échoué : Mémoire insuffisante pour alpha channel.', + 'backend.imagerotate_failed': 'Le traitement de l\'image a échoué : GD imagerotate().', + 'backend.imagecopyresampled_failed': 'Le traitement de l\'image a échoué : GD imagecopyresampled(). Résolution image : ', /* x * y */ + 'backend.imagecopy_failed': 'Le traitement de l\'image a échoué : GD imagecopy().', + 'backend.imageflip_failed': 'Le traitement de l\'image a échoué : Flip impossible.', + 'backend.imagejpeg_failed': 'Le traitement de l\'image a échoué : GD imagejpeg().', + 'backend.imagepng_failed': 'Le traitement de l\'image a échoué : GD imagepng().', + 'backend.imagegif_failed': 'Le traitement de l\'image a échoué : GD imagegif().', + 'backend.imagecreate_failed': 'Le traitement de l\'image a échoué : GD imagecreate().', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Résolution image : ', /* x * y */ + 'backend.no_imageinfo': 'Image corrompu ou fichier non image.', + 'backend.img_will_not_fit': 'Erreur serveur: Mémoire insuffisante; Minimum requis : ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'Format non supporté : ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Erreur inconnue', + duplicate: 'Vous ne pouvez pas ajouter "${name}" (${size}), car l\'élément est déjà ajoutée !', + sizeLimitMin: 'Vous ne pouvez pas ajouter "${name}" (${size}), la taille minimale des fichiers est de ${size_min}!', + sizeLimitMax: 'Vous ne pouvez pas ajouter "${name}" (${size}), la taille maximale des fichiers est de ${size_max}!', + mod_security: 'Aucune réponse de l\'uploadeur. "mod_security" est peut-être actif sur le serveur et un des rôles a annulé cette requête. Si vous ne pouvez désactiver mod_security, il vous faut utiliser NoFlash Uploader.' + }, + + flash: { + hidden: null, + disabled: null, + flash: 'Dans le but d\'uploader des fichiers, vous devez installer Adobe Flash.' + }, + + resizeImages: 'Redimensionner pendant l\'upload', + + serialize: 'Sauver la galerie', + gallery: { + text: 'Texte de l\'image', + save: 'Sauver', + remove: 'Retirer de la galerie', + drag: 'Glissez des images ici pour créer une galerie...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.it.js new file mode 100644 index 0000000000..3e1f6b770b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.it.js @@ -0,0 +1,125 @@ +/* +Script: Language.it.js + MooTools FileManager - Language Strings in English + +Translation: + Moreno Monga +*/ + +FileManager.Language.it = { + more: 'Dettagli', + width: 'Larghezza:', + height: 'Altezza:', + + ok: 'Ok', + open: 'Seleziona file', + upload: 'Upload', + create: 'Crea cartella', + createdir: 'Specifica il nome della cartella:', + cancel: 'Annulla', + error: 'Errore', + + information: 'Informazioni', + type: 'Tipo:', + size: 'Dimensione:', + dir: 'Percorso:', + modified: 'Ultima modifica:', + preview: 'Anteprima', + close: 'Chiudi', + destroy: 'Cancella', + destroyfile: 'Sei sicuro di voler cancellare questo file?', + + rename: 'Rinomina', + renamefile: 'Scrivi un nuovo nome per il file:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Download', + nopreview: 'Non sono disponibili anteprime', + + title: 'Titolo:', + artist: 'Artista:', + album: 'Album:', + length: 'Lunghezza:', + bitrate: 'Bitrate:', + + deselect: 'Deseleziona', + + nodestroy: 'La cancellazioni dei file è disabilitata.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'L Upload dei file è disabilitato.', + 'backend.authorized': 'Non sei autorizzato a fare l upload dei file.', + 'backend.path': 'La cartella degli upload non esiste. Contattare il webmaster.', + 'backend.exists': 'La cartella specificata per gli upload esiste già. Contattare il webmaster.', + 'backend.mime': 'Il tipo del file specificato non è consentito.', + 'backend.extension': 'Il tipo di file che si vuole caricare non è consentito o è sconosciuto.', + 'backend.size': 'La dimensione del file è troppo grande per essere processato. Ricarica un file con dimensioni ridotte.', + 'backend.partial': 'Il file è stato parzialmente caricato. Per favore, prova a ricaricarlo.', + 'backend.nofile': 'Non è stato specificato alcun file da caricare.', + 'backend.default': 'Mi spiace, l operazione non è andata a buon fine.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Errore sconosciuto', + sizeLimitMin: 'Non puoi caricare "${name}" (${size}), la dimensione minima del file è ${size_min}!', + sizeLimitMax: 'Non puoi caricare "${name}" (${size}), la dimensione massima del file è ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: 'To enable the embedded uploader, unblock it in your browser and refresh (see Adblock).', + disabled: 'To enable the embedded uploader, enable the blocked Flash movie and refresh (see Flashblock).', + flash: 'In order to upload files you need to install Adobe Flash.' + }, + + resizeImages: 'Ridimensiona immagini grandi', + + serialize: 'Salva galleria', + gallery: { + text: 'Titolo immagine', + save: 'Salva', + remove: 'Rimuovi dalla galleria', + drag: 'Sposta gli oggetti qui per creare una galleria...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.nl.js new file mode 100644 index 0000000000..ef80eb5681 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.nl.js @@ -0,0 +1,125 @@ +/* +Script: Language.nl.js + MooTools FileManager - Language Strings in Dutch + +Translation: + [Dave De Vos](http://wnz.be) +*/ + +FileManager.Language.nl = { + more: 'Details', + width: 'Breedte:', + height: 'Hoogte:', + + ok: 'Ok', + open: 'Kies bestand', + upload: 'Uploaden', + create: 'Maak map', + createdir: 'Geef een map-naam op:', + cancel: 'Annuleren', + error: 'Fout', + + information: 'Informatie', + type: 'Type:', + size: 'Grootte:', + dir: 'Locatie:', + modified: 'Laatste wijziging:', + preview: 'Voorbeeld', + close: 'Sluiten', + destroy: 'Verwijderen', + destroyfile: 'Ben je zeker dat je dit bestand wil verwijderen?', + + rename: 'Naam wijzigen', + renamefile: 'Geef een nieuwe bestandsnaam op:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Downloaden', + nopreview: 'Gn voorbeeld beschikbaar', + + title: 'Titel:', + artist: 'Artiest:', + album: 'Album:', + length: 'Lengte:', + bitrate: 'Bitrate:', + + deselect: 'Deselecteren', + + nodestroy: 'Het is niet mogelijk bestanden te verwijderen op deze server.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'Deze operatie is uitgeschakeld op deze server.', + 'backend.authorized': 'Je hebt geen toestemming om deze aktie uit te voeren.', + 'backend.path': 'Deze map bestaat niet. Contacteer de beheerder van deze website voor hulp.', + 'backend.exists': 'Deze locatie bestaat reeds. Contacteer de beheerder van deze website voor hulp.', + 'backend.mime': 'Dit bestandstype is niet toegelaten.', + 'backend.extension': 'Het bestand heeft een onbekende of niet-toegelaten extensie.', + 'backend.size': 'Het bestand is te groot voor verwerking. Probeer opnieuw met een kleiner bestand.', + 'backend.partial': 'Het bestand dat je verstuurde werd slechts gedeeltelijk ontvangen, probeer het bestand opnieuw te versturen.', + 'backend.nofile': 'Er werd gn bestand verstuurd of het bestand / folder kon niet worden gevonden.', + 'backend.default': 'Er ging iets fout bij het uploaden van het bestand.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Onbekende fout', + sizeLimitMin: 'Je kan het bestand "${name}" (${size}) niet toevoegen, de minimum bestandsgrootte voor upload is ${size_min}!', + sizeLimitMax: 'Je kan het bestand "${name}" (${size}) niet toevoegen, de minimum bestandsgrootte voor upload is ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: 'Om de ingebouwde uploader in te schakelen, deblokkeer deze in je browser en vernieuw de pagina (zie Adblock).', + disabled: 'Om de ingebouwde uploader in te schakelen, schakel het geblokkeerde Flash-component in en vernieuw de pagina (zie Flashblock).', + flash: 'Om bestanden te kunnen uploaden dien je Adobe Flash te installeren.' + }, + + resizeImages: 'Pas de dimensies van grote afbeeldingen aan', + + serialize: 'Save gallery', + gallery: { + text: 'Image caption', + save: 'Save', + remove: 'Remove from gallery', + drag: 'Drag items here to create a gallery...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.no.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.no.js new file mode 100644 index 0000000000..f7d2b8d520 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.no.js @@ -0,0 +1,123 @@ +/* +Script: Language.en.js + MooTools FileManager - Language Strings in Norwegian + +Translation: + [Eilen Amundsgård] +*/ + +FileManager.Language.no = { + more: 'Detaljer', + width: 'Bredde:', + height: 'Høyde:', + + ok: 'Ok', + open: 'Velg fil', + upload: 'Last opp', + create: 'Opprett mappe', + createdir: 'Angi mappenavn:', + cancel: 'Avbryt', + error: 'Feil', + + information: 'Informasjon', + type: 'Type:', + size: 'Størrelse:', + dir: 'Plassering:', + modified: 'Sist endret:', + preview: 'Forhåndsvisning', + close: 'Lukk', + destroy: 'Slett', + destroyfile: 'Er du sikker på at du vil slette denne filen?', + + rename: 'Endre navn', + renamefile: 'Angi et nytt filnavn:', + + download: 'Last ned', + nopreview: 'Ingen forhåndsvisning tilgjengelig', + + title: 'Tittel:', + artist: 'Artist:', + album: 'Album:', + length: 'Lengde:', + bitrate: 'Bitrate:', + + deselect: 'Fjern markering', + + nodestroy: 'Muligheten for å slette filer er deaktivert på denne serveren.', + + toggle_side_boxes: 'Thumbnail visning', + toggle_side_list: 'Liste visning', + show_dir_thumb_gallery: 'Vis thumbnails av filene i forhåndsvisningsruten', + drag_n_drop: 'Drag & drop er aktivert for denne mappen', + drag_n_drop_disabled: 'Drag & drop er midlertidig deaktivert for denne mappen', + goto_page: 'Gå til siden', + + 'backend.disabled': 'Opplasting av filer er deaktivert på denne serveren.', + 'backend.authorized': 'Du har ikke rettigheter til å laste opp filer.', + 'backend.path': 'Den angitte opplastingsmappen eksisterer ikke. Vennligst kontakt denne sidens administrator.', + 'backend.exists': 'Det angitte opplastingsplasseringen finnes allerede. Vennligst kontakt denne sidens administrator.', + 'backend.mime': 'Den angitte filtypen er ikke lovlig.', + 'backend.extension': 'Den opplastede filen er av en ukjent eller ulovlig filtype.', + 'backend.size': 'Størrelsen på den opplastede filen er for stor til å bli behandlet på denne serveren. Vennligst last opp en mindre fil.', + 'backend.partial': 'Filen du lastet opp ble bare delvis opplastet, vennligst prøv å laste opp filen på nytt.', + 'backend.nofile': 'Ingen fil ble angitt for opplasting.', + 'backend.default': 'Noe gikk galt under opplasting av filen.', + 'backend.path_not_writable': 'Du har ikke skrive-/opplastingrettigheter for denne mappen.', + 'backend.filename_maybe_too_large': 'Filnavnet/stien er sannsynligvis for lang for serverens filsystem. Vennligst forsøk igjen med et kortere filnavn.', + 'backend.fmt_not_allowed': 'Du har ikke rettigheter til å laste opp filer av denne typen eller med dette navnet.', + 'backend.unidentified_error': 'En uidentifiserbar feil oppsto under kontakten med backend (webserveren).', + + 'backend.nonewfile': 'Et nytt navn for filen som skal flyttes / kopieres mangler.', + 'backend.corrupt_img': 'Dette er enten ikke en bildefil eller så er den korrupt: ', // path + 'backend.resize_inerr': 'På grunn av en intern feil kan ikke denne filen endre størrelse.', + 'backend.copy_failed': 'En feil oppstod under kopiering av filen/mappen: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'En feil oppstod under et forsøk på å slette objektets cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'En feil oppstod under et forsøk på å opprette mappen: ', // path + 'backend.move_failed': 'En feil oppstod under flytting/endring av navn på filen/mappen: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Forsøk på å endre plassering er oppdaget.', + 'backend.realpath_failed': 'Kan ikke oversette den gitte filspesifikasjonen til en gylding lagringsadresse: ', // $path + 'backend.unlink_failed': 'En feil oppstod under et forsøk på å slette filen/mappen: ', // path + + // Image.class.php: + 'backend.process_nofile': 'Enheten for bildeprosessering fikk ikke en gyldig filplassering å jobbe på.', + 'backend.imagecreatetruecolor_failed': 'Enheten for bildeprosessering feilet: GD imagecreatetruecolor() feilet.', + 'backend.imagealphablending_failed': 'Enheten for bildeprosessering feilet: kan ikke utføre alpha blending på bildet.', + 'backend.imageallocalpha50pctgrey_failed': 'Enheten for bildeprosessering feilet: kan ikke allokere plass for alpha kanalen og 50% bakgrunn.', + 'backend.imagecolorallocatealpha_failed': 'Enheten for bildeprosessering feilet: kan ikke allokere plass for alpha kanalen for denne fargen.', + 'backend.imagerotate_failed': 'Enheten for bildeprosessering feilet: GD imagerotate() feilet.', + 'backend.imagecopyresampled_failed': 'Enheten for bildeprosessering feilet: GD imagecopyresampled() feilet. Bildeoppløsning: ', /* x * y */ + 'backend.imagecopy_failed': 'Enheten for bildeprosessering feilet: GD imagecopy() feilet.', + 'backend.imageflip_failed': 'Enheten for bildeprosessering feilet: kan ikke rotere bildet.', + 'backend.imagejpeg_failed': 'Enheten for bildeprosessering feilet: GD imagejpeg() feilet.', + 'backend.imagepng_failed': 'Enheten for bildeprosessering feilet: GD imagepng() feilet.', + 'backend.imagegif_failed': 'Enheten for bildeprosessering feilet: GD imagegif() feilet.', + 'backend.imagecreate_failed': 'Enheten for bildeprosessering feilet: GD imagecreate() feilet.', + 'backend.cvt2truecolor_failed': 'konvertering til True Color feilet. Bildeoppløsning: ', /* x * y */ + 'backend.no_imageinfo': 'Korrupt bilde eller ikke en bildefil.', + 'backend.img_will_not_fit': 'Server feil: bildet får ikke plass i tilgjengelig RAM; minimumskrav (estimat): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'bildeformat ikke støttet: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Ukjent feil', + sizeLimitMin: 'Du kan ikke laste opp "${name}" (${size}), minste tillatte størrelse er ${size_min}!', + sizeLimitMax: 'Du kan ikke laste opp "${name}" (${size}), største tillatte størrelse er ${size_max}!', + mod_security: 'Fikk ikke svar fra opplasteren, dette kan bety at "mod_security" er aktivert på serveren og at en av reglene i mod_security har avbrutt denne forespørselen. Hvis du ikke kan deaktivere mod_security, er det mulig du må bruke NoFlash opplasteren.' + }, + + flash: { + hidden: 'For å aktivere den innebygde opplasteren, fjern blokkeringen i din nettleser og oppdater siden (se Adblock).', + disabled: 'For å aktivere den innebygde opplasteren, aktiver den blokkerte Flashfilmen og oppdater siden (se Flashblock).', + flash: 'For å kunne laste opp filene dine må du installere Adobe Flash.' + }, + + resizeImages: 'Juster størrelse på store bilder under opplasting', + + serialize: 'Lagre galleri', + gallery: { + text: 'Bildetittel', + save: 'Lagre', + remove: 'Fjern fra galleri', + drag: 'Dra filer hit for å lage et galleri...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.pl.js new file mode 100644 index 0000000000..3d246305cd --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.pl.js @@ -0,0 +1,126 @@ +/* +Script: Language.pl.js + MooTools FileManager - Language Strings in Polish + +Translation: + [Marek Kalucki](http://www.webdeco.pl) + [Grzegorz Nakonieczny](http://naki.info/) +*/ + +FileManager.Language.pl = { + more: 'Szczegóły', + width: 'Szerokość:', + height: 'Wysokość:', + + ok: 'Ok', + open: 'Wybierz plik', + upload: 'Wyślij', + create: 'Utwórz folder', + createdir: 'Podaj nazwę folderu:', + cancel: 'Anuluj', + error: 'Błąd', + + information: 'Informacje', + type: 'Typ:', + size: 'Rozmiar:', + dir: 'Ścieżka:', + modified: 'Ost. modyfikacja:', + preview: 'Podgląd', + close: 'Zamknij', + destroy: 'Usuń', + destroyfile: 'Czy na pewno chcesz usunąć ten plik?', + + rename: 'Zmień nazwę', + renamefile: 'Podaj nową nazwę pliku:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Pobierz', + nopreview: 'Podgląd niedostępny', + + title: 'Tytuł:', + artist: 'Wykonawca:', + album: 'Płyta:', + length: 'Długość:', + bitrate: 'Przepływność:', + + deselect: 'Odznacz', + + nodestroy: 'Usuwanie plików z serwera zostało wyłączone.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'Wysyłanie plików na serwer zostało wyłączone.', + 'backend.authorized': 'Nie jesteś upoważniony do wysyłania plików na serwer.', + 'backend.path': 'Folder do wysyłania plików nie istnieje. Skontaktuj się z administratorem.', + 'backend.exists': 'Folder do wysyłania plików istnieje. Skontaktuj się z administratorem.', + 'backend.mime': 'Typ wybranego pliku jest niedozwolony.', + 'backend.extension': 'Wysyłany plik ma nieznane lub niedozwolone rozszerzenie.', + 'backend.size': 'Rozmiar wysyłanego pliku jest zbyt duży. Wyślij mniejszy plik (jeśli wysyłasz obrazy-zmniejsz obraz na swoim komputerze i ponów wysyłanie).', + 'backend.partial': 'Plik nie został wysłany w całości. Ponów próbę wysyłki pliku.', + 'backend.nofile': 'Nie wybrano pliku do wysyłki.', + 'backend.default': 'Wystąpił błąd w trakcie wysyłki.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Wystąpił nieznany błąd.', + sizeLimitMin: 'Nie można wybrać "${name}" (${size}), minimalny rozmiar pliku to ${size_min}!', + sizeLimitMax: 'Nie można wybrać "${name}" (${size}), maksymalny rozmiar pliku to ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: 'Aby włączyć wysyłanie plików, odblokuj go w swojej przeglądarce i odśwież stronę (prawdopodobnie wysyłanie plików jest blokowane przez wtyczkę Adblock).', + disabled: 'Aby włączyć wysyłanie plików, odblokuj obiekt Flash i odśwież stronę (prawdopodobnie wysyłanie plików blokowane jest przez wtyczkę Flashblock).', + flash: 'Aby wysyłać pliki na serwer, należy zainstalować w przeglądarce wtyczkę Adobe Flash.' + }, + + resizeImages: 'Zmniejsz duże obrazy w trakcie wysyłania', + + serialize: 'Zapisz galerię', + gallery: { + text: 'Podpis', + save: 'Zapisz', + remove: 'Usuń element z galerii', + drag: 'Przeciągnij tutaj elementy aby utworzyć galerię...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.pt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.pt.js new file mode 100644 index 0000000000..bbec8bc128 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.pt.js @@ -0,0 +1,125 @@ +/* +Script: Language.pt.js + MooTools FileManager - Language Strings in European Portuguese + +Translation: + [Alexandre Rocha](http://twitter.com/procy0n) +*/ + +FileManager.Language.pt = { + more: 'Detalhes', + width: 'Largura:', + height: 'Altura:', + + ok: 'Ok', + open: 'Seleccionar ficheiro', + upload: 'Enviar', + create: 'Criar pasta', + createdir: 'Por favor especifique o nome da pasta:', + cancel: 'Cancelar', + error: 'Erro', + + information: 'Informação', + type: 'Tipo:', + size: 'Tamanho:', + dir: 'Caminho:', + modified: 'Última modificação:', + preview: 'Pré-visualizar', + close: 'Fechar', + destroy: 'Apagar', + destroyfile: 'Tem a certeza que quer apagar este ficheiro?', + + rename: 'Renomear', + renamefile: 'Por favor introduza o novo nome do ficheiro:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Descarregar', + nopreview: 'Pré-visualização não disponível', + + title: 'Título:', + artist: 'Artista:', + album: 'Album:', + length: 'Duração:', + bitrate: 'Taxa de bits:', + + deselect: 'Desfazer', + + nodestroy: 'Apagamento de ficheiros desactivado neste servidor.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'Envio de ficheiros desactivado neste servidor.', + 'backend.authorized': 'Não está autenticado para o envio de ficheiros.', + 'backend.path': 'A pasta especificada para envio de ficheiros não existe. Por favor contacte o administrador do site.', + 'backend.exists': 'O caminho especificado já existe. Por favor contacte o administrador do site.', + 'backend.mime': 'Tipo de ficheiro especificado não permitido.', + 'backend.extension': 'Extensão do ficheiro enviado desconhecido ou não permitido.', + 'backend.size': 'Tamanho do ficheiro demasiado grande para ser processado neste servidor. Por favor envie um ficheiro mais pequeno.', + 'backend.partial': 'Envio incompleto do ficheiro, por favor tente novamente.', + 'backend.nofile': 'Nenhum ficheiro seleccionado para enviar.', + 'backend.default': 'Erro no envio do ficheiro.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Erro desconhecido', + sizeLimitMin: 'Não é permitido anexar "${name}" (${size}), o tamanho mínimo do ficheiro é de${size_min}!', + sizeLimitMax: 'Não é permitido anexar "${name}" (${size}), o tamanho máximo do ficheiro é de ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: 'Para activar o envio, desbloqueie-o no navegador e recarregue a página (ver Adblock).', + disabled: 'Para activar o envio, active o ficheiro Flash e recarregue a página (ver Flashblock).', + flash: 'Para enviar ficheiros precisa de instalar Adobe Flash.' + }, + + resizeImages: 'Redimensionar imagens grandes ao enviar', + + serialize: 'Guardar galeria', + gallery: { + text: 'Legenda da imagem', + save: 'Guardar', + remove: 'Remover da galeria', + drag: 'Arraste os items para criar a galeria...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.ru.js new file mode 100644 index 0000000000..b4bcbf2225 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.ru.js @@ -0,0 +1,125 @@ +/* +Script: Language.ru.js + MooTools FileManager - Language Strings in Russian + +Translation: + [Ilya V. Goryachev](http://cok-studio.ru/) +*/ + +FileManager.Language.ru = { + more: 'Подробнее', + width: 'Ширина:', + height: 'Высота:', + + ok: 'Ok', + open: 'Выбрать файл', + upload: 'Загрузка', + create: 'Создать папку', + createdir: 'Пожалуйста укажите имя папки:', + cancel: 'Отмена', + error: 'Ошибка', + + information: 'Информация', + type: 'Тип:', + size: 'Размер:', + dir: 'Путь:', + modified: 'Последнее изменение:', + preview: 'Предпросмотр', + close: 'Закрыть', + destroy: 'Удалить', + destroyfile: 'Уверены, что хотите удалить этот файл?', + + rename: 'Переименовать', + renamefile: 'Пожалуйста укажите имя файла:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Скачать', + nopreview: 'Предпросмотр недоступен', + + title: 'Название:', + artist: 'Исполнитель:', + album: 'Альбом:', + length: 'Продолжительность:', + bitrate: 'Битрэйт:', + + deselect: 'Снять выделение', + + nodestroy: 'Удаление файлов отключено на сервере.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'Загрузка файлов отключена на сервере.', + 'backend.authorized': 'Вам не разрешено загружать файлы.', + 'backend.path': 'Указанная директория для загрузки файлов не существует. Пожалуйста обратитесь к администратору сайта.', + 'backend.exists': 'Указанная директория для загрузки файлов уже существует. Пожалуйста обратитесь к администратору сайта', + 'backend.mime': 'Такой тип файла не поддерживается.', + 'backend.extension': 'Загруженный файл не опознан или такое расширение не разрешено.', + 'backend.size': 'Размер загружаемого файла слишком велик. Пожалуйста загрузите файл поменьше.', + 'backend.partial': 'Файл был загружен частично, пожалуйста загрузите этот файл еще раз.', + 'backend.nofile': 'Не указаны файлы для загрузки.', + 'backend.default': 'При загрузке файлов что-то пошло не так.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Неизвестная ошибка', + sizeLimitMin: 'Невозможно прикрепить файл "${name}" (${size}), минимальный размер фала ${size_min}!', + sizeLimitMax: 'Невозможно прикрепить файл "${name}" (${size}), максимальный размер файла ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: 'Чтобы включить embedded загрузчик, разблокируйте подключаемые элементы в вашем браузере (см. Блокировку рекламы).', + disabled: 'Чтобы включить embedded загрузчик, снимите блокировку флеш и обновите страницу (см. Блокировка флеш).', + flash: 'Чтобы загружать файлы, Вам необходимо установить Adobe Flash.' + }, + + resizeImages: 'Менять размер больших изображений при загрузке', + + serialize: 'Save gallery', + gallery: { + text: 'Image caption', + save: 'Save', + remove: 'Remove from gallery', + drag: 'Drag items here to create a gallery...' + } +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.se.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.se.js new file mode 100644 index 0000000000..7d7fe83320 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/Language.se.js @@ -0,0 +1,126 @@ +/* +Script: Language.se.js + MooTools FileManager - Language Strings in Swedish + +Translation: + [Marcus *xintron* Carlsson](http://xintron.se) +*/ + +FileManager.Language.se = { + more: 'Detaljer', + width: 'Bredd:', + height: 'Höjd:', + + ok: 'Ok', + open: 'Välj fil', + upload: 'Ladda upp', + create: 'Skapa mapp', + createdir: 'Vänligen ange ett mapp-namn:', + cancel: 'Avbryt', + error: 'Fel', + + information: 'Information', + type: 'Typ:', + size: 'Storlek:', + dir: 'Sökväg:', + modified: 'Senast ändad:', + preview: 'Förhandsgranska', + close: 'Stäng', + destroy: 'Ta bort', + destroyfile: 'Är du säker på att du vill ta bort filen?', + + rename: 'Döp om', + renamefile: 'Vänligen ange ett nytt filnamn:', + rn_mv_cp: 'Rename/Move/Copy', + + download: 'Ladda ner', + nopreview: 'Ingen förhandsgranskning tillgänglig', + + title: 'Titel:', + artist: 'Artist:', + album: 'Album:', + length: 'Längd:', + bitrate: 'Bitrate:', + + deselect: 'Avmarkera', + + nodestroy: 'Funktionen ta bort filer är avstängd på denna server.', + + toggle_side_boxes: 'Thumbnail view', + toggle_side_list: 'List view', + show_dir_thumb_gallery: 'Show thumbnails of the files in the preview pane', + drag_n_drop: 'Drag & drop has been enabled for this directory', + drag_n_drop_disabled: 'Drag & drop has been temporarily disabled for this directory', + goto_page: 'Go to page', + + 'backend.disabled': 'Uppladdning är avstängt på denna server.', + 'backend.authorized': 'Du har inte behörighet att ladda upp filer.', + 'backend.path': 'Den angivna uppladdnings-mappen existerar inte. Vänligen kontakta serveradministratören.', + 'backend.exists': 'Den angivna uppladdnings-mappen existerar redan. Vänligen kontakta serveradministratören.', + 'backend.mime': 'Denna filtyp accepteras inte på denna server.', + 'backend.extension': 'Den uppladdade filen har en okänd eller förbjuden filändelse.', + 'backend.size': 'Filen är för stor för denna server. Vänligen ladda upp en mindre fil.', + 'backend.partial': 'Ett fel uppstod och hela filen kunde inte laddas upp. Vänligen försök igen.', + 'backend.nofile': 'Du måste välja en fil att ladda upp.', + 'backend.default': 'Ett fel inträffade under uppladdningen.', + 'backend.path_not_writable': 'You do not have write/upload permissions for this directory.', + 'backend.filename_maybe_too_large': 'The filename/path is probably too long for the server filesystem. Please retry with a shorter file name.', + 'backend.fmt_not_allowed': 'You are not allowed to upload this file format/name.', + 'backend.read_error': 'Cannot read / download the specified file.', + 'backend.unidentified_error': 'An unindentified error occurred while communicating with the backend (web server).', + + 'backend.nonewfile': 'A new name for the file to be moved / copied is missing.', + 'backend.corrupt_img': 'This file is a not a image or a corrupt file: ', // path + 'backend.resize_inerr': 'This file could not be resized due to an internal error.', + 'backend.copy_failed': 'An error occurred while copying the file / directory: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': 'An error occurred when attempting to delete the item cache (thumbnails, metadata)', + 'backend.mkdir_failed': 'An error occurred when attempting to create the directory: ', // path + 'backend.move_failed': 'An error occurred while moving / renaming the file / directory: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': 'Path tampering detected.', + 'backend.realpath_failed': 'Cannot translate the given file specification to a valid storage location: ', // $path + 'backend.unlink_failed': 'An error occurred when attempting to delete the file / directory: ', // path + + // Image.class.php: + 'backend.process_nofile': 'The image processing unit did not receive a valid file location to work on.', + 'backend.imagecreatetruecolor_failed': 'The image processing unit failed: GD imagecreatetruecolor() failed.', + 'backend.imagealphablending_failed': 'The image processing unit failed: cannot perform the required image alpha blending.', + 'backend.imageallocalpha50pctgrey_failed': 'The image processing unit failed: cannot allocate space for the alpha channel and the 50% background.', + 'backend.imagecolorallocatealpha_failed': 'The image processing unit failed: cannot allocate space for the alpha channel for this color image.', + 'backend.imagerotate_failed': 'The image processing unit failed: GD imagerotate() failed.', + 'backend.imagecopyresampled_failed': 'The image processing unit failed: GD imagecopyresampled() failed. Image resolution: ', /* x * y */ + 'backend.imagecopy_failed': 'The image processing unit failed: GD imagecopy() failed.', + 'backend.imageflip_failed': 'The image processing unit failed: cannot flip the image.', + 'backend.imagejpeg_failed': 'The image processing unit failed: GD imagejpeg() failed.', + 'backend.imagepng_failed': 'The image processing unit failed: GD imagepng() failed.', + 'backend.imagegif_failed': 'The image processing unit failed: GD imagegif() failed.', + 'backend.imagecreate_failed': 'The image processing unit failed: GD imagecreate() failed.', + 'backend.cvt2truecolor_failed': 'conversion to True Color failed. Image resolution: ', /* x * y */ + 'backend.no_imageinfo': 'Corrupt image or not an image file at all.', + 'backend.img_will_not_fit': 'Server error: image does not fit in available RAM; minimum required (estimate): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': 'unsupported image format: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: 'Okänt fel', + duplicate: 'Du kan inte ladda upp "${name}" (${size}), filen existerar redan!', + sizeLimitMin: 'Du kan inte ladda upp "${name}" (${size}), minsta storlek som accepteras är ${size_min}!', + sizeLimitMax: 'Du kan inte ladda upp "${name}" (${size}), filens storlek får inte överstiga ${size_max}!', + mod_security: 'No response was given from the uploader, this may mean that "mod_security" is active on the server and one of the rules in mod_security has cancelled this request. If you can not disable mod_security, you may need to use the NoFlash Uploader.' + }, + + flash: { + hidden: null, + disabled: null, + flash: 'För att kunna ladda upp filer behöver du ha Adobe Flash installerat.' + }, + + resizeImages: 'Ändra storleken på bilden under uppladdningen', + + serialize: 'Save gallery', + gallery: { + text: 'Image caption', + save: 'Save', + remove: 'Remove from gallery', + drag: 'Drag items here to create a gallery...' + } +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/language.zh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/language.zh.js new file mode 100644 index 0000000000..c11c0c675c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Language/language.zh.js @@ -0,0 +1,123 @@ +/* +Script: Language.en.js + MooTools FileManager - Language Strings in Simplified Chinese + +Translation: + [Ronfey Li] (email: tangdaoke@gmail.com) +*/ + +FileManager.Language.zh = { + more: '详细', + width: '宽:', + height: '高:', + + ok: '好', + open: '选择文件', + upload: '上传', + create: '新建文件夹', + createdir: '请指定一个文件夹:', + cancel: '取消', + error: '出错', + + information: '详细信息', + type: '类别:', + size: '大小:', + dir: '路径:', + modified: '最后更改:', + preview: '预览', + close: '关闭', + destroy: '删除', + destroyfile: '确定删除此文件?', + + rename: '重命名', + renamefile: '请输入新的文件名:', + + download: '下载', + nopreview: '不适用', + + title: '标题:', + artist: '艺术家:', + album: '专辑:', + length: '时间:', + bitrate: '比率:', + + deselect: '取消选择', + + nodestroy: '删除受限.', + + toggle_side_boxes: '缩略图视图', + toggle_side_list: '列表视图', + show_dir_thumb_gallery: '预览面板显示文件缩略图', + drag_n_drop: '此文件夹的拖放功能已开启', + drag_n_drop_disabled: '此文件夹的拖放功能已暂时关闭', + goto_page: '转至页码', + + 'backend.disabled': '上传受限。', + 'backend.authenticated': '您没有上传的权限。', + 'backend.path': '上传文件夹不存在,请联系网管。', + 'backend.exists': '上传位置已经存在,请联系网管。', + 'backend.mime': '禁止的文件类型。', + 'backend.extension': '上传未知或是禁止的文件类型。', + 'backend.size': '文件过大,请重新上传小些的文件。', + 'backend.partial': '上传的文件不完全,请重新上传。', + 'backend.nofile': '没有指定文件。', + 'backend.default': '上传出错。', + 'backend.path_not_writable': '您没有更改或上传此文件夹的权限。', + 'backend.filename_maybe_too_large': '文件名过长。请重新输入短些的名称。', + 'backend.fmt_not_allowed': '此文件类型禁止上传。', + 'backend.unidentified_error': '与后台服务器通讯发生未知错误。', + + 'backend.nonewfile': '找不到待拷贝或移动的文件的新名称.', + 'backend.corrupt_img': '此文件不是图像或者已损坏: ', // path + 'backend.resize_inerr': '出现内部错误此文件不能更改大小.', + 'backend.copy_failed': '复制错误: ', // oldlocalpath : newlocalpath + 'backend.delete_cache_entries_failed': '删除图像缓存(缩略图,元数据)出错', + 'backend.mkdir_failed': '创建文件夹出错:', // path + 'backend.move_failed': '移动/重命名文件或文件夹出错: ', // oldlocalpath : newlocalpath + 'backend.path_tampering': '检测到路径更改.', + 'backend.realpath_failed': '不能保存到有效的路径: ', // $path + 'backend.unlink_failed': '删除文件或文件夹出错: ', // path + + // Image.class.php: + 'backend.process_nofile': '图像处理器收到无效的文件路径。', + 'backend.imagecreatetruecolor_failed': '图像处理器出错: GD imagecreatetruecolor() 失败.', + 'backend.imagealphablending_failed': '图像处理器出错: 不能执行图像alpha混合.', + 'backend.imageallocalpha50pctgrey_failed': '图像处理器出错: 不能分配空间给alpha通道和50%背景。', + 'backend.imagecolorallocatealpha_failed': '图像处理器出错: 不能分配空间给当前彩色图像的alpha通道。', + 'backend.imagerotate_failed': '图像处理器出错: GD imagerotate() 失败.', + 'backend.imagecopyresampled_failed': '图像处理器出错: GD imagecopyresampled() 失败. 图像分辨率: ', /* x * y */ + 'backend.imagecopy_failed': '图像处理器出错: GD imagecopy() 失败.', + 'backend.imageflip_failed': '图像处理器出错: 不能翻转图像.', + 'backend.imagejpeg_failed': '图像处理器出错: GD imagejpeg() 失败.', + 'backend.imagepng_failed': '图像处理器出错: GD imagepng() 失败.', + 'backend.imagegif_failed': '图像处理器出错: GD imagegif() 失败.', + 'backend.imagecreate_failed': '图像处理器出错:GD imagecreate() 失败.', + 'backend.cvt2truecolor_failed': '转换真彩色失败。图像分辨率: ', /* x * y */ + 'backend.no_imageinfo': '损坏的图像或者文件不是图像.', + 'backend.img_will_not_fit': '服务器出错: 内存不够;最低要求(估计): ', /* XXX MBytes */ + 'backend.unsupported_imgfmt': '不支持的图像格式: ', /* jpeg/png/gif/... */ + + /* FU */ + uploader: { + unknown: '未知错误', + sizeLimitMin: '添加 "${name}" (${size})失败, 文件不足${size_min}!', + sizeLimitMax: '添加 "${name}" (${size})失败, 文件超过${size_max}!', + mod_security: '上传器没有反应,很可能是因为“mod_security”是开启的同时它的其中一个规则取消了上传请求。如果您不能解除“mod_security”,请使用非flash上传器。' + }, + + flash: { + hidden: '为了使上传器生效,取消浏览器阻止,然后刷新 (见Adblock).', + disabled: '为了使上传器生效, 取消阻止Flash,然后刷新 (见Flashblock).', + flash: '上传前需安装好Adobe Flash.' + }, + + resizeImages: '缩小大尺寸图像', + + serialize: '保存为画廊', + gallery: { + text: '图片描述', + save: '保存', + remove: '从画廊移除', + drag: '拖动至此创建画廊...' + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/FileManager.TinyMCE.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/FileManager.TinyMCE.js new file mode 100644 index 0000000000..db95e4ca0f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/FileManager.TinyMCE.js @@ -0,0 +1,67 @@ +/* +--- + +description: MooTools FileManager for integration with [TinyMCE](http://tinymce.moxiecode.com/) + +authors: Christoph Pojer (@cpojer) + +license: MIT-style license. + +requires: [Core/*] + +provides: FileManager.TinyMCE + +Usage: + - Pass this to the "file_browser_callback"-option of TinyMCE: FileManager.TinyMCE(function(){ return {FileManagerOptions}; }); + - See the Demo for an example. +... +*/ + +FileManager.TinyMCE = function(options){ + /* + * field: Id of the element to set value in. + * url: value currently stored in the indicated element + * type: Type of browser to open image/file/flash: 'file' ~ page links, 'image' ~ insert picture, 'media' ~ insert media/movie + * win: window object reference + */ + return function(field, url, type, win){ + var manager; // jsLint warning fix + manager = new FileManager(Object.append({ + onComplete: function(path, file, mgr) { + if (!win.document) + return; + //path = manager.escapeRFC3986(path); + win.document.getElementById(field).value = path; + if (win.ImageDialog) { + win.ImageDialog.showPreviewImage(path, 1); + } + this.container.destroy(); + } + }, options(type), + { + zIndex: 400000, + styles: { + 'width': '90%', + 'height': '90%' + } + })); + var src = win.document.getElementById(field).value; + + src = decodeURI(src); + + if (src.length > 0) + { + //src = this.documentBaseURI.toAbsolute(src); + } + if (src.match(/^[a-z]+:/i)) + { + // strip off scheme + authority sections: + src = src.replace(/^[a-z]+:(\/\/?)[^\/]*/i, ''); + } + + // pass full path to 'preselect': backend will take care of it for us + manager.show(null, null, (src.length > 0 ? src : null)); + return manager; + }; +}; + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/FileManager.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/FileManager.js new file mode 100644 index 0000000000..d8e6727741 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/FileManager.js @@ -0,0 +1,3986 @@ +/* +--- + +description: FileManager + +authors: Christoph Pojer (@cpojer), Fabian Vogelsteller (@frozeman) + +license: MIT-style license + +requires: + core/1.3.2: '*' + more/1.3.2.1: [Request.Queue, Array.Extras, String.QueryString, Hash, Element.Delegation, Element.Measure, Fx.Scroll, Fx.SmoothScroll, Drag, Drag.Move, Assets, Tips, Scroller ] + +provides: Filemanager + +... +*/ + +var FileManager = new Class({ + + Implements: [Options, Events], + + Request: null, + RequestQueue: null, + Directory: null, + Current: null, + ID: null, + + options: { + /* + * onComplete: function( // Fired when the 'Select' button is clicked + * path, // URLencoded absolute URL path to selected file + * file, // the file specs object: .name, .path, .size, .date, .mime, .icon, .icon48, .thumb48, .thumb250 + * fmobj // reference to the FileManager instance which fired the event + * ) + * + * onModify: function( // Fired when either the 'Rename' or 'Delete' icons are clicked or when a file is drag&dropped. + * // Fired AFTER the action is executed. + * file, // a CLONE of the file specs object: .name, .path, .size, .date, .mime, .icon, .icon48, .thumb48, .thumb250 + * json, // The JSON data as sent by the server for this 'destroy/rename/move/copy' request + * mode, // string specifying the action: 'destroy', 'rename', 'move', 'copy' + * fmobj // reference to the FileManager instance which fired the event + * ) + * + * onShow: function( // Fired AFTER the file manager is rendered + * fmobj // reference to the FileManager instance which fired the event + * ) + * + * onHide: function( // Fired AFTER the file manager is removed from the DOM + * fmobj // reference to the FileManager instance which fired the event + * ) + * + * onScroll: function( // Cascade of the window scroll event + * e, // reference to the event object (argument passed from the window.scroll event) + * fmobj // reference to the FileManager instance which fired the event + * ) + * + * onPreview: function( // Fired when the preview thumbnail image is clicked + * src, // this.get('src') ??? + * fmobj, // reference to the FileManager instance which fired the event + * el // reference to the 'this' ~ the element which was clicked + * ) + * + * onDetails: function( // Fired when an item is picked from the files list to be previewed + * // Fired AFTER the server request is completed and BEFORE the preview is rendered. + * json, // The JSON data as sent by the server for this 'detail' request + * fmobj // reference to the FileManager instance which fired the event + * ) + * + * onHidePreview: function( // Fired when the preview is hidden (e.g. when uploading) + * // Fired BEFORE the preview is removed from the DOM. + * fmobj // reference to the FileManager instance which fired the event + * ) + */ + directory: '', // (string) the directory (relative path) which should be loaded on startup (show). + url: null, + assetBasePath: null, + language: 'en', + selectable: false, + destroy: false, + rename: false, + move_or_copy: false, + download: false, + createFolders: false, + filter: '', + listType: 'thumb', // the standard list type can be 'list' or 'thumb' + keyboardNavigation: true, // set to false to turn off keyboard navigation (tab, up/dn/pageup/pagedn etc) + detailInfoMode: '', // (string) whether you want to receive extra metadata on select/etc. and/or view this metadata in the preview pane (modes: '', '+metaHTML', '+metaJSON'. Modes may be combined) + previewHandlers: {}, // [partial] mimetype: function, function is called with previewArea (DOM element, put preview in here), fileDetails + // eg { 'audio': function(previewArea,fileDetails){ previewArea.adopt(new Element('div', {text:'Hello World'});} } + deliverPathAsLegalURL: false, // (boolean) TRUE: deliver 'legal URL' paths, i.e. 'directory'-rooted, FALSE: deliver absolute URI paths. + hideOnClick: false, + hideClose: false, + hideOverlay: false, + hideOnDelete: false, + hideOnSelect: true, // (boolean). Default to true. If set to false, it leavers the FM open after a picture select. + showDirGallery: true, + thumbSize4DirGallery: 120, // To set the thumb gallery container size for each thumb (dir-gal-thumb-bg); depending on size, it will pick either the small or large thumbnail provided by the backend and scale that one + zIndex: 1000, + styles: {}, + listPaginationSize: 100, // add pagination per N items for huge directories (speed up interaction) + listPaginationAvgWaitTime: 2000, // adaptive pagination: strive to, on average, not spend more than this on rendering a directory chunk + listMaxSuggestedDirSizeForThumbnails: 30, // if a directory load has more than this many items (dirs+files), and the view mode is currently thumbs + // it is dropped back to the listing view mode, the user can still switch back, at their own risk! + standalone: true, // (boolean). Default to true. If set to false, returns the Filemanager without enclosing window / overlay. + parentContainer: null, // (string). ID of the parent container. If not set, FM will consider its first container parent for fitSizes(); + propagateData: {}, // extra query parameters sent with every request to the backend + verbose: false, + mkServerRequestURL: null // (function) specify your own alternative URL/POST data constructor when you use a framework/system which requires such. function([object] fm_obj, [string] request_code, [assoc.array] post_data) + }, + + /* + * hook items are objects (kinda associative arrays, as they are used here), where each + * key item is called when the hook is invoked. + */ + hooks: { + show: {}, // invoked after the 'show' event + cleanup: {}, // invoked before the 'hide' event + cleanupPreview: {}, // invoked before the 'hidePreview' event + fill: {} // invoked after the fill operation has completed + }, + + initialize: function(options) { + this.options.mkServerRequestURL = this.mkServerRequestURL; + + this.setOptions(options); + + if(typeof this.options.previewHandlers.audio === 'undefined') + { + this.options.previewHandlers.audio = this.audioPreview.bind(this); + } + + this.diag.verbose = this.options.verbose; + this.ID = String.uniqueID(); + this.droppables = []; + this.assetBasePath = this.options.assetBasePath.replace(/(\/|\\)*$/, '/'); + this.root = null; + this.CurrentDir = null; + this.listType = this.options.listType; + this.dialogOpen = false; + this.storeHistory = false; + this.fmShown = false; + this.drop_pending = 0; // state: 0: no drop pending, 1: copy pending, 2: move pending + this.view_fill_timer = null; // timer reference when fill() is working chunk-by-chunk. + this.view_fill_startindex = 0; // offset into the view JSON array: which part of the entire view are we currently watching? + this.view_fill_json = null; // the latest JSON array describing the entire list; used with pagination to hop through huge dirs without repeatedly consulting the server. + this.listPaginationLastSize = this.options.listPaginationSize; + this.Request = null; + this.downloadIframe = null; + this.downloadForm = null; + this.drag_is_active = false; + this.ctrl_key_pressed = false; + this.pending_error_dialog = null; + // timer for dir-gallery click / dblclick events: + this.dir_gallery_click_timer = null; + + var dbg_cnt = 0; + + this.RequestQueue = new Request.Queue({ + concurrent: 3, // 3 --> 75% max load on a quad core server + autoAdvance: true, + stopOnFailure: false, + + onRequest: (function(){ + //this.diag.log('request queue: onRequest: ', arguments); + }).bind(this), + + onComplete: (function(name){ + //this.diag.log('request queue: onComplete: ', arguments); + + // clean out the item from the queue; doesn't seem to happen automatically :-( + var cnt = 0; + Object.each(this.RequestQueue.requests, function() { + cnt++; + }); + // cut down on the number of reports: + if (Math.abs(cnt - dbg_cnt) >= 25) + { + this.diag.log('request queue: name counts: ', cnt, ', queue length: ', this.RequestQueue.queue.length); + dbg_cnt = cnt; + } + + }).bind(this), + + onCancel: (function(){ + this.diag.log('request queue: onCancel: ', arguments); + }).bind(this), + + onSuccess: (function(){ + //this.diag.log('request queue: onSuccess: ', arguments); + }).bind(this), + + onFailure: (function(name){ + this.diag.log('request queue: onFailure: ', arguments); + }).bind(this), + + onException: (function(name){ + this.diag.log('request queue: onException: ', arguments); + }).bind(this) + + }); + + // add a special custom routine to the queue object: we want to be able to clear PART OF the queue! + this.RequestQueue.cancel_bulk = (function(marker) + { + Object.each(this.requests, function(q, name) + { + var n = name.split(':'); + if (n[0] === marker) + { + // match! revert by removing the request (and cancelling it!) + this.cancel(name); + this.removeRequest(name); + + this.clear(name); // eek, a full table scan! yech. + delete this.requests[name]; + delete this.reqBinders[name]; + } + }, this); + + // now that we have cleared out all those requests, some of which may have been running at the time, we need to resume the loading: + this.resume(); + + }).bind(this.RequestQueue); + + this.language = Object.clone(FileManager.Language.en); + if (this.options.language !== 'en') { + this.language = Object.merge(this.language, FileManager.Language[this.options.language]); + } + +// Partikule + if (!this.options.standalone) + { + this.options.hideOverlay = true; + this.options.hideClose = true; + } +// /Partikule + + this.container = new Element('div', { + 'class': 'filemanager-container' + (Browser.opera ? ' filemanager-engine-presto' : '') + (Browser.ie ? ' filemanager-engine-trident' : '') + (Browser.ie8 ? '4' : '') + (Browser.ie9 ? '5' : ''), + styles: + { + 'z-index': this.options.zIndex + } + }); + this.filemanager = new Element('div', { + 'class': 'filemanager', + styles: Object.append({}, + this.options.styles, + { + 'z-index': this.options.zIndex + 1 + }) + }).inject(this.container); + this.header = new Element('div', { + 'class': 'filemanager-header' /* , + styles: + { + 'z-index': this.options.zIndex + 3 + } */ + }).inject(this.filemanager); + this.menu = new Element('div', { + 'class': 'filemanager-menu' /* , + styles: + { + 'z-index': this.options.zIndex + 2 + } */ + }).inject(this.filemanager); + this.loader = new Element('div', {'class': 'loader', opacity: 0, tween: {duration: 'short'}}).inject(this.header); + this.previewLoader = new Element('div', {'class': 'loader', opacity: 0, tween: {duration: 'short'}}); + this.browserLoader = new Element('div', {'class': 'loader', opacity: 0, tween: {duration: 'short'}}); + // switch the path, from clickable to input text + this.clickablePath = new Element('span', {'class': 'filemanager-dir'}); + this.selectablePath = new Element('input',{'type': 'text', 'class': 'filemanager-dir', 'readonly': 'readonly'}); + this.pathTitle = new Element('a', {href:'#','class': 'filemanager-dir-title',text: this.language.dir}).addEvent('click',(function(e) { + this.diag.log('pathTitle-click event: ', e, ' @ ', e.target.outerHTML); + e.stop(); + if (this.header.getElement('span.filemanager-dir') !== null) { + this.selectablePath.setStyle('width',(this.header.getSize().x - this.pathTitle.getSize().x - 55)); + this.selectablePath.replaces(this.clickablePath); + } + else { + this.clickablePath.replaces(this.selectablePath); + } + }).bind(this)); + this.header.adopt(this.pathTitle,this.clickablePath); + +// Partikule +// Because the header is positioned -30px before the container, we hide it for the moment if the FM isn't standalone. +// Need to think about a better integration + if (!this.options.standalone) + { + this.header.hide(); + this.filemanager.setStyle('width', '100%'); + } +// /Partikule + + var self = this; + + this.browsercontainer = new Element('div',{'class': 'filemanager-browsercontainer'}).inject(this.filemanager); + this.browserheader = new Element('div',{'class': 'filemanager-browserheader'}).inject(this.browsercontainer); + this.browserheader.adopt(this.browserLoader); + this.browserScroll = new Element('div', {'class': 'filemanager-browserscroll'}).inject(this.browsercontainer).addEvents({ + 'mouseover': (function(e) { + //this.diag.log('mouseover: ', e); + + // sync mouse and keyboard-driven browsing: the keyboard requires that we keep track of the hovered item, + // so we cannot simply leave it to a :hover CSS style. Instead, we find out which element is currently + // hovered: + var row = null; + if (e.target) + { + row = (e.target.hasClass('fi') ? e.target : e.target.getParent('span.fi')); + if (row) + { + row.addClass('hover'); + } + } + this.browser.getElements('span.fi.hover').each(function(span) { + // prevent screen flicker: only remove the class for /other/ nodes: + if (span != row) { + span.removeClass('hover'); + var rowicons = span.getElements('img.browser-icon'); + if (rowicons) + { + rowicons.each(function(icon) { + icon.set('tween', {duration: 'short'}).fade(0); + }); + } + } + }); + + if (row) + { + var icons = row.getElements('img.browser-icon'); + if (icons) + { + icons.each(function(icon) { + if (e.target == icon) + { + icon.set('tween', {duration: 'short'}).fade(1); + } + else + { + icon.set('tween', {duration: 'short'}).fade(0.5); + } + }); + } + } + }).bind(this), + + /* 'mouseout' */ + 'mouseleave': (function(e) { + //this.diag.log('mouseout: ', e); + + // only bother us when the mouse cursor has just left the browser area; anything inside there is handled + // by the recurring 'mouseover' event above... + // + // - do NOT remove the 'hover' marker from the row; it will be used by the keyboard! + // - DO fade out the action icons, though! + this.browser.getElements('span.fi.hover').each(function(span) { + var rowicons = span.getElements('img.browser-icon'); + if (rowicons) + { + rowicons.each(function(icon) { + icon.set('tween', {duration: 'short'}).fade(0); + }); + } + }); + + }).bind(this) + }); + this.browserMenu_thumb = new Element('a',{ + 'id':'toggle_side_boxes', + 'class':'listType', + 'style' : 'margin-right: 10px;', + 'title': this.language.toggle_side_boxes + }).setStyle('opacity',0.5).addEvents({ + click: this.toggleList.bind(this) + }); + this.browserMenu_list = new Element('a',{ + 'id':'toggle_side_list', + 'class':'listType', + 'title': this.language.toggle_side_list + }).setStyle('opacity',1).addEvents({ + click: this.toggleList.bind(this) + }); + + if(this.listType == 'thumb') { + this.browserMenu_thumb.setStyle('opacity',1); + this.browserMenu_list.setStyle('opacity',0.5); + this.browserMenu_thumb.store('set', true); + this.browserMenu_list.store('set', false); + } + else + { + this.browserMenu_thumb.setStyle('opacity',0.5); + this.browserMenu_list.setStyle('opacity',1); + this.browserMenu_thumb.store('set', false); + this.browserMenu_list.store('set', true); + } + + // Add a scroller to scroll the browser list when dragging a file + this.scroller = new Scroller(this.browserScroll, { + onChange: function(x, y) + { + // restrict scrolling to Y direction only! + //this.element.scrollTo(x, y); + var scroll = this.element.getScroll(); + this.element.scrollTo(scroll.x, y); + } + }); + + if(this.options.showDirGallery) + { +// Partikule : Thumbs list in preview panel + this.browserMenu_thumbList = new Element('a',{ + 'id': 'show_dir_thumb_gallery', + 'title': this.language.show_dir_thumb_gallery + }).addEvent('click', function() + { + // do NOT change the jsGET history carrying our browsing so far; the fact we want to view the dirtree should + // *NOT* blow away the recall in which directory we are (and what item is currently selected): + + //if (typeof jsGET !== 'undefined') + // jsGET.clear(); + + // no need to request the dirscan again: after all, we only wish to render another view of the same directory. + // (This means, however, that we MAY requesting any deferred thumbnails) + + //self.load(self.options.directory, true); + //return self.deselect(); // nothing to return on a click event, anyway. And do NOT loose the selection! + + // the code you need here is identical to clicking on the current directory in the top path bar: + // show the 'directory' info in the detail pane again (this is a way to get back from previewing single files to previewing the directory as a gallery) + this.diag.log('show_dir_Thumb_gallery button click: current directory!', this.CurrentDir, ', startdir: ', this.options.directory); + this.fillInfo(); + }.bind(this)); +// /Partikule + } + + this.browser_dragndrop_info = new Element('a',{ + 'id':'drag_n_drop', + 'title': this.language.drag_n_drop_disabled + }); // .setStyle('visibility', 'hidden'); + this.browser_paging = new Element('div',{ + 'id':'fm_view_paging' + }).setStyle('opacity', 0); // .setStyle('visibility', 'hidden'); + this.browser_paging_first = new Element('a',{ + 'id':'paging_goto_first' + }).setStyle('opacity', 1).addEvents({ + click: this.paging_goto_first.bind(this) + }); + this.browser_paging_prev = new Element('a',{ + 'id':'paging_goto_previous' + }).setStyle('opacity', 1).addEvents({ + click: this.paging_goto_prev.bind(this) + }); + this.browser_paging_next = new Element('a',{ + 'id':'paging_goto_next' + }).setStyle('opacity', 1).addEvents({ + click: this.paging_goto_next.bind(this) + }); + this.browser_paging_last = new Element('a',{ + 'id':'paging_goto_last' + }).setStyle('opacity', 1).addEvents({ + click: this.paging_goto_last.bind(this) + }); + this.browser_paging_info = new Element('span',{ + 'id':'paging_info', + 'text': '' + }); + this.browser_paging.adopt([this.browser_paging_first, this.browser_paging_prev, this.browser_paging_info, this.browser_paging_next, this.browser_paging_last]); + +// Partikule : Added the browserMenu_thumbList to the browserheader + this.browserheader.adopt([this.browserMenu_thumbList, this.browserMenu_thumb, this.browserMenu_list, this.browser_dragndrop_info, this.browser_paging]); +// /Partikule + + this.browser = new Element('ul', {'class': 'filemanager-browser'}).inject(this.browserScroll); + + if (this.options.createFolders) this.addMenuButton('create'); + if (this.options.download) this.addMenuButton('download'); + if (this.options.selectable) this.addMenuButton('open'); + + this.info = new Element('div', {'class': 'filemanager-infos'}); + + this.info_head = new Element('div', { + 'class': 'filemanager-head', + styles: + { + opacity: 0 + } + }).adopt([ + new Element('img', {'class': 'filemanager-icon'}), + new Element('h1') + ]); + + this.preview = new Element('div', {'class': 'filemanager-preview'}).addEvent('click:relay(img.preview)', function() { + self.fireEvent('preview', [this.get('src'), self, this]); + }); + + // We need to group the headers and lists together because we may + // use some CSS to reorganise it a bit in the custom event handler. So we create "filemanager-preview-area" which + // will contain the h2 for the preview and also the preview content returned from + // Backend/FileManager.php + this.preview_area = new Element('div', {'class': 'filemanager-preview-area', + styles: + { + opacity: 0 + } + }); + +// Partikule. Removed new Element('h2', {'class': 'filemanager-headline' : +// 1. To gain more vertical space for preview +// 2. Because the user knows this is info about the file + this.preview_area.adopt([ + //new Element('h2', {'class': 'filemanager-headline', text: this.language.more}), + this.preview + ]); + +// Partikule. +// 1. To gain more vertical space for preview +// 2. Because the user knows this is info about the file +// 3. Less is more :-) + this.info.adopt([this.info_head, this.preview_area]).inject(this.filemanager); +// /Partikule + +// Partikule +// Add of the thumbnail list in the preview panel + +// We fill this one while we render the directory tree view to ensure that the deferred thumbnail loading system +// (using 'detail / mode=direct' requests to obtain the actual thumbnail paths) doesn't become a seriously complex +// mess. +// This way, any updates coming from the server are automatically edited into this list; whether it is shown or +// not depends on the decisions in fillInfo() +// +// Usage: +// - One doubleclick on one thumb in this list will select the file : quicker select +// - One click displays the preview, but with the file in bigger format : less clicks to see the picture wider. + + // Thumbs list container (in preview panel) + this.dir_filelist = new Element('div', {'class': 'filemanager-filelist'}); + // creates a list, HELPS to make the thumblist DRAGABLE + this.dir_filelist_thumbUl = new Element('ul'); + this.dir_filelist_thumbUl.inject(this.dir_filelist); + +// /Partikule + + if (!this.options.hideClose) { + this.closeIcon = new Element('a', { + 'class': 'filemanager-close', + opacity: 0.5, + title: this.language.close, + events: {click: this.hide.bind(this)} + }).inject(this.filemanager).addEvent('mouseover',function() { + this.fade(1); + }).addEvent('mouseout',function() { + this.fade(0.5); + }); + } + + this.tips = new Tips({ + className: 'tip-filebrowser', + offsets: {x: 15, y: 0}, + text: null, + showDelay: 50, + hideDelay: 50, + onShow: function() { + this.tip.setStyle('z-index', self.options.zIndex + 501).set('tween', {duration: 'short'}).setStyle('display', 'block').fade(1); + }, + onHide: function() { + this.tip.fade(0).get('tween').chain(function() { + this.element.setStyle('display', 'none'); + }); + } + }); + + // add toolTips + if (!this.options.hideClose) { + this.tips.attach(this.closeIcon); + } + this.tips.attach(this.browserMenu_thumb); + this.tips.attach(this.browserMenu_list); + this.tips.attach(this.browserMenu_thumbList); + + this.imageadd = Asset.image(this.assetBasePath + 'Images/add.png', { + 'class': 'browser-add', + styles: + { + 'z-index': this.options.zIndex + 1600 + } + }).setStyle('opacity', 0).set('tween', {duration: 'short'}).inject(this.container); + + if (!this.options.hideOverlay) { + this.overlay = new Overlay(Object.append((this.options.hideOnClick ? { + events: { + click: this.hide.bind(this) + } + } : {}), + { + styles: + { + 'z-index': this.options.zIndex - 1 + } + })); + } + + this.bound = { + keydown: (function(e) + { + // at least FF on Win will trigger this function multiple times when keys are depressed for a long time. Hence time consuming actions are don in 'keyup' whenever possible. + + this.diag.log('keydown: key press: ', e); + if (e.control || e.meta) + { + if (this.drag_is_active && !this.ctrl_key_pressed) + { + // only init the fade when actually switching CONTROL key states! + this.imageadd.fade(1); + } + this.ctrl_key_pressed = true; + } + }).bind(this), + + keyup: (function(e) + { + this.diag.log('keyup: key press: ', e); + if (!e.control && !e.meta) + { + if (/* this.drag_is_active && */ this.ctrl_key_pressed) + { + // only init the fade when actually switching CONTROL key states! + this.imageadd.fade(0); + } + this.ctrl_key_pressed = false; + } + + if (!this.dialogOpen) + { + switch (e.key) + { + + case 'tab': + if(this.options.keyboardNavigation) + { + e.stop(); + this.toggleList(); + } + break; + + case 'esc': + e.stop(); + this.hide(); + break; + } + } + }).bind(this), + keyboardInput: (function(e) + { + this.diag.log('keyboardInput key press: ', e); + if (this.dialogOpen) return; + switch (e.key) + { + case 'up': + case 'down': + case 'pageup': + case 'pagedown': + case 'home': + case 'end': + case 'enter': + case 'delete': + if(this.options.keyboardNavigation) + { + e.preventDefault(); + this.browserSelection(e.key); + break; + } + } + }).bind(this), + + scroll: (function(e) + { + this.fireEvent('scroll', [e, this]); + this.fitSizes(); + }).bind(this) + }; + + if (this.options.standalone) + { + this.container.inject(document.body); + + // ->> autostart filemanager when set + this.initialShow(); + } + else + { + this.options.hideOverlay = true; + } + return this; + }, + + initialShowBase: function() { + if (typeof jsGET !== 'undefined' && jsGET.get('fmID') == this.ID) { + this.show(); + } + else { + window.addEvent('jsGETloaded',(function() { + if (typeof jsGET !== 'undefined' && jsGET.get('fmID') == this.ID) + this.show(); + }).bind(this)); + } + }, + + // overridable method: + initialShow: function() { + this.initialShowBase(); + }, + + allow_DnD: function(j, pagesize) + { + if (!this.options.move_or_copy) + return false; + + if (!j || !j.dirs || !j.files || !pagesize) + return true; + + return (j.dirs.length + j.files.length <= pagesize * 4); + }, + + /* + * default method to produce a suitable request URL/POST; as several frameworks out there employ url rewriting, one way or another, + * we now allow users to provide their own construction method to replace this one: simply provide your own method in + * options.mkServerRequestURL + * Like this one, it MUST return an object, containing two properties: + * + * url: (string) contains the URL sent to the server for the given event/request (which is always transmitted as a POST request) + * data: (assoc. array): extra parameters added to this POST. (Mainly there in case a framework wants to have the 'event' parameter + * transmitted as a POST data element, rather than having it included in the request URL itself in some form. + * + * WARNING: 'this' in here is actually **NOT** pointing at the FM instance; use 'fm_obj' for that! + * + * In fact, 'this' points at the 'fm_obj.options' object, but consider that an 'undocumented feature' + * as it may change in the future without notice! + */ + mkServerRequestURL: function(fm_obj, request_code, post_data) + { + // HACK: Encode the post_data to get around mod_security issues + function rot13(s) + { + return (s ? s : this).split('').map(function(_) + { + if (!_.match(/[A-Za-z]/)) return _; + c = Math.floor(_.charCodeAt(0) / 97); + k = (_.toLowerCase().charCodeAt(0) - 83) % 26 || 26; + return String.fromCharCode(k + ((c == 0) ? 64 : 96)); + }).join(''); + } + // console.log(rot13(JSON.encode(post_data))); + + post_data = { encoded_data: rot13(JSON.encode(post_data)) }; + + return { + url: (fm_obj.options.url + (fm_obj.options.url.indexOf('?') == -1 ? '?' : '&') + Object.toQueryString({ + event: request_code + })).replace(/&&/, '&'), + data: post_data + }; + }, + + fitSizes: function() + { + if (this.options.standalone) + { + this.filemanager.center(this.offsets); + } + else + { + var parent = (this.options.parentContainer !== null ? document.id(this.options.parentContainer) : this.container.getParent()); + if (parent) + { + parentSize = parent.getSize(); + this.filemanager.setStyle('height', parentSize.y); + } + } + + var containerSize = this.filemanager.getSize(); + var headerSize = this.browserheader.getSize(); + var menuSize = this.menu.getSize(); + this.browserScroll.setStyle('height',containerSize.y - headerSize.y); + this.info.setStyle('height',containerSize.y - menuSize.y); + }, + + // see also: http://cass-hacks.com/articles/discussion/js_url_encode_decode/ + // and: http://xkr.us/articles/javascript/encode-compare/ + // This is a much simplified version as we do not need exact PHP rawurlencode equivalence. + // + // We have one mistake to fix: + instead of %2B. We don't mind + // that * and / remain unencoded. Not exactly RFC3986, but there you have it... + // + // WARNING: given the above, we ASSUME this function will ONLY be used to encode the + // a single URI 'path', 'query' or 'fragment' component at a time! + escapeRFC3986: function(s) { + return encodeURI(s.toString()).replace(/\+/g, '%2B').replace(/#/g, '%23'); + }, + unescapeRFC3986: function(s) { + return decodeURI(s.toString().replace(/%23/g, '#').replace(/%2B/g, '+')); + }, + + // -> catch a click on an element in the file/folder browser + relayClick: function(e, el) { + if (e) e.stop(); + + // if the clicked elelement is from the preview gallery, get the corresponding element + if(el.retrieve('el_ref')) + el = el.retrieve('el_ref'); + + // ignore mouse clicks while drag&drop + resulting copy/move is pending. + // + // Theoretically only the first click originates from the same mouse event as the 'drop' event, so we + // COULD reset 'drop_pending' after processing that one. + if (this.drop_pending !== 0) + { + this.drop_pending = 0; + } + else + { + this.storeHistory = true; + + var file = el.retrieve('file'); + this.diag.log('on relayClick file = ', file, ', current directory: ', this.CurrentDir, '@ el = ', el); + if (el.retrieve('edit')) { + el.eliminate('edit'); + return; + } + if (file.mime === 'text/directory') + { + el.addClass('selected'); + // reset the paging to page #0 as we clicked to change directory + this.store_view_fill_startindex(0); + this.load(file.path); + return; + } + + // when we're right smack in the middle of a drag&drop, which may end up as a MOVE, do NOT send a 'detail' request + // alongside (through fillInfo) as that may lock the file being moved, server-side. + // It's good enough to disable the detail view, if we want/need to. + // + // Note that this.drop_pending tracks the state of the drag&drop state machine -- more functions may check this one! + if (this.Current) { + this.Current.removeClass('selected'); + } + // ONLY do this when we're doing a COPY or on a failed attempt... + // CORRECTION: as even a failed 'drop' action will have moved the cursor, we can't keep this one selected right now: + this.Current = el.addClass('selected'); + // We need to have Current assigned before fillInfo because fillInfo adds to it + this.fillInfo(file); + + this.switchButton4Current(); + + // // // now make sure we can see the selected item in the left pane: scroll there: + this.browserSelection('current'); + } + }, + +// Partikule + + /** + * Catches double clicks and open the file if selectable is true */ + relayDblClick: function(e, el) + { + if(this.options.selectable === false) + return; + if (e) e.stop(); + + this.diag.log('on relayDblClick file = ', el.retrieve('file'), ', current dir: ', this.CurrentDir); + + this.tips.hide(); + + this.CurrentFile = el.retrieve('file'); + + if (this.CurrentFile.mime !== 'text/directory') + this.open_on_click(null); + }, + +// /Partikule + + toggleList: function(e) { + if (e) e.stop(); + if(e && e.target && document.id(e.target).retrieve('set', false)) return; // Already Set + + $$('.filemanager-browserheader a.listType').setStyle('opacity',0.5); + if (!this.browserMenu_thumb.retrieve('set',false)) { + this.browserMenu_list.store('set',false); + this.browserMenu_thumb.store('set',true).setStyle('opacity',1); + this.listType = 'thumb'; + if (typeof jsGET !== 'undefined') jsGET.set('fmListType=thumb'); + } else { + this.browserMenu_thumb.store('set',false); + this.browserMenu_list.store('set',true).setStyle('opacity',1); + this.listType = 'list'; + if (typeof jsGET !== 'undefined') jsGET.set('fmListType=list'); + } + this.diag.log('on toggleList dir = ', this.CurrentDir, e); + + // abort any still running ('antiquated') fill chunks and reset the store before we set up a new one: + this.RequestQueue.cancel_bulk('fill'); + clearTimeout(this.view_fill_timer); + this.view_fill_timer = null; + + this.fill(null, this.get_view_fill_startindex(), this.listPaginationLastSize); + }, + + /* + * Gets called from the jsGET listener. + * + * Is fired for two reasons: + * + * 1) the user clicked on a file or directory to view and that change was also pushed to the history through one or more jsGET.set() calls. + * (In this case, we've already done what needed doing, so we should not redo that effort in here!) + * + * 2) the user went back in browser history or manually edited the URI hash section. + * (This is an 'change from the outside' and exactly what this listener is for. This time around, we should follow up on those changes!) + */ + hashHistory: function(vars) + { + this.storeHistory = false; + this.diag.log('hasHistory:', vars); + if (vars.changed['fmPath'] === '') + vars.changed['fmPath'] = '/'; + + Object.each(vars.changed, function(value, key) { + this.diag.log('on hashHistory key = ', key, 'value = ', value); + switch (key) + { + case 'fmPath': + if (this.CurrentDir && this.CurrentDir.path !== value) + { + this.load(value); + } + break; + + case 'fmFile': + var hot_item = (this.Current && this.Current.retrieve('file')); + if (hot_item === null || value !== hot_item.name) + { + this.browser.getElements('span.fi span').each((function(current) + { + current.getParent('span.fi').removeClass('hover'); + if (current.get('title') == value) + { + this.deselect(null); + this.Current = current.getParent('span.fi'); + new Fx.Scroll(this.browserScroll,{duration: 'short', offset: {x: 0, y: -(this.browserScroll.getSize().y/4)}}).toElement(this.Current); + this.Current.addClass('selected'); + this.diag.log('on hashHistory @ fillInfo key = ', key, 'value = ', value, 'source = ', current, 'file = ', current.getParent('span.fi').retrieve('file')); + this.fillInfo(this.Current.retrieve('file')); + } + }).bind(this)); + } + break; + } + },this); + }, + + // Add the ability to specify a path (relative to the base directory) and a file to preselect + show: function(e, loaddir, preselect) { + if (e) e.stop(); + + this.diag.log('on show: ', e, ', loaddir:', loaddir, ', preselect: ', preselect); + if (this.fmShown) { + return; + } + this.fmShown = true; + + if (typeof preselect === 'undefined') preselect = null; + if (typeof loaddir === 'undefined') loaddir = null; + + if (loaddir === null && typeof jsGET !== 'undefined') + { + if (jsGET.get('fmPath') !== null) + { + loaddir = jsGET.get('fmPath'); + } + } + if (loaddir === null) + { + if (this.CurrentDir) + { + loaddir = this.CurrentDir.path; + } + else + { + loaddir = this.options.directory; + } + } + + // get and set history + if (typeof jsGET !== 'undefined') { + if (jsGET.get('fmFile')) { + this.diag.log('on show: set onShow on fmFile: ', jsGET.get('fmFile')); + } + if (jsGET.get('fmListType') !== null) { + $$('.filemanager-browserheader a.listType').setStyle('opacity',0.5); + this.listType = jsGET.get('fmListType'); + if (this.listType === 'thumb') + this.browserMenu_thumb.store('set',true).setStyle('opacity',1); + else + this.browserMenu_list.store('set',true).setStyle('opacity',1); + } + jsGET.set({ + 'fmID': this.ID, + 'fmPath': loaddir + }); + this.hashListenerId = jsGET.addListener(this.hashHistory, false, this); + } + + this.load(loaddir, preselect); + if (!this.options.hideOverlay) { + this.overlay.show(); + } + + this.show_our_info_sections(false); + this.container.fade(0).setStyles({ + display: 'block' + }); + + window.addEvents({ + 'scroll': this.bound.scroll, + 'resize': this.bound.scroll + }); + // add keyboard navigation + this.diag.log('add keyboard nav on show file = ', loaddir); + document.addEvent('keydown', this.bound.keydown); + document.addEvent('keyup', this.bound.keyup); + if ((Browser.Engine && (Browser.Engine.trident || Browser.Engine.webkit)) || (Browser.ie || Browser.chrome || Browser.safari)) + document.addEvent('keydown', this.bound.keyboardInput); + else + document.addEvent('keypress', this.bound.keyboardInput); + this.container.fade(1); + + this.fitSizes(); + this.fireEvent('show', [this]); + this.fireHooks('show'); + +// Partikule : If not standalone, returns the HTML content + if (!this.options.standalone) + { + return this.container; + } +// /Partikule + }, + + hide: function(e) { + if (e) e.stop(); + this.diag.log('on hide', e, this); + if (!this.fmShown) { + return; + } + this.fmShown = false; + + // stop hashListener + if (typeof jsGET !== 'undefined') { + jsGET.removeListener(this.hashListenerId); + jsGET.remove(['fmID','fmPath','fmFile','fmListType','fmPageIdx']); + } + + if (!this.options.hideOverlay) { + this.overlay.hide(); + } + this.tips.hide(); + this.browser.empty(); + this.container.setStyle('display', 'none'); + + // remove keyboard navigation + this.diag.log('REMOVE keyboard nav on hide'); + window.removeEvent('scroll', this.bound.scroll).removeEvent('resize', this.bound.scroll); + document.removeEvent('keydown', this.bound.keydown); + document.removeEvent('keyup', this.bound.keyup); + if ((Browser.Engine && (Browser.Engine.trident || Browser.Engine.webkit)) || (Browser.ie || Browser.chrome || Browser.safari)) + document.removeEvent('keydown', this.bound.keyboardInput); + else + document.removeEvent('keypress', this.bound.keyboardInput); + + this.fireHooks('cleanup'); + this.fireEvent('hide', [this]); + }, + + // hide the FM info
    s. do NOT hide the outer info
    itself, as the Uploader (and possibly other derivatives) may choose to show their own content there! + show_our_info_sections: function(state) { + if (!state) + { + this.info_head.fade(0).get('tween').chain(function() { + this.element.setStyle('display', 'none'); + }); + this.preview_area.fade(0).get('tween').chain(function() { + this.element.setStyle('display', 'none'); + }); + } + else + { + this.info_head.setStyle('display', 'block').fade(1); + this.preview_area.setStyle('display', 'block').fade(1); + } + }, + + open_on_click: function(e) { + if (e) e.stop(); + + if (!this.Current) + return; + + var file = this.Current.retrieve('file'); + this.fireEvent('complete', [ + (this.options.deliverPathAsLegalURL ? file.path : this.escapeRFC3986(this.normalize('/' + this.root + file.path))), // the absolute URL for the selected file, rawURLencoded + file, // the file specs: .name, .path, .size, .date, .mime, .icon, .icon48, .thumb48, .thumb250 + this + ]); + + // Only hide if hideOnSelect is true + if (this.options.hideOnSelect) + { + this.hide(); + } + }, + + download_on_click: function(e) { + e.stop(); + if (!this.Current) { + return; + } + this.diag.log('download: ', this.Current.retrieve('file')); + var file = this.Current.retrieve('file'); + this.download(file); + }, + + download: function(file) { + var self = this; + var dummyframe_active = false; + + // the chained display:none code inside the Tips class doesn't fire when the 'Save As' dialog box appears right away (happens in FF3.6.15 at least): + if (this.tips.tip) { + this.tips.tip.setStyle('display', 'none'); + } + + // discard old iframe, if it exists: + if (this.downloadIframe) + { + // remove from the menu (dispose) and trash it (destroy) + this.downloadIframe.dispose().destroy(); + this.downloadIframe = null; + } + if (this.downloadForm) + { + // remove from the menu (dispose) and trash it (destroy) + this.downloadForm.dispose().destroy(); + this.downloadForm = null; + } + + this.downloadIframe = new IFrame({ + src: 'about:blank', + name: '_downloadIframe', + styles: { + display: 'none' + }, + events: { + load: function() + { + var iframe = this; + self.diag.log('download response: ', this, ', iframe: ', self.downloadIframe, ', ready: ', (1 * dummyframe_active)); + + // make sure we don't act on premature firing of the event in MSIE / Safari browsers: + if (!dummyframe_active) + return; + + var response = null; + Function.attempt(function() { + response = iframe.contentDocument.documentElement.textContent; + }, + function() { + response = iframe.contentWindow.document.innerText; + }, + function() { + response = iframe.contentDocument.innerText; + }, + function() { + response = "{status: 0, error: \"Download: download assumed okay: can't find response.\"}"; + } + ); + + var j = JSON.decode(response); + + if (j && !j.status) + { + self.showError('' + j.error); + } + else if (!j) + { + self.showError('bugger! No or faulty JSON response! ' + response); + } + } + } + }); + this.menu.adopt(this.downloadIframe); + + this.downloadForm = new Element('form', {target: '_downloadIframe', method: 'post', enctype: 'multipart/form-data'}); + this.menu.adopt(this.downloadForm); + + var tx_cfg = this.options.mkServerRequestURL(this, 'download', Object.merge({}, + this.options.propagateData, + { + file: file.path, + filter: this.options.filter + })); + + this.downloadForm.action = tx_cfg.url; + + Object.each(tx_cfg.data, + function(v, k) + { + this.downloadForm.adopt((new Element('input')).set({type: 'hidden', name: k, value: v})); + }.bind(this)); + + dummyframe_active = true; + + return this.downloadForm.submit(); + }, + + create_on_click: function(e) { + e.stop(); + var input = new Element('input', {'class': 'createDirectory'}); + var click_ok_f = (function(e) { + this.diag.log('create on click: KEYBOARD handler: key press: ', e); + + if (e.key === 'enter') { + e.stopPropagation(); + e.target.getParent('div.filemanager-dialog').getElement('button.filemanager-dialog-confirm').fireEvent('click'); + } + }).bind(this); + + new FileManager.Dialog(this.language.createdir, { + language: { + confirm: this.language.create, + decline: this.language.cancel + }, + content: [ + input + ], + autofocus_on: 'input.createDirectory', + zIndex: this.options.zIndex + 900, + onOpen: this.onDialogOpen.bind(this), + onClose: (function() { + input.removeEvent('keyup', click_ok_f); + this.onDialogClose(); + }).bind(this), + onShow: (function() { + this.diag.log('add key up on create dialog:onShow'); + input.addEvent('keyup', click_ok_f); + }).bind(this), + onConfirm: (function() { + if (this.Request) this.Request.cancel(); + + // abort any still running ('antiquated') fill chunks and reset the store before we set up a new one: + this.reset_view_fill_store(); + + var tx_cfg = this.options.mkServerRequestURL(this, 'create', { + file: input.get('value'), + directory: this.CurrentDir.path, + filter: this.options.filter + }); + + this.Request = new FileManager.Request({ + url: tx_cfg.url, + data: tx_cfg.data, + onRequest: function() {}, + onSuccess: (function(j) { + if (!j || !j.status) { + this.browserLoader.fade(0); + return; + } + + this.deselect(null); + this.show_our_info_sections(false); + + // make sure we store the JSON list! + this.reset_view_fill_store(j); + + // the 'view' request may be an initial reload: keep the startindex (= page shown) intact then: + this.fill(j, this.get_view_fill_startindex()); + }).bind(this), + onComplete: function() {}, + onError: (function(text, error) { + this.browserLoader.fade(0); + }).bind(this), + onFailure: (function(xmlHttpRequest) { + this.browserLoader.fade(0); + }).bind(this) + }, this).send(); + }).bind(this) + }); + }, + + deselect: function(el) { + if (el && this.Current != el) { + return; + } + this.diag.log('deselect:Current', el); + if (el) { + this.fillInfo(); + } + if (this.Current) { + this.Current.removeClass('selected'); + } + this.Current = null; + this.switchButton4Current(); + }, + + // add the ability to preselect a file in the dir + load: function(dir, preselect) { + + if (typeof preselect === 'undefined') preselect = null; + + this.deselect(null); + this.show_our_info_sections(false); + + if (this.Request) this.Request.cancel(); + + this.diag.log("### 'view' request: onRequest invoked @ load(): ", dir, ', preselect: ', preselect); + + // abort any still running ('antiquated') fill chunks and reset the store before we set up a new one: + this.reset_view_fill_store(); + + var tx_cfg = this.options.mkServerRequestURL(this, 'view', { + directory: dir, + filter: this.options.filter, + file_preselect: (preselect || '') + }); + + this.diag.log('load(): view URI: ', dir, this.listType, tx_cfg); + + this.Request = new FileManager.Request({ + url: tx_cfg.url, + data: tx_cfg.data, + onRequest: function() {}, + onSuccess: (function(j) { + this.diag.log("### 'view' request: onSuccess invoked", j); + if (!j || !j.status) { + this.browserLoader.fade(0); + return; + } + + if(this.listType == 'thumb' && (j.files.length + j.dirs.length) > this.options.listMaxSuggestedDirSizeForThumbnails) + { + this.listType = 'list'; + this.browserMenu_thumb.setStyle('opacity',0.5); + this.browserMenu_list.setStyle('opacity',1); + this.browserMenu_thumb.store('set', false); + this.browserMenu_list.store('set', true); + } + + // make sure we store the JSON list! + this.reset_view_fill_store(j); + + // the 'view' request may be an initial reload: keep the startindex (= page shown) intact then: + // Xinha: add the ability to preselect a file in the dir + var start_idx = this.get_view_fill_startindex(); + preselect = null; + if (j.preselect_index > 0) + { + start_idx = j.preselect_index - 1; + preselect = j.preselect_name; + } + this.fill(j, start_idx, null, null, preselect); + }).bind(this), + onComplete: (function() { + this.diag.log("### 'view' request: onComplete invoked"); + this.fitSizes(); + }).bind(this), + onError: (function(text, error) { + // a JSON error + this.diag.log("### 'view' request: onError invoked", text, error); + this.browserLoader.fade(0); + }).bind(this), + onFailure: (function(xmlHttpRequest) { + // a generic (non-JSON) communication failure + this.diag.log("### 'view' request: onFailure invoked", xmlHttpRequest); + this.browserLoader.fade(0); + }).bind(this) + }, this).send(); + }, + + delete_from_dircache: function(file) + { + var items; + var i; + + if (this.view_fill_json) + { + if (file.mime === 'text/directory') + { + items = this.view_fill_json.dirs; + } + else + { + items = this.view_fill_json.files; + } + + for (i = items.length - 1; i >= 0; i--) + { + var item = items[i]; + if (item.name === file.name) + { + items.splice(i, 1); + break; + } + } + } + }, + + destroy_noQasked: function(file) { + + if (this.Request) this.Request.cancel(); + + this.browserLoader.fade(1); + + if ((typeof jsGET !== 'undefined') && this.storeHistory) + { + if (file.mime !== 'text/directory') + { + // TODO: really, a full check should also check whether the fmPath equals the this.CurrentDir.path + if (file.name === jsGET.get('fmFile')) + { + // this will ensure the subsequent fill() action will revert the detail view to the directory details. + jsGET.remove(['fmFile']); + } + } + } + + var tx_cfg = this.options.mkServerRequestURL(this, 'destroy', { + file: file.name, + directory: this.CurrentDir.path, + filter: this.options.filter + }); + + this.Request = new FileManager.Request({ + url: tx_cfg.url, + data: tx_cfg.data, + onRequest: function() {}, + onSuccess: (function(j) { + if (!j || !j.status) { + this.browserLoader.fade(0); + return; + } + + this.fireEvent('modify', [Object.clone(file), j, 'destroy', this]); + + // remove entry from cached JSON directory list and remove the item from the view. + // This is particularly important when working on a paginated directory and afterwards the pages are jumped back & forth: + // the next time around, this item should NOT appear in the list anymore! + this.deselect(file.element); + + var rerendering_list = false; + if (this.view_fill_json) + { + this.delete_from_dircache(file); /* do NOT use j.name, as that one can be 'cleaned up' as part of the 'move' operation! */ + + // minor caveat: when we paginate the directory list, then browsing to the next page will skip one item (which would + // have been the first on the next page). The brute-force fix for this is to force a re-render of the page when in + // pagination view mode: + if (this.view_fill_json.dirs.length + this.view_fill_json.files.length > this.listPaginationLastSize) + { + // similar activity as load(), but without the server communication... + + // abort any still running ('antiquated') fill chunks and reset the store before we set up a new one: + this.RequestQueue.cancel_bulk('fill'); + clearTimeout(this.view_fill_timer); + this.view_fill_timer = null; + + // was here before + } + } + + // -> move this here, so it always reloads the thumbnail pane in the preview window + rerendering_list = true; + this.fill(null, this.get_view_fill_startindex(), this.listPaginationLastSize); + + // make sure fade does not clash with parallel directory (re)load: + if (!rerendering_list) + { + var p = file.element.getParent(); + if (p) { + p.fade(0).get('tween').chain(function() { + this.element.destroy(); + }); + } + } + this.browserLoader.fade(0); + + // clear preview pane thumbnails + // this.dir_filelist.empty(); + + }).bind(this), + onComplete: function() {}, + onError: (function(text, error) { + this.browserLoader.fade(0); + }).bind(this), + onFailure: (function(xmlHttpRequest) { + this.browserLoader.fade(0); + }).bind(this) + }, this).send(); + }, + + destroy: function(file) { + if (this.options.hideOnDelete) { + this.destroy_noQasked(file); + } + else { + new FileManager.Dialog(this.language.destroyfile, { + language: { + confirm: this.language.destroy, + decline: this.language.cancel + }, + zIndex: this.options.zIndex + 900, + onOpen: this.onDialogOpen.bind(this), + onClose: this.onDialogClose.bind(this), + onConfirm: (function() { + this.destroy_noQasked(file); + }).bind(this) + }); + } + }, + + rename: function(file) { + var name = file.name; + var input = new Element('input', {'class': 'rename', value: name}); + + this.diag.log('### rename: ', Object.clone(file)); + + new FileManager.Dialog(this.language.renamefile, { + language: { + confirm: this.language.rename, + decline: this.language.cancel + }, + content: [ + input + ], + autofocus_on: 'input.rename', + zIndex: this.options.zIndex + 900, + onOpen: this.onDialogOpen.bind(this), + onClose: this.onDialogClose.bind(this), + onShow: (function() { + this.diag.log('add key up on rename dialog:onShow'); + input.addEvent('keyup', (function(e) { + this.diag.log('rename: KEYBOARD handler: key press: ', e); + + if (e.key === 'enter') { + e.stopPropagation(); + e.target.getParent('div.filemanager-dialog').getElement('button.filemanager-dialog-confirm').fireEvent('click'); + } + }).bind(this)); + }).bind(this), + onConfirm: (function() { + if (this.Request) this.Request.cancel(); + + this.browserLoader.fade(1); + + this.diag.log('### rename: going to rename: ', Object.clone(file), ' to ', input.get('value')); + + var tx_cfg = this.options.mkServerRequestURL(this, 'move', { + file: file.name, + name: input.get('value'), + directory: this.CurrentDir.path, + filter: this.options.filter + }); + + this.Request = new FileManager.Request({ + url: tx_cfg.url, + data: tx_cfg.data, + onRequest: function() {}, + onSuccess: (function(j) { + if (!j || !j.status) { + this.browserLoader.fade(0); + return; + } + this.diag.log('move : onSuccess: file = ', Object.clone(file), ', json: ', j); + this.fireEvent('modify', [Object.clone(file), j, 'rename', this]); + file.element.getElement('span.filemanager-filename').set('text', j.name).set('title', j.name); + file.element.addClass('selected'); + file.name = j.name; + this.diag.log('move : onSuccess going to fillInfo: file = ', Object.clone(file), ', json: ', j); + this.fillInfo(file); + this.browserLoader.fade(0); + }).bind(this), + onComplete: function() {}, + onError: (function(text, error) { + this.browserLoader.fade(0); + }).bind(this), + onFailure: (function(xmlHttpRequest) { + this.browserLoader.fade(0); + }).bind(this) + }, this).send(); + }).bind(this) + }); + }, + + browserSelection: function(direction) { + var csel,current; + + this.diag.log('browserSelection : direction = ', direction); + if (this.browser.getElement('li') === null) return; + + if (direction === 'go-bottom') + { + // select first item of next page + current = this.browser.getFirst('li').getElement('span.fi'); + + // blow away any lingering 'selected' after a page switch like that + csel = this.browser.getElement('span.fi.selected'); + if (csel !== null) + csel.removeClass('selected'); + } + else if (direction === 'go-top') + { + // select last item of previous page + current = this.browser.getLast('li').getElement('span.fi'); + + // blow away any lingering 'selected' after a page switch like that + csel = this.browser.getElement('span.fi.selected'); + if (csel !== null) + csel.removeClass('selected'); + } + else if (this.browser.getElement('span.fi.hover') === null && this.browser.getElement('span.fi.selected') === null) + { + // none is selected: select first item (folder/file) + current = this.browser.getFirst('li').getElement('span.fi'); + } + else if(direction === 'current') { + current = this.Current; + } + else + { + // select the current file/folder or the one with hover + current = null; + if (this.browser.getElement('span.fi.hover') === null && this.browser.getElement('span.fi.selected') !== null) { + current = this.browser.getElement('span.fi.selected'); + } + else if (this.browser.getElement('span.fi.hover') !== null) { + current = this.browser.getElement('span.fi.hover'); + } + } + + this.browser.getElements('span.fi.hover').each(function(span) { + span.removeClass('hover'); + }); + + var stepsize = 1, next, currentFile; + + switch (direction) { + // go down + case 'end': + stepsize = 1E5; + /* fallthrough */ + case 'pagedown': + if (stepsize == 1) { + if (current.getPosition(this.browserScroll).y + current.getSize().y * 2 < this.browserScroll.getSize().y) { + stepsize = Math.floor((this.browserScroll.getSize().y - current.getPosition(this.browserScroll).y) / current.getSize().y) - 1; + if (stepsize < 1) + stepsize = 1; + } + else { + stepsize = Math.floor(this.browserScroll.getSize().y / current.getSize().y); + } + } + /* fallthrough */ + case 'down': + current = current.getParent('li'); + this.diag.log('key DOWN: stepsize = ', stepsize); + + // when we're at the bottom of the view and there are more pages, go to the next page: + next = current.getNext('li'); + if (next === null) + { + if (this.paging_goto_next(null, 'go-bottom')) + break; + } + else + { + for ( ; stepsize > 0; stepsize--) { + next = current.getNext('li'); + if (next === null) + break; + current = next; + } + } + current = current.getElement('span.fi'); + /* fallthrough */ + case 'go-bottom': // 'faked' key sent when done shifting one pagination page down + current.addClass('hover'); + this.Current = current; + direction = 'down'; + break; + + // go up + case 'home': + stepsize = 1E5; + /* fallthrough */ + case 'pageup': + if (stepsize == 1) { + // when at the top of the viewport, a full page scroll already happens /visually/ when you go up 1: that one will end up at the /bottom/, after all. + stepsize = Math.floor(current.getPosition(this.browserScroll).y / current.getSize().y); + if (stepsize < 1) + stepsize = 1; + } + /* fallthrough */ + case 'up': + current = current.getParent('li'); + this.diag.log('key UP: stepsize = ', stepsize); + + // when we're at the top of the view and there are pages before us, go to the previous page: + var previous = current.getPrevious('li'); + if (previous === null) + { + if (this.paging_goto_prev(null, 'go-top')) + break; + } + else + { + for ( ; stepsize > 0; stepsize--) { + previous = current.getPrevious('li'); + if (previous === null) + break; + current = previous; + } + } + current = current.getElement('span.fi'); + /* fallthrough */ + case 'go-top': // 'faked' key sent when done shifting one pagination page up + current.addClass('hover'); + this.Current = current; + direction = 'up'; + break; + + case 'none': // 'faked' key sent when picking a row 'remotely', i.e. when we don't know where we are currently, but when we want to scroll to 'current' anyhow + current.addClass('hover'); + this.Current = current; + break; + + // select + case 'enter': + this.storeHistory = true; + this.Current = current; + csel = this.browser.getElement('span.fi.selected'); + if (csel !== null) // remove old selected one + csel.removeClass('selected'); + + current.addClass('selected'); + currentFile = current.retrieve('file'); + this.diag.log('on key ENTER file = ', currentFile); + if (currentFile.mime === 'text/directory') { + this.load(currentFile.path /*.replace(this.root,'')*/); + } + else { + this.fillInfo(currentFile); + } + break; + + // delete file/directory: + case 'delete': + this.storeHistory = true; + this.Current = current; + this.browser.getElements('span.fi.selected').each(function(span) { + span.removeClass('selected'); + }); + + // and before we go and delete the entry, see if we pick the next one down or up as our next cursor position: + var parent = current.getParent('li'); + next = parent.getNext('li'); + if (next === null) { + next = parent.getPrevious('li'); + } + if (next !== null) { + next = next.getElement('span.fi'); + next.addClass('hover'); + } + + currentFile = current.retrieve('file'); + this.diag.log('on key DELETE file = ', currentFile); + this.destroy(currentFile); + + current = next; + this.Current = current; + break; + } + + // make sure to scroll the view so the selected/'hovered' item is within visible range: + + this.diag.log('key handler: current X/Y = ', current.getPosition(this.browserScroll), ', H/W/SCROLL = ', this.browserScroll.getSize(), ', 1U/SIZE = ', current.getSize()); + var dy, browserScrollFx; + if (direction !== 'up' && current.getPosition(this.browserScroll).y + current.getSize().y * 2 >= this.browserScroll.getSize().y) + { + // make scroll duration slightly dependent on the distance to travel: + dy = (current.getPosition(this.browserScroll).y + current.getSize().y * 2 - this.browserScroll.getSize().y); + dy = 50 * dy / this.browserScroll.getSize().y; + this.diag.log('key @ direction = UP: DUR: ', dy); + browserScrollFx = new Fx.Scroll(this.browserScroll, { duration: (dy < 150 ? 150 : dy > 1000 ? 1000 : dy.toInt()) }); + browserScrollFx.toElement(current); + } + else if (direction !== 'down' && current.getPosition(this.browserScroll).y <= current.getSize().y) + { + var sy = this.browserScroll.getScroll().y + current.getPosition(this.browserScroll).y - this.browserScroll.getSize().y + current.getSize().y * 2; + + // make scroll duration slightly dependent on the distance to travel: + dy = this.browserScroll.getScroll().y - sy; + dy = 50 * dy / this.browserScroll.getSize().y; + this.diag.log('key @ direction = DOWN: SY = ', sy, ', DUR: ', dy); + browserScrollFx = new Fx.Scroll(this.browserScroll, { duration: (dy < 150 ? 150 : dy > 1000 ? 1000 : dy.toInt()) }); + browserScrollFx.start(current.getPosition(this.browserScroll).x, (sy >= 0 ? sy : 0)); + } + }, + + // -> cancel dragging + revert_drag_n_drop: function(el) { + el.fade(1).removeClass('drag').removeClass('move').setStyles({ + // 'z-index': 'auto', + position: 'relative', + width: 'auto', + left: 0, + top: 0 + }).inject(el.retrieve('parent')); + try{ el.setStyle('z-index', 'auto'); } catch(e) { el.setStyle('z-index', ''); } // IE<8 Complains about 'auto' for z-index + // also dial down the opacity of the icons within this row (download, rename, delete): + var icons = el.getElements('img.browser-icon'); + if (icons) { + icons.each(function(icon) { + icon.fade(0); + }); + } + + this.diag.log('DISABLE keyboard up/down on revert'); + this.drag_is_active = false; + this.imageadd.fade(0); + }, + + // clicked 'first' button in the paged list/thumb view: + paging_goto_prev: function(e, kbd_dir) + { + if (e) e.stop(); + var startindex = this.get_view_fill_startindex(); + if (!startindex) + return false; + + return this.paging_goto_helper(startindex - this.listPaginationLastSize, this.listPaginationLastSize, kbd_dir); + }, + paging_goto_next: function(e, kbd_dir) + { + if (e) e.stop(); + var startindex = this.get_view_fill_startindex(); + if (this.view_fill_json && startindex > this.view_fill_json.dirs.length + this.view_fill_json.files.length - this.listPaginationLastSize) + return false; + + return this.paging_goto_helper(startindex + this.listPaginationLastSize, this.listPaginationLastSize, kbd_dir); + }, + paging_goto_first: function(e, kbd_dir) + { + if (e) e.stop(); + var startindex = this.get_view_fill_startindex(); + if (!startindex) + return false; + + return this.paging_goto_helper(0, null, kbd_dir); + }, + paging_goto_last: function(e, kbd_dir) + { + if (e) e.stop(); + var startindex = this.get_view_fill_startindex(); + if (this.view_fill_json && startindex > this.view_fill_json.dirs.length + this.view_fill_json.files.length - this.options.listPaginationSize) + return false; + + return this.paging_goto_helper(2E9 /* ~ maxint */, null, kbd_dir); + }, + paging_goto_helper: function(startindex, pagesize, kbd_dir) + { + // similar activity as load(), but without the server communication... + this.deselect(null); + this.show_our_info_sections(false); + + // abort any still running ('antiquated') fill chunks and reset the store before we set up a new one: + this.RequestQueue.cancel_bulk('fill'); + clearTimeout(this.view_fill_timer); + this.view_fill_timer = null; + + return this.fill(null, startindex, pagesize, kbd_dir); + }, + + fill: function(j, startindex, pagesize, kbd_dir, preselect) + { + var j_item_count; + + if (typeof preselect === 'undefined') preselect = null; + + if (!pagesize) + { + pagesize = this.options.listPaginationSize; + this.listPaginationLastSize = pagesize; + } + // else: pagesize specified means stick with that one. (useful to keep pagesize intact when going prev/next) + + if (!j) + { + j = this.view_fill_json; + } + + j_item_count = j.dirs.length + j.files.length; + + startindex = parseInt(startindex, 10); // make sure it's an int number + if (isNaN(startindex)) + { + startindex = 0; + } + + if (!pagesize) + { + // no paging: always go to position 0 then! + startindex = 0; + } + else if (startindex > j_item_count) + { + startindex = j_item_count; + } + else if (startindex < 0) + { + startindex = 0; + } + // always make sure startindex is exactly on a page edge: this is important to keep the page numbers + // in the tooltips correct! + startindex = Math.floor(startindex / pagesize); + startindex *= pagesize; + + // keyboard navigation sets the 'hover' class on the 'current' item: remove any of those: + this.browser.getElements('span.fi.hover').each(function(span) { + span.removeClass('hover'); + }); + + this.diag.log('# fill: JSON = ', j, ', mgr: ', this); + this.root = j.root; + this.CurrentDir = j.this_dir; + this.browser.empty(); + + // Adding the thumbnail list in the preview panel: blow away any pre-existing list now, as we'll generate a new one now: + this.dir_filelist_thumbUl.empty(); + + // set history + if (typeof jsGET !== 'undefined' && this.storeHistory) + { + jsGET.set({'fmPath': this.CurrentDir.path}); + } + + var current_path = this.normalize(this.root + this.CurrentDir.path); + var text = [], pre = []; + // on error reported by backend, there WON'T be a JSON 'root' element at all times: + // + // TODO: how to handle that error condition correctly? + if (!j.root) + { + this.showError('' + j.error); + return false; + } + var rootPath = '/' + j.root; + var rootParent = this.dirname(rootPath); + var rplen = rootParent.length; + current_path.split('/').each((function(folderName) { + if (!folderName) return; + + pre.push(folderName); + var path = ('/'+pre.join('/')+'/'); + this.diag.log('on fill: display directory path chunks: JSON root = ', j.root, ', path: ' , path, ', folder: ', folderName, ', root: ', rootPath, ', parent: ', rootParent); + if (path.length <= rplen) { + // add non-clickable path + text.push(new Element('span', {'class': 'icon', text: folderName})); + } else { + // add clickable path + text.push(new Element('a', { + 'class': 'icon', + href: '#', + text: folderName + }).addEvent('click', (function(e) { + e.stop(); + path = path.replace(j.root,''); + this.diag.log('## path section - click event: ', e, ', path: ', path); + this.load(path); + }).bind(this)) + ); + } + text.push(new Element('span', {text: ' / '})); + }).bind(this)); + + text.pop(); + text[text.length-1].addClass('selected').removeEvents('click').addEvent('click', (function(e) { + e.stop(); + // show the 'directory' info in the detail pane again (this is a way to get back from previewing single files to previewing the directory as a gallery) + this.diag.log('click: fillInfo: current directory!'); + this.fillInfo(); + }).bind(this)); + this.selectablePath.set('value', '/' + current_path); + this.clickablePath.empty().adopt(new Element('span', {text: '/ '}), text); + + if (!j.dirs || !j.files) { + return false; + } + + // ->> generate browser list + var els = [[], []]; + + /* + * For very large directories, where the number of directories in there and/or the number of files is HUGE (> 200), + * we DISABLE drag&drop functionality. + * + * Yes, we could have opted for the alternative, which is splitting up the .makeDraggable() activity in multiple + * setTimeout(callback, 0) initiated chunks in order to spare the user the hassle of a 'slow script' dialog, + * but in reality drag&drop is ludicrous in such an environment; currently we do not (yet) support autoscrolling + * the list to enable drag&dropping it to elements further away that the current viewport can hold at the same time, + * but drag&drop in a 500+ image carrying directory is resulting in a significant load of the browser anyway; + * alternative means to move/copy files should be provided in such cases instead. + * + * Hence we run through the list here and abort / limit the drag&drop assignment process when the hardcoded number of + * directories or files have been reached (support_DnD_for_this_dir). + * + * TODO: make these numbers 'auto adaptive' based on timing measurements: how long does it take to initialize + * a view on YOUR machine? --> adjust limits accordingly. + */ + var support_DnD_for_this_dir = this.allow_DnD(j, pagesize); + var starttime = new Date().getTime(); + this.diag.log('fill list size = ', j_item_count); + + var endindex = j_item_count; + var paging_now = 0; + if (pagesize) + { + // endindex MAY point beyond j_item_count; that's okay; we check the boundary every time in the other fill chunks. + endindex = startindex + pagesize; + // however for reasons of statistics gathering, we keep it bound to j_item_count at the moment: + if (endindex > j_item_count) endindex = j_item_count; + + if (pagesize < j_item_count) + { + var pagecnt = Math.ceil(j_item_count / pagesize); + var curpagno = Math.floor(startindex / pagesize) + 1; + + this.browser_paging_info.set('text', '' + curpagno + '/' + pagecnt); + + if (curpagno > 1) + { + this.browser_paging_first.set('title', this.language.goto_page + ' 1'); + this.browser_paging_first.fade(1); + this.browser_paging_prev.set('title', this.language.goto_page + ' ' + (curpagno - 1)); + this.browser_paging_prev.fade(1); + } + else + { + this.browser_paging_first.set('title', '---'); + this.browser_paging_first.fade(0.25); + this.browser_paging_prev.set('title', '---'); + this.browser_paging_prev.fade(0.25); + } + if (curpagno < pagecnt) + { + this.browser_paging_last.set('title', this.language.goto_page + ' ' + pagecnt); + this.browser_paging_last.fade(1); + this.browser_paging_next.set('title', this.language.goto_page + ' ' + (curpagno + 1)); + this.browser_paging_next.fade(1); + } + else + { + this.browser_paging_last.set('title', '---'); + this.browser_paging_last.fade(0.25); + this.browser_paging_next.set('title', '---'); + this.browser_paging_next.fade(0.25); + } + + paging_now = 1; + } + } + this.browser_paging.fade(paging_now); + // fix for MSIE8: also fade out the pagination icons themselves + if (!paging_now) + { + this.browser_paging_first.fade(0); + this.browser_paging_prev.fade(0); + this.browser_paging_last.fade(0); + this.browser_paging_next.fade(0); + } + + // remember pagination position history + this.store_view_fill_startindex(startindex); + + // reset the fillInfo fire marker: + this.fillInfoOnFillFired = false; + + this.view_fill_timer = this.fill_chunkwise_1.delay(1, this, [startindex, endindex, endindex - startindex, pagesize, support_DnD_for_this_dir, starttime, els, kbd_dir, preselect]); + + return true; + }, + + list_row_maker: function(thumbnail_url, file) + { + return file.element = new Element('span', {'class': 'fi ' + this.listType, href: '#'}).adopt( + new Element('span', { + 'class': this.listType, + 'styles': { + 'background-image': 'url(' + (thumbnail_url ? thumbnail_url : this.assetBasePath + 'Images/loader.gif') + ')' + } + }).addClass('fm-thumb-bg'), + new Element('span', {'class': 'filemanager-filename', text: file.name, title: file.name}) + ).store('file', file); + }, + + dir_gallery_item_maker: function(thumbnail_url, file) + { + var el = new Element('div', { + 'class': 'fi', + 'title': file.name + }).adopt( + new Element('div', { + 'class': 'dir-gal-thumb-bg', + 'styles': { + 'width': this.options.thumbSize4DirGallery + 'px', + 'height': this.options.thumbSize4DirGallery + 'px', + 'background-image': 'url(' + (thumbnail_url ? thumbnail_url : this.assetBasePath + 'Images/loader.gif') + ')' + } + }), + new Element('div', { + 'class': 'name', + 'styles': { + 'width': this.options.thumbSize4DirGallery + 'px' + }, + 'text': file.name + }) + ); + this.tips.attach(el); + return el; + }, + + dir_gallery_set_actual_img: function(file, dg_el) + { + // calculate which thumb to use and how to center it: + var img_url, iw, ih, ds, mt, mb, ml, mr, ratio; + + ds = this.options.thumbSize4DirGallery; + if (ds > 48) + { + img_url = file.thumb250; + iw = file.thumb250_width; + ih = file.thumb250_height; + } + else + { + img_url = file.thumb48; + iw = file.thumb48_width; + ih = file.thumb48_height; + } + + // 'zoom' image to fit area: + if (iw > ds) + { + var redux = ds / iw; + iw *= redux; + ih *= redux; + } + if (ih > ds) + { + var redux = ds / ih; + iw *= redux; + ih *= redux; + } + iw = Math.round(iw); + ih = Math.round(ih); + ml = Math.round((ds - iw) / 2); + mr = ds - ml - iw; + mt = Math.round((ds - ih) / 2); + mb = ds - mt - ih; + + var self = this; + + Asset.image(img_url, { + styles: { + width: iw, + height: ih, + 'margin-left': ml, + 'margin-top': mt, + 'margin-right': mr, + 'margin-bottom': mb + }, + onLoad: function() { + var img_el = this; + var img_div = dg_el.getElement('div.dir-gal-thumb-bg').setStyle('background-image', ''); + img_div.adopt(img_el); + }, + onError: function() { + self.diag.log('dirgallery image asset: error!'); + var iconpath = self.assetBasePath + 'Images/Icons/Large/default-error.png'; + dg_el.getElement('div.dir-gal-thumb-bg').setStyle('background-image', 'url(' + iconpath + ')'); + }, + onAbort: function() { + self.diag.log('dirgallery image asset: ABORT!'); + var iconpath = self.assetBasePath + 'Images/Icons/Large/default-error.png'; + dg_el.getElement('div.dir-gal-thumb-bg').setStyle('background-image', 'url(' + iconpath + ')'); + } + }); + }, + + /* + * The old one-function-does-all fill() would take an awful long time when processing large directories. This function + * contains the most costly code chunk of the old fill() and has adjusted the looping through the j.dirs[] and j.files[] lists + * in such a way that we can 'chunk it up': we can measure the time consumed so far and when we have spent more than + * X milliseconds in the loop, we stop and allow the loop to commence after a minimal delay. + * + * The delay is the way to relinquish control to the browser and as a thank-you NOT get the dreaded + * 'slow script, continue or abort?' dialog in your face. Ahh, the joy of cooperative multitasking is back again! :-) + */ + fill_chunkwise_1: function(startindex, endindex, render_count, pagesize, support_DnD_for_this_dir, starttime, els, kbd_dir, preselect) { + + var idx, file, loop_duration; + var self = this; + var j = this.view_fill_json; + var loop_starttime = new Date().getTime(); + var fmFile = (typeof jsGET !== 'undefined' ? jsGET.get('fmFile') : null); + + var duration = new Date().getTime() - starttime; + //this.diag.log(' + time duration @ fill_chunkwise_1(', startindex, '): ', duration); + + /* + * Note that the '< j.dirs.length' / '< j.files.length' checks MUST be kept around: one of the fastest ways to abort/cancel + * the render is emptying the dirs[] + files[] array, as that would abort the loop on the '< j.dirs.length' / '< j.files.length' + * condition. + * + * This, together with killing our delay-timer, is done when anyone calls reset_view_fill_store() to + * abort this render pronto. + */ + + // first loop: only render directories, when the indexes fit the range: 0 .. j.dirs.length-1 + // Assume several directory aspects, such as no thumbnail hassle (it's one of two icons anyway, really!) + var el, editButtons; + + for (idx = startindex; idx < endindex && idx < j.dirs.length; idx++) + { + file = j.dirs[idx]; + + if (idx % 10 === 0) { + // try not to spend more than 100 msecs per (UI blocking!) loop run! + loop_duration = new Date().getTime() - loop_starttime; + duration = new Date().getTime() - starttime; + //this.diag.log(' + time taken so far = ', duration, ' / ', loop_duration, ' @ elcnt = ', idx); + + /* + * Are we running in adaptive pagination mode? yes: calculate estimated new pagesize and adjust average (EMA) when needed. + * + * Do this here instead of at the very end so that pagesize will adapt, particularly when user does not want to wait for + * this render to finish. + */ + this.adaptive_update_pagination_size(idx, endindex, render_count, pagesize, duration, 1.0 / 7.0, 1.1, 0.1 / 1000); + + if (loop_duration >= 100) + { + this.view_fill_timer = this.fill_chunkwise_1.delay(1, this, [idx, endindex, render_count, pagesize, support_DnD_for_this_dir, starttime, els, kbd_dir, preselect]); + return; // end call == break out of loop + } + } + + file.dir = j.path; + + //this.diag.log('fill_chunkwise_1: dir = file: ', file, ' at index: ', idx); + + // This is just a raw image + el = this.list_row_maker((this.listType === 'thumb' ? file.icon48 : file.icon), file); + + //this.diag.log('add DIRECTORY click event to ', file); + el.addEvent('click', (function(e) { + self.diag.log('is_dir:CLICK: ', e); + var node = this; + self.relayClick.apply(self, [e, node]); + }).bind(el)); + + editButtons = []; + + // rename, delete icon + if (file.name !== '..') + { + if (this.options.rename) editButtons.push('rename'); + if (this.options.destroy) editButtons.push('destroy'); + } + + editButtons.each(function(v) { + //icons.push( + Asset.image(this.assetBasePath + 'Images/' + v + '.png', {title: this.language[v]}).addClass('browser-icon').setStyle('opacity', 0).addEvent('mouseup', (function(e, target) { + // this = el, self = FM instance + e.preventDefault(); + this.store('edit', true); + // can't use 'file' in here directly anymore either: + var file = this.retrieve('file'); + self.tips.hide(); + self[v](file); + }).bind(el)).inject(el,'top'); + //); + }, this); + + els[1].push(el); + //if (file.name === '..') el.fade(0.7); + el.inject(new Element('li',{'class':this.listType}).inject(this.browser)).store('parent', el.getParent()); + //icons = $$(icons.map((function(icon) { + // this.showFunctions(icon,icon,0.5,1); + // this.showFunctions(icon,el.getParent('li'),1); + //}).bind(this))); + + // you CANNOT 'preselect' a directory as if it were a file, so we don't need to check against the 'preselect' or 'fmFile' values here! + } + + // and another, ALMOST identical, loop to render the files. Note that these buggers have their own peculiarities... and make sure the index is adjusted to point into files[] + var dir_count = j.dirs.length; + + // skip files[] rendering, when the startindex still points inside dirs[] ~ too many directories to fit any files on this page! + if (idx >= dir_count) + { + var dg_el; + + for ( ; idx < endindex && idx - dir_count < j.files.length; idx++) + { + file = j.files[idx - dir_count]; + + if (idx % 10 === 0) { + // try not to spend more than 100 msecs per (UI blocking!) loop run! + loop_duration = new Date().getTime() - loop_starttime; + duration = new Date().getTime() - starttime; + //this.diag.log('time taken so far = ', duration, ' / ', loop_duration, ' @ elcnt = ', idx); + + /* + * Are we running in adaptive pagination mode? yes: calculate estimated new pagesize and adjust average (EMA) when needed. + * + * Do this here instead of at the very end so that pagesize will adapt, particularly when user does not want to wait for + * this render to finish. + */ + this.adaptive_update_pagination_size(idx, endindex, render_count, pagesize, duration, 1.0 / 7.0, 1.1, 0.1 / 1000); + + if (loop_duration >= 100) + { + this.view_fill_timer = this.fill_chunkwise_1.delay(1, this, [idx, endindex, render_count, pagesize, support_DnD_for_this_dir, starttime, els, kbd_dir, preselect]); + return; // end call == break out of loop + } + } + + file.dir = j.path; + + //this.diag.log('fill_chunkwise_1: files: file: ', file, ' at index: ', idx - dir_count); + + // As we now have two views into the directory, we have to fetch the thumbnails, even when we're in 'list' view: the direcory gallery will need them! + // Besides, fetching the thumbs and all right after we render the directory also makes these thumbs + metadata available for drag&drop gallery and + // 'select mode', so they don't always have to ask for the meta data when it is required there and then. + if (file.thumb48 || this.listType !== 'thumb' || !file.thumbs_deferred) + { + // This is just a raw image + el = this.list_row_maker((this.listType === 'thumb' ? (file.thumb48 ? file.thumb48 : file.icon48) : file.icon), file); + + dg_el = this.dir_gallery_item_maker(file.icon48, file); + if (file.thumb48) + { + this.dir_gallery_set_actual_img(file, dg_el); + } + } + else // thumbs_deferred... + { + // We must AJAX POST our propagateData, so we need to do the post and take the url to the + // thumbnail from the post results. + // + // The alternative here, taking only 1 round trip instead of 2, would have been to FORM POST + // to a tiny iframe, which is suitably sized to contain the generated thumbnail and the POST + // actually returning the binary image data, thus the iframe contents becoming the thumbnail image. + + // update this one alongside the 'el': + dg_el = this.dir_gallery_item_maker(file.icon48, file); + + el = (function(file, dg_el) { // Closure + var iconpath = this.assetBasePath + 'Images/Icons/' + (this.listType === 'thumb' ? 'Large/' : '') + 'default-error.png'; + var list_row = this.list_row_maker((this.listType === 'thumb' ? file.icon48 : file.icon), file); + + var tx_cfg = this.options.mkServerRequestURL(this, 'detail', { + directory: this.dirname(file.path), + file: file.name, + filter: this.options.filter, + mode: 'direct' + this.options.detailInfoMode + }); + + var req = new FileManager.Request({ + url: tx_cfg.url, + data: tx_cfg.data, + fmDisplayErrors: false, // Should we display the error here? No, we just display the general error icon instead + onRequest: function() {}, + onSuccess: (function(j) { + if (!j || !j.status || !j.thumb48) + { + list_row.getElement('span.fm-thumb-bg').setStyle('background-image', 'url(' + (this.listType === 'thumb' ? (j.icon48 ? j.icon48 : iconpath) : (j.icon ? j.icon : iconpath)) + ')'); + dg_el.getElement('div.dir-gal-thumb-bg').setStyle('background-image', 'url(' + (j.icon48 ? j.icon48 : iconpath) + ')'); + } + else + { + list_row.getElement('span.fm-thumb-bg').setStyle('background-image', 'url(' + (this.listType === 'thumb' ? j.thumb48 : j.icon) + ')'); + if (j.thumb48) + { + this.dir_gallery_set_actual_img(j, dg_el); + } + } + + // update the stored json for this file as well: + file = Object.merge(file, j); + + delete file.error; + delete file.status; + delete file.content; + + if (file.element) + { + file.element.store('file', file); + } + }).bind(this), + onError: (function(text, error) { + list_row.getElement('span.fm-thumb-bg').setStyle('background-image', 'url(' + iconpath + ')'); + dg_el.getElement('div.dir-gal-thumb-bg').setStyle('background-image', 'url(' + iconpath + ')'); + }).bind(this), + onFailure: (function(xmlHttpRequest) { + list_row.getElement('span.fm-thumb-bg').setStyle('background-image', 'url(' + iconpath + ')'); + dg_el.getElement('div.dir-gal-thumb-bg').setStyle('background-image', 'url(' + iconpath + ')'); + }).bind(this) + }, this); + + this.RequestQueue.addRequest('fill:' + String.uniqueID(), req); + req.send(); + + return list_row; + }).bind(this)(file, dg_el); + } + + /* + * WARNING: for some (to me) incomprehensible reason the old code which bound the event handlers to 'this==self' and which used the 'el' variable + * available here, does NOT WORK ANY MORE - tested in FF3.6. Turns out 'el' is pointing anywhere but where you want it by the time + * the event handler is executed. + * + * The 'solution' which I found was to rely on the 'self' reference instead and bind to 'el'. If the one wouldn't work, the other shouldn't, + * but there you have it: this way around it works. FF3.6.14 :-( + * + * EDIT 2011/03/16: the problem started as soon as the old Array.each(function(...) {...}) by the chunked code which uses a for loop: + * + * http://jibbering.com/faq/notes/closures/ + * + * as it says there: + * + * A closure is formed when one of those inner functions is made accessible outside of the function in which it was + * contained, so that it may be executed after the outer function has returned. At which point it still has access to + * the local variables, parameters and inner function declarations of its outer function. Those local variables, + * parameter and function declarations (initially) >>>> have the values that they had when the outer function returned <<<< + * and may be interacted with by the inner function. + * + * The >>>> <<<< emphasis is mine: in the .each() code, each el was a separate individual, while due to the for loop, + * the last 'el' to exist at all is the one created during the last round of the loop in that chunk. Which explains the + * observed behaviour before the fix: the file names associated with the 'el' element object were always pointing + * at some item further down the list, not necessarily the very last one, but always these references were 'grouped': + * multiple rows would produce the same filename. + * + * EXTRA: 2011/04/09: why you don't want to add this event for any draggable item! + * + * It turns out that IE9 (IE6-8 untested as I write this) and Opera do NOT fire the 'click' event after the drag operation is + * 'cancel'led, while other browsers fire both (Chrome/Safari/FF3). + * For the latter ones, the event handler sequence after a simple click on a draggable item is: + * - Drag::onBeforeStart + * - Drag::onCancel + * - 'click' + * while a tiny amount of dragging produces this sequence instead: + * - Drag::onBeforeStart + * - Drag::onStart + * - Drag::onDrop + * - 'click' + * + * Meanwhile, Opera and IE9 do this: + * - Drag::onBeforeStart + * - Drag::onCancel + * - **NO** click event! + * while a tiny amount of dragging produces this sequence instead: + * - Drag::onBeforeStart + * - Drag::onStart + * - Drag::onDrop + * - **NO** click event! + * + * which explains why the old implementation did not simply register this 'click' event handler and had 'revert' fake the 'click' + * event instead. + * HOWEVER, the old way, using revert() (now called revert_drag_n_drop()) was WAY too happy to hit the 'click' event handler. In + * fact, the only spot where such 'manually firing' was desirable is when the drag operation is CANCELLED. And only there! + */ + + // 2011/04/09: only register the 'click' event when the element is NOT a draggable: + if (!support_DnD_for_this_dir) + { + self.diag.log('add FILE click event to ', file); + el.addEvent('click', (function(e) { + self.diag.log('is_file:CLICK: ', e); + var node = this; + self.relayClick.apply(self, [e, node]); + }).bind(el)); + } + + // add double click functionality to the list elements + if(this.options.selectable === true) { + el.addEvent('dblclick', (function(e) { + self.diag.log('is_file:DBLCLICK: ', e); + var node = this; + self.relayDblClick.apply(self, [e, node]); + }).bind(el)); + } + + editButtons = []; + + // download, rename, delete icon + if (this.options.download) editButtons.push('download'); + if (this.options.rename) editButtons.push('rename'); + if (this.options.destroy) editButtons.push('destroy'); + + editButtons.each(function(v) { + Asset.image(this.assetBasePath + 'Images/' + v + '.png', {title: this.language[v]}).addClass('browser-icon').setStyle('opacity', 0).addEvent('mouseup', (function(e, target) { + // this = el, self = FM instance + e.preventDefault(); + this.store('edit', true); + // can't use 'file' in here directly anymore either: + var file = this.retrieve('file'); + self.tips.hide(); + self[v](file); + }).bind(el)).inject(el,'top'); + }, this); + + els[0].push(el); + el.inject(new Element('li',{'class':this.listType}).inject(this.browser)).store('parent', el.getParent()); + + // ->> LOAD the FILE/IMAGE from history when PAGE gets REFRESHED (only directly after refresh) + //this.diag.log('fill on PRESELECT (test): onShow = ', this.fillInfoOnFillFired, ', file = ', file, ', fmFile = ', fmFile, ', preselect = ', preselect); + if (!this.fillInfoOnFillFired) + { + if (preselect) + { + if (preselect === file.name) + { + this.deselect(null); + this.Current = file.element; + new Fx.Scroll(this.browserScroll,{duration: 'short', offset: {x: 0, y: -(this.browserScroll.getSize().y/4)}}).toElement(file.element); + file.element.addClass('selected'); + this.diag.log('fill on PRESELECT: fillInfo: file = ', file); + this.fillInfo(file); + this.fillInfoOnFillFired = true; + } + } + else if (fmFile) + { + if (fmFile === file.name) + { + this.deselect(null); + this.Current = file.element; + new Fx.Scroll(this.browserScroll,{duration: 'short', offset: {x: 0, y: -(this.browserScroll.getSize().y/4)}}).toElement(file.element); + file.element.addClass('selected'); + this.diag.log('fill: fillInfo: file = ', file); + this.fillInfo(file); + this.fillInfoOnFillFired = true; + } + } + } + + +// Partikule +// Thumbs list +// edit: Fabian Vogelsteller: made thumblist DRAGGABLE + + // use a closure to keep a reference to the current dg_el, otherwise dg_el, file, etc. will carry the values they got at the end of the loop! + (function(dg_el, el, file) + { + var thumbLi = new Element('li'); + + dg_el.store('el_ref', el).store('file',file).store('parent',thumbLi); + + thumbLi.inject(this.dir_filelist_thumbUl); + dg_el.inject(thumbLi); + }).bind(this)(dg_el, el, file); + +// / Partikule + } + } + + // when we get here, we have rendered all files in the current page and we know whether we have fired off a fillInfo on a preselect/history-recalled file now, or not: + if (!this.fillInfoOnFillFired) + { + this.diag.log('fill internal: fillInfo: file = ', j, j.this_dir); + this.fillInfo(j.this_dir); + this.fillInfoOnFillFired = true; + } + + // check how much we've consumed so far: + duration = new Date().getTime() - starttime; + //this.diag.log(' + time taken in array traversal = ', duration); + + // go to the next stage, right after these messages... ;-) + this.view_fill_timer = this.fill_chunkwise_2.delay(1, this, [render_count, pagesize, support_DnD_for_this_dir, starttime, els, kbd_dir]); + }, + + /* + * See comment for fill_chunkwise_1(): the makeDraggable() is a loop in itself and taking some considerable time + * as well, so make it happen in a 'fresh' run here... + */ + fill_chunkwise_2: function(render_count, pagesize, support_DnD_for_this_dir, starttime, els, kbd_dir) { + + var duration = new Date().getTime() - starttime; + //this.diag.log(' + time duration @ fill_chunkwise_2() begin: ', duration); + + // check how much we've consumed so far: + duration = new Date().getTime() - starttime; + //this.diag.log(' + time taken in array traversal + revert = ', duration); + + // -> made preview thumblist DRAGGABLE + // add the thumbnail pane in preview window to the dropable elements + this.dir_filelist.getChildren('ul li div.fi').each((function(thumb){ + els[0].push(thumb); + }).bind(this)); + + // make draggable + if (support_DnD_for_this_dir) { + // -> make draggable + $$(els[0]).makeDraggable({ + droppables: $$(this.droppables.combine(els[1])), + //stopPropagation: true, + + // We position the element relative to its original position; this ensures the drag always works with arbitrary container. + onDrag: (function(el, e) + { + var dpos = el.retrieve('delta_pos'); + + el.setStyles({ + display: 'block', + left: e.page.x + dpos.x, + top: e.page.y + dpos.y + }); + + this.imageadd.setStyles({ + 'left': e.page.x + dpos.x - 12, + 'top': e.page.y + dpos.y + 2 + }); + }).bind(this), + + onBeforeStart: (function(el) { + // you CANNOT use .container to get good x/y coords as in standalone mode, this
    has a bogus position; + //var cpos = this.container.getPosition(); + + // start the scroller + this.scroller.start(); + }).bind(this), + + // FIX: do not deselect item when aborting dragging _another_ item! + onCancel: (function(el) { + this.diag.log('draggable:onCancel', el); + this.scroller.stop(); + this.revert_drag_n_drop(el); + /* + * Fixing the 'click' on FF+Opera (other browsers do get that event for any item which is made draggable): + * a basic mouse'click' appears as the event sequence onBeforeStart + onCancel. + * + * NOTE that onStart is NOT invoked! When it is, it's a drag operation, no matter if it's successful as a drag&drop or not. + * + * So we then manually fire the 'click' event. See also the comment near the 'click' event handler registration in fill_chunkwise_1() + * about the different behaviour in different browsers. + */ + this.relayClick(null, el); + }).bind(this), + + onStart: (function(el, e) { + this.diag.log('draggable:onStart', el); + this.tips.hide(); + + var position = el.getPosition(); + var dpos = { + x: position.x - e.page.x, + y: position.y - e.page.y + }; + /* + * Use the element size (Y) for IE-fixing heuristics: + * in IE the mouse is already quite some distance away before the onStart fires, + * we need to restrict the vertical position of the dragged element in such a way + * that it will reside 'under the mouse cursor'. + */ + var elsize = el.getSize(); + if (dpos.y > 0) + dpos.y = -Math.round(elsize.y / 2); + else if (dpos.y < -elsize.y) + dpos.y = -Math.round(elsize.y / 2); + + this.diag.log('~~~ positions at start: ', position, dpos, e); + + el.store('delta_pos', dpos); + + el.addClass('drag').setStyles({ + 'z-index': this.options.zIndex + 1500, + 'position': 'absolute', + 'width': el.getWidth() - el.getStyle('paddingLeft').toInt() - el.getStyle('paddingRight').toInt(), + 'display': 'none', + 'left': e.page.x + dpos.x, + 'top': e.page.y + dpos.y + }).inject(this.container); + + el.fade(0.7).addClass('move'); + + this.diag.log('ENABLE keyboard up/down on drag start'); + + // FIX wrong visual when CONTROL key is kept depressed between drag&drops: the old code discarded the relevant keyboard handler; we simply switch visuals but keep the keyboard handler active. + // This state change will be reverted in revert_drag_n_drop(). + this.drag_is_active = true; + this.imageadd.fade(0 + this.ctrl_key_pressed); + }).bind(this), + + onEnter: function(el, droppable) { + droppable.addClass('droppable'); + }, + + onLeave: function(el, droppable) { + droppable.removeClass('droppable'); + }, + + onDrop: (function(el, droppable, e) { + this.diag.log('draggable:onDrop', el, droppable, e); + this.scroller.stop(); + + var is_a_move = !(e.control || e.meta); + this.drop_pending = 1 + is_a_move; + + if (!is_a_move || !droppable) { + el.setStyles({left: 0, top: 0}); + } + + var dir = null; + if (droppable) { + droppable.addClass('selected').removeClass('droppable'); + (function() { + droppable.removeClass('selected'); + }).delay(300); + if (this.onDragComplete(el, droppable)) { + this.drop_pending = 0; + + this.revert_drag_n_drop(el); // go and request the details anew, then refresh them in the view + return; + } + + dir = droppable.retrieve('file'); + this.diag.log('on drop dir = ', dir); + } + + if ((!this.options.move_or_copy) || (is_a_move && !droppable)) { + this.drop_pending = 0; + + this.revert_drag_n_drop(el); // go and request the details anew, then refresh them in the view + return; + } + + this.revert_drag_n_drop(el); // do not send the 'detail' request in here: this.drop_pending takes care of that! + + var file = el.retrieve('file'); + this.diag.log('on drop file = ', file, ', current dir:', this.CurrentDir, ', droppable: ', droppable); + + if (this.Request) this.Request.cancel(); + + var tx_cfg = this.options.mkServerRequestURL(this, 'move', { + file: file.name, + filter: this.options.filter, + directory: this.CurrentDir.path, + newDirectory: (dir ? dir.path : this.CurrentDir.path), + copy: is_a_move ? 0 : 1 + }); + + this.Request = new FileManager.Request({ + url: tx_cfg.url, + data: tx_cfg.data, + onSuccess: (function(j) { + if (!j || !j.status) { + this.drop_pending = 0; + this.browserLoader.fade(0); + return; + } + + this.fireEvent('modify', [Object.clone(file), j, (is_a_move ? 'move' : 'copy'), this]); + + var rerendering_list = false; + + // remove entry from cached JSON directory list and remove the item from the view when this was a move! + // This is particularly important when working on a paginated directory and afterwards the pages are jumped back & forth: + // the next time around, this item should NOT appear in the list anymore! + if (is_a_move) + { + this.deselect(file.element); + + if (this.view_fill_json) + { + this.delete_from_dircache(file); /* do NOT use j.name, as that one can be 'cleaned up' as part of the 'move' operation! */ + + // minor caveat: when we paginate the directory list, then browsing to the next page will skip one item (which would + // have been the first on the next page). The brute-force fix for this is to force a re-render of the page when in + // pagination view mode: + if (this.view_fill_json.dirs.length + this.view_fill_json.files.length > this.listPaginationLastSize) + { + // similar activity as load(), but without the server communication... + + // abort any still running ('antiquated') fill chunks and reset the store before we set up a new one: + this.RequestQueue.cancel_bulk('fill'); + clearTimeout(this.view_fill_timer); + this.view_fill_timer = null; + + // was here + } + } + + // -> moves this here so it always reloads the thumbnail pane in the preview window + rerendering_list = true; + this.fill(null, this.get_view_fill_startindex(), this.listPaginationLastSize); + + // make sure fade does not clash with parallel directory (re)load: + if (!rerendering_list) + { + var p = file.element.getParent(); + if (p) { + p.fade(0).get('tween').chain(function() { + this.element.destroy(); + }); + } + } + } + else + { + if (!dir) + { + // copied to the very same directory: + rerendering_list = true; + this.load(this.CurrentDir.path); + } + } + + this.drop_pending = 0; + this.browserLoader.fade(0); + }).bind(this), + onError: (function(text, error) { + this.drop_pending = 0; + this.browserLoader.fade(0); + }).bind(this), + onFailure: (function(xmlHttpRequest) { + this.drop_pending = 0; + this.browserLoader.fade(0); + }).bind(this) + }, this).send(); + }).bind(this) + }); + + this.browser_dragndrop_info.setStyle('background-position', '0px 0px'); + this.browser_dragndrop_info.set('title', this.language.drag_n_drop); + } + + // add tooltip for drag n drop icon + this.tips.attach(this.browser_dragndrop_info); + + // check how much we've consumed so far: + duration = new Date().getTime() - starttime; + //this.diag.log(' + time taken in make draggable = ', duration); + + $$(els[0].combine(els[1])).setStyles({'left': 0, 'top': 0}); + + // check how much we've consumed so far: + duration = new Date().getTime() - starttime; + //this.diag.log(' + time taken in setStyles = ', duration); + + this.adaptive_update_pagination_size(render_count, render_count, render_count, pagesize, duration, 1.0 / 7.0, 1.02, 0.1 / 1000); + + // go to the next stage, right after these messages... ;-) + this.view_fill_timer = this.fill_chunkwise_3.delay(1, this, [render_count, pagesize, support_DnD_for_this_dir, starttime, kbd_dir]); + }, + + /* + * See comment for fill_chunkwise_1(): the tooltips need to be assigned with each icon (2..3 per list item) + * and apparently that takes some considerable time as well for large directories and slightly slower machines. + */ + fill_chunkwise_3: function(render_count, pagesize, support_DnD_for_this_dir, starttime, kbd_dir) { + + var duration = new Date().getTime() - starttime; + //this.diag.log(' + time duration @ fill_chunkwise_3() begin:', duration); + + this.tips.attach(this.browser.getElements('img.browser-icon')); + this.browser_dragndrop_info.fade(1); + + // check how much we've consumed so far: + duration = new Date().getTime() - starttime; + //this.diag.log(' + time taken in tips.attach = ', duration); + + // when a render is completed, we have maximum knowledge, i.e. maximum prognosis power: shorter tail on the EMA is our translation of that. + this.adaptive_update_pagination_size(render_count, render_count, render_count, pagesize, duration, 1.0 / 5.0, 1.0, 0); + + // we're done: erase the timer so it can be garbage collected + //this.RequestQueue.cancel_bulk('fill'); -- do NOT do this! + clearTimeout(this.view_fill_timer); + this.view_fill_timer = null; + + // make sure the selection, when keyboard driven, is marked correctly + if (kbd_dir) + { + this.browserSelection(kbd_dir); + } + + this.browserLoader.fade(0); + + this.fireHooks('fill'); + }, + + adaptive_update_pagination_size: function(currentindex, endindex, render_count, pagesize, duration, EMA_factor, future_fudge_factor, compensation) + { + var avgwait = this.options.listPaginationAvgWaitTime; + if (avgwait) + { + // we can now estimate how much time we'll need to process the entire list: + var orig_startindex = endindex - render_count; + var done_so_far = currentindex - orig_startindex; + // the 1.3 is a heuristic covering for chunk_2+3 activity + done_so_far /= parseFloat(render_count); + // at least 5% of the job should be done before we start using our info for estimation/extrapolation + if (done_so_far > 0.05) + { + /* + * and it turns out our fudge factors are not telling the whole story: the total number of elements + * to render are still a factor then. + */ + future_fudge_factor *= (1 + compensation * render_count); + + var t_est = duration * future_fudge_factor / done_so_far; + + // now take the configured _desired_ maximum average wait time and see how we should fare: + var p_est = render_count * avgwait / t_est; + + // EMA + sensitivity: the closer to our current target, the better our info: + var tail = EMA_factor * (0.9 + 0.1 * done_so_far); + var newpsize = tail * p_est + (1 - tail) * pagesize; + + // apply limitations: never reduce more than 50%, never increase more than 20%: + var delta = newpsize / pagesize; + if (delta < 0.5) + newpsize = 0.5 * pagesize; + else if (delta > 1.2) + newpsize = 1.2 * pagesize; + newpsize = newpsize.toInt(); + + // and never let it drop below rediculous values: + if (newpsize < 20) + newpsize = 20; + + //this.diag.log('::auto-tune pagination: new page = ', newpsize, ' @ tail:', tail, ', p_est: ', p_est, ', psize:', pagesize, ', render:', render_count, ', done%:', done_so_far, ', delta index:', currentindex - orig_startindex, ', t_est:', t_est, ', dur:', duration, ', pdelta: ', delta); + this.options.listPaginationSize = newpsize; + } + } + }, + + fillInfo: function(file) { + + if (!file) file = this.CurrentDir; + if (!file) return; + + // set file history + this.diag.log('fillInfo: ', this.storeHistory, ', file: ', Object.clone(file)); + if (typeof jsGET !== 'undefined' && this.storeHistory) { + if (file.mime !== 'text/directory') + jsGET.set({'fmFile': file.name}); + else + jsGET.remove(['fmFile']); + } + + var icon = file.icon; + + this.switchButton4Current(); + + this.fireHooks('cleanupPreview'); + // We need to remove our custom attributes form when the preview is hidden + this.fireEvent('hidePreview', [this]); + + this.preview.empty(); + + //if (file.mime === 'text/directory') return; + + if (this.drop_pending == 0) + { + if (this.Request) this.Request.cancel(); + + var dir = this.CurrentDir.path; + + this.diag.log('fillInfo: request detail for file: ', Object.clone(file), ', dir: ', dir); + if(file.mime === 'text/directory') + { + if(file.readme && file.readme.length) { this.preview.set('html', file.readme); this.preview_area.setStyle('display', 'block').fade('in'); return; } + if(this.options.showDirGallery === false) return; + } + + var tx_cfg = this.options.mkServerRequestURL(this, 'detail', { + directory: this.dirname(file.path), + // fixup for root directory detail requests: + file: (file.mime === 'text/directory' && file.path === '/') ? '/' : file.name, + filter: this.options.filter, + // provide either direct links to the thumbnails (when available in cache) or PHP event trigger URLs for delayed thumbnail image creation (performance optimization: faster page render): + mode: 'direct' + this.options.detailInfoMode + }); + + this.Request = new FileManager.Request({ + url: tx_cfg.url, + data: tx_cfg.data, + onRequest: (function() { + this.previewLoader.inject(this.preview); + this.previewLoader.fade(1); + this.show_our_info_sections(false); + }).bind(this), + onSuccess: (function(j) { + + if (!j || !j.status) { + this.previewLoader.dispose(); + return; + } + + // speed up DOM tree manipulation: detach .info from document temporarily: + this.info.dispose(); + + this.info_head.getElement('img').set({ + src: icon, + alt: file.mime + }); + + this.info_head.getElement('h1').set('text', file.name); + this.info_head.getElement('h1').set('title', file.name); + + // don't wait for the fade to finish to set up the new content + var prev = this.preview.removeClass('filemanager-loading').set('html', ''); + + if(typeof this.options.previewHandlers[j.mime] === 'function') + { + this.options.previewHandlers[j.mime](prev, j); + } + else if(typeof this.options.previewHandlers[j.mime.split('/')[0]] === 'function') + { + this.options.previewHandlers[j.mime.split('/')[0]](prev, j); + } + else + { + prev.set('html', (j.content ? j.content.substitute(this.language, /\\?\$\{([^{}]+)\}/g) : '')).getElement('img.preview'); + } + + if (file.mime === 'text/directory') + { + // only show the image set when this directory is also the current one (other directory detail views can result from a directory rename operation! + this.diag.log('? fillInfo for DIR: ', file, ', currentDir: ', this.CurrentDir); + if (file.path === this.CurrentDir.path) + { + this.preview.adopt(this.dir_filelist); + } + } + + // and plug in the manipulated DOM subtree again: + this.info.inject(this.filemanager); + this.show_our_info_sections(true); + + this.previewLoader.fade(0).get('tween').chain((function() { + this.previewLoader.dispose(); + }).bind(this)); + + var els = this.preview.getElements('button'); + if (els) { + els.addEvent('click', function(e) { + e.stop(); + window.open(this.get('value')); + }); + } + + if (prev && !j.thumb250 && j.thumbs_deferred) + { + var iconpath = this.assetBasePath + 'Images/Icons/Large/default-error.png'; + + if (0) + { + prev.set('src', iconpath); + prev.setStyles({ + 'width': '', + 'height': '', + 'background': 'none' + }); + } + + var tx_cfg = this.options.mkServerRequestURL(this, 'detail', { + directory: this.dirname(file.path), + file: file.name, + filter: this.options.filter, + mode: 'direct' + this.options.detailInfoMode + }); + + var req = new FileManager.Request({ + url: tx_cfg.url, + data: tx_cfg.data, + fmDisplayErrors: false, // Should we display the error here? No, we just display the general error icon instead + onRequest: function() {}, + onSuccess: (function(j) { + var img_url = (j.icon48 ? j.icon48 : iconpath); + if (j && j.status && j.thumb250) + { + img_url = j.thumb250; + } + + prev.set('src', img_url); + prev.addEvent('load', function() { + // when the thumb250 image has loaded, remove the loader animation in the background ... + //this.setStyle('background', 'none'); + // ... AND blow away the encoded 'width' and 'height' styles: after all, the thumb250 generation MAY have failed. + // In that case, an icon is produced by the backend, but it will have different dimensions, and we don't want to + // distort THAT one, either. + this.setStyles({ + 'width': '', + 'height': '', + 'background': 'none' + }); + }); + + // Xinha: We need to add in a form for setting the attributes of images etc, + // so we add this event and pass it the information we have about the item + // as returned by Backend/FileManager.php + this.fireEvent('details', [j, this]); + + // update the stored json for this file as well: + + // now mix with the previously existing 'file' info (as produced by a 'view' run): + file = Object.merge(file, j); + + // remove unwanted JSON elements: + delete file.status; + delete file.error; + delete file.content; + + if (file.element) + { + file.element.store('file', file); + } + + if (typeof milkbox !== 'undefined') + { + milkbox.reloadPageGalleries(); + } + }).bind(this), + onError: (function(text, error) { + prev.set('src', iconpath); + prev.setStyles({ + 'width': '', + 'height': '', + 'background': 'none' + }); + }).bind(this), + onFailure: (function(xmlHttpRequest) { + prev.set('src', iconpath); + prev.setStyles({ + 'width': '', + 'height': '', + 'background': 'none' + }); + }).bind(this) + }, this); + + this.RequestQueue.addRequest('info:' + String.uniqueID(), req); + req.send(); + } + else + { + // Xinha: We need to add in a form for setting the attributes of images etc, + // so we add this event and pass it the information we have about the item + // as returned by Backend/FileManager.php + this.fireEvent('details', [j, this]); + + // We also want to hold onto the data so we can access it later on, + // e.g. when selecting the image. + + // now mix with the previously existing 'file' info (as produced by a 'view' run): + file = Object.merge(file, j); + + // remove unwanted JSON elements: + delete file.status; + delete file.error; + delete file.content; + + if (file.element) + { + file.element.store('file', file); + } + + if (typeof milkbox !== 'undefined') + { + milkbox.reloadPageGalleries(); + } + } + }).bind(this), + onError: (function(text, error) { + this.previewLoader.dispose(); + }).bind(this), + onFailure: (function(xmlHttpRequest) { + this.previewLoader.dispose(); + }).bind(this) + }, this).send(); + } + }, + + audioPreview: function(previewArea, fileDetails) + { + var dl = new Element('dl') + .adopt(new Element('dt').set('text', this.language['title'])) + .adopt(new Element('dd').set('text', fileDetails.title)) + .adopt(new Element('dt').set('text', this.language['artist'])) + .adopt(new Element('dd').set('text', fileDetails.artist)) + .adopt(new Element('dt').set('text', this.language['album'])) + .adopt(new Element('dd').set('text', fileDetails.album)) + .adopt(new Element('dt').set('text', this.language['length'])) + .adopt(new Element('dd').set('text', fileDetails.length)) + .adopt(new Element('dt').set('text', this.language['bitrate'])) + .adopt(new Element('dd').set('text', fileDetails.bitrate)) + .inject(previewArea); + + previewArea = new Element('div', {'class': 'filemanager-preview-content'}).inject(previewArea); + + var dewplayer = this.assetBasePath + '/dewplayer.swf'; + + new Element('object', { + type: 'application/x-shockwave-flash', + data: dewplayer, + width: 200, + height: 20, + style: 'margin-left:auto;margin-right:auto;display:block;' + }) + .adopt(new Element('param', {name:'wmode', value:'transparent'})) + .adopt(new Element('param', {name:'movie', value:dewplayer})) + .adopt(new Element('param', {name:'flashvars', value:'mp3='+fileDetails.url+'&volume=50&showtime=1'})) + .inject(previewArea); + + return previewArea.parentNode; + }, + + showFunctions: function(icon,appearOn,opacityBefore,opacityAfter) { + var opacity = [opacityBefore || 1, opacityAfter || 0]; + icon.set({ + opacity: opacity[1] + }); + + document.id(appearOn).addEvents({ + mouseenter: (function() { + this.setStyle('opacity', opacity[0]); + }).bind(icon), + mouseleave: (function() { + this.setStyle('opacity', opacity[1]); + }).bind(icon) + }); + return icon; + }, + + normalize: function(str) { + return str.replace(/\/+/g, '/'); + }, + + dirname: function(path) { + var sects = path.split('/'); + var topdir = sects.pop(); + if (topdir === '') + { + // path has trailing '/'; keep it that way! + sects.pop(); + sects.push(''); + } + return sects.join('/'); + }, + + switchButton4Current: function() { + var chk = !!this.Current; + var els = []; + els.push(this.menu.getElement('button.filemanager-open')); + els.push(this.menu.getElement('button.filemanager-download')); + els.each(function(el) { + if (el) + { + el.set('disabled', !chk)[(chk ? 'remove' : 'add') + 'Class']('disabled'); + } + }); + }, + + // adds buttons to the file main menu, which onClick start a method with the same name + addMenuButton: function(name) { + var el = new Element('div', { + 'class': 'filemanager-button filemanager-' + name, + text: this.language[name] + }).inject(this.menu, 'top'); + + if (this[name+'_on_click']) + { + el.addEvent('click', this[name+'_on_click'].bind(this)); + } + return el; + }, + + // clear the view chunk timer, erase the JSON store but do NOT reset the pagination to page 0: + // we may be reloading and we don't want to destroy the page indicator then! + reset_view_fill_store: function(j) + { + this.view_fill_startindex = 0; // offset into the view JSON array: which part of the entire view are we currently watching? + if (this.view_fill_json) + { + // make sure the old 'fill' run is aborted ASAP: clear the old files[] array to break + // the heaviest loop in fill: + this.view_fill_json.files = []; + this.view_fill_json.dirs = []; + } + + this.reset_fill(); + + this.view_fill_json = ((j && j.status) ? j : null); // clear out the old JSON data and set up possibly new data. + // ^^^ the latest JSON array describing the entire list; used with pagination to hop through huge dirs without repeatedly + // consulting the server. The server doesn't need to know we're so slow we need pagination now! ;-) + }, + + + // clear the view chunk timer only. We are probably redrawing the list view! + reset_fill: function() + { + this.browser_dragndrop_info.fade(0.5); + this.browser_dragndrop_info.setStyle('background-position', '0px -16px'); + this.browser_dragndrop_info.set('title', this.language.drag_n_drop_disabled); + + // as this is a long-running process, make sure the hourglass-equivalent is visible for the duration: + this.browserLoader.fade(1); + + this.browser_paging.fade(0); + + // abort any still running ('antiquated') fill chunks: + this.RequestQueue.cancel_bulk('fill'); + clearTimeout(this.view_fill_timer); + this.view_fill_timer = null; // timer reference when fill() is working chunk-by-chunk. + }, + + store_view_fill_startindex: function(idx) + { + this.view_fill_startindex = idx; + if (typeof jsGET !== 'undefined' /* && this.storeHistory */) { + jsGET.set({'fmPageIdx': idx}); + } + }, + + get_view_fill_startindex: function(idx) + { + // we don't care about null, undefined or 0 here: as we keep close track of the startindex, any nonzero valued setting wins out. + if (!idx) + { + idx = this.view_fill_startindex; + } + if (typeof jsGET !== 'undefined' && !idx) + { + idx = jsGET.get('fmPageIdx'); + } + return parseInt(idx ? idx : 0, 10); + }, + + fireHooks: function(hook) { + var args = Array.slice(arguments, 1); + for(var key in this.hooks[hook]) { + this.hooks[hook][key].apply(this, args); + } + return this; + }, + + cvtXHRerror2msg: function(xmlHttpRequest) { + var status = xmlHttpRequest.status; + var orsc = xmlHttpRequest.onreadystatechange; + var response = (xmlHttpRequest.responseText || this.language['backend.unidentified_error']); + + var text = response.substitute(this.language, /\\?\$\{([^{}]+)\}/g); + return text; + }, + + showError: function(text) { + var errorText = '' + text; + + if (!errorText) { + errorText = this.language['backend.unidentified_error']; + } + errorText = errorText.substitute(this.language, /\\?\$\{([^{}]+)\}/g); + + if (this.pending_error_dialog) + { + this.pending_error_dialog.appendMessage(errorText); + } + else + { + this.pending_error_dialog = new FileManager.Dialog(this.language.error, { + buttons: ['confirm'], + language: { + confirm: this.language.ok + }, + content: [ + errorText + ], + zIndex: this.options.zIndex + 1000, + onOpen: this.onDialogOpen.bind(this), + onClose: function() + { + this.pending_error_dialog = null; + this.onDialogClose(); + }.bind(this) + }); + } + }, + + showMessage: function(textOrElement, title) { + if (!title) title = ''; + new FileManager.Dialog(title, { + buttons: ['confirm'], + language: { + confirm: this.language.ok + }, + content: [ + textOrElement + ], + zIndex: this.options.zIndex + 950, + onOpen: this.onDialogOpen.bind(this), + onClose: this.onDialogClose.bind(this) + }); + }, + + onRequest: function() { + this.loader.fade(1); + }, + onComplete: function() { + //this.loader.fade(0); + }, + onSuccess: function() { + this.loader.fade(0); + }, + onError: function() { + this.loader.fade(0); + }, + onFailure: function() { + this.loader.fade(0); + }, + onDialogOpen: function() { + this.dialogOpen = true; + this.onDialogOpenWhenUpload.apply(this); + }, + onDialogClose: function() { + this.dialogOpen = false; + this.onDialogCloseWhenUpload.apply(this); + }, + onDialogOpenWhenUpload: function() {}, + onDialogCloseWhenUpload: function() {}, + onDragComplete: function() { + return false; // return TRUE when the drop action is unwanted + }, + + // dev/diag shortcuts: + + // always return a string; dump object/array/... in 'arr' to human readable string: + diag: + { + verbose: false, + dump: function(arr, level, max_depth, max_lines, no_show) + { + return ''; + }, + log: function(/* ... */) + { + if (!this.verbose) return; + + if (typeof console !== 'undefined') + { + // WARNING: MS IE9 (+ v8?) says: this object doesn't support the 'apply' method. :-((( + // Also, MSIE 8/9 doesn't show object dumps like you'd expect; Firebug Lite allegedly fixes that, + // but this is code which intends to 'hide' all that shite, so we can simply write diag.log() and + // not bother where it will end up. + if (console.info && console.info.apply) + { + console.info.apply(console, arguments); + } + else if (console.log && console.log.apply) + { + console.log.apply(console, arguments); + } + else if (console.info || console.log) + { + // the MSIE downgrade + var l = (console.info || console.log); + var a; + var lt = ''; + var m, e, v; + var multiobj = 0; // count items dumped without inter-WS + for (a in arguments) + { + multiobj++; + a = arguments[a]; + switch (typeof a) + { + case 'undefined': + lt += '(undefined)'; + break; + + case 'null': + lt += '(null)'; + break; + + case 'object': + lt += '{'; + m = ''; + for (e in a) + { + lt += m; + + v = a[e]; + //if (typeof e !== 'string') continue; + switch (typeof v) + { + case 'function': + continue; // skip these + + case 'undefined': + lt += e + ': (undefined)'; + break; + + case 'null': + lt += e + ': (null)'; + break; + + case 'object': + // nuts of course: IE9 has objects which turn out as === null and clunk on .toString() as a consequence >:-S + if (v === null) + { + lt += e + ': (null)'; + } + else + { + lt += e + ': ' + v.toString(); + } + break; + + case 'string': + lt += e + ': "' + v + '"'; + break; + + default: + lt += e + ': ' + v.toString(); + break; + } + m = ', '; + } + lt += '}'; + break; + + case 'string': + // reset inter-WS formatting assist: + multiobj = 0; + lt += a; + break; + + default: + try + { + m = a.toString(); + } + catch (e) + { + m = '(*clunk*)'; + } + lt += v; + break; + } + if (multiobj >= 1) + { + lt += ' '; + } + } + } + } + } + } +}); + +FileManager.Request = new Class({ + Extends: Request.JSON, + + options: + { + secure: true, // Isn't this true by default anyway in REQUEST.JSON? + fmDisplayErrors: true // Automatically display errors - ** your onSuccess still gets called, just ignore if it's an error ** + }, + + initialize: function(options, filebrowser) { + this.parent(options); + + this.options.data = Object.merge({}, filebrowser.options.propagateData, this.options.data); + + if (this.options.fmDisplayErrors) + { + this.addEvents({ + success: function(j) + { + if (!j) + { + filebrowser.showError(); + } + else if (!j.status) + { + filebrowser.showError(('' + j.error).substitute(filebrowser.language, /\\?\$\{([^{}]+)\}/g)); + } + }.bind(this), + + error: function(text, error) + { + filebrowser.showError(text); + }, + + failure: function(xmlHttpRequest) + { + var text = filebrowser.cvtXHRerror2msg(xmlHttpRequest); + filebrowser.showError(text); + } + }); + } + + this.addEvents({ + request: filebrowser.onRequest.bind(filebrowser), + complete: filebrowser.onComplete.bind(filebrowser), + success: filebrowser.onSuccess.bind(filebrowser), + error: filebrowser.onError.bind(filebrowser), + failure: filebrowser.onFailure.bind(filebrowser) + }); + } +}); + +FileManager.Language = {}; + +(function() { + +// ->> load DEPENDENCIES +if (typeof __MFM_ASSETS_DIR__ === 'undefined') +{ + var __DIR__ = (function() { + var scripts = document.getElementsByTagName('script'); + var script = scripts[scripts.length - 1].src; + var host = window.location.href.replace(window.location.pathname+window.location.hash,''); + return script.substring(0, script.lastIndexOf('/')).replace(host,'') + '/'; + })(); + __MFM_ASSETS_DIR__ = __DIR__ + "../Assets"; +} +Asset.javascript(__MFM_ASSETS_DIR__+'/js/milkbox/milkbox.js'); +Asset.css(__MFM_ASSETS_DIR__+'/js/milkbox/css/milkbox.css'); +Asset.css(__MFM_ASSETS_DIR__+'/Css/FileManager.css'); +Asset.css(__MFM_ASSETS_DIR__+'/Css/Additions.css'); +if(Browser.ie && Browser.version <= 7) +{ + Asset.css(__MFM_ASSETS_DIR__+'/Css/FileManager_ie7.css'); +} + + +if( typeof __MFM_USE_BACK_BUTTON_NAVIGATION__ != 'undefined' && __MFM_USE_BACK_BUTTON_NAVIGATION__ ) +{ + Asset.javascript(__MFM_ASSETS_DIR__+'/js/jsGET.js', { + events: { + load: (function() { + window.fireEvent('jsGETloaded'); + }).bind(this) + } + }); +} + +Element.implement({ + + center: function(offsets) { + var scroll = document.getScroll(); + var offset = document.getSize(); + var size = this.getSize(); + var values = {x: 'left', y: 'top'}; + + if (!offsets) { + offsets = {}; + } + + for (var z in values) { + var style = scroll[z] + (offset[z] - size[z]) / 2 + (offsets[z] || 0); + this.setStyle(values[z], (z === 'y' && style < 30) ? 30 : style); + } + return this; + } + +}); + +FileManager.Dialog = new Class({ + + Implements: [Options, Events], + + options: { + /* + * onShow: function() {}, + * onOpen: function() {}, + * onConfirm: function() {}, + * onDecline: function() {}, + * onClose: function() {}, + */ + request: null, + buttons: ['confirm', 'decline'], + language: {}, + zIndex: 2000, + autofocus_on: null // (string) suitable as a .getElement() argument or NULL for default. Example: 'button.filemanager-dialog-confirm' + }, + + initialize: function(text, options) { + this.setOptions(options); + this.dialogOpen = false; + + this.content_el = new Element('div', { + 'class': 'filemanager-dialog-content' + }).adopt([ + typeOf(text) === 'string' ? this.str2el(text) : text + ]); + + this.el = new Element('div', { + 'class': 'filemanager-dialog' + (Browser.ie ? ' filemanager-dialog-engine-trident' : '') + (Browser.ie ? ' filemanager-dialog-engine-trident' : '') + (Browser.ie8 ? '4' : '') + (Browser.ie9 ? '5' : ''), + opacity: 0, + tween: {duration: 'short'}, + styles: + { + 'z-index': this.options.zIndex + } + }).adopt(this.content_el); + + if (typeof this.options.content !== 'undefined') { + this.options.content.each((function(content) { + if (content) + { + if (typeOf(content) !== 'string') + { + this.content_el.adopt(content); + } + else + { + this.content_el.adopt(this.str2el(content)); + } + } + }).bind(this)); + } + + Array.each(this.options.buttons, function(v) { + new Element('button', {'class': 'filemanager-dialog-' + v, text: this.options.language[v]}).addEvent('click', (function(e) { + if (e) e.stop(); + this.fireEvent(v).fireEvent('close'); + //if (!this.options.hideOverlay) + this.overlay.hide(); + this.destroy(); + }).bind(this)).inject(this.el); + }, this); + + this.overlay = new Overlay({ + 'class': 'filemanager-overlay filemanager-overlay-dialog', + events: { + click: this.fireEvent.pass('close', this) + }, + //tween: {duration: 'short'}, + styles: + { + 'z-index': this.options.zIndex - 1 + } + }); + + this.bound = { + scroll: (function() { + if (!this.el) + this.destroy(); + else + this.el.center(); + }).bind(this), + + keyesc: (function(e) { + window.FileManager.prototype.diag.log('keyEsc: key press: ', e); + if (e.key === 'esc') { + e.stopPropagation(); + this.destroy(); + } + }).bind(this) + }; + + this.show(); + }, + + show: function() { + this.overlay.show(); + + var self = this; + this.fireEvent('open'); + this.el.setStyle('display', 'block').inject(document.body); + this.restrictSize(); + var autofocus_el = (this.options.autofocus_on ? this.el.getElement(this.options.autofocus_on) : (this.el.getElement('button.filemanager-dialog-confirm') || this.el.getElement('button'))); + if (autofocus_el) + { + // HTML5 support: see http://diveintohtml5.org/detect.html + autofocus_el.setProperty('autofocus', 'autofocus'); + try{autofocus_el.focus();}catch(e) { /* IE<8 Failes */ } + } + this.el.center().fade(1).get('tween').chain((function() { + // Safari / Chrome have trouble focussing on things not yet fully rendered! + // see http://stackoverflow.com/questions/2074347/focus-not-working-in-safari-or-chrome + // and http://www.mkyong.com/javascript/focus-is-not-working-in-ie-solution/ + if (autofocus_el) + { + if (0) // the delay suggested as a fix there is part of the fade()... + { + (function(el) { + el.focus(); + }).delay(1, this, [autofocus_el]); + } + else + { + //autofocus_el.set('tabIndex', 0); // http://code.google.com/p/chromium/issues/detail?id=27868#c15 + // ^-- not needed. When you debug JS in a Webkit browser, you're toast when it comes to getting input field focus, period. :-( + autofocus_el.focus(); + } + } + }).bind(this)); + + self.fireEvent('show'); + + window.FileManager.prototype.diag.log('add key up(ESC)/resize/scroll on show 1500'); + document.addEvents({ + 'scroll': this.bound.scroll, + 'resize': this.bound.scroll, + 'keyup': this.bound.keyesc + }); + }, + + appendMessage: function(text) { + this.content_el.adopt([ + typeOf(text) === 'string' ? this.str2el(text) : text + ]); + this.restrictSize(); + this.el.center(); + }, + + restrictSize: function() + { + // make sure the dialog never is larger than the viewport! + var ddim = this.el.getSize(); + var vdim = window.getSize(); + var maxx = (vdim.x - 20) * 0.85; // heuristic: make dialog a little smaller than the screen itself and keep a place for possible outer scrollbars + if (ddim.x >= maxx) + { + this.el.setStyle('width', maxx.toInt()); + } + ddim = this.el.getSize(); + var cdim = this.content_el.getSize(); + var maxy = (vdim.y - 20) * 0.85; // heuristic: make dialog a little less high than the screen itself and keep a place for possible outer scrollbars + if (ddim.y >= maxy) + { + // first attempt to correct this by making the dialog wider: + var x = ddim.x * 2.0; + while (x < maxx && ddim.y >= maxy) + { + this.el.setStyle('width', x.toInt()); + ddim = this.el.getSize(); + x = ddim.x * 1.3; + } + + cdim = this.content_el.getSize(); + if (ddim.y >= maxy) + { + var y = maxy - ddim.y + cdim.y; + this.content_el.setStyles({ + height: y.toInt(), + overflow: 'auto' + }); + } + } + }, + + str2el: function(text) + { + var el = new Element('div'); + if (text.indexOf('<') != -1 && text.indexOf('>') != -1) + { + try + { + el.set('html', text); + } + catch(e) + { + el.set('text', text); + } + } + else + { + el.set('text', text); + } + return el; + }, + + destroy: function() { + if (this.el) { + this.el.fade(0).get('tween').chain((function() { + if (!this.options.hideOverlay) { + this.overlay.destroy(); + } + this.el.destroy(); + }).bind(this)); + } + window.FileManager.prototype.diag.log('remove key up(ESC) on destroy'); + document.removeEvent('scroll', this.bound.scroll).removeEvent('resize', this.bound.scroll).removeEvent('keyup', this.bound.keyesc); + this.fireEvent('close'); + } +}); + +this.Overlay = new Class({ + + initialize: function(options) { + this.el = new Element('div', Object.append({ + 'class': 'filemanager-overlay' + }, options)).inject(document.body); + }, + + show: function() { + this.objects = $$('object, select, embed').filter(function(el) { + if (el.id === 'SwiffFileManagerUpload' || el.style.visibility === 'hidden') { + return false; + } + else { + el.style.visibility = 'hidden'; + return true; + } + }); + + this.resize(); + + this.el.setStyle('display', 'block'); + this.el.fade('hide').fade(0.5); + + window.addEvent('resize', this.resize.bind(this)); + + return this; + }, + + hide: function() { + if (!Browser.ie) { + this.el.fade(0).get('tween').chain((function() { + this.revertObjects(); + this.el.setStyle('display', 'none'); + }).bind(this)); + } else { + this.revertObjects(); + this.el.setStyle('display', 'none'); + } + + window.removeEvent('resize', this.resize); + + return this; + }, + + resize: function() { + if (!this.el) { + this.destroy(); + } + else { + document.id(this.el).setStyles({ // IE7 thinks this.el is no longer a mootools object, ^shrug^ + width: document.getScrollWidth(), + height: document.getScrollHeight() + }); + } + }, + + destroy: function() { + this.revertObjects().el.destroy(); + }, + + revertObjects: function() { + if (this.objects && this.objects.length) { + this.objects.each(function(el) { + el.setStyle('visibility', 'visible'); + }); + } + + return this; + } +}); + +})(); diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Gallery.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Gallery.js new file mode 100755 index 0000000000..58f6bb6b13 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Gallery.js @@ -0,0 +1,794 @@ +/* +--- + +description: Adds functionality to create a gallery out of a list of images + +authors: Christoph Pojer (@cpojer) + +license: MIT-style license. + +requires: + core/1.4.5: '*' + more/1.4.0.1: [Sortables] + +provides: FileManager.Gallery + +... +*/ + +(function() { + +FileManager.Gallery = new Class({ + + Extends: FileManager, + + options: + { + closeCaptionEditorOnMouseOut: true // TRUE: will save & close caption editor popup dialog when you move the mouse out there + }, + + hooks: { + fill: { + populate: function() { + // now we have a valid 'this.root' and we need that to preprocess the paths specified on populate(). So we have a go! + this.startPopulatingTheGallery(); + } + } + }, + + initialize: function(options) + { + this.offsets = {y: -72}; + this.imgContainerSize = { x: 75, y: 56 }; + this.captionImgContainerSize = { x: 250, y: 250 }; + this.isSorting = false; + this.populate_queue = []; + + // make sure our 'complete' event does NOT clash with the base class event by simply never allowing it: you CANNOT have options.selectable and gallery mode at the same time! + // (If you do, the caller will have a hard time detecting /who/ sent the 'complete' event; the only way would be to inspect the argument list and deduce the 'origin' from there.) + options.selectable = false; + + this.parent(options); + + this.addEvents({ + scroll: function(e, self) { + self.show_gallery(); + }, + + show: function(self) { + self.gallery.empty(); + self.files = {}; + + self.show_gallery(); + self.populate(); + }, + + hide: function(self) { + if (!self.keepGalleryData) { + self.gallery.empty(); + self.files = {}; + } + else { + self.keepGalleryData = false; + } + self.hideClone(); + // self.wrapper.setStyle('display', 'none'); + }, + + modify: function(file, json, mode, self) { + // mode is one of (destroy, rename, move, copy): only when mode=copy, does the file remain where it was before! + if (mode !== 'copy') + { + self.erasePicture(file.path); + } + } + }); + + this.addMenuButton('serialize'); + this.galleryContainer = new Element('div', { + 'class': 'filemanager-gallery', + styles: + { + 'z-index': this.options.zIndex - 10 + } + }).inject(this.container); + this.gallery = new Element('ul').inject(this.galleryContainer); + + var timer = null; + var self = this; + + this.input = new Element('textarea', {name: 'imgCaption'}); + + var imgdiv = new Element('div', {'class': 'img'}); + this.wrapper = new Element('div', { + 'class': 'filemanager-wrapper', + styles: + { + 'z-index': this.options.zIndex + 750, + 'opacity': 0, + 'display': 'none' + }, + tween: {duration: 'short'} + }).adopt( + new Element('span', {text: this.language.gallery.text}), + this.input, + imgdiv, + new Element('button', {text: this.language.gallery.save}).addEvent('click', function(e) { + self.removeClone(e, this); + }) + ); + + // stop filemanager window events when you hit enter + this.gallery_keyboard_handler = (function(e) + { + this.diag.log('gallery KEYBOARD handler: key press: ', e); + + if (this.dialogOpen) return; + + // don't propagate any keyboard code to the filemanager keyboard handler (e.g. TAB) + e.stopPropagation(); + + if (e.key == 'enter') + { + // deactivated to allow multiple line caption. \n will later be transformed into
    + //self.removeClone(e, this); + } + }).bind(this); + + if ((Browser.Engine && (Browser.Engine.trident || Browser.Engine.webkit)) || (Browser.ie || Browser.chrome || Browser.safari)) + { + this.input.addEvent('keydown', this.gallery_keyboard_handler); + // also make sure keyboard navigation actually works in the caption editor pane: catch ENTER on button, etc. from bubbling up to the filemanager handler: + this.wrapper.addEvent('keydown', this.gallery_keyboard_handler); + } + else + { + this.input.addEvent('keypress', this.gallery_keyboard_handler); + // also make sure keyboard navigation actually works in the caption editor pane: catch ENTER on button, etc. from bubbling up to the filemanager handler: + this.wrapper.addEvent('keypress', this.gallery_keyboard_handler); + } + // also make sure keyboard navigation actually works in the caption editor pane: catch ENTER on button, etc. from bubbling up to the filemanager handler: + this.wrapper.addEvent('keyup', this.gallery_keyboard_handler); + + this.wrapper.inject(document.body); + + var wrapper_pos = this.wrapper.getCoordinates(); + var imgdiv_pos = imgdiv.getCoordinates(); + this.captionDialogOffsets = { + x: Math.round(wrapper_pos.left - imgdiv_pos.left - (imgdiv_pos.width - this.captionImgContainerSize.x) / 2), + y: Math.round(wrapper_pos.top - imgdiv_pos.top - (imgdiv_pos.height - this.captionImgContainerSize.y) / 2), + h: wrapper_pos.height, + w: wrapper_pos.width + }; + this.droppables.push(this.gallery); + + this.keepGalleryData = false; + this.files = {}; + this.animation = {}; + + this.howto = new Element('div', { + 'class': 'howto', + styles: + { + 'z-index': this.options.zIndex + 15 + }, + text: this.language.gallery.drag + }).inject(this.galleryContainer); + this.switchButton(); + + // invoke the parent method directly + this.initialShowBase(); + + // add CAPTION OVERLAY + this.captionOverlay = new Overlay({ + 'class': 'filemanager-overlay filemanager-overlay-dialog filemanager-overlay-caption', + events: { + click: (function() { + this.removeClone(); + this.captionOverlay.hide(); + }).bind(this) + }, + styles: { + 'z-index': this.options.zIndex + 11 + } + }); + + + // -> create SORTABLE list + this.sortable = new Sortables(this.gallery, { + clone: false, + //revert: true, + //opacity: 1, + onStart: (function() { + this.isSorting = true; + }).bind(this), + onSort: (function(li) { + newOrder = this.sortable.serialize((function(element, index) { + return this.files[element.retrieve('imageName')]; + }).bind(this)); + + // create new order of images + this.files = {}; + newOrder.each(function(file) { + if (file) { + this.files[file.legal_path] = file; + } + }, this); + }).bind(this) + }); + }, + + // override the parent's initialShow method: we do not want to jump to the jsGET-stored position again! + initialShow: function() { + }, + + show_gallery: function() + { + this.galleryContainer.setStyles({ + opacity: 0, + display: 'block' + }); + + this.filemanager.setStyles({ + top: '10%', + height: '60%' + }); + + this.fitSizes(); + + var size = this.filemanager.getSize(); + var pos = this.filemanager.getPosition(); + + // determine how many images we can show next to one another: + var galWidthComp = 2; // 2px not accounted for in the Width calculation; without these the width slowly grows instead of 'jump' to fit one more/less image horizontally + var imgMarginWidth = 4; // 4px unaccounted for in the element width + var radiiCorr = 40; // correction for the radii in the FileManager container: looks better that way; must at least be 20 + var imgWidth = 84; // derived from current CSS; bad form to do it this way, but this is a good guess when there's no image in there yet. + var scrollbarCorr = 20; // correction for optional Y scrollbar when the number of images doesn't fit in two rows anymore. + + var imgs = this.galleryContainer.getElements('li'); + if (imgs && imgs[0]) + { + // when we HAVE images, derive the width from one of those! + imgWidth = imgs[0].getWidth() + imgMarginWidth; + } + var galWidth = this.galleryContainer.getWidth(); + var g_rem = (galWidth - scrollbarCorr) % imgWidth; + var img_cnt = Math.floor((size.x - g_rem - scrollbarCorr - radiiCorr) / imgWidth); + if (img_cnt < 3) img_cnt = 3; + var gw = img_cnt * imgWidth + g_rem + scrollbarCorr; + + this.galleryContainer.setStyles({ + top: pos.y + size.y - 1, + left: pos.x + (size.x - gw) / 2, + width: gw - 2, + opacity: 1 + }); + + this.hideClone(); + // this.wrapper.setStyle('display', 'none'); + }, + + // override the parent's allow_DnD method: always allow drag and drop as otherwise we cannot construct our gallery! + allow_DnD: function(j, pagesize) { + return true; + }, + + show_caption_editor: function(img_el, li_wrapper, file) + { + var self = this; + + // -> add overlay + $$('filemanager-overlay-caption').addEvent('click', function(e) { + this.removeClone(null,li_wrapper); + }.bind(this)); + this.captionOverlay.show(); + + var name = file.path; + + var pos = img_el.getCoordinates(); + var oml = img_el.getStyle('margin-left').toInt(); + var omt = img_el.getStyle('margin-top').toInt(); + pos.left -= oml; + pos.top -= omt; + + var vp = window.getSize(); + + this.hideClone(); + + var pic = file.thumb250; + var w = file.thumb250_width; + var h = file.thumb250_height; + + if (!pic) + { + pic = file.icon48; + w = 48; + h = 48; + } + + // now calculate the scaled image dimensions for this one: + var cw = this.captionImgContainerSize.x; + var ch = this.captionImgContainerSize.y; + var redux; + if (w > cw) + { + redux = cw / w; + w *= redux; + h *= redux; + } + if (h > ch) + { + redux = ch / h; + w *= redux; + h *= redux; + } + w = Math.round(w); + h = Math.round(h); + var ml, mk, mt, mb; + ml = Math.round((cw - w) / 2); + mr = cw - ml - w; + mt = Math.round((ch - h) / 2); + mb = ch - mt - h; + + var nl, nt; + //nl = Math.round(pos.left - (w - pos.width) / 2); + //nt = pos.top - (h - pos.height); + nl = Math.round((vp.x - this.captionDialogOffsets.w) / 2 - this.captionDialogOffsets.x); + nt = Math.round((vp.y - this.captionDialogOffsets.h) / 2 - this.captionDialogOffsets.y); + + this.animation = { + from: { + width: pos.width, + height: pos.height, + left: pos.left, + top: pos.top, + 'margin-left': oml, + 'margin-top': omt + }, + to: { + width: w, + height: h, + left: nl, + top: nt, + 'margin-left': ml, + 'margin-top': mt + } + }; + + this.input.removeEvents('blur').addEvent('blur', function() { + if (!self.files[name]) + return; + self.files[name].caption = (this.value || ''); + }); + + // clone image for caption container + //li_wrapper.setStyle('opacity', 0); + this.clone = img_el.clone(); + this.clone.store('file', file).store('parent', li_wrapper).addClass('filemanager-clone').set({ + styles: { + position: 'relative', + width: w, + height: h, + top: ((260- h) / 2) - 2, + left: ((260- w) / 2) - 1, + 'z-index': this.options.zIndex + 800 + } + }).inject(self.wrapper.getChildren('div.img')[0]); + + // blend in the caption container + if (!this.files[name]) + return; + this.input.set('value', self.files[name].caption || ''); + this.wrapper.setStyles({ + 'position':'fixed', + 'display': 'block', + 'left': this.animation.to.left /* -12 */, + 'top': this.animation.to.top - this.captionDialogOffsets.y /* -53 */ + }).fade('hide').fade(1).get('tween').chain((function() { + this.input.focus(); + }).bind(this)); + }, + + img_injector: function(file, imgcontainer, li_wrapper) + { + var pic = file.thumb250; + var w = file.thumb250_width; + var h = file.thumb250_height; + + if (!pic) + { + pic = file.icon48; + w = 48; + h = 48; + } + + // now calculate the scaled image dimensions for this one: + var cw = this.imgContainerSize.x; + var ch = this.imgContainerSize.y; + var redux; + if (w > cw) + { + redux = cw / w; + w *= redux; + h *= redux; + } + if (h > ch) + { + redux = ch / h; + w *= redux; + h *= redux; + } + w = Math.round(w); + h = Math.round(h); + var ml, mk, mt, mb; + ml = Math.round((cw - w) / 2); + mr = cw - ml - w; + mt = Math.round((ch - h) / 2); + mb = ch - mt - h; + + var self = this; + var img = Asset.image(pic, { + styles: { + width: w, + height: h, + 'margin-top': mt, + 'margin-bottom': mb, + 'margin-left': ml, + 'margin-right': mr + }, + onLoad: function() { + var img_el = this; + li_wrapper.setStyle('background', 'none').addEvent('click', function(e) { + if (e) e.stop(); + if (!self.isSorting) { + self.show_caption_editor(img_el, li_wrapper, file); + } + self.isSorting = false; + }); + }, + onError: function() { + self.diag.log('image asset: error!'); + var iconpath = self.assetBasePath + 'Images/Icons/Large/default-error.png'; + this.src = iconpath; + }, + onAbort: function() { + self.diag.log('image asset: ABORT!'); + var iconpath = self.assetBasePath + 'Images/Icons/Large/default-error.png'; + this.src = iconpath; + } + }); + + img.inject(imgcontainer); + }, + + onDragComplete: function(el, droppable, caption) { + + if (typeof caption === 'undefined') { + caption = ''; + } + + this.imageadd.fade(0); + + if (this.howto) { + this.howto.destroy(); + this.howto = null; + } + + if (!droppable || droppable != this.gallery) + return false; + + var file; + if (typeof el === 'string') + { + var part = el.split('/'); + file = { + name: part.pop(), + path: this.normalize(el), + mime: 'unknown/unknown', + thumbs_deferred: true + }; + } + else + { + el.setStyles({left: '', top: ''}); + file = el.retrieve('file'); + } + + var name = file.path; + + // when the item already exists in the gallery, do not add it again: + if (this.files[name]) + return true; + + // store & display item in gallery: + var self = this; + var destroyIcon = Asset.image(this.assetBasePath + 'Images/destroy.png').set({ + 'class': 'filemanager-remove', + title: this.language.gallery.remove, + events: { + click: function(e) { + if(e) e.stop(); + self.erasePicture(name); + } + } + }); + // hide on start + destroyIcon.setStyle('opacity',0); + + /** + * as 'imgcontainer.getSize() won't deliver the dimensions as set in the CSS, we turn it the other way around: + * we set the w/h of the image container here explicitly; the CSS can be used for other bits of styling. + */ + var imgcontainer = new Element('div', { + 'class': 'gallery-image', + 'title': file.name, + styles: { + width: this.imgContainerSize.x, + height: this.imgContainerSize.y + } + }); + this.tips.attach(imgcontainer); + + // STORE the IMAGE PATH in the li FOR the SORTABLE + var li = new Element('li').store('imageName', name).adopt( + imgcontainer, + destroyIcon + ).inject(this.gallery); + + this.files[name] = { + legal_path: name, + caption: caption, + file: file, + element: li + }; + + this.showFunctions(destroyIcon,li,1); + this.tips.attach(destroyIcon); + this.switchButton(); + + // When the file info is lacking thumbnail info, fetch it by firing a 'detail' request and taking it from there. + // Also send our flavour of the 'detail' request when the thumbnail is yet to be generated. + if (file.thumbs_deferred) + { + // request full file info for this one! PLUS direct-access thumbnails! + + // do NOT set this.Request as this is a parallel request; mutiple ones may be fired when onDragComplete is, for instance, invoked from the array-loop inside populate() + + var tx_cfg = this.options.mkServerRequestURL(this, 'detail', { + directory: this.dirname(file.path), + file: file.name, + filter: this.options.filter, + mode: 'direct' + this.options.detailInfoMode // provide direct links to the thumbnail files + }); + + var req = new FileManager.Request({ + url: tx_cfg.url, + data: tx_cfg.data, + onRequest: function() {}, + onSuccess: (function(j) + { + if (!this.files[name]) + return; + + if (!j || !j.status) { + var msg = ('' + j.error).substitute(this.language, /\\?\$\{([^{}]+)\}/g); + + this.files[name].caption = msg; + return; + } + + // the desired behaviour anywhere is NOT identical to that when handling the FileManager 'details' request/event! + this.fireEvent('galleryDetails', [j, this]); + + // We also want to hold onto the data so we can access it later on, + // e.g. when returning the gallery collection to the user. + + // now mix with the previously existing 'file' info: + file = Object.merge(file, j); + + // remove unwanted JSON elements: + delete file.thumbs_deferred; + delete file.status; + delete file.error; + delete file.content; + + if (file.element) + { + file.element.store('file', file); + } + + // and update the gallery pane: + li.store('file', file); + + //this.onDragComplete(li, droppable); + this.files[name].file = file; + + this.img_injector(file, imgcontainer, li); + + }).bind(this), + onError: (function(text, error) { + }).bind(this), + onFailure: (function(xmlHttpRequest) { + }).bind(this) + }, this); + + this.RequestQueue.addRequest('populate:' + String.uniqueID(), req); + req.send(); + + // while the 'details' request is sent off, keep a 'loader' animation in the spot where the thumbnail/image should end up once we've got that info from the 'details' request + } + else + { + // we already have all required information. Go show the image in the gallery pane! + this.img_injector(file, imgcontainer, li); + } + + // -> add this list item to the SORTABLE + this.sortable.addItems(li); + + return true; + }, + + removeClone: function(e, target) { + if (e) e.stop(); + + // remove the overlay + $$('filemanager-overlay-caption').removeEvents('click'); + this.captionOverlay.hide(); + + if (!this.clone || (e && e.relatedTarget && ([this.clone, this.wrapper].contains(e.relatedTarget) || (e && this.wrapper.contains(e.relatedTarget) && e.relatedTarget != this.wrapper)))) + return; + if (this.clone.get('morph').timer) + return; + + var file = this.clone.retrieve('file'); + if (!file) + return; + + var name = file.path; + + if (!this.files[name]) + return; + + this.files[name].caption = (this.input.value || ''); + + self = this; + + this.wrapper.fade(0).get('tween').chain(function() { + this.element.setStyle('display', 'none'); + self.clone.destroy(); + }); + }, + + hideClone: function() { + if (!this.clone) + return; + + this.clone.get('morph').cancel(); + var parent = this.clone.retrieve('parent'); + if (parent) { + //parent.setStyle('opacity', 1); + } + this.clone.destroy(); + this.wrapper.setStyles({ + opacity: 0, + 'display': 'none' + }); + }, + + erasePicture: function(name) { + if (this.files[name]) + { + this.tips.hide(); + + var self = this; + this.files[name].element.set('tween', {duration: 'short'}).removeEvents('click').fade(0).get('tween').chain(function() { + this.element.destroy(); + self.switchButton(); + delete self.files[name]; + }); + } + }, + + switchButton: function() { + if (typeof this.gallery != 'undefined') { + var chk = !!this.gallery.getChildren().length; + this.menu.getElement('button.filemanager-serialize').set('disabled', !chk)[(chk ? 'remove' : 'add') + 'Class']('disabled'); + } + }, + + populate: function(data, path_is_urlencoded /* default = TRUE */) + { + this.diag.log('GALLERY.populate: ', data, ', is_urlencoded: ', path_is_urlencoded); + + if (typeof path_is_urlencoded == 'undefined' || path_is_urlencoded === null) + path_is_urlencoded = true; // set default to TRUE + else + path_is_urlencoded = !!path_is_urlencoded; + + // + // WARNING: these items are abs.path encoded and we to convert them to 'legal URL' directory space or the server will reject these on security grounds. + // But we don't know the 'legal URL root' path as that is a server-side setting, so we MUST delay the population of the gallery until our first + // request has arrived with this desperately needed item. + // We wait for the dirscan ('view' request) to complete; actually we wait until the fill() has finished as by that time we'll be sure + // to have a valid this.root (or a grandiose server comm failure!) + // Until that time, we push all items to populate the gallery with on the populate stack. + + Object.each(data || {}, function(v, i) { + this.diag.log('GALLERY.populate push: index = ', i, ', value = ', v, ', enc: ', (1 * path_is_urlencoded)); + if (path_is_urlencoded) + { + i = this.unescapeRFC3986(i); + } + this.populate_queue.push({ + path: i, + caption: v + }); + }, this); + }, + + startPopulatingTheGallery: function() + { + if (!this.root) + { + this.diag.log('### FATAL error in startPopulatingTheGallery(): no valid .root path!'); + return; + } + + var count = this.populate_queue.length; + if (count) + { + // we've got work to do, folks! + var i; + var abs_root = this.normalize('/' + this.root); + + for (i = 0; i < count; ++i) + { + // LIFO queue: + var item = this.populate_queue.shift(); + var path = item.path; + + // coded so that we support 'legal URL space' items and 'absolute URL path' items at the same time: + // when paths start with the root directory, we'll strip that off to make them 'legal URL space' compliant filespecs. + if (path.indexOf(abs_root) === 0) + { + path = path.substr(this.root.length); + } + if (path) + { + this.onDragComplete(path, this.gallery, item.caption); + } + else + { + this.diag.log('### gallery populate: invalid input (not in legal URL space): ', item, ', root: ', this.root); + } + } + } + }, + + serialize_on_click: function(e) { + if (e) e.stop(); + + var serialized = {}; + var metas = {}; + var index = 0; + Object.each(this.files,function(file) + { + var path = (this.options.deliverPathAsLegalURL ? file.file.path : this.escapeRFC3986(this.normalize('/' + this.root + file.file.path))); // the absolute URL for the given file, rawURLencoded + var caption = (file.caption || ''); + serialized[path] = caption; + var m = Object.clone(file.file); + m['order_no'] = index++; + m['caption'] = caption; + m['pathRFC3986'] = path; + metas[path] = m; + }, this); + this.keepGalleryData = true; + this.hide(e); + this.fireEvent('complete', [serialized, metas, this.root, this]); + } +}); + +})(); + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/NoFlash.Uploader.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/NoFlash.Uploader.js new file mode 100644 index 0000000000..4ff8920fd7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/NoFlash.Uploader.js @@ -0,0 +1,880 @@ +/** +Uploader Implementation Not Requiring Flash +=============================================================================== + +This class implements Upload functionality into the FileManager using +either HTML5 Uploads via XMLHTTPRequest if the browser supports that, +or a hidden file input and submitting to an iframe otherwise. + +HTML5 Uploads can handle uploading multiple files with progress indications. + +Fallback uploads present a standard file field to facilitate picking a single +file and an upload button to upload it (posts to a hidden iframe). + +Tested In +---------- + +Working Fully With HTML5 Multiple Uploads + + * Linux Chrome 65.0.3325.18 + * Linux Firefox 58 (see note for Firefox users below) + * Linux Opera 50 + * Linux Chromium 63.0.3239.132 + + * Windows IE 11 + + * Mac OSX Safari 9.1.1 (11601.6.17) + +Working Fallback Single Upload At A Time + + * Windows IE 8 - Falls back to iframe upload + * Windows IE 9 - Falls back to iframe upload + + +FIREFOX USERS NOTICE +------------------------------------------------------------------------------- + +The Firefox file selection dialog can be HORRIBLY broken, unusable, this is not +a bug in MFM, it's firefox. If you start firefox with the MOZ_USE_XINPUT2=1 +environment variable, it fixes it! + +@author James Sleeman +@license MIT-style License + +*/ + +FileManager.implement({ + + options: { + resizeImages: true, + upload: true, + uploadAuthData: {} // deprecated; use FileManager.propagateData instead! + }, + + hooks: { + show: { + upload: function() { + this.startUpload(); + } + }, + + cleanup: { + upload: function() { + this.hideUpload(); + } + } + }, + + onDialogOpenWhenUpload: function() { + + }, + + onDialogCloseWhenUpload: function() { + + }, + + /** Create the file input field and inject it into the given form element + */ + + make_file_input: function(form_el) + { + var fileinput = (new Element('input')).set({ + type: 'file', + name: 'Filedata', + id: 'filemanager_upload_Filedata', + multiple: 'multiple' + }); + + // fileinput.style.visibility = 'hidden'; + + if (form_el.getElement('input[type=file]')) + { + fileinput.replaces(form_el.getElement('input[type=file]')); + } + else + { + form_el.adopt(fileinput); + } + return form_el; + }, + + /** Cleanup after ourselves when the filemanager window is closed + * + * @TODO This may not be entirely necessary now, leaving it anyway. + */ + + hideUpload: function() + { + if (!this.options.upload || !this.upload) return; + + if (this.upload.uploadButton.label) + { + this.upload.uploadButton.label.fade(0).get('tween').chain(function() { + this.element.dispose().destroy(); + }); + this.upload.uploadButton.label = null; + } + if (this.upload.uploadButton) + { + this.upload.uploadButton.fade(0).get('tween').chain(function() { + this.element.dispose().destroy(); + }); + this.upload.uploadButton = null; + } + if (this.upload.form) + { + this.upload.inputs = null; + + this.upload.form.dispose().destroy(); + this.upload.form = null; + } + this.menu.setStyle('height', ''); + + if (this.upload.resizer) + { + this.upload.resizer.dispose().destroy(); + this.upload.resizer = null; + } + + // discard old iframe, if it exists: + if (this.upload.dummyframe) + { + // remove from the menu (dispose) and trash it (destroy) + this.upload.dummyframe.dispose().destroy(); + this.upload.dummyframe = null; + } + }, + + /** Setup out upload interface. + * + * Creates the upload button, the container for the form field, calls out to create the form field + * the area for the upload list, and the resizing checkbox. + * + */ + + startUpload: function() + { + if (!this.options.upload) { + return; + } + + var self = this; + + this.upload = { + inputs: {}, + resizer: null, + dummyframe: null, + dummyframe_active: false, // prevent premature firing of the load event (hello, MSIE!) to cause us serious trouble in there + can_support_xhr: typeof ((new Element('input')).set({ + type: 'file', + name: 'Filedata', + multiple: 'multiple' + })).files == 'undefined' ? false : true, + + form: (new Element('form')) + // .set('action', tx_cfg.url) + .set('method', 'post') + .set('enctype', 'multipart/form-data') + .set('target', 'dummyframe') + .setStyles({ + 'float': 'left', + 'padding-left': '3px', + 'display': 'block' + }), + + uploadButton: this.addMenuButton('upload').inject(this.menu, 'bottom').addEvents({ + mouseenter: function() { + this.addClass('hover'); + }, + mouseleave: function() { + this.removeClass('hover'); + this.blur(); + }, + mousedown: function() { + this.focus(); + } + }), + + list: new Element('ul', {'class': 'filemanager-uploader-list'}), + uploader: new Element('div', {opacity: 0, 'class': 'filemanager-uploader-area'}).adopt( + new Element('h2', {text: this.language.upload}), + new Element('div', {'class': 'filemanager-uploader'}) + ) + }; + this.upload.uploader.getElement('div').adopt(this.upload.list); + + if(this.upload.can_support_xhr) + { + this.upload.form.setStyle('visibility', 'hidden'); + this.upload.uploadButton.addEvent('click', function(e) { + e.stop(); + + self.upload.form.getElement('input[type=file]').removeEvents('change'); + self.upload.form.getElement('input[type=file]').addEvent('change', self.doUpload.bind(self)); + + self.upload.form.getElement('input[type=file]').click(); + + }); + } + else + { + this.upload.uploadButton.addEvent('click', function(e) { + e.stop() + self.doUploadFallback(); + }); + } + + if (this.options.resizeImages) + { + this.upload.resizer = new Element('div', {'class': 'checkbox'}); + var check = (function() + { + this.toggleClass('checkboxChecked'); + }).bind(this.upload.resizer); + check(); + this.upload.uploadButton.label = new Element('label', { 'class': 'filemanager-resize' }).adopt( + this.upload.resizer, + new Element('span', {text: this.language.resizeImages}) + ).addEvent('click', check).inject(this.menu); + } + + this.make_file_input(self.upload.form); + + self.upload.form.inject(this.menu, 'top'); + //this.menu.setStyle('height', '60px'); + + }, + + + /** Change handler for the form field, actually do the uploads. + * + * Note that if you don't select a different file in the form field, no change, so no re-upload + * unless you actually pick a different file (as well or instead). + * + */ + + doUpload: function() + { + if(this.upload.form.getElement('input[type=file]').files.length == 0) return; + + // Notice here that propagateData is not passed into mkServerRequestURL + // this is how the rest of the system works too so it can't really be changed + // because mkServerRequestURL is passed into FileManager.Request normally + // and the propagateData is added there. + + var tx_cfg = this.options.mkServerRequestURL(this, 'upload', Object.merge({}, + /*this.options.propagateData, */ + (this.options.uploadAuthData || {}), { + directory: (this.CurrentDir ? this.CurrentDir.path : '/'), + filter: this.options.filter, + resize: this.options.resizeImages ? this.upload.resizer.hasClass('checkboxChecked') : false, + reportContentType: 'text/plain' + })); + + var files = this.upload.form.getElement('input[type=file]').files; + var fieldName = this.upload.form.getElement('input[type=file]').name; + var i = 0; + var self = this; + + // Construct the entries in the upload list for each file + var fileUIs = [ ]; + for(var i = 0; i < files.length; i++) + { + fileUIs[i] = new FileManager.UploadListEntry(files[i], self); + + // @TODO Validate client side here + // fileUIs[i].invalidate("Testing"); + + } + + i = 0; + + // Show the upload list of files + this.show_our_info_sections(false); + this.info.adopt(this.upload.uploader.setStyle('display', 'block')); + this.upload.uploader.fade(1); + + // Display spinner + self.browserLoader.fade(1); + + // When the list becomes empty (all files uploaded) remove it and update + // the selected file to the first valid one, that is, the first one that + // uploaded OK. + var hideList = function() + { + if(self.upload.uploader.getElements('li').length) + { + hideList.delay(1000); + } + else + { + self.upload.uploader.fade(0).get('tween').chain(function() { + self.upload.uploader.setStyle('display', 'none'); + self.show_our_info_sections(true); + + // Hide spinner + self.browserLoader.fade(0); + + // Update + for(var x = 0; x < fileUIs.length; x++) + { + if(fileUIs[x].valid) + { + self.load(self.CurrentDir.path, fileUIs[x].nameOnServer); + } + } + }); + } + }; + hideList(); + + + // This is where the actual upload of the files happens: + // take file i, + // if it's not valid, skip it + // create a new request object + // append the file to it + // append tx_cfg.data (above) and the propagateData to it + // attach a progress event to it which calls the file's UI and tells it to update + // attach success/fail events to it which calls the file's UI and tells it to update + // start the upload + // wait asynchronously until it's done + // tell the file's UI that it's done and the result + // (the file's UI will remove itself from the list after a short delay) + // next i + + + var doUploadNextFile = function() + { + if(i <= files.length-1) + { + var file = files[i]; + var fileUI = fileUIs[i]; + + if(!fileUI.valid) + { + i++; + return doUploadNextFile(); + } + + // For testing progess bar + if(0) + { + var p = 1; + (function(){ + if(p<100) + fileUI.progress(p++); + }).periodical(500); + return; + } + + var upload = new FileManager.FileUploadRequest({ + url: tx_cfg.url + }); + + upload.append(fieldName, file); + Object.each(Object.merge(tx_cfg.data, self.options.propagateData), function(v,k) { upload.append(k,v); }); + + upload.addEvent('progress', function(event, a){ + if(event.total && event.loaded) + { + fileUI.progress((event.loaded / event.total) * 100); + } + }); + + upload.addEvent('success', function(responseText){ + fileUI.complete({'text': responseText}); + }); + + upload.addEvent('failure', function(responseXhr){ + fileUI.complete(responseXhr); + }); + + upload.send(); + + (function waitTillDone(){ + if(!upload.isRunning()) + { + i++; + doUploadNextFile(); + + fileUI.progress(100); + fileUI.complete(upload); + } + else + { + waitTillDone.delay(500); + } + }).delay(500); + } + } + + doUploadNextFile(); + }, + + /** Change handler for the form field that does not require HTML5, or much more than form fields. + * + * Uses the hidden iframe. + * + * Note that if you don't select a different file in the form field, no change, so no re-upload + * unless you actually pick a different file (as well or instead). + * + */ + + doUploadFallback: function() + { + var self = this; + + // discard old iframe, if it exists: + if (this.upload.dummyframe) + { + // remove from the menu (dispose) and trash it (destroy) + this.upload.dummyframe.dispose().destroy(); + this.upload.dummyframe = null; + } + + this.upload.dummyframe = (new IFrame).set({src: 'about:blank', name: 'dummyframe'}).setStyles({display: 'none'}); + this.menu.adopt(this.upload.dummyframe); + + this.upload.dummyframe.addEvent('load', function() + { + var iframe = this; + self.diag.log('NoFlash upload response: ', this, ', iframe: ', self.upload.dummyframe, ', ready:', (1 * self.upload.dummyframe_active)); + + // make sure we don't act on premature firing of the event in MSIE browsers: + if (!self.upload.dummyframe_active) + return; + + self.browserLoader.fade(0); + + var response = null; + Function.attempt(function() { + response = iframe.contentDocument.documentElement.innerText; + }, + function() { + response = iframe.contentDocument.documentElement.textContent; + }, + function() { + response = iframe.contentWindow.document.innerText; + }, + function() { + response = iframe.contentDocument.innerText; + }, + function() { + // Maybe this.contentDocument.documentElement.innerText isn't where we need to look? + //debugger; + response = "{status: 0, error: \"noFlashUpload: document innerText grab FAIL: Can't find response.\"}"; + } + ); + + var j = JSON.decode(response); + + if (j && !j.status) + { + self.showError('' + j.error); + self.load(self.CurrentDir.path); + } + else if (j) + { + self.load(self.CurrentDir.path, j.name); + } + else + { + // IE9 fires the load event on init! :-( + if (self.CurrentDir) + { + self.showError('No or faulty JSON response! ' + response); + self.load(self.CurrentDir.path); + } + } + + // Clear the file input, to do this it is remade + self.make_file_input(self.upload.form); + }); + + // Notice here that propagateData is not passed into mkServerRequestURL + // this is how the rest of the system works too so it can't really be changed + // because mkServerRequestURL is passed into FileManager.Request normally + // and the propagateData is added there. + + var tx_cfg = this.options.mkServerRequestURL(this, 'upload', Object.merge({}, + /*this.options.propagateData, */ + (this.options.uploadAuthData || {}), { + directory: (this.CurrentDir ? this.CurrentDir.path : '/'), + filter: this.options.filter, + resize: this.options.resizeImages ? this.upload.resizer.hasClass('checkboxChecked') : false, + reportContentType: 'text/plain' + })); + + self.upload.form.action = tx_cfg.url; + self.upload.form.getElements('input[type=hidden]').each(function(e){e.destroy();}); + + Object.each(Object.merge(tx_cfg.data, self.options.propagateData), function(v,k) { + var input = new Element('input').set({type: 'hidden', name: k, value: v, id: 'filemanager_upload_' + k }); + self.upload.form.adopt(input); + }); + + self.upload.dummyframe_active = true; + self.browserLoader.fade(0); + self.upload.form.submit(); + + } + + +}); + + +/** The UploadListEntry class handles entries in the file upload list + * + * Pass it an HTML5 file object (taken from input[type=file].files) + * and the file manager to which it is being attached. + * + * During initialisation the UploadListEntry will inject an
  • into + * [filemanager].upload.list + * which must already be created. + * + * You can then call + * invalidate("Reason") to invalidate the file and produce a message + * invalidate(false) to invalidate the file and not produce a message + * progress(0 .. 100) to set the progress bar for the file + * complete({text: 'jsonencodedresponse'}) to complete the file with a json response + * complete(XMLHTTPRequest) to fail the file with some non-json failure + */ + +FileManager.UploadListEntry = new Class({ + + Implements: Events, + + initialize: function(file, fm) + { + this.file = file; + this.base = fm; + + this.valid = true; + this.validationError = null; + this.has_completed = false; + + this.id = String.uniqueID(); + + this.addEvents({ + start: this.onStart, + progress: this.onProgress, + stop: this.onStop, + complete: this.onComplete + }); + + this.render(); + }, + + /** Mark the upload as invalid/failed, display a message, highlight and remove the file. + * + * With no reason, no message is displayed, with a reason a message is displayed. + * + * @param reason String|false + */ + + invalidate: function(reason) + { + this.valid = false; + this.validationError = reason; + + if(reason) + { + var message = this.base.language.uploader.unknown; + var sub = { + name: this.file.name, + size: this.formatUnit(this.file.size, 'b') + }; + + if (this.base.language.uploader[this.validationError]) { + message = this.base.language.uploader[this.validationError]; + } + else + { + message = this.validationError; + } + + if (this.validationError === 'sizeLimitMin') + sub.size_min = this.formatUnit(this.base.options.fileSizeMin, 'b'); + else if (this.validationError === 'sizeLimitMax') + sub.size_max = this.formatUnit(this.base.options.fileSizeMax, 'b'); + + this.base.showError(message.substitute(sub, /\\?\$\{([^{}]+)\}/g)); + } + + this.highlightAndClear(); + }, + + /** Highlight the file in the list and then remove it from the list (ie when it's finished/failed) + * + * Used by invalidate, and complete + */ + + highlightAndClear: function() + { + var self = this; + + // Highlight the line + self.ui.element.set('tween', {duration: 1000}).highlight(null, (self.valid ? '#e6efc2' : '#f0c2c2')).get('tween').chain(function(){self.ui.element.style.backgroundColor=(self.valid ? '#e6efc2' : '#f0c2c2');}); + + // Remove it after a delay + (function() { + self.ui.element.setStyle('overflow', 'hidden').morph({ + opacity: 0, + height: 0 + }).get('morph').chain(function() { + self.ui.element.destroy(); + }); + }).delay(self.valid ? 2500 : 5000, self); + }, + + /** Format a number into a human readable size + * + */ + + formatUnit: function(base, type, join) { + var unitLabels = { + b: [{min: 1, unit: 'B'}, {min: 1024, unit: 'kB'}, {min: 1048576, unit: 'MB'}, {min: 1073741824, unit: 'GB'}], + s: [{min: 1, unit: 's'}, {min: 60, unit: 'm'}, {min: 3600, unit: 'h'}, {min: 86400, unit: 'd'}] + }; + var labels = unitLabels[(type == 'bps') ? 'b' : type]; + var append = (type == 'bps') ? '/s' : ''; + var i, l = labels.length, value; + + if (base < 1) return '0 ' + labels[0].unit + append; + + if (type == 's') { + var units = []; + + for (i = l - 1; i >= 0; i--) { + value = Math.floor(base / labels[i].min); + if (value) { + units.push(value + ' ' + labels[i].unit); + base -= value * labels[i].min; + if (!base) break; + } + } + + return (join === false) ? units : units.join(join || ', '); + } + + for (i = l - 1; i >= 0; i--) { + value = labels[i].min; + if (base >= value) break; + } + + return (base / value).toFixed(1) + ' ' + labels[i].unit + append; + }, + + /** Draw the list item + * + */ + + render: function() { + var self = this; + if (!this.valid) { + + return this; + } + + this.ui = {}; + this.ui.icon = new Asset.image(this.base.assetBasePath+'Images/Icons/' + this.file.name.replace(/.*\./, '').toLowerCase() + '.png', { + 'class': 'icon', + onerror: function() { + new Asset.image(self.base.assetBasePath + 'Images/Icons/default.png').replaces(this); + } + }); + this.ui.element = new Element('li', {'class': 'file', id: 'file-' + this.id}); + // keep filename in display box at reasonable length: + var laname = this.file.name; + if (laname.length > 36) { + laname = laname.substr(0, 36) + '...'; + } + this.ui.title = new Element('span', {'class': 'file-title', text: laname, title: this.file.name}); + this.ui.size = new Element('span', {'class': 'file-size', text: this.formatUnit(this.file.size, 'b')}); + + this.ui.cancel = new Asset.image(this.base.assetBasePath+'Images/cancel.png', {'class': 'file-cancel', title: this.base.language.cancel}).addEvent('click', function() { + self.invalidate(false); // No reason + self.base.tips.hide(); + self.base.tips.detach(this); + }); + this.base.tips.attach(this.ui.cancel); + + var progress = new Element('img', {'class': 'file-progress', src: this.base.assetBasePath+'Images/bar.gif'}); + + + this.ui.element.adopt( + this.ui.cancel, + progress, + this.ui.icon, + this.ui.title, + this.ui.size + ).inject(this.base.upload.list).highlight(); + + this.ui.progress = progress; + + // Initialise the progress position to zero + this.ui.progress.setStyle('background-position-x', Math.floor(100-((0/100)*20+40))+'%'); + }, + + /** Update the progress bar of the list item. + * + * @param integer 0 to 100 percent + */ + + progress: function(percentLoaded){ + if(this.has_completed) return; + + this.ui.element.addClass('file-running'); + + // Setting the backhround to between 60% for empty and 40% for full works + // so that is a range of 20, an offset of 40, flipped backwards (100-N) + this.ui.progress.setStyle('background-position-x', (100-((percentLoaded/100)*20+40))+'%'); + }, + + /** Mark the file as completed, and then remove from the list. + * + * @param object {text: 'jsonencodedresponse'} + */ + + complete: function(response) + { + var self = this; + + if(this.has_completed) return; + + this.response = response; + + var jsonresponse = null; + + this.has_completed = true; + this.ui.cancel = this.ui.cancel.destroy(); + + try + { + jsonresponse = JSON.decode(response.text); + } + catch(e) + { + this.base.diag.log(response); + } + + if (typeof jsonresponse === 'undefined' || jsonresponse == null) + { + if (response == null || !response.text) + { + // The 'mod_security' has shown to be one of the most unhelpful error messages ever; particularly when it happened on a lot on boxes which had a guaranteed utter lack of mod_security and friends. + // So we restrict this report to the highly improbable case where we get to receive /nothing/ /at/ /all/. + this.invalidate(this.base.language.uploader.mod_security); + } + else + { + this.invalidate(("Server response:\n" + this.response.text).substitute(this.base.language, /\\?\$\{([^{}]+)\}/g)); + } + } + else if (!jsonresponse.status) + { + this.invalidate(('' + jsonresponse.error).substitute(this.base.language, /\\?\$\{([^{}]+)\}/g)); + } + else + { + this.valid = true; + this.nameOnServer = jsonresponse.name; + } + + this.highlightAndClear(); + } + +}); + + +/** This class is used to handle the file uploads themselves (XMLHTTPRequest) + * + * It does extend Request, but you should't expect everything to work, it is + * not really general purpose. + * + * Taken originally from https://gist.github.com/mloberg/1342473 and messed + * about a bit. + * + * Important differences to Request + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * use append() to insert your form data (key and value, which might be a file) + * add a progress event listener to get progress of the UPLOAD not the DOWNLOAD + * send does not accept options, pass them to the constructor only + * (namely {url: '....'} ) + * I don't know if POST() or GET() etc aliases will work, just use send() + * + */ + +FileManager.FileUploadRequest = new Class({ + + Extends: Request, + + options: { + emulation: false, + urlEncoded: false + }, + + initialize: function(options){ + this.xhr = new Browser.Request(); + this.formData = new FormData(); + this.setOptions(options); + this.headers = this.options.headers; + }, + + /** Append "something" to the request. + * + * In Our case that something is either a field name and value + * ( you don't seem to need to encode it yourself) + * or field name and a file taken from an (input[type=file]).files list + * + * It's kinda nice how it "just works", and also kinda worrying. + */ + + append: function(key, value){ + this.formData.append(key, value); + return this.formData; + }, + + reset: function(){ + this.formData = new FormData(); + }, + + send: function(){ + var url = this.options.url; + + this.options.isSuccess = this.options.isSuccess || this.isSuccess; + this.running = true; + + var xhr = this.xhr; + xhr.open('POST', url, true); + xhr.onreadystatechange = this.onStateChange.bind(this); + + if (('onprogress' in xhr)) + { + xhr.onloadstart = this.loadstart.bind(this); + + // By attaching to xhr.upload we get progress of that, + // rather than the unknowable response progress + xhr.upload.onprogress = this.progress.bind(this); + } + + Object.each(this.headers, function(value, key){ + try{ + xhr.setRequestHeader(key, value); + }catch(e){ + this.fireEvent('exception', [key, value]); + } + }, this); + + + + this.fireEvent('request'); + xhr.send(this.formData); + + if(!this.options.async) this.onStateChange(); + if(this.options.timeout) this.timer = this.timeout.delay(this.options.timeout, this); + return this; + } + +}); diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Uploader.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Uploader.js new file mode 100644 index 0000000000..1c83803e4e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Uploader.js @@ -0,0 +1,423 @@ +/* +--- + +description: Implements Upload functionality into the FileManager based on [FancyUpload](http://digitarald.de) + +authors: Christoph Pojer (@cpojer) + +license: MIT-style license. + +requires: [Core/*] + +provides: Filemanager.Uploader + +... +*/ + +FileManager.implement({ + + options: { + resizeImages: true, + upload: true, + uploadAuthData: {}, // deprecated; use FileManager.propagateData instead! + uploadTimeLimit: 260, + uploadFileSizeMax: 2600 * 2600 * 25 + }, + + hooks: { + show: { + upload: function() { + this.startUpload(); + } + }, + + cleanup: { + upload: function() { + if (!this.options.upload || !this.upload) return; + + if (this.upload.uploader) { + this.upload.uploader.fade(0).get('tween').chain(function() { + this.element.dispose(); + }); + } + } + } + }, + + onDialogOpenWhenUpload: function() { + if (this.swf && this.swf.box) this.swf.box.setStyle('visibility', 'hidden'); + }, + + onDialogCloseWhenUpload: function() { + if (this.swf && this.swf.box) this.swf.box.setStyle('visibility', 'visible'); + }, + + startUpload: function() { + + if (!this.options.upload || this.swf) return; + + var self = this; + this.upload = { + button: this.addMenuButton('upload').inject(this.menu, 'bottom').addEvents({ + click: function() { + return false; + }, + mouseenter: function() { + this.addClass('hover'); + }, + mouseleave: function() { + this.removeClass('hover'); + this.blur(); + }, + mousedown: function() { + this.focus(); + } + }), + list: new Element('ul', {'class': 'filemanager-uploader-list'}), + uploader: new Element('div', {opacity: 0, 'class': 'filemanager-uploader-area'}).adopt( + new Element('h2', {text: this.language.upload}), + new Element('div', {'class': 'filemanager-uploader'}) + ), + lastFileUploaded: null, // name of the last successfully uploaded file; will be preselected in the list view + error_count: 0 + }; + this.upload.uploader.getElement('div').adopt(this.upload.list); + + if (this.options.resizeImages) { + var resizer = new Element('div', {'class': 'checkbox'}); + var check = (function() { + this.toggleClass('checkboxChecked'); + }).bind(resizer); + check(); + this.upload.label = new Element('label').adopt( + resizer, + new Element('span', {text: this.language.resizeImages}) + ).addEvent('click', check).inject(this.menu); + } + + var File = new Class({ + + Extends: Swiff.Uploader.File, + + initialize: function(base, data) { + + this.parent(base, data); + this.has_completed = false; + + var tx_cfg = self.options.mkServerRequestURL(self, 'upload', { + directory: self.CurrentDir.path, + filter: self.options.filter, + resize: (self.options.resizeImages && resizer.hasClass('checkboxChecked')) ? 1 : 0 + }); + + self.diag.log('Uploader: setOptions', tx_cfg); + + this.setOptions(tx_cfg); + }, + + render: function() { + if (this.invalid) { + var message = self.language.uploader.unknown; + var sub = { + name: this.name, + size: Swiff.Uploader.formatUnit(this.size, 'b') + }; + + if (self.language.uploader[this.validationError]) { + message = self.language.uploader[this.validationError]; + } + + if (this.validationError === 'sizeLimitMin') + sub.size_min = Swiff.Uploader.formatUnit(this.base.options.fileSizeMin, 'b'); + else if (this.validationError === 'sizeLimitMax') + sub.size_max = Swiff.Uploader.formatUnit(this.base.options.fileSizeMax, 'b'); + + self.showError(message.substitute(sub, /\\?\$\{([^{}]+)\}/g)); + return this; + } + + this.addEvents({ + open: this.onOpen, + remove: this.onRemove, + requeue: this.onRequeue, + progress: this.onProgress, + stop: this.onStop, + complete: this.onComplete + }); + + this.ui = {}; + this.ui.icon = new Asset.image(self.assetBasePath+'Images/Icons/' + this.extension + '.png', { + 'class': 'icon', + onerror: function() { + new Asset.image(self.assetBasePath + 'Images/Icons/default.png').replaces(this); + } + }); + this.ui.element = new Element('li', {'class': 'file', id: 'file-' + this.id}); + // keep filename in display box at reasonable length: + var laname = this.name; + if (laname.length > 36) { + laname = laname.substr(0, 36) + '...'; + } + this.ui.title = new Element('span', {'class': 'file-title', text: laname, title: this.name}); + this.ui.size = new Element('span', {'class': 'file-size', text: Swiff.Uploader.formatUnit(this.size, 'b')}); + + var file = this; + this.ui.cancel = new Asset.image(self.assetBasePath+'Images/cancel.png', {'class': 'file-cancel', title: self.language.cancel}).addEvent('click', function() { + file.remove(); + self.tips.hide(); + self.tips.detach(this); + }); + self.tips.attach(this.ui.cancel); + + var progress = new Element('img', {'class': 'file-progress', src: self.assetBasePath+'Images/bar.gif'}); + + this.ui.element.adopt( + this.ui.cancel, + progress, + this.ui.icon, + this.ui.title, + this.ui.size + ).inject(self.upload.list).highlight(); + + this.ui.progress = new Fx.ProgressBar(progress).set(0); + + this.base.reposition(); + + return this.parent(); + }, + + onOpen: function() { + this.ui.element.addClass('file-running'); + }, + + onRemove: function() { + this.ui = this.ui.element.destroy(); + + // when all items in the list have been cancelled/removed, and the transmission of the files is done, i.e. after the onComplete has fired, destroy the list! + var cnt = self.upload.list.getElements('li').length; + if (cnt == 0 && this.has_completed) + { + self.upload.uploader.fade(0).get('tween').chain(function() { + self.upload.uploader.setStyle('display', 'none'); + }); + } + }, + + onProgress: function() { + this.ui.progress.start(this.progress.percentLoaded); + }, + + onStop: function() { + this.remove(); + }, + + onComplete: function(file_obj) + { + self.diag.log('File-onComplete', arguments, ', fileList: ', self.swf.fileList); + + var response = null; + var failure = true; + + this.has_completed = true; + + this.ui.progress = this.ui.progress.cancel().element.destroy(); + this.ui.cancel = this.ui.cancel.destroy(); + + try + { + response = JSON.decode(this.response.text); + } + catch(e) + { + self.diag.log(this.response); + } + + if (typeof response === 'undefined' || response == null) + { + if (this.response == null || !this.response.text) + { + // The 'mod_security' has shown to be one of the most unhelpful error messages ever; particularly when it happened on a lot on boxes which had a guaranteed utter lack of mod_security and friends. + // So we restrict this report to the highly improbable case where we get to receive /nothing/ /at/ /all/. + self.showError(self.language.uploader.mod_security); + } + else + { + self.showError(("Server response:\n" + this.response.text).substitute(self.language, /\\?\$\{([^{}]+)\}/g)); + } + } + else if (!response.status) + { + self.showError(('' + response.error).substitute(self.language, /\\?\$\{([^{}]+)\}/g)); + } + else + { + failure = false; + } + + this.ui.element.set('tween', {duration: 2000}).highlight(!failure ? '#e6efc2' : '#f0c2c2'); + (function() { + this.ui.element.setStyle('overflow', 'hidden').morph({ + opacity: 0, + height: 0 + }).get('morph').chain(function() { + this.element.destroy(); + var cnt = self.upload.list.getElements('li').length; + if (cnt == 0) + { + self.upload.uploader.fade(0).get('tween').chain(function() { + self.upload.uploader.setStyle('display', 'none'); + }); + } + }); + }).delay(!failure ? 1000 : 5000, this); + + if (failure) + { + self.upload.error_count++; + } + + // don't wait for the cute delays to start updating the directory view! + var cnt = self.upload.list.getElements('li').length; + var fcnt = self.swf.fileList.length; + self.diag.log('upload:onComplete for FILE', file_obj, cnt, fcnt); + } + }); + + this.getFileTypes = function() { + var fileTypes = {}; + if (this.options.filter == 'image') + fileTypes = {'Images (*.jpg, *.gif, *.png)': '*.jpg; *.jpeg; *.bmp; *.gif; *.png'}; + if (this.options.filter == 'video') + fileTypes = {'Videos (*.avi, *.flv, *.mov, *.mpeg, *.mpg, *.wmv, *.mp4)': '*.avi; *.flv; *.fli; *.movie; *.mpe; *.qt; *.viv; *.mkv; *.vivo; *.mov; *.mpeg; *.mpg; *.wmv; *.mp4'}; + if (this.options.filter == 'audio') + fileTypes = {'Audio (*.aif, *.mid, *.mp3, *.mpga, *.rm, *.wav)': '*.aif; *.aifc; *.aiff; *.aif; *.au; *.mka; *.kar; *.mid; *.midi; *.mp2; *.mp3; *.mpga; *.ra; *.ram; *.rm; *.rpm; *.snd; *.wav; *.tsi'}; + if (this.options.filter == 'text') + fileTypes = {'Text (*.txt, *.rtf, *.rtx, *.html, *.htm, *.css, *.as, *.xml, *.tpl)': '*.txt; *.rtf; *.rtx; *.html; *.htm; *.css; *.as; *.xml; *.tpl'}; + if (this.options.filter == 'application') + fileTypes = {'Application (*.bin, *.doc, *.exe, *.iso, *.js, *.odt, *.pdf, *.php, *.ppt, *.swf, *.rar, *.zip)': '*.ai; *.bin; *.ccad; *.class; *.cpt; *.dir; *.dms; *.drw; *.doc; *.dvi; *.dwg; *.eps; *.exe; *.gtar; *.gz; *.js; *.latex; *.lnk; *.lnk; *.oda; *.odt; *.ods; *.odp; *.odg; *.odc; *.odf; *.odb; *.odi; *.odm; *.ott; *.ots; *.otp; *.otg; *.pdf; *.php; *.pot; *.pps; *.ppt; *.ppz; *.pre; *.ps; *.rar; *.set; *.sh; *.skd; *.skm; *.smi; *.smil; *.spl; *.src; *.stl; *.swf; *.tar; *.tex; *.texi; *.texinfo; *.tsp; *.unv; *.vcd; *.vda; *.xlc; *.xll; *.xlm; *.xls; *.xlw; *.zip'}; + + return fileTypes; + }; + + this.diag.log('Uploader: SWF init'); + this.swf = new Swiff.Uploader({ + id: 'SwiffFileManagerUpload', + path: this.assetBasePath + 'Swiff.Uploader.swf', + queued: false, + target: this.upload.button, + allowDuplicates: true, + instantStart: true, + appendCookieData: true, // pass along any session cookie data, etc. in the request section (PHP: $_GET[]) + verbose: this.options.verbose, + data: Object.merge({}, + self.options.propagateData, + (self.options.uploadAuthData || {}) + ), + fileClass: File, + timeLimit: self.options.uploadTimeLimit, + fileSizeMax: self.options.uploadFileSizeMax, + typeFilter: this.getFileTypes(), + zIndex: this.options.zIndex + 3000, + onSelectSuccess: function() { + self.diag.log('FlashUploader: onSelectSuccess', arguments, ', fileList: ', self.swf.fileList); + //self.fillInfo(); + self.show_our_info_sections(false); + //self.info.getElement('h2.filemanager-headline').setStyle('display', 'none'); + self.info.adopt(self.upload.uploader.setStyle('display', 'block')); + self.upload.uploader.fade(1); + }, + onComplete: function(info) { + this.diag.log('FlashUploader: onComplete', arguments, ', fileList: ', self.swf.fileList); + + // don't wait for the cute delays to start updating the directory view! + var cnt = this.upload.list.getElements('li').length; + var fcnt = this.swf.fileList.length; + this.diag.log('upload:onComplete', info, cnt, fcnt); + // add a 5 second delay when there were upload errors: + (function() { + this.load(this.CurrentDir.path, this.upload.lastFileUploaded); + // this.fillInfo(); + }).bind(this).delay(this.upload.error_count > 0 ? 5500 : 1); + }.bind(this), + onFileComplete: function(f) { + self.diag.log('FlashUploader: onFileComplete', arguments, ', fileList: ', self.swf.fileList); + self.upload.lastFileUploaded = f.name.replace(/\s+/g, '_').replace(/_{2,}/g, '_'); + }, + onFail: function(error) { + self.diag.log('FlashUploader: onFail', arguments, ', swf: ', self.swf, ', fileList: ', (typeof self.swf !== 'undefined' ? self.swf : '---')); + if (error !== 'empty') { + $$(self.upload.button, self.upload.label).dispose(); + self.showError(self.language.flash[error] || self.language.flash.flash); + } + }, + + onLoad: function() { + self.diag.log('FlashUploader: onLoad', arguments, ', fileList: ', self.swf.fileList); + }, + onStart: function() { + self.diag.log('FlashUploader: onStart', arguments, ', fileList: ', self.swf.fileList); + }, + onQueue: function() { + self.diag.log('FlashUploader: onQueue', arguments, ', fileList: ', self.swf.fileList); + }, + onBrowse: function() { + self.diag.log('FlashUploader: onBrowse', arguments, ', fileList: ', self.swf.fileList); + }, + onDisabledBrowse: function() { + self.diag.log('FlashUploader: onDisabledBrowse', arguments, ', fileList: ', self.swf.fileList); + }, + onCancel: function() { + self.diag.log('FlashUploader: onCancel', arguments, ', fileList: ', self.swf.fileList); + }, + onSelect: function() { + self.diag.log('FlashUploader: onSelect', arguments, ', fileList: ', self.swf.fileList); + }, + onSelectFail: function() { + self.diag.log('FlashUploader: onSelectFail', arguments, ', fileList: ', self.swf.fileList); + }, + + onButtonEnter: function() { + self.diag.log('FlashUploader: onButtonEnter', arguments, ', fileList: ', self.swf.fileList); + }, + onButtonLeave: function() { + self.diag.log('FlashUploader: onButtonLeave', arguments, ', fileList: ', self.swf.fileList); + }, + onButtonDown: function() { + self.diag.log('FlashUploader: onButtonDown', arguments, ', fileList: ', self.swf.fileList); + }, + onButtonDisable: function() { + self.diag.log('FlashUploader: onButtonDisable', arguments, ', fileList: ', self.swf.fileList); + }, + + onFileStart: function() { + self.diag.log('FlashUploader: onFileStart', arguments, ', fileList: ', self.swf.fileList); + }, + onFileStop: function() { + self.diag.log('FlashUploader: onFileStop', arguments, ', fileList: ', self.swf.fileList); + }, + onFileRequeue: function() { + self.diag.log('FlashUploader: onFileRequeue', arguments, ', fileList: ', self.swf.fileList); + }, + onFileOpen: function() { + self.diag.log('FlashUploader: onFileOpen', arguments, ', fileList: ', self.swf.fileList); + }, + onFileProgress: function() { + self.diag.log('FlashUploader: onFileProgress', arguments, ', fileList: ', self.swf.fileList); + }, + onFileRemove: function() { + self.diag.log('FlashUploader: onFileRemove', arguments, ', fileList: ', self.swf.fileList); + }, + + onBeforeStart: function() { + self.diag.log('FlashUploader: onBeforeStart', arguments, ', fileList: ', self.swf.fileList); + }, + onBeforeStop: function() { + self.diag.log('FlashUploader: onBeforeStop', arguments, ', fileList: ', self.swf.fileList); + }, + onBeforeRemove: function() { + self.diag.log('FlashUploader: onBeforeRemove', arguments, ', fileList: ', self.swf.fileList); + } + }); + } +}); + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Uploader/Fx.ProgressBar.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Uploader/Fx.ProgressBar.js new file mode 100644 index 0000000000..dd508ff394 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Uploader/Fx.ProgressBar.js @@ -0,0 +1,78 @@ +/* +--- +name: Fx.ProgressBar + +description: Fx.ProgressBar + +requires: [Core/Fx.Transitions, Core/Fx, Core/Class] + +provides: [Fx.ProgressBar] + +version: 1.1 + +license: MIT License + +author: Harald Kirschner +... +*/ + +Fx.ProgressBar = new Class({ + + Extends: Fx, + + options: { + text: null, + url: null, + transition: Fx.Transitions.Circ.easeOut, + fit: true, + link: 'cancel' + }, + + initialize: function(element, options) { + this.element = document.id(element); + this.parent(options); + + var url = this.options.url; + if (url) { + this.element.setStyles({ + 'background-image': 'url(' + url + ')', + 'background-repeat': 'no-repeat' + }); + } + + if (this.options.fit) { + url = url || this.element.getStyle('background-image').replace(/^url\(["']?|["']?\)$/g, ''); + if (url) { + var fill = new Image(); + fill.onload = function() { + this.fill = fill.width; + fill = fill.onload = null; + this.set(this.now || 0); + }.bind(this); + fill.src = url; + if (!this.fill && fill.width) fill.onload(); + } + } else { + this.set(0); + } + }, + + start: function(to, total) { + return this.parent(this.now, (arguments.length == 1 || !total) ? to.limit(0, 100) : to / total * 100); + }, + + set: function(to) { + this.now = to; + var css = (this.fill) + ? (((this.fill / -2) + (to / 100) * (this.element.width || 1) || 0).round() + 'px') + : ((100 - to) + '%'); + + this.element.setStyle('backgroundPosition', css + ' 0px').title = Math.round(to) + '%'; + + var text = document.id(this.options.text); + if (text) text.set('text', Math.round(to) + '%'); + + return this; + } + +}); \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Uploader/Swiff.Uploader.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Uploader/Swiff.Uploader.js new file mode 100644 index 0000000000..9969929eae --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/MootoolsFileManager/mootools-filemanager/Source/Uploader/Swiff.Uploader.js @@ -0,0 +1,508 @@ +/* +--- +name: Swiff.Uploader + +description: Swiff.Uploader - Flash FileReference Control + +requires: [Core/Swiff, Core/Fx, Core/Class, Core/Class.Extras, Core/Browser, Core/Element] + +provides: [Swiff.Uploader, Swiff.Uploader.File] + +version: 3.0 + +license: MIT License + +author: Harald Kirschner +author: Valerio Proietti, +... +*/ + +Swiff.Uploader = new Class({ + + Extends: Swiff, + + Implements: Events, + + options: { + path: 'Swiff.Uploader.swf', + + target: null, + zIndex: 9999, + + callBacks: null, + params: { + wMode: 'opaque', + menu: 'false', + allowScriptAccess: 'always' + }, + + typeFilter: null, + multiple: true, + queued: true, + verbose: false, + height: 30, + width: 100, + passStatus: null, + + url: null, + method: null, + data: null, + mergeData: true, + fieldName: null, + + fileSizeMin: 1, + fileSizeMax: null, // Official limit is 100 MB for FileReference, but I tested up to 2Gb! + allowDuplicates: false, + timeLimit: (Browser.Platform.linux) ? 0 : 30, + + policyFile: null, + buttonImage: null, + + fileListMax: 0, + fileListSizeMax: 0, + + instantStart: false, + appendCookieData: false, + + fileClass: null + /* + onLoad: function(){}, + onFail: function(){}, + onStart: function(){}, + onQueue: function(){}, + onComplete: function(){}, + onBrowse: function(){}, + onDisabledBrowse: function(){}, + onCancel: function(){}, + onSelect: function(){}, + onSelectSuccess: function(){}, + onSelectFail: function(){}, + + onButtonEnter: function(){}, + onButtonLeave: function(){}, + onButtonDown: function(){}, + onButtonDisable: function(){}, + + onFileStart: function(){}, + onFileStop: function(){}, + onFileRequeue: function(){}, + onFileOpen: function(){}, + onFileProgress: function(){}, + onFileComplete: function(){}, + onFileRemove: function(){}, + + onBeforeStart: function(){}, + onBeforeStop: function(){}, + onBeforeRemove: function(){} + */ + }, + + initialize: function(options) { + // protected events to control the class, added + // before setting options (which adds own events) + this.addEvent('load', this.initializeSwiff, true) + .addEvent('select', this.processFiles, true) + .addEvent('complete', this.update, true) + .addEvent('fileRemove', function(file) { + this.fileList.erase(file); + }.bind(this), true); + + this.setOptions(options); + + // callbacks are no longer in the options, every callback + // is fired as event, this is just compat + if (this.options.callBacks) { + Object.each(this.options.callBacks, function(fn, name) { + this.addEvent(name, fn); + }, this); + } + + this.options.callBacks = { + fireCallback: this.fireCallback.bind(this) + }; + + var path = this.options.path; + if (!path.contains('?')) path += '?noCache=' + Date.now(); // cache in IE + + // container options for Swiff class + this.options.container = this.box = new Element('span', {'class': 'swiff-uploader-box',events: { click: function(e) { e.stopPropagation(); } }}).inject(document.id(this.options.container) || document.body); + + // target + this.target = document.id(this.options.target); + if(this.target) { + var scroll = window.getScroll(); + this.box.setStyles({ + position: 'absolute', + visibility: 'visible', + zIndex: this.options.zIndex, + overflow: 'hidden', + height: 1, width: 1, + top: scroll.y, left: scroll.x + }); + + // we force wMode to transparent for the overlay effect + this.parent(path, { + params: { + wMode: 'transparent' + }, + height: '100%', + width: '100%' + }); + + this.target.addEvent('mouseenter', this.reposition.bind(this)); + + // button interactions, relayed to to the target + this.addEvents({ + buttonEnter: this.targetRelay.pass('mouseenter',this), + buttonLeave: this.targetRelay.pass('mouseleave',this), + buttonDown: this.targetRelay.pass('mousedown',this), + buttonDisable: this.targetRelay.pass('disable',this) + }); + + this.reposition(); + window.addEvent('resize', this.reposition.bind(this)); + } else { + this.parent(path); + } + + this.inject(this.box); + + this.fileList = []; + + this.size = this.uploading = this.bytesLoaded = this.percentLoaded = 0; + + if (Browser.Plugins.Flash.version < 9) { + this.fireEvent('fail', ['flash']); + } else { + this.verifyLoad.delay(1000, this); + } + }, + + verifyLoad: function() { + if (this.loaded) return; + if (!this.object.parentNode) { + this.fireEvent('fail', ['disabled']); + } else if (this.object.style.display == 'none') { + this.fireEvent('fail', ['hidden']); + } else if (!this.object.offsetWidth) { + this.fireEvent('fail', ['empty']); + } + }, + + fireCallback: function(name, args) { + // file* callbacks are relayed to the specific file + if (name.substr(0, 4) == 'file') { + // updated queue data is the second argument + if (args.length > 1) this.update(args[1]); + var data = args[0]; + + var file = this.findFile(data.id); + this.fireEvent(name, file || data, 5); + if (file) { + var fire = name.replace(/^file([A-Z])/, function($0, $1) { + return $1.toLowerCase(); + }); + file.update(data).fireEvent(fire, [data], 10); + } + } else { + this.fireEvent(name, args, 5); + } + }, + + update: function(data) { + // the data is saved right to the instance + Object.append(this, data); + this.fireEvent('queue', [this], 10); + return this; + }, + + findFile: function(id) { + for (var i = 0; i < this.fileList.length; i++) { + if (this.fileList[i].id == id) return this.fileList[i]; + } + return null; + }, + + initializeSwiff: function() { + this.appendCookieData(); // looks like there's a bit of trouble with xSetOptions, so we circumvent it by passing it all in one go through xInitialize + // if (typeof console !== 'undefined' && console.log) console.log('initializeSwiff: data count = ' + this.options.data.length + ' : ' + this.options.data); + + // extracted options for the swf + this.remote('xInitialize', { + typeFilter: this.options.typeFilter, + multiple: this.options.multiple, + queued: this.options.queued, + verbose: this.options.verbose, + width: this.options.width, + height: this.options.height, + passStatus: this.options.passStatus, + url: this.options.url, + method: this.options.method, + data: this.options.data, + mergeData: this.options.mergeData, + fieldName: this.options.fieldName, + fileSizeMin: this.options.fileSizeMin, + fileSizeMax: this.options.fileSizeMax, + allowDuplicates: this.options.allowDuplicates, + timeLimit: this.options.timeLimit, + policyFile: this.options.policyFile, + buttonImage: this.options.buttonImage + }); + + this.loaded = true; + }, + + targetRelay: function(name) { + if (this.target) this.target.fireEvent(name); + }, + + reposition: function(coords) { + // update coordinates, manual or automatically + coords = coords || (this.target && this.target.offsetHeight) ? this.target.getCoordinates(this.box.getOffsetParent()) : {top: window.getScrollTop(), left: 0, width: 40, height: 40}; + this.box.setStyles(coords); + this.fireEvent('reposition', [coords, this.box, this.target]); + }, + + setOptions: function(options) { + // if (typeof console !== 'undefined' && console.log) console.log('Swiff.Uploader: BASE::setOptions'); + if (options) { + if (options.url) options.url = Swiff.Uploader.qualifyPath(options.url); + if (options.buttonImage) options.buttonImage = Swiff.Uploader.qualifyPath(options.buttonImage); + this.parent(options); + if (this.loaded) { + this.remote('xSetOptions', options); + } + } + return this; + }, + + setEnabled: function(status) { + this.remote('xSetEnabled', status); + }, + + start: function() { + this.fireEvent('beforeStart'); + this.remote('xStart'); + }, + + stop: function() { + this.fireEvent('beforeStop'); + this.remote('xStop'); + }, + + remove: function() { + this.fireEvent('beforeRemove'); + this.remote('xRemove'); + }, + + fileStart: function(file) { + this.remote('xFileStart', file.id); + }, + + fileStop: function(file) { + this.remote('xFileStop', file.id); + }, + + fileRemove: function(file) { + this.remote('xFileRemove', file.id); + }, + + fileRequeue: function(file) { + this.remote('xFileRequeue', file.id); + }, + + appendCookieData: function() { + var append = this.options.appendCookieData; + // if (typeof console !== 'undefined' && console.log) console.log('appendCookieData: ' + (1 * append) + ' / ' + append); + if (!append) return; + + var hash = {}; + //if (typeof console !== 'undefined' && console.log) console.log('appendCookieData: ENTIRE cookie: "' + document.cookie + '"'); + document.cookie.split(/;\s*/).each(function(cookie) { + cookie = cookie.split('='); + //if (typeof console !== 'undefined' && console.log) console.log('appendCookieData: cookie: "' + cookie[0] + '"(' + cookie.length + ') = "' + (cookie.length > 1 ? cookie[1] : '???') + '"'); + if (cookie.length == 2) { + //hash['\"' + decodeURIComponent(cookie[0]) + '\"'] = decodeURIComponent(cookie[1]); // allow session IDs such as the ASP.NET ones, which come with a dot, etc. + hash[decodeURIComponent(cookie[0])] = decodeURIComponent(cookie[1]); + } + }); + + var data = this.options.data || {}; + if (typeOf(append) == 'string') { + data[append] = hash; + } else { + Object.append(data, hash); + } + this.setOptions({data: data}); + }, + + processFiles: function(successraw, failraw, queue) { + var cls = this.options.fileClass || Swiff.Uploader.File; + + var fail = [], success = []; + + if (successraw) { + successraw.each(function(data) { + var ret = new cls(this, data); + if (!ret.validate()) { + ret.remove.delay(10, ret); + fail.push(ret); + } else { + this.size += data.size; + this.fileList.push(ret); + success.push(ret); + ret.render(); + } + }, this); + + this.fireEvent('selectSuccess', [success], 10); + } + + if (failraw || fail.length) { + fail.append((failraw) ? failraw.map(function(data) { + return new cls(this, data); + }, this) : []).each(function(file) { + file.invalidate().render(); + }); + + this.fireEvent('selectFail', [fail], 10); + } + + this.update(queue); + + if (this.options.instantStart && success.length) this.start(); + } + +}); + +Object.append(Swiff.Uploader, { + + STATUS_QUEUED: 0, + STATUS_RUNNING: 1, + STATUS_ERROR: 2, + STATUS_COMPLETE: 3, + STATUS_STOPPED: 4, + + log: function() { + if (window.console && console.info) console.info.apply(console, arguments); + }, + + unitLabels: { + b: [{min: 1, unit: 'B'}, {min: 1024, unit: 'kB'}, {min: 1048576, unit: 'MB'}, {min: 1073741824, unit: 'GB'}], + s: [{min: 1, unit: 's'}, {min: 60, unit: 'm'}, {min: 3600, unit: 'h'}, {min: 86400, unit: 'd'}] + }, + + formatUnit: function(base, type, join) { + var labels = Swiff.Uploader.unitLabels[(type == 'bps') ? 'b' : type]; + var append = (type == 'bps') ? '/s' : ''; + var i, l = labels.length, value; + + if (base < 1) return '0 ' + labels[0].unit + append; + + if (type == 's') { + var units = []; + + for (i = l - 1; i >= 0; i--) { + value = Math.floor(base / labels[i].min); + if (value) { + units.push(value + ' ' + labels[i].unit); + base -= value * labels[i].min; + if (!base) break; + } + } + + return (join === false) ? units : units.join(join || ', '); + } + + for (i = l - 1; i >= 0; i--) { + value = labels[i].min; + if (base >= value) break; + } + + return (base / value).toFixed(1) + ' ' + labels[i].unit + append; + } + +}); + +Swiff.Uploader.qualifyPath = (function() { + + var anchor; + + return function(path) { + (anchor || (anchor = new Element('a'))).href = path; + return anchor.href; + }; + +})(); + +Swiff.Uploader.File = new Class({ + + Implements: Events, + + initialize: function(base, data) { + this.base = base; + this.update(data); + }, + + update: function(data) { + return Object.append(this, data); + }, + + validate: function() { + var options = this.base.options; + + if (options.fileListMax && this.base.fileList.length >= options.fileListMax) { + this.validationError = 'fileListMax'; + return false; + } + + if (options.fileListSizeMax && (this.base.size + this.size) > options.fileListSizeMax) { + this.validationError = 'fileListSizeMax'; + return false; + } + + return true; + }, + + invalidate: function() { + this.invalid = true; + this.base.fireEvent('fileInvalid', this, 10); + return this.fireEvent('invalid', this, 10); + }, + + render: function() { + return this; + }, + + setOptions: function(options) { + //if (typeof console !== 'undefined' && console.log) console.log('Swiff.Uploader: File::setOptions'); + if (options) { + if (options.url) { + options.url = Swiff.Uploader.qualifyPath(options.url); + } + this.base.remote('xFileSetOptions', this.id, options); + this.options = Object.merge(this.base.options, options); + } + return this; + }, + + start: function() { + this.base.fileStart(this); + return this; + }, + + stop: function() { + this.base.fileStop(this); + return this; + }, + + remove: function() { + this.base.fileRemove(this); + return this; + }, + + requeue: function() { + this.base.fileRequeue(this); + } + +}); diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/PasteText.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/PasteText.js new file mode 100644 index 0000000000..85a8ca3fa5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/PasteText.js @@ -0,0 +1,141 @@ +// Paste Plain Text plugin for Xinha + +// Distributed under the same terms as Xinha itself. +// This notice MUST stay intact for use (see license.txt). + +function PasteText(editor) { + this.editor = editor; + var cfg = editor.config; + var self = this; + + cfg.registerButton({ + id : "pastetext", + tooltip : this._lc("Paste as Plain Text"), + image : editor.imgURL("ed_paste_text.gif", "PasteText"), + textMode : false, + action : function() { self.show(); } + }); + + cfg.addToolbarElement("pastetext", ["paste", "killword"], 1); +} + +PasteText._pluginInfo = { + name : "PasteText", + version : "1.2", + developer : "Michael Harris", + developer_url : "http://www.jonesadvisorygroup.com", + c_owner : "Jones Advisory Group", + sponsor : "Jones International University", + sponsor_url : "http://www.jonesinternational.edu", + license : "htmlArea" +}; + +PasteText.prototype._lc = function(string) { + return Xinha._lc(string, 'PasteText'); +}; + +Xinha.Config.prototype.PasteText = +{ + showParagraphOption : true, + newParagraphDefault :true +} + +PasteText.prototype.onGenerateOnce = function() +{ + var self = PasteText; + if (self.loading) return; + self.loading = true; + Xinha._getback(Xinha.getPluginDir("PasteText") + '/popups/paste_text.html', function(getback) { self.html = getback;}); +}; + +PasteText.prototype._prepareDialog = function() +{ + var self = this; + var editor = this.editor; + + var self = this; + +/// Now we have everything we need, so we can build the dialog. + this.dialog = new Xinha.Dialog(editor, PasteText.html, 'PasteText',{width:350}) + + // Connect the OK and Cancel buttons + this.dialog.getElementById('ok').onclick = function() {self.apply();} + + this.dialog.getElementById('cancel').onclick = function() { self.dialog.hide()}; + + // do some tweaking + if (editor.config.PasteText.showParagraphOption) + { + this.dialog.getElementById("paragraphOption").style.display = ""; + } + if (editor.config.PasteText.newParagraphDefault) + { + this.dialog.getElementById("insertParagraphs").checked = true; + } + + // we can setup a custom function that cares for sizes etc. when the dialog is resized + this.dialog.onresize = function () + { + this.getElementById("inputArea").style.height = + parseInt(this.height,10) // the actual height of the dialog + - this.getElementById('h1').offsetHeight // the title bar + - this.getElementById('buttons').offsetHeight // the buttons + - parseInt(this.rootElem.style.paddingBottom,10) // we have a padding at the bottom, gotta take this into acount + + 'px'; // don't forget this ;) + + this.getElementById("inputArea").style.width =(this.width - 2) + 'px'; // and the width + + } +}; + +PasteText.prototype.show = function() +{ + if (!this.dialog) this._prepareDialog(); + + // here we can pass values to the dialog + // each property pair consists of the "name" of the input we want to populate, and the value to be set + var inputs = + { + inputArea : '' // we want the textarea always to be empty on showing + } + // now calling the show method of the Xinha.Dialog object to set the values and show the actual dialog + this.dialog.show(inputs); + + // Init the sizes (only if we have set up the custom resize function) + this.dialog.onresize(); + + this.dialog.getElementById("inputArea").focus(); +}; + +// and finally ... take some action +PasteText.prototype.apply = function() +{ + // the hide method of the dialog object returns the values of the inputs AND hides the dialog + // could also use this.dialog.getValues() here and hide it at the end + var returnValues = this.dialog.hide(); + + var html = returnValues.inputArea; + var insertParagraphs = returnValues.insertParagraphs; + html = html.replace(//g, ">"); + if ( returnValues.insertParagraphs) + { + html = html.replace(/\t/g,"    "); + html = html.replace(/\n+/g,"

    "); + html="

    " + html + "

    "; + if (Xinha.is_ie) + { + this.editor.insertHTML(html); + } + else + { + this.editor.insertHTML(html); + // this.editor.execCommand("inserthtml",false,html); + } + } + else + { + html = html.replace(/\n/g,"
    "); + this.editor.insertHTML(html); + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/img/ed_paste_text.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/img/ed_paste_text.gif new file mode 100644 index 0000000000..039a6498b3 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/img/ed_paste_text.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ch.js new file mode 100644 index 0000000000..9d78e4459e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ch.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消", + "OK": "好" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/cz.js new file mode 100644 index 0000000000..36b99297ee --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/cz.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/da.js new file mode 100644 index 0000000000..20fc0d0748 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/da.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/de.js new file mode 100644 index 0000000000..7bba7dee34 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/de.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Abbrechen", + "Insert text in new paragraph": "Neue Absätze eifügen", + "OK": "OK", + "Paste as Plain Text": "unformatierten Text einfügen" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ee.js new file mode 100644 index 0000000000..ba916e9d88 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ee.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/el.js new file mode 100644 index 0000000000..f6e006c463 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/el.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση", + "OK": "Εντάξει" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/es.js new file mode 100644 index 0000000000..9f23c0fb69 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/es.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "OK": "Aceptar" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/eu.js new file mode 100644 index 0000000000..3bc9dbb122 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/eu.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi", + "OK": "Ados" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/fa.js new file mode 100644 index 0000000000..84e7f7e297 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/fa.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف", + "OK": "بله" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/fi.js new file mode 100644 index 0000000000..82552b9755 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/fi.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta", + "OK": "Hyväksy" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/fr.js new file mode 100644 index 0000000000..26fa8f394d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/fr.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuler", + "OK": "OK", + "Paste as Plain Text": "Copier comme texte pur" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/he.js new file mode 100644 index 0000000000..a602f7cac8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/he.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול", + "OK": "אישור" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/hu.js new file mode 100644 index 0000000000..b38528d99d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/hu.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem", + "OK": "Rendben" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/it.js new file mode 100644 index 0000000000..a0acb45476 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/it.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ja.js new file mode 100644 index 0000000000..108a30267f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ja.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "中止", + "OK": "OK", + "Paste as Plain Text": "プレーンテキストとして貼り付け" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/lc_base.js new file mode 100644 index 0000000000..e02e0130df --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/lc_base.js @@ -0,0 +1,28 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Cancel": "", + "Insert text in new paragraph": "", + "OK": "", + "Paste as Plain Text": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/lt.js new file mode 100644 index 0000000000..d118909d22 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/lt.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/lv.js new file mode 100644 index 0000000000..f83d5d3efc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/lv.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt", + "OK": "Labi" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/nb.js new file mode 100644 index 0000000000..5cb64c480f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/nb.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "OK": "OK", + "Paste as Plain Text": "Lim inn som ren tekst" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/nl.js new file mode 100644 index 0000000000..8669f15892 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/nl.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuleren", + "OK": "OK", + "Paste as Plain Text": "Kopieer als platte tekst (geen opmaak)" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/pl.js new file mode 100644 index 0000000000..1d0fdceb05 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/pl.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anuluj", + "OK": "OK", + "Paste as Plain Text": "Wklej jako czysty tekst" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/pt_br.js new file mode 100644 index 0000000000..1b45eb9678 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/pt_br.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "OK": "OK", + "Paste as Plain Text": "Colar um texto básico", + "__OBSOLETE__": { + "Paste Text": "Colar Texto" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ro.js new file mode 100644 index 0000000000..9d6e1c3d35 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ro.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă", + "OK": "Acceptă" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ru.js new file mode 100644 index 0000000000..631a383aed --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/ru.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена", + "OK": "OK", + "Paste as Plain Text": "Вставить как обычный текст" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/sh.js new file mode 100644 index 0000000000..62e76f77ed --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/sh.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/si.js new file mode 100644 index 0000000000..7674892b4c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/si.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči", + "OK": "V redu" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/sr.js new file mode 100644 index 0000000000..b7ee6f5c95 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/sr.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/sv.js new file mode 100644 index 0000000000..98336d80fa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/sv.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/th.js new file mode 100644 index 0000000000..9da9c8d94d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/th.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก", + "OK": "ตกลง" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/tr.js new file mode 100644 index 0000000000..8a4e22a892 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/tr.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal", + "OK": "Tamam" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/vn.js new file mode 100644 index 0000000000..2d82e026dc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/lang/vn.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy", + "OK": "Đồng ý" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/popups/paste_text.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/popups/paste_text.html new file mode 100644 index 0000000000..6ce2e7aff2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PasteText/popups/paste_text.html @@ -0,0 +1,9 @@ +

    Paste as Plain Text

    + +
    + + + +
    diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/PreserveScripts.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/PreserveScripts.js new file mode 100644 index 0000000000..b410498212 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/PreserveScripts.js @@ -0,0 +1,84 @@ +/*------------------------------------------*\ +PreserveScripts for Xinha +____________________ +Replace blocks of of PHP or JavaScript with icons in the editor, this way making it possible to edit sourcecode containing PHP, +and preventing Javascript from being accidentally deleted because it's normally invisible + +\*------------------------------------------*/ + +function PreserveScripts(editor) { + this.editor = editor; +} + +PreserveScripts._pluginInfo = { + name : "PreserveScripts", + version : "1.0", + developer : "Raimund Meyer", + developer_url : "http://x-webservice.net", + c_owner : "Raimund Meyer", + sponsor : "", + sponsor_url : "", + license : "LGPL" +} +Xinha.Config.prototype.PreserveScripts = +{ + 'preservePHP' : true, + 'preserveJS' : true +} +PreserveScripts.prototype.inwardHtml = function(html) +{ + var s = this; + var c = s.editor.config.PreserveScripts; + this.storage = {}; //empty the cache + var i = 1; + var index=0; + html = html.replace(/\n?<\?(php)?(\s|[^\s])*?\?>\n?/ig, + function(m) + { + if ( c.preservePHP ) // if config set to false wipe out php completely, otherwise ugly fragments may remain + { + index = html.indexOf(m,index); + + index+=m.length + + var after = html.substring( index, html.length ); + + //strip out php + s.storage['preservescripts_'+i] = m; + after=after.replace(/\n?<\?(php)?(\s|[^\s])*?\?>\n?/ig,''); + + if ( after.match(/^[^<]*>/) ) // make sure cursor is in an editable area (outside tags, script blocks, entities, and inside the body) + { + var r = '[preservescripts_'+i+']=preservescripts'; + }else{ + var r = ''; + } + i++; + return r; + } + else + { + return ''; + } + }); + if ( c.preserveJS ) + { + html = html.replace(/\n?\n?/g, + function(m) + { + s.storage['preservescripts_'+i] = m; + var r = ''; + i++; + return r; + }); + } + return html; +} + +PreserveScripts.prototype.outwardHtml = function(html) +{ + var s = this; + html = html.replace(/\[(preservescripts_\d+)\](="preservescripts"|=preservescripts)?/g,function(m0,m1){return s.storage[m1];}); + html = html.replace(/]*id="(preservescripts_\d+)"[^>]*>/g,function(m0,m1){return s.storage[m1];}); + return html; +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/js.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/js.png new file mode 100644 index 0000000000..41f5e42425 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/js.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/lang/lc_base.js new file mode 100644 index 0000000000..64cd781328 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/lang/lc_base.js @@ -0,0 +1,26 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "JavaScript": "", + "PHP": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/php.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/php.png new file mode 100644 index 0000000000..a1bffb1211 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/php.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/php.svg b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/php.svg new file mode 100755 index 0000000000..f72adc4a00 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveScripts/php.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + PHP + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveSelection/PreserveSelection.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveSelection/PreserveSelection.js new file mode 100644 index 0000000000..d2240b48ea --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/PreserveSelection/PreserveSelection.js @@ -0,0 +1,209 @@ +/** + PreserveSelection for Xinha + =============================================================================== + + Originally developed by AdamJ in ticket #1544 as a Gecko patch. Pluginised by + James Sleeman. + + This plugin preserves the selected text when switching between wysiwyg and + source modes, eg, select hello world in the wysiwyg mode, and switch to + source mode and hello world will be selected there also. + + Note that this plugin works a bit differently as it over-rides existing + features of the Gecko/WebKit module loaded in the browser. +*/ + +PreserveSelection._pluginInfo = { + name : "PreserveSelection", + version : "1.0", + developer : "AdamJ, James Sleeman", + developer_url : "http://trac.xinha.org/ticket/1544", + sponsor : "", + sponsor_url : "", + license : "htmlArea" +} + +function PreserveSelection(editor) +{ + this.editor = editor; +}; + +Xinha.ccStart = String.fromCharCode(8286); +Xinha.ccEnd = String.fromCharCode(8285); + +PreserveSelection.prototype.onGenerateOnce = function() +{ + var editor = this.editor; + + editor.setCC = function ( target ) + { + var ccStart = Xinha.ccStart; + var ccEnd = Xinha.ccEnd; + try + { + if ( target == "textarea" ) + { + var ta = this._textArea; + var startIndex = ta.selectionStart; + var endIndex = ta.selectionEnd; + + var after=ta.value.substring( startIndex, ta.value.length ); + if ( after.match(/^[^<]*>/) ) // make sure cursor is in an editable area (outside tags, script blocks, entities, and inside the body) + { + var tagEnd = after.indexOf(">") + 1; + startIndex+=tagEnd; + } + + var after=ta.value.substring( endIndex, ta.value.length ); + if ( after.match(/^[^<]*>/) ) // make sure cursor is in an editable area (outside tags, script blocks, entities, and inside the body) + { + var tagEnd = after.indexOf(">") + 1; + endIndex+=tagEnd; + } + + var before = ta.value.substring( 0, startIndex ) + var middle = ta.value.substring( startIndex, endIndex ) + var after = ta.value.substring( endIndex, ta.value.length ); + + ta.value = before + ccStart + middle + ccEnd + after; + ta.value = ta.value.replace(new RegExp ('(&[^'+ccStart+';]*?)('+ccStart+')([^'+ccStart+']*?;)'), "$1$3$2"); + ta.value = ta.value.replace(new RegExp ('(]*>[^'+ccStart+']*?)('+ccStart+')([^'+ccStart+']*?<\/script>)'), "$1$3$2"); + ta.value = ta.value.replace(new RegExp ('^([^'+ccStart+']*)('+ccStart+')([^'+ccStart+']*]*>)(.*?)'), "$1$3$2$4"); + } + else + { + var sel = this.getSelection(); + + var range=sel.getRangeAt(0); + var collapsed=range.collapsed; + + + if(range.startContainer.nodeType==3){ + range.startContainer.insertData(range.startOffset,ccStart); + }else if(range.startContainer.nodeType==1){ + if( range.startOffset ){ + var startTextNode=range.startContainer.insertBefore( this._doc.createTextNode(ccStart), range.startContainer.childNodes[range.startOffset] ); + }else{ + var startTextNode=range.startContainer.appendChild( this._doc.createTextNode(ccStart) ); + } + }else{ + alert(range.startContainer.nodeType); + } + + + if( collapsed==false ){ + if(range.endContainer.nodeType==3){ + range.endContainer.insertData(range.endOffset,ccEnd); + }else if(range.endContainer.nodeType==1){ + if( range.endOffset ){ + var endTextNode=range.endContainer.insertBefore( this._doc.createTextNode(ccEnd), range.endContainer.childNodes[range.endOffset] ); + }else{ + var endTextNode=range.endContainer.appendChild( this._doc.createTextNode(ccEnd) ); + } + }else{ + alert(range.endContainer.nodeType); + } + } + } + } catch (e) {} + }; + + editor.findCC = function ( target ) + { + var ccStart = Xinha.ccStart; + var ccEnd = Xinha.ccEnd; + + if ( target == 'textarea' ) + { + var ta = this._textArea; + + var startPos = ta.value.indexOf( ccStart ); + if ( startPos == -1 ) return; + + var endPos = ta.value.indexOf( ccEnd ); + + if ( endPos != -1 ){ + + if( startPos'); + doc.body.innerHTML = doc.body.innerHTML.replace(new RegExp(ccEnd),''); + var startEl = doc.getElementById('XinhaEditingStart'); + var endEl = doc.getElementById('XinhaEditingEnd'); + + this.forceRedraw(); + var range; + var collapsed = typeof collapseToStart == "undefined" ? true : false; + var sel = this.getSelection(); + range = this._doc.createRange(); + if ( !startEl ){ + sel.removeAllRanges(); + return; + } + // Tables and Images get selected as "objects" rather than the text contents + if ( !endEl && startEl.tagName && startEl.tagName.toLowerCase().match(/table|img|input|textarea|select/) ){ + range.selectNode(startEl); + }else{ + range.selectNodeContents(startEl); + } + + if( endEl ){ + range.setStart(startEl,0); + range.setEnd(endEl,0); + } + + sel.removeAllRanges(); + sel.addRange(range); + + this.scrollToElement(startEl); + startEl.parentNode.removeChild(startEl); + endEl.parentNode.removeChild(endEl); + + this._iframe.contentWindow.focus(); + } catch (e) {} + } + }; + +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/QuickTag.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/QuickTag.js new file mode 100644 index 0000000000..73b28d9170 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/QuickTag.js @@ -0,0 +1,53 @@ +/*---------------------------------------*\ + Quick Tag Editor Plugin for HTMLArea-3.0 + ----------------------------------------- + author: Cau guanabara + e-mail: caugb@ibest.com.br +\*---------------------------------------*/ + +function QuickTag(editor) { + var cfg = editor.config; + var self = this; + + cfg.registerButton({ + id : "quickeditor", + tooltip : this._lc("Quick Tag Editor"), + image : editor.imgURL("ed_quicktag.gif", "QuickTag"), + textMode : false, + action : function(editor) { + self.buttonPress(editor); + } + }); + cfg.addToolbarElement("quickeditor", "htmlmode", 1); +} + +QuickTag.prototype.buttonPress = function(editor) { +var self = this; +var sel = editor.getSelectedHTML().replace(/(<[^>]*>| |\n|\r)/g,""); +var param = new Object(); +param.editor = editor; + + if(/\w/.test(sel)) + editor._popupDialog("plugin://QuickTag/quicktag", function(p) { self.setTag(editor, p); }, param); + else + alert(this._lc('You have to select some text')); +}; + +QuickTag.prototype.setTag = function(editor, param) { +editor.surroundHTML(param.tagopen,param.tagclose); +}; + +QuickTag._pluginInfo = { +name : "QuickTag", +version : "1.0 - beta", +developer : "Cau Guanabara", +developer_url : "mailto:caugb@ibest.com.br", +c_owner : "Cau Guanabara", +sponsor : "Independent production", +sponsor_url : "http://www.netflash.com.br/gb/HA3-rc1/examples/quick-tag.html", +license : "htmlArea" +}; + +QuickTag.prototype._lc = function(string) { + return Xinha._lc(string, 'QuickTag'); +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/img/ed_quicktag.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/img/ed_quicktag.gif new file mode 100644 index 0000000000..2ae5ce511d Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/img/ed_quicktag.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ch.js new file mode 100644 index 0000000000..62e5bd62d2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ch.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/cz.js new file mode 100644 index 0000000000..c26a48bb67 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/cz.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/da.js new file mode 100644 index 0000000000..2f85401199 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/da.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/de.js new file mode 100644 index 0000000000..af690f1a4d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/de.js @@ -0,0 +1,24 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ATTRIBUTES": "ATTRIBUTES", + "Cancel": "Cancel", + "Colors": "Colors", + "Enter the TAG you want to insert": "Enter the TAG you want to insert", + "No CSS class avaiable": "No CSS classes avaiable", + "OPTIONS": "OPTIONS", + "Ok": "Ok", + "Quick Tag Editor": "Quick TAG Editor", + "TAGs": "TAGs", + "There are some unclosed quote": "There are some unclosed quote", + "This attribute already exists in the TAG": "This attribute already exists in the TAG", + "You have to select some text": "You have to select some text" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ee.js new file mode 100644 index 0000000000..aacd840801 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ee.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/el.js new file mode 100644 index 0000000000..7b4695f16e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/el.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/es.js new file mode 100644 index 0000000000..113ea9e197 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/es.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/eu.js new file mode 100644 index 0000000000..1021bf7f85 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/eu.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/fa.js new file mode 100644 index 0000000000..fd5718935f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/fa.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/fi.js new file mode 100644 index 0000000000..0233ac0781 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/fi.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/fr.js new file mode 100644 index 0000000000..e0752796d4 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/fr.js @@ -0,0 +1,24 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ATTRIBUTES": "ATTRIBUTS", + "Cancel": "Annuler", + "Colors": "Couleurs", + "Enter the TAG you want to insert": "Entrez la balise que vous voulez insérer", + "No CSS class avaiable": "Pas de classe CSS accessible", + "OPTIONS": "OPTIONS", + "Ok": "OK", + "Quick Tag Editor": "Editeur rapide de balise", + "TAGs": "Balises", + "There are some unclosed quote": "Il y a des apostrophes mal fermées", + "This attribute already exists in the TAG": "Cet attribute existe déjà sur cette balise", + "You have to select some text": "Vous devez sélectionner du texte" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/he.js new file mode 100644 index 0000000000..f65ddc7e66 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/he.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/hu.js new file mode 100644 index 0000000000..58d56640cf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/hu.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/it.js new file mode 100644 index 0000000000..2aba43af41 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/it.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ja.js new file mode 100644 index 0000000000..499086caa9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ja.js @@ -0,0 +1,24 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ATTRIBUTES": "属性", + "Cancel": "中止", + "Colors": "色", + "Enter the TAG you want to insert": "挿入したいタグを入力", + "No CSS class avaiable": "CSSクラスがありません", + "OPTIONS": "選択肢", + "Ok": "OK", + "Quick Tag Editor": "クイックタグエディタ", + "TAGs": "タグ", + "There are some unclosed quote": "閉じていない引用符があります", + "This attribute already exists in the TAG": "タグにはすでに同じ属性があります", + "You have to select some text": "テキストを選択しなければなりません" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/lc_base.js new file mode 100644 index 0000000000..06672f9f14 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/lc_base.js @@ -0,0 +1,37 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "',\r\n 'cl': '": "", + "ATTRIBUTES": "", + "Cancel": "", + "Colors": "", + "Enter the TAG you want to insert": "", + "No CSS class avaiable": "", + "OPTIONS": "", + "Ok": "", + "Quick Tag Editor": "", + "TAGs": "", + "There are some unclosed quote": "", + "This attribute already exists in the TAG": "", + "You have to select some text": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/lt.js new file mode 100644 index 0000000000..dbbc674cf2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/lt.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/lv.js new file mode 100644 index 0000000000..0bc68d53fa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/lv.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/nb.js new file mode 100644 index 0000000000..e1f5a04ead --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/nb.js @@ -0,0 +1,24 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ATTRIBUTES": "ATTRIBUTTER", + "Cancel": "Avbryt", + "Colors": "Farger", + "Enter the TAG you want to insert": "Skriv inn taggen du vil ønsker å sette inn", + "No CSS class avaiable": "Ingen CSS klasse tilgjengelig", + "OPTIONS": "EGENSKAPER", + "Ok": "OK", + "Quick Tag Editor": "Kjapp TAGG-Editor", + "TAGs": "TAGGer", + "There are some unclosed quote": "Det mangler et hermetegn", + "This attribute already exists in the TAG": "Denne attributten eksisterer allerede i taggen", + "You have to select some text": "Du må velge noe tekst" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/nl.js new file mode 100644 index 0000000000..68a4cde678 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/nl.js @@ -0,0 +1,24 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ATTRIBUTES": "ATTRIBUTEN", + "Cancel": "Annuleren", + "Colors": "Kleuren", + "Enter the TAG you want to insert": "Voer de Tag naam in", + "No CSS class avaiable": "Geen CSS class beschikbaar", + "OPTIONS": "OPTIES", + "Ok": "Ok", + "Quick Tag Editor": "Quick Tag Editor", + "TAGs": "TAGs", + "There are some unclosed quote": "Er zijn niet gesloten quotes", + "This attribute already exists in the TAG": "Dit attribuut bestaat al in de tag", + "You have to select some text": "Selecteer tekst" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/pl.js new file mode 100644 index 0000000000..92b33afb88 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/pl.js @@ -0,0 +1,24 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ATTRIBUTES": "ATRYBUTY", + "Cancel": "Anuluj", + "Colors": "Kolory", + "Enter the TAG you want to insert": "Podaj TAG, który chcesz wstawić", + "No CSS class avaiable": "Brak dostępnych klas CSS", + "OPTIONS": "OPCJE", + "Ok": "Ok", + "Quick Tag Editor": "Edytor Quick Tag", + "TAGs": "TAGi", + "There are some unclosed quote": "Są jakieś niezamknięte cudzysłowia", + "This attribute already exists in the TAG": "TAG posiada już ten atrybut", + "You have to select some text": "Musisz zaznaczyć tekst." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/pt_br.js new file mode 100644 index 0000000000..db4fdf1f21 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/pt_br.js @@ -0,0 +1,24 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ATTRIBUTES": "ATRIBUTOS", + "Cancel": "Cancelar", + "Colors": "Cores", + "Enter the TAG you want to insert": "Entre com a TAG que deseja inserir", + "No CSS class avaiable": "Não há classes CSS disponível", + "OPTIONS": "OPÇÕES", + "Ok": "Ok", + "Quick Tag Editor": "Editor Rápido", + "TAGs": "TAGs", + "There are some unclosed quote": "Há uma ou mais aspas sem fechamento", + "This attribute already exists in the TAG": "Esse atributo já existe na TAG", + "You have to select some text": "É preciso selecionar algum texto" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ro.js new file mode 100644 index 0000000000..4c4e19f3ca --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ro.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ru.js new file mode 100644 index 0000000000..f569cfdc78 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/ru.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/sh.js new file mode 100644 index 0000000000..603b0c4017 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/sh.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/si.js new file mode 100644 index 0000000000..103d16047e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/si.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/sr.js new file mode 100644 index 0000000000..8d966e6352 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/sr.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/sv.js new file mode 100644 index 0000000000..18b6397ebc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/sv.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/th.js new file mode 100644 index 0000000000..bd36b85ef0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/th.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/tr.js new file mode 100644 index 0000000000..163623dc67 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/tr.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/vn.js new file mode 100644 index 0000000000..ec2d77979a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/lang/vn.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/popups/quicktag.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/popups/quicktag.html new file mode 100644 index 0000000000..48cc17018f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/popups/quicktag.html @@ -0,0 +1,354 @@ + + +Quick Tag Editor + + + + + + +
    +
    Quick Tag Editor
    +
    + + + + + + +
    + < + + > +
    +
    +
    +
    + + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/tag-lib.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/tag-lib.js new file mode 100644 index 0000000000..27cdb1082a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/QuickTag/tag-lib.js @@ -0,0 +1,356 @@ +/* + TAG Library for QuickTag Plugin + ------------------------------- + + allTags = All tags that appears in the first dropdown ('TAGS') {'caption': 'value'} + tagLib = The tags with options (just to check if current TAG have options) {'[TAG]': true} + subTagLib = Complements for some tags that needs it (TABLE) + {'[TAG]': {'op': 'after tag open', 'cl': 'before tag close'}} + opTag_all = Common attributes to all TAGS {'caption': 'value'} + opAtt_all = Options for the common attributes {'attribute': {'caption': 'value'}} + opTag_[TAG] = Attributes for [TAG] {'caption': 'value'} + opAtt_[TAG] = Options for the [TAG] attributes {'attribute': {'caption': 'value'}} + +*/ + +var allTags = { +'a': 'a', +'a (full)': 'a href="" target=""', +'address': 'address', +'b': 'b', +'big': 'big', +'blockquote': 'blockquote', +'code': 'code', +'div': 'div', +'em': 'em', +'fieldset': 'fieldset', +'font': 'font', +'font (full)': 'font face="" size="" color=""', +'h1': 'h1', +'h2': 'h2', +'h3': 'h3', +'h4': 'h4', +'h5': 'h5', +'h6': 'h6', +'i': 'i', +'legend': 'legend', +'li': 'li', +'ol': 'ol', +'ul': 'ul', +'p': 'p', +'pre': 'pre', +'small': 'small', +'span': 'span', +'strong': 'strong', +'sub': 'sub', +'sup': 'sup', +'table': 'table' +}; + +// tags with options +var tagLib = { +'a': true, +'div': true, +'font': true, +'h1': true, +'h2': true, +'h3': true, +'h4': true, +'h5': true, +'h6': true, +'p': true, +'table': true +}; +// tags that needs some complement v-- Avoid lc_parse_strings.php +var subTagLib = {'table': {'op': '', + 'cl': ''} +}; + +var opTag_a = { +'href': 'href="', +'name': 'name="', +'target': 'target="' +}; +var opAtt_a = { +'href': {'http://': 'http://', + 'https://': 'https://', + 'ftp://': 'ftp://', + 'mailto:': 'mailto:', + '#': '#"'}, +'target': {'_top': '_top"', + '_self': '_self"', + '_parent': '_parent"', + '_blank': '_blank"'} +}; + +var opTag_font = { +'face': 'face="', +'size': 'size="', +'color': 'color="' +}; +var opAtt_font = { +'face': {'Verdana': 'Verdana"', + 'Arial': 'Arial"', + 'Tahoma': 'Tahoma"', + 'Courier New': 'Courier New"', + 'Times New Roman': 'Times New Roman"'}, +'size': {'1': '1"','2': '2"','3': '3"','4': '4"','5': '5"','6': '6"', + '+1': '+1"','+2': '+2"','+3': '+3"','+4': '+4"','+5': '+5"','+6': '+6"', + '-1': '-1"','-2': '-2"','-3': '-3"','-4': '-4"','-5': '-5"','-6': '-6"'} +}; + +var opTag_div = { +'align': 'align="' +}; +var opAtt_div = { +'align': {'center': 'center"', + 'left': 'left"', + 'right': 'right"', + 'justify': 'justify"'} +}; + +var opTag_h = { +'align': 'align="' +}; +var opAtt_h = { +'align': {'center': 'center"', + 'left': 'left"', + 'right': 'right"', + 'justify': 'justify"'} +}; + +var opTag_p = { +'align': 'align="' +}; +var opAtt_p = { +'align': {'center': 'center"', + 'left': 'left"', + 'right': 'right"', + 'justify': 'justify"'} +}; + +var opTag_table = { +'align': 'align="', +'width': 'width="', +'height': 'height="', +'cellpadding': 'cellpadding="', +'cellspacing': 'cellspacing="', +'background': 'background="', +'bgcolor': 'bgcolor="', +'border': 'border="', +'bordercolor': 'bordercolor="', +'bordercolorlight': 'bordercolorlight="', +'bordercolordark': 'bordercolordark="' +}; +var opAtt_table = { +'align': {'center': 'center"', + 'left': 'left"', + 'right': 'right"'} +}; + +// for all tags +var opTag_all = { +'class': 'class="', +'dir': 'dir="', +'id': 'id="', +'lang': 'lang="', +'onFocus': 'onFocus="', +'onBlur': 'onBlur="', +'onClick': 'onClick="', +'onDblClick': 'onDblClick="', +'onMouseDown': 'onMouseDown="', +'onMouseUp': 'onMouseUp="', +'onMouseOver': 'onMouseOver="', +'onMouseMove': 'onMouseMove="', +'onMouseOut': 'onMouseOut="', +'onKeyPress': 'onKeyPress="', +'onKeyDown': 'onKeyDown="', +'onKeyUp': 'onKeyUp="', +'style': 'style="', +'title': 'title='+'"' // // <-- Avoid lc_parse_strings.php +}; +var opAtt_all = { +'class': {}, +'dir': {'rtl': 'rtl"','ltr': 'ltr"'}, +'lang': {'Afrikaans ': 'af"', + 'Albanian ': 'sq"', + 'Arabic ': 'ar"', + 'Basque ': 'eu"', + 'Breton ': 'br"', + 'Bulgarian ': 'bg"', + 'Belarusian ': 'be"', + 'Catalan ': 'ca"', + 'Chinese ': 'zh"', + 'Croatian ': 'hr"', + 'Czech ': 'cs"', + 'Danish ': 'da"', + 'Dutch ': 'nl"', + 'English ': 'en"', + 'Estonian ': 'et"', + 'Faeroese ': 'fo"', + 'Farsi ': 'fa"', + 'Finnish ': 'fi"', + 'French ': 'fr"', + 'Gaelic ': 'gd"', + 'German ': 'de"', + 'Greek ': 'el"', + 'Hebrew ': 'he"', + 'Hindi ': 'hi"', + 'Hungarian ': 'hu"', + 'Icelandic ': 'is"', + 'Indonesian ': 'id"', + 'Italian ': 'it"', + 'Japanese ': 'ja"', + 'Korean ': 'ko"', + 'Latvian ': 'lv"', + 'Lithuanian ': 'lt"', + 'Macedonian ': 'mk"', + 'Malaysian ': 'ms"', + 'Maltese ': 'mt"', + 'Norwegian ': 'no"', + 'Polish ': 'pl"', + 'Portuguese ': 'pt"', + 'Rhaeto-Romanic ': 'rm"', + 'Romanian ': 'ro"', + 'Russian ': 'ru"', + 'Sami ': 'sz"', + 'Serbian ': 'sr"', + 'Setswana ': 'tn"', + 'Slovak ': 'sk"', + 'Slovenian ': 'sl"', + 'Spanish ': 'es"', + 'Sutu ': 'sx"', + 'Swedish ': 'sv"', + 'Thai ': 'th"', + 'Tsonga ': 'ts"', + 'Turkish ': 'tr"', + 'Ukrainian ': 'uk"', + 'Urdu ': 'ur"', + 'Vietnamese ': 'vi"', + 'Xhosa ': 'xh"', + 'Yiddish ': 'yi"', + 'Zulu': 'zu"'}, +'style': {'azimuth': 'azimuth: ', + 'background': 'background: ', + 'background-attachment': 'background-attachment: ', + 'background-color': 'background-color: ', + 'background-image': 'background-image: ', + 'background-position': 'background-position: ', + 'background-repeat': 'background-repeat: ', + 'border': 'border: ', + 'border-bottom': 'border-bottom: ', + 'border-left': 'border-left: ', + 'border-right': 'border-right: ', + 'border-top': 'border-top: ', + 'border-bottom-color': 'border-bottom-color: ', + 'border-left-color': 'border-left-color: ', + 'border-right-color': 'border-right-color: ', + 'border-top-color': 'border-top-color: ', + 'border-bottom-style': 'border-bottom-style: ', + 'border-left-style': 'border-left-style: ', + 'border-right-style': 'border-right-style: ', + 'border-top-style': 'border-top-style: ', + 'border-bottom-width': 'border-bottom-width: ', + 'border-left-width': 'border-left-width: ', + 'border-right-width': 'border-right-width: ', + 'border-top-width': 'border-top-width: ', + 'border-collapse': 'border-collapse: ', + 'border-color': 'border-color: ', + 'border-style': 'border-style: ', + 'border-width': 'border-width: ', + 'bottom': 'bottom: ', + 'caption-side': 'caption-side: ', + 'cell-spacing': 'cell-spacing: ', + 'clear': 'clear: ', + 'clip': 'clip: ', + 'color': 'color: ', + 'column-span': 'column-span: ', + 'content': 'content: ', + 'cue': 'cue: ', + 'cue-after': 'cue-after: ', + 'cue-before': 'cue-before: ', + 'cursor': 'cursor: ', + 'direction': 'direction: ', + 'display': 'display: ', + 'elevation': 'elevation: ', + 'filter': 'filter: ', + 'float': 'float: ', + 'font-family': 'font-family: ', + 'font-size': 'font-size: ', + 'font-size-adjust': 'font-size-adjust: ', + 'font-style': 'font-style: ', + 'font-variant': 'font-variant: ', + 'font-weight': 'font-weight: ', + 'height': 'height: ', + '!important': '!important: ', + 'left': 'left: ', + 'letter-spacing': 'letter-spacing: ', + 'line-height': 'line-height: ', + 'list-style': 'list-style: ', + 'list-style-image': 'list-style-image: ', + 'list-style-position': 'list-style-position: ', + 'list-style-type': 'list-style-type: ', + 'margin': 'margin: ', + 'margin-bottom': 'margin-bottom: ', + 'margin-left': 'margin-left: ', + 'margin-right': 'margin-right: ', + 'margin-top': 'margin-top: ', + 'marks': 'marks: ', + 'max-height': 'max-height: ', + 'min-height': 'min-height: ', + 'max-width': 'max-width: ', + 'min-width': 'min-width: ', + 'orphans': 'orphans: ', + 'overflow': 'overflow: ', + 'padding': 'padding: ', + 'padding-bottom': 'padding-bottom: ', + 'padding-left': 'padding-left: ', + 'padding-right': 'padding-right: ', + 'padding-top': 'padding-top: ', + 'page-break-after': 'page-break-after: ', + 'page-break-before': 'page-break-before: ', + 'pause': 'pause: ', + 'pause-after': 'pause-after: ', + 'pause-before': 'pause-before: ', + 'pitch': 'pitch: ', + 'pitch-range': 'pitch-range: ', + 'play-during': 'play-during: ', + 'position': 'position: ', + 'richness': 'richness: ', + 'right': 'right: ', + 'row-span': 'row-span: ', + 'size': 'size: ', + 'speak': 'speak: ', + 'speak-date': 'speak-date: ', + 'speak-header': 'speak-header: ', + 'speak-numeral': 'speak-numeral: ', + 'speak-punctuation': 'speak-punctuation: ', + 'speak-time': 'speak-time: ', + 'speech-rate': 'speech-rate: ', + 'stress': 'stress: ', + 'table-layout': 'table-layout: ', + 'text-align': 'text-align: ', + 'text-decoration': 'text-decoration: ', + 'text-indent': 'text-indent: ', + 'text-shadow': 'text-shadow: ', + 'text-transform': 'text-transform: ', + 'top': 'top: ', + 'vertical-align': 'vertical-align: ', + 'visibility': 'visibility: ', + 'voice-family': 'voice-family: ', + 'volume': 'volume: ', + 'white-space': 'white-space: ', + 'widows': 'widows: ', + 'width': 'width: ', + 'word-spacing': 'word-spacing: ', + 'z-index': 'z-index: ' } +}; + +// add the common items to all objects +for(var i in tagLib) { +i = i.replace(/^h[1-6]$/,"h"); // h1 .. h6 + for(var j in opTag_all) + eval('opTag_'+i+'["'+j+'"] = opTag_all["'+j+'"];'); + for(var j in opAtt_all) + eval('opAtt_'+i+'["'+j+'"] = opAtt_all["'+j+'"];'); +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveOnBlur/SaveOnBlur.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveOnBlur/SaveOnBlur.js new file mode 100644 index 0000000000..8ca5679d1e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveOnBlur/SaveOnBlur.js @@ -0,0 +1,47 @@ +/** Save the content of the editor to the text area when blurring (losing focus). + * + * @author Peter Siewert + * @see Ticket #1433 + */ + +SaveOnBlur._pluginInfo = { + name:"SaveOnBlur", + version:"1.0", + developer:"Peter Siewert", + developer_url:"http://xinha.org", + sponsor:"", + sponsor_url:"", + license:"htmlArea" +}; + +function SaveOnBlur(editor){ + this.editor=editor; +} + +SaveOnBlur.prototype.onKeyPress=function(){ + this.queue_xinha_update_textarea(); + return false; +}; + +SaveOnBlur.prototype.onMouseDown=function(){ + this.queue_xinha_update_textarea(); + return false; +}; + +SaveOnBlur.prototype.queue_xinha_update_textarea = function() +{ + var blurry = this; + + if(!this._attach_blur) + { + + Xinha._addEvent(this.editor._iframe, 'blur', function(){ blurry.xinha_update_textarea(); }); // IE + Xinha._addEvent(this.editor._doc, 'blur', function(){ blurry.xinha_update_textarea(); }); // GECKO + this._attach_blur = 1; + } +} + +SaveOnBlur.prototype.xinha_update_textarea = function() +{ + this.editor._textArea.value=this.editor.outwardHtml(this.editor.getHTML()); +} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/README.txt b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/README.txt new file mode 100644 index 0000000000..22a71d8186 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/README.txt @@ -0,0 +1,15 @@ +SaveSubmit for Xinha + +developed by Raimund Meyer (ray) xinha @ raimundmeyer.de + +Registers a button for submiting the Xinha form using asynchronous +postback for sending the data to the server + +Usage: This should be a drop-in replacement for a normal submit button. +While saving a message is displayed to inform the user what's going on. +On successful transmission the output of the target script is shown, so it should print some information +about the success of saving. + +ATTENTION: The data sent by this method is always UTF-8 encoded, regardless of the actual charset used. So, if you +are using a different encoding you have to convert on the server side. + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/SaveSubmit.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/SaveSubmit.js new file mode 100644 index 0000000000..8bebc6f613 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/SaveSubmit.js @@ -0,0 +1,159 @@ +/*------------------------------------------*\ +SaveSubmit for Xinha +____________________ + +See README.txt for information + +\*------------------------------------------*/ + +function SaveSubmit(editor) { + this.editor = editor; + this.changed = false; + var self = this; + var cfg = editor.config; + this.textarea = this.editor._textArea; + + cfg.registerIcon('savesubmitchanged', Xinha.getPluginDir("SaveSubmit")+"/img/ed_save_red.gif"); + cfg.registerIcon('savesubmitunchanged', Xinha.getPluginDir("SaveSubmit")+"/img/ed_save_green.gif"); + + cfg.registerButton({ + id : "savesubmit", + tooltip : self._lc("Save"), + image : cfg.iconList.savesubmitunchanged, + textMode : false, + action : function() { + self.save(); + } + }); + cfg.addToolbarElement("savesubmit", "popupeditor", -1); +} + +SaveSubmit.prototype._lc = function(string) { + return Xinha._lc(string, 'SaveSubmit'); +} + +SaveSubmit._pluginInfo = { + name : "SaveSubmit", + version : "1.0", + developer : "Raimund Meyer", + developer_url : "http://x-webservice.net", + c_owner : "Raimund Meyer", + sponsor : "", + sponsor_url : "", + license : "htmlArea" +} + +SaveSubmit.prototype.onKeyPress = function(ev) { + if ( ev.ctrlKey && this.editor.getKey(ev) == 's') { + this.save(this.editor); + Xinha._stopEvent(ev); + return true; + } + else { + if (!this.changed) { + if (this.getChanged()) this.setChanged(); + return false; + } + } +} +SaveSubmit.prototype.onExecCommand = function (cmd) { + if (this.changed && cmd == 'undo') { + if (this.initial_html == this.editor.getInnerHTML()) this.setUnChanged(); + return false; + } +} +SaveSubmit.prototype.onUpdateToolbar = function () { + if (!this.initial_html) this.initial_html = this.editor.getInnerHTML(); + if (!this.changed) { + if (this.getChanged()) this.setChanged(); + return false; + } +} +SaveSubmit.prototype.getChanged = function() { + if (this.initial_html === null) this.initial_html = this.editor.getInnerHTML(); + if (this.initial_html != this.editor.getInnerHTML() && this.changed == false) { + this.changed = true; + return true; + } + else return false; +} +SaveSubmit.prototype.setChanged = function() { + this.editor._toolbarObjects.savesubmit.swapImage(this.editor.config.iconList.savesubmitchanged); + this.editor.updateToolbar(); +} +SaveSubmit.prototype.setUnChanged = function() { + this.changed = false; + this.editor._toolbarObjects.savesubmit.swapImage(this.editor.config.iconList.savesubmitunchanged); +} +SaveSubmit.prototype.changedReset = function() { + this.initial_html = null; + this.setUnChanged(); +} + +SaveSubmit.prototype.save = function() { + this.buildMessage(); + var editor = this.editor; + var self =this; + var form = editor._textArea.form; + form.onsubmit(); + + var name, value, content =''; + + for (var i=0;i0) ? '&' : '') + form.elements[i].name + '=' + encodeURIComponent(form.elements[i].value); + } + var url = editor._textArea.form.action || window.location.href; + Xinha._postback(url, content, function(getback) { + + if (getback) { + self.setMessage(getback); + //self.setMessage(self._lc("Ready")); + self.changedReset(); + } + removeMessage = function() { self.removeMessage()} ; + window.setTimeout("removeMessage()",1000); + }); +} + +SaveSubmit.prototype.setMessage = function(string) { + var textarea = this.textarea; + if ( !document.getElementById("message_sub_" + textarea.id)) { return ; } + var elt = document.getElementById("message_sub_" + textarea.id); + elt.innerHTML = Xinha._lc(string, 'SaveSubmit'); +} + +SaveSubmit.prototype.removeMessage = function() { + var textarea = this.textarea; + if (!document.getElementById("message_" + textarea.id)) { return ; } + document.body.removeChild(document.getElementById("message_" + textarea.id)); +} + +//ripped mokhet's loading message function +SaveSubmit.prototype.buildMessage = function() { + + var textarea = this.textarea; + var htmlarea = this.editor._htmlArea; + var loading_message = document.createElement("div"); + loading_message.id = "message_" + textarea.id; + loading_message.className = "loading"; + loading_message.style.width = htmlarea.offsetWidth +'px' ;//(this.editor._iframe.offsetWidth != 0) ? this.editor._iframe.offsetWidth +'px' : this.editor._initial_ta_size.w; + + loading_message.style.left = Xinha.findPosX(htmlarea) + 'px'; + loading_message.style.top = (Xinha.findPosY(htmlarea) + parseInt(htmlarea.offsetHeight) / 2) - 50 + 'px'; + + var loading_main = document.createElement("div"); + loading_main.className = "loading_main"; + loading_main.id = "loading_main_" + textarea.id; + loading_main.appendChild(document.createTextNode(this._lc("Saving..."))); + + var loading_sub = document.createElement("div"); + loading_sub.className = "loading_sub"; + loading_sub.id = "message_sub_" + textarea.id; + loading_sub.appendChild(document.createTextNode(this._lc("in progress"))); + loading_message.appendChild(loading_main); + loading_message.appendChild(loading_sub); + document.body.appendChild(loading_message); +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/img/ed_save_green.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/img/ed_save_green.gif new file mode 100644 index 0000000000..6804a744c9 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/img/ed_save_green.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/img/ed_save_red.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/img/ed_save_red.gif new file mode 100644 index 0000000000..e4289b4e31 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/img/ed_save_red.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/da.js new file mode 100644 index 0000000000..ed56e38bae --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/da.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Save": "Gem" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/de.js new file mode 100644 index 0000000000..dc8a82db1b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/de.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Ready": "Fertig", + "Save": "Speichern", + "Saving...": "Speichern...", + "in progress": "in Arbeit" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/es.js new file mode 100644 index 0000000000..4f211f9660 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/es.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Save": "Guardar" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/fr.js new file mode 100644 index 0000000000..c8b319744b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/fr.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Ready": "Prêt", + "Save": "Enregistrer", + "Saving...": "Enregistrement...", + "in progress": "en cours" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/ja.js new file mode 100644 index 0000000000..e0169897fe --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/ja.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Ready": "レディ", + "Save": "保存", + "Saving...": "保存中...", + "in progress": "処理中" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/lc_base.js new file mode 100644 index 0000000000..d6b79615c4 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/lc_base.js @@ -0,0 +1,28 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Ready": "", + "Save": "", + "Saving...": "", + "in progress": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/nb.js new file mode 100644 index 0000000000..70fa61ee02 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/nb.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Save": "Lagre" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/nl.js new file mode 100644 index 0000000000..d8afa11b07 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/nl.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Ready": "Klaar", + "Save": "Opslaan", + "Saving...": "Bezig met opslaan...", + "in progress": "bezig met opslaan..." +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/pl.js new file mode 100644 index 0000000000..aae6880a91 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/pl.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Save": "Zapisz" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/pt_br.js new file mode 100644 index 0000000000..63470058bb --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/pt_br.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Ready": "Pronto", + "Save": "Salvar", + "Saving...": "Gravando...", + "in progress": "em processo" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/ru.js new file mode 100644 index 0000000000..6f24903f41 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SaveSubmit/lang/ru.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Ready": "Готово", + "Save": "Сохранить", + "Saving...": "Сохранение...", + "in progress": "пожалуйста, ждите" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/SetId.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/SetId.js new file mode 100644 index 0000000000..947a33fbcf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/SetId.js @@ -0,0 +1,88 @@ +function SetId(editor) { + this.editor = editor; + var cfg = editor.config; + var self = this; + + // register the toolbar buttons provided by this plugin + cfg.registerButton({ + id : "setid", + tooltip : this._lc("Set Id and Name"), + image : editor.imgURL("set-id.gif", "SetId"), + textMode : false, + action : function(editor) { + self.buttonPress(editor); + } + }); + cfg.addToolbarElement("setid", "createlink", 1); +} + +SetId._pluginInfo = { + name : "SetId", + version : "2.0", + developer : "Udo Schmal", + developer_url : "http://www.schaffrath-neuemedien.de", + c_owner : "Udo Schmal", + sponsor : "L.N.Schaffrath NeueMedien", + sponsor_url : "http://www.schaffrath-neuemedien.de", + license : "htmlArea" +}; + +SetId.prototype._lc = function(string) { + return Xinha._lc(string, 'SetId'); +}; + + +SetId.prototype.onGenerate = function() { + this.editor.addEditorStylesheet(Xinha.getPluginDir("SetId") + '/set-id.css'); +}; + +SetId.prototype.buttonPress = function(editor) { + var outparam = null; + var html = editor.getSelectedHTML(); + var sel = editor._getSelection(); + var range = editor._createRange(sel); + var node = editor._activeElement(sel); + if (node) + outparam = { name : node.id }; + else + outparam = { name : '' }; + + editor._popupDialog( "plugin://SetId/set_id", function( param ) { + if ( param ) { + var name = param["name"]; + if (name == "" || name == null) { + if (node) { + node.removeAttribute("name"); + node.removeAttribute("id"); + node.removeAttribute("title"); + if (node.className == "hasid") { + node.removeAttribute("class"); + } + } + return; + } + try { + var doc = editor._doc; + if (!node) { + node = doc.createElement("span"); + node.id = name; + node.name = name; + node.title = name; + node.className = "hasid"; + node.innerHTML = html; + if (Xinha.is_ie) { + range.pasteHTML(node.outerHTML); + } else { + editor.insertNodeAtSelection(node); + } + } else { + node.id = name; + node.name = name; + node.title = name; + node.className = "hasid"; + } + } + catch (e) { } + } + }, outparam); +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/img/placeholder.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/img/placeholder.gif new file mode 100644 index 0000000000..2c342777f5 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/img/placeholder.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/img/set-id.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/img/set-id.gif new file mode 100644 index 0000000000..4f6ee900f4 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/img/set-id.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ch.js new file mode 100644 index 0000000000..9d78e4459e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ch.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消", + "OK": "好" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/cz.js new file mode 100644 index 0000000000..36b99297ee --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/cz.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/da.js new file mode 100644 index 0000000000..20fc0d0748 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/da.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/de.js new file mode 100644 index 0000000000..dfef6007f8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/de.js @@ -0,0 +1,19 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Abbrechen", + "Delete": "Löschen", + "OK": "OK", + "Set Id and Name": "Objekt ID und Name einfügen", + "__OBSOLETE__": { + "Name/Id": "Name (ID)" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ee.js new file mode 100644 index 0000000000..ba916e9d88 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ee.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/el.js new file mode 100644 index 0000000000..f6e006c463 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/el.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση", + "OK": "Εντάξει" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/es.js new file mode 100644 index 0000000000..95fd8cb251 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/es.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "Delete": "Suprimir", + "OK": "Aceptar" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/eu.js new file mode 100644 index 0000000000..3bc9dbb122 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/eu.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi", + "OK": "Ados" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/fa.js new file mode 100644 index 0000000000..84e7f7e297 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/fa.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف", + "OK": "بله" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/fi.js new file mode 100644 index 0000000000..82552b9755 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/fi.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta", + "OK": "Hyväksy" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/fr.js new file mode 100644 index 0000000000..d41552449a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/fr.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuler", + "Delete": "Supprimer", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/he.js new file mode 100644 index 0000000000..a602f7cac8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/he.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול", + "OK": "אישור" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/hu.js new file mode 100644 index 0000000000..b38528d99d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/hu.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem", + "OK": "Rendben" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/it.js new file mode 100644 index 0000000000..a0acb45476 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/it.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ja.js new file mode 100644 index 0000000000..11586b0f83 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ja.js @@ -0,0 +1,21 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "中止", + "Delete": "削除", + "ID/Name:": "ID/名前:", + "OK": "OK", + "Set ID/Name": "IDと名前の設定", + "Set Id and Name": "IDと名前の設定", + "__OBSOLETE__": { + "Name/Id": "名前/ID" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/lc_base.js new file mode 100644 index 0000000000..094f2b6fc8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/lc_base.js @@ -0,0 +1,31 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Cancel": "", + "Delete": "", + "ID/Name:": "", + "OK": "", + "Set ID/Name": "", + "Set Id and Name": "", + "Set Id/Name": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/lt.js new file mode 100644 index 0000000000..d118909d22 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/lt.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/lv.js new file mode 100644 index 0000000000..f83d5d3efc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/lv.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt", + "OK": "Labi" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/nb.js new file mode 100644 index 0000000000..70a10d9462 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/nb.js @@ -0,0 +1,19 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "Delete": "Slett", + "OK": "OK", + "Set Id and Name": "Sett ID og navn", + "__OBSOLETE__": { + "Name/Id": "Navn (ID)" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/nl.js new file mode 100644 index 0000000000..1cf9207ad3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/nl.js @@ -0,0 +1,21 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuleren", + "Delete": "Verwijderen", + "ID/Name:": "ID/Naam:", + "OK": "OK", + "Set ID/Name": "ID/Naam instellen", + "Set Id and Name": "ID en Naam instellen", + "__OBSOLETE__": { + "Name/Id": "Naam/ID" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/pl.js new file mode 100644 index 0000000000..5b43de25c6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/pl.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anuluj", + "Delete": "Usuń", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/pt_br.js new file mode 100644 index 0000000000..1d7b932da3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/pt_br.js @@ -0,0 +1,22 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "Delete": "Apagar", + "ID/Name:": "ID/Nome:", + "OK": "OK", + "Set ID/Name": "Definir ID/Nome", + "Set Id and Name": "Definir Id e Nome", + "Set Id/Name": "Definir Id/Nome", + "__OBSOLETE__": { + "Name/Id": "Nome/Id" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ro.js new file mode 100644 index 0000000000..9d6e1c3d35 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ro.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă", + "OK": "Acceptă" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ru.js new file mode 100644 index 0000000000..fad59f2f64 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/ru.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/sh.js new file mode 100644 index 0000000000..62e76f77ed --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/sh.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/si.js new file mode 100644 index 0000000000..7674892b4c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/si.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči", + "OK": "V redu" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/sr.js new file mode 100644 index 0000000000..b7ee6f5c95 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/sr.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/sv.js new file mode 100644 index 0000000000..98336d80fa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/sv.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/th.js new file mode 100644 index 0000000000..9da9c8d94d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/th.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก", + "OK": "ตกลง" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/tr.js new file mode 100644 index 0000000000..1d2c8b9619 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/tr.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal", + "Delete": "Sil", + "OK": "Tamam" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/vn.js new file mode 100644 index 0000000000..2d82e026dc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/lang/vn.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy", + "OK": "Đồng ý" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/popups/set_id.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/popups/set_id.html new file mode 100644 index 0000000000..1ae59e40d3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/popups/set_id.html @@ -0,0 +1,58 @@ + + + Set Id/Name + + + + + + +
    Set ID/Name
    +
    + + + + + +
    ID/Name:
    + +
    + + + +
    +
    + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/set-id.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/set-id.css new file mode 100644 index 0000000000..01abaa0617 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SetId/set-id.css @@ -0,0 +1,7 @@ +.hasid { + background-image: url(img/set-id.gif); + background-repeat: no-repeat; + background-position: left top; + padding-left: 19px; + border: 1px dotted blue; +} diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/SmartReplace.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/SmartReplace.js new file mode 100644 index 0000000000..e299084a84 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/SmartReplace.js @@ -0,0 +1,369 @@ +/*------------------------------------------*\ + SmartReplace for Xinha + _______________________ + +\*------------------------------------------*/ + +function SmartReplace(editor) { + this.editor = editor; + this._wasShowing = false; // Set true when switching to textmode if the dialog is visible, so it can be restored + var cfg = editor.config; + var self = this; + + cfg.registerButton + ({ + id : "smartreplace", + tooltip : this._lc("SmartReplace"), + image : [_editor_url +'iconsets/Tango/ed_buttons_main.png',3,8], + textMode : false, + action : function(e, objname, obj) { self.buttonPress(null, obj); } + }); + cfg.addToolbarElement("smartreplace", "htmlmode", 1); +} + +SmartReplace._pluginInfo = { + name : "SmartReplace", + version : "1.0", + developer : "Raimund Meyer", + developer_url : "http://x-webservice.net", + c_owner : "Raimund Meyer", + sponsor : "", + sponsor_url : "", + license : "htmlArea" +}; + +SmartReplace.prototype._lc = function(string) { + return Xinha._lc(string, 'SmartReplace'); +}; + +Xinha.Config.prototype.SmartReplace = +{ + 'defaultActive' : true, + 'quotes' : null//[String.fromCharCode(187),String.fromCharCode(171),String.fromCharCode(8250),String.fromCharCode(8249)] +} +SmartReplace.prototype.toggleActivity = function(newState) +{ + if (typeof newState != 'undefined') + { + this.active = newState; + } + else + { + this.active = this.active ? false : true; + } + this.editor._toolbarObjects.smartreplace.state("active", this.active); +} + +SmartReplace.prototype.onUpdateToolbar = function() { + this.editor._toolbarObjects.smartreplace.state("active", this.active); +} + +SmartReplace.prototype.onGenerate = function() { + this.active = this.editor.config.SmartReplace.defaultActive; + this.editor._toolbarObjects.smartreplace.state("active", this.active); + + var self = this; + Xinha._addEvent( + self.editor._doc, + "keypress", + function (event) + { + return self.keyEvent(Xinha.is_ie ? self.editor._iframe.contentWindow.event : event); + }); + + var quotes = this.editor.config.SmartReplace.quotes; + + if (quotes && typeof quotes == 'object') + { + this.openingQuotes = quotes[0]; + this.closingQuotes = quotes[1]; + this.openingQuote = quotes[2]; + this.closingQuote = quotes[3]; + } + else + { + this.openingQuotes = this._lc("OpeningDoubleQuotes"); + this.closingQuote = this._lc("ClosingSingleQuote"); + this.closingQuotes = this._lc("ClosingDoubleQuotes"); + this.openingQuote = this._lc("OpeningSingleQuote"); + } + + if (this.openingQuotes == 'OpeningDoubleQuotes') //If nothing else is defined, English style as default + { + this.openingQuotes = String.fromCharCode(8220); + this.closingQuotes = String.fromCharCode(8221); + this.openingQuote = String.fromCharCode(8216); + this.closingQuote = String.fromCharCode(8217); + } +}; + +SmartReplace.prototype.keyEvent = function(ev) +{ + if ( !this.active) return true; + var editor = this.editor; + var charCode = Xinha.is_ie ? ev.keyCode : ev.which; + + var key = String.fromCharCode(charCode); + + if ( key == '"' || key == "'") + { + Xinha._stopEvent(ev); + return this.smartQuotes(key); + } + if (charCode == 32) //space bar + { + return this.smartReplace(ev, 2, /^\s-/, ' '+String.fromCharCode(8211), false); // space-space -> dash + } + if ( key == '.' ) // ... -> ellipsis + { + return this.smartReplace(ev, 2, /\.\./, String.fromCharCode(8230), true); + } + return true; +} + +SmartReplace.prototype.smartQuotes = function(kind) +{ + if (kind == "'") + { + var opening = this.openingQuote; + var closing = this.closingQuote; + } + else + { + var opening = this.openingQuotes; + var closing = this.closingQuotes; + } + + var editor = this.editor; + + var sel = editor.getSelection(); + + if (Xinha.is_ie) + { + var r = editor.createRange(sel); + if (r.text !== '') + { + r.text = ''; + } + r.moveStart('character', -1); + + if(r.text.match(/\S/)) + { + r.moveStart('character', +1); + r.text = closing; + } + else + { + r.moveStart('character', +1); + r.text = opening; + } + } + else + { + var r = editor.createRange(sel); + + if (!r.collapsed) + { + editor.insertNodeAtSelection(document.createTextNode('')); + } + if (r.startOffset > 0) r.setStart(r.startContainer, r.startOffset -1); + + + if(r.toString().match(/[^\s\xA0]/)) + {; + r.collapse(false); + editor.insertNodeAtSelection(document.createTextNode(closing)); + } + else + { + editor.insertNodeAtSelection(document.createTextNode(r.toString()+opening)); + } + editor.getSelection().collapseToEnd(); + } + return false; +} + +SmartReplace.prototype.smartReplace = function(ev, lookback, re, replace, stopEvent) +{ + var editor = this.editor; + var sel = this.editor.getSelection(); + var r = this.editor.createRange(sel); + + if (Xinha.is_ie) + { + r.moveStart('character', -lookback); + + if(r.text.match(re)) + { + r.text = replace; + if (stopEvent) + { + Xinha._stopEvent(ev); + return false + } + } + } + else + { + if (r.startOffset > 1) r.setStart(r.startContainer, r.startOffset -lookback); + + if(r.toString().match(re)) + { + this.editor.insertNodeAtSelection(document.createTextNode(replace)); + r.deleteContents(); + r.collapse(true); + if (stopEvent) + { + Xinha._stopEvent(ev); + return false + } + } + editor.getSelection().collapseToEnd(); + } + return true; +} + +SmartReplace.prototype.replaceAll = function() +{ + var doubleQuotes = [ + '"', + String.fromCharCode(8220), + String.fromCharCode(8221), + String.fromCharCode(8222), + String.fromCharCode(187), + String.fromCharCode(171) + + ]; + var singleQuotes = [ + "'", + String.fromCharCode(8216), + String.fromCharCode(8217), + String.fromCharCode(8218), + String.fromCharCode(8250), + String.fromCharCode(8249) + ]; + + var html = this.editor.getHTML(); + var reOpeningDouble = new RegExp ('(\\s|^|>)('+doubleQuotes.join('|')+')(\\S)','g'); + html = html.replace(reOpeningDouble,'$1'+this.openingQuotes+'$3'); + + var reOpeningSingle = new RegExp ('(\\s|^|>)('+singleQuotes.join('|')+')(\\S)','g'); + html = html.replace(reOpeningSingle,'$1'+this.openingQuote+'$3'); + + var reClosingDouble = new RegExp ('(\\S)('+doubleQuotes.join('|')+')','g'); + html = html.replace(reClosingDouble,'$1'+this.closingQuotes); + + var reClosingSingle = new RegExp ('(\\S)('+singleQuotes.join('|')+')','g'); + html = html.replace(reClosingSingle,'$1'+this.closingQuote); + + var reDash = new RegExp ('( | )(-)( | )','g'); + html = html.replace(reDash,' '+String.fromCharCode(8211)+' '); + + this.editor.setHTML(html); +} + +SmartReplace.prototype.buttonPress = function(opts, obj) +{ + var self = this; + + if ( this.dialog.rootElem.style.display != 'none') + { + return this.dialog.hide(); + } + var doOK = function() + { + var opts = self.dialog.hide(); + self.toggleActivity((opts.enable) ? true : false); + if (opts.convert) + { + self.replaceAll(); + self.dialog.getElementById("convert").checked = false; + } + } + var inputs = + { + enable : self.active ? "on" : '', + convert: '' + }; + this.show(inputs, doOK); +}; + +SmartReplace.prototype.onGenerateOnce = function() +{ + this._prepareDialog(); +}; + +SmartReplace.prototype._prepareDialog = function() +{ + var self = this; + var editor = this.editor; + + if(!this.html) + { + Xinha._getback( Xinha.getPluginDir("SmartReplace") + '/dialog.html', function(getback) { self.html = getback; self._prepareDialog(); }); + return; + } + + // Now we have everything we need, so we can build the dialog. + this.dialog = new Xinha.Dialog(editor, this.html, 'SmartReplace',{},{modal:false}); + this.dialog.attachToPanel('top'); + + this.dialog.getElementById('enable').onchange = function () + { + self.toggleActivity(this.checked); + } + this.dialog.getElementById('convert').onchange = function () + { + self.dialog.getElementById('ok').style.display = ( this.checked ) ? '' : 'none'; + } + this.dialog.getElementById('ok').onclick = function () + { + self.replaceAll(); + self.dialog.getElementById('convert').checked = false; + this.style.display = 'none'; + } + this.ready = true; +}; + +SmartReplace.prototype.show = function(inputs) +{ + if(!this.ready) + { + var self = this; + window.setTimeout(function() {self.show(inputs,ok,cancel);},100); + return; + } + + // Connect the OK and Cancel buttons + var self = this; + + this.dialog.show(inputs); + + // Init the sizes + this.dialog.onresize(); +}; + +SmartReplace.prototype.onBeforeMode = function(mode) +{ + switch(mode) + { + case 'textmode': + if ( this.dialog.rootElem.style.display != 'none') + { + this._wasShowing = true; + this.dialog.hide(); + } + else + { + this._wasShowing = false; + } + break; + + case 'wysiwyg': + if(this._wasShowing) + { + this.buttonPress(); + } + break; + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/dialog.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/dialog.html new file mode 100644 index 0000000000..146e0f3730 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/dialog.html @@ -0,0 +1,16 @@ +

    SmartReplace Settings

    +
    + + + + + + + + + +
    Enable automatic replacements
    Convert all quotes and dashes in the current document
    +
    +
    + +
    diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/img/SmartReplace.svg b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/img/SmartReplace.svg new file mode 100644 index 0000000000..09818163a6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/img/SmartReplace.svg @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/img/smartquotes.png b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/img/smartquotes.png new file mode 100644 index 0000000000..961ae45369 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/img/smartquotes.png differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ch.js new file mode 100644 index 0000000000..b1e6b205cb --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ch.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "好" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/cz.js new file mode 100644 index 0000000000..01f2e8f7ca --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/cz.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/da.js new file mode 100644 index 0000000000..ce5e364738 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/da.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/de.js new file mode 100644 index 0000000000..3a6cbe9cb7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/de.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ClosingDoubleQuotes": "“", + "ClosingSingleQuote": "‘", + "Convert all quotes and dashes in the current document": "Alle Anführungszeichen und Gedankenstriche umwandeln", + "Enable automatic replacements": "Automatische Ersetzung aktivieren", + "OK": "OK", + "OpeningDoubleQuotes": "„", + "OpeningSingleQuote": "‚", + "SmartReplace Settings": "SmartReplace Einstellungen" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ee.js new file mode 100644 index 0000000000..276bee01ff --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ee.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/el.js new file mode 100644 index 0000000000..e068038aac --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/el.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "Εντάξει" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/es.js new file mode 100644 index 0000000000..d3d01fd028 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/es.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "Aceptar" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/eu.js new file mode 100644 index 0000000000..22b9fe5196 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/eu.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "Ados" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/fa.js new file mode 100644 index 0000000000..4ba41c981a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/fa.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "بله" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/fi.js new file mode 100644 index 0000000000..f6aed2dd5f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/fi.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "Hyväksy" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/fr.js new file mode 100644 index 0000000000..8fadb6a035 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/fr.js @@ -0,0 +1,22 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ClosingDoubleQuotes": "«", + "Convert all quotes and dashes in the current document": "Convertir tous les guillemets et tirets dans le document actuel", + "Enable automatic replacements": "Activer le remplacement automatique", + "OK": "OK", + "OpeningDoubleQuotes": "»", + "SmartReplace Settings": "Paramètres SmartReplace", + "__OBSOLETE__": { + "ClosingSingleQuote": "", + "OpeningSingleQuote": "" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/he.js new file mode 100644 index 0000000000..82f72fad63 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/he.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "אישור" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/hu.js new file mode 100644 index 0000000000..15f9159786 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/hu.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "Rendben" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/it.js new file mode 100644 index 0000000000..f4fed233e7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/it.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ja.js new file mode 100644 index 0000000000..4ef9b57c4c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ja.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ClosingDoubleQuotes": "“", + "ClosingSingleQuote": "‘", + "Convert all quotes and dashes in the current document": "文書内の引用符とダッシュをすべて変換", + "Enable automatic replacements": "自動置換の有効化", + "OK": "OK", + "OpeningDoubleQuotes": "„", + "OpeningSingleQuote": "‚", + "SmartReplace Settings": "SmartReplace設定" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/lc_base.js new file mode 100644 index 0000000000..8d0f62fe5f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/lc_base.js @@ -0,0 +1,33 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "ClosingDoubleQuotes": "", + "ClosingSingleQuote": "", + "Convert all quotes and dashes in the current document": "", + "Enable automatic replacements": "", + "OK": "", + "OpeningDoubleQuotes": "", + "OpeningSingleQuote": "", + "SmartReplace": "", + "SmartReplace Settings": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/lt.js new file mode 100644 index 0000000000..a4c006ad5f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/lt.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/lv.js new file mode 100644 index 0000000000..17e6c8ce05 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/lv.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "Labi" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/nb.js new file mode 100644 index 0000000000..fcdba028d9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/nb.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/nl.js new file mode 100644 index 0000000000..8610e0c25c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/nl.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "ClosingDoubleQuotes": "“", + "ClosingSingleQuote": "‘", + "Convert all quotes and dashes in the current document": "Converteer alle quotes en schuine strepen", + "Enable automatic replacements": "Automatisch vervangen inschakelen", + "OK": "OK", + "OpeningDoubleQuotes": "„", + "OpeningSingleQuote": "‚", + "SmartReplace Settings": "SmartReplace Instellingen" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/pl.js new file mode 100644 index 0000000000..ab7535b944 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/pl.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/pt_br.js new file mode 100644 index 0000000000..d7ec12f273 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/pt_br.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Convert all quotes and dashes in the current document": "Converter todas as citações e hífens no documento atual", + "Enable automatic replacements": "Ativar substituições automáticas", + "OK": "OK", + "SmartReplace": "Substituição Rápida", + "SmartReplace Settings": "Configurações da Substituição Rápida", + "__OBSOLETE__": { + "Cancel": "Cancelar" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ro.js new file mode 100644 index 0000000000..b14100b084 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ro.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "Acceptă" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ru.js new file mode 100644 index 0000000000..407318b02a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/ru.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/sh.js new file mode 100644 index 0000000000..03bad6b227 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/sh.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/si.js new file mode 100644 index 0000000000..93b7a8b567 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/si.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "V redu" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/sr.js new file mode 100644 index 0000000000..5671f11031 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/sr.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/sv.js new file mode 100644 index 0000000000..24b2b3beac --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/sv.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/th.js new file mode 100644 index 0000000000..c8e2a8f329 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/th.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "ตกลง" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/tr.js new file mode 100644 index 0000000000..1ead10485a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/tr.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "Tamam" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/vn.js new file mode 100644 index 0000000000..58d927f401 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/lang/vn.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "OK": "Đồng ý" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/readme.txt b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/readme.txt new file mode 100644 index 0000000000..6e8290746d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SmartReplace/readme.txt @@ -0,0 +1,15 @@ +One irritating thing with text processing is the total absence of some typographic essentials on the keyboard -- "real" (typographic) quotes and the dash, typically miss-typed as inch or second sign (") and the hyphon(-). + +This plugin lends the good old Word behaviour to Xinha, as ",', and - get converted to their respective typographic correct relatives while typing. +It also replaces ... with the ellipsis sign (which is three dots combined in one glyph that is considered typographically better). + + Configuration (to change the quote style from default English): + * through language file (see lang/de.js) + * through a config variable (an array that holds four values: opening single quote, closing single quote, opening double quote, closing double quote) + + Additional config option: + * disable automatic replacement by default + + Additional features: + * can be switched on/off + * convert all quotes/dashes in a document that still has the boring "/- stuff \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/Stylist.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/Stylist.js new file mode 100644 index 0000000000..620c0301f1 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/Stylist.js @@ -0,0 +1,717 @@ +/** + * Add an empty css_style to Config object's prototype + * the format is { '.className' : 'Description' } + */ + +Xinha.Config.prototype.css_style = { }; + +/** + * This method loads an external stylesheet and uses it in the stylist + * + * @param string URL to the stylesheet + * @param hash Alternate descriptive names for your classes + * { '.fooclass': 'Foo Description' } + * @param bool If set true then @import rules in the stylesheet are skipped, + * otherwise they will be incorporated if possible. + */ + +Xinha.Config.prototype.stylistLoadStylesheet = function(url, altnames, skip_imports) +{ + if(!altnames) altnames = { }; + var newStyles = Xinha.ripStylesFromCSSFile(url, skip_imports); + for(var i in newStyles) + { + if(altnames[i]) + { + this.css_style[i] = altnames[i]; + } + else + { + this.css_style[i] = newStyles[i]; + } + } + + for(var x = 0; x < this.pageStyleSheets.length; x++) + { + if(this.pageStyleSheets[x] == url) return; + } + this.pageStyleSheets[this.pageStyleSheets.length] = url; +}; + +/** + * This method takes raw style definitions and uses them in the stylist + * + * @param string CSS + * + * @param hash Alternate descriptive names for your classes + * { '.fooclass': 'Foo Description' } + * + * @param bool If set true then @import rules in the stylesheet are skipped, + * otherwise they will be incorporated if possible. + * + * @param string If skip_imports is false, this string should contain + * the "URL" of the stylesheet these styles came from (doesn't matter + * if it exists or not), it is used when resolving relative URLs etc. + * If not provided, it defaults to Xinha.css in the Xinha root. + */ + +Xinha.Config.prototype.stylistLoadStyles = function(styles, altnames, skip_imports, imports_relative_to) +{ + if(!altnames) altnames = { }; + var newStyles = Xinha.ripStylesFromCSSString(styles, skip_imports); + for(var i in newStyles) + { + if(altnames[i]) + { + this.css_style[i] = altnames[i]; + } + else + { + this.css_style[i] = newStyles[i]; + } + } + this.pageStyle += styles; +}; + + + +/** + * Fill the stylist panel with styles that may be applied to the current selection. Styles + * are supplied in the css_style property of the Xinha.Config object, which is in the format + * { '.className' : 'Description' } + * classes that are defined on a specific tag (eg 'a.email_link') are only shown in the panel + * when an element of that type is selected. + * classes that are defined with selectors/psuedoclasses (eg 'a.email_link:hover') are never + * shown (if you have an 'a.email_link' without the pseudoclass it will be shown of course) + * multiple classes (eg 'a.email_link.staff_member') are shown as a single class, and applied + * to the element as multiple classes (class="email_link staff_member") + * you may click a class name in the stylist panel to add it, and click again to remove it + * you may add multiple classes to any element + * spans will be added where no single _and_entire_ element is selected + */ +Xinha.prototype._fillStylist = function() +{ + if(!this.plugins.Stylist.instance.dialog) return false; + var main = this.plugins.Stylist.instance.dialog.main; + main.innerHTML = ''; + + var may_apply = true; + var sel = this._getSelection(); + + // What is applied + // var applied = this._getAncestorsClassNames(this._getSelection()); + + // Get an active element + var active_elem = this._activeElement(sel); + + for(var x in this.config.css_style) + { + var tag = null; + var className = x.trim(); + var applicable = true; + var apply_to = active_elem; + + if(applicable && /[^a-zA-Z0-9_.-]/.test(className)) + { + applicable = false; // Only basic classes are accepted, no selectors, etc.. presumed + // that if you have a.foo:visited you'll also have a.foo + // alert('complex'); + } + + if(className.indexOf('.') < 0) + { + // No class name, just redefines a tag + applicable = false; + } + + if(applicable && (className.indexOf('.') > 0)) + { + // requires specific html tag + tag = className.substring(0, className.indexOf('.')).toLowerCase(); + className = className.substring(className.indexOf('.'), className.length); + + // To apply we must have an ancestor tag that is the right type + if(active_elem != null && active_elem.tagName.toLowerCase() == tag) + { + applicable = true; + apply_to = active_elem; + } + else + { + if(this._getFirstAncestor(this._getSelection(), [tag]) != null) + { + applicable = true; + apply_to = this._getFirstAncestor(this._getSelection(), [tag]); + } + else + { + // alert (this._getFirstAncestor(this._getSelection(), tag)); + // If we don't have an ancestor, but it's a div/span/p/hx stle, we can make one + if(( tag == 'div' || tag == 'span' || tag == 'p' + || (tag.substr(0,1) == 'h' && tag.length == 2 && tag != 'hr'))) + { + if(!this._selectionEmpty(this._getSelection())) + { + applicable = true; + apply_to = 'new'; + } + else + { + // See if we can get a paragraph or header that can be converted + apply_to = this._getFirstAncestor(sel, ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7']); + if(apply_to != null) + { + applicable = true; + } + else + { + applicable = false; + } + } + } + else + { + applicable = false; + } + } + } + } + + if(applicable) + { + // Remove the first . + className = className.substring(className.indexOf('.'), className.length); + + // Replace any futher ones with spaces (for multiple class definitions) + className = className.replace('.', ' '); + + if(apply_to == null) + { + if(this._selectionEmpty(this._getSelection())) + { + // Get the previous element and apply to that + apply_to = this._getFirstAncestor(this._getSelection(), null); + } + else + { + apply_to = 'new'; + tag = 'span'; + } + } + } + + var applied = (this._ancestorsWithClasses(sel, tag, className).length > 0 ? true : false); + var applied_to = this._ancestorsWithClasses(sel, tag, className); + + if(applicable) + { + var anch = document.createElement('a'); + anch.onfocus = function () { this.blur() } // prevent dotted line around link that causes horizontal scrollbar + anch._stylist_className = className.trim(); + anch._stylist_applied = applied; + anch._stylist_appliedTo = applied_to; + anch._stylist_applyTo = apply_to; + anch._stylist_applyTag = tag; + + anch.innerHTML = this.config.css_style[x]; + anch.href = 'javascript:void(0)'; + var editor = this; + anch.onclick = function() + { + if(this._stylist_applied == true) + { + editor._stylistRemoveClasses(this._stylist_className, this._stylist_appliedTo); + } + else + { + editor._stylistAddClasses(this._stylist_applyTo, this._stylist_applyTag, this._stylist_className); + } + return false; + } + + anch.style.display = 'block'; + anch.style.paddingLeft = '3px'; + anch.style.paddingTop = '1px'; + anch.style.paddingBottom = '1px'; + anch.style.textDecoration = 'none'; + + if(applied) + { + anch.style.background = 'Highlight'; + anch.style.color = 'HighlightText'; + } + anch.style.position = 'relative'; + main.appendChild(anch); + } + } + + if(main.childNodes.length) + { + this.plugins.Stylist.instance.dialog.show(); + } +}; + + +/** + * Add the given classes (space seperated list) to the currently selected element + * (will add a span if none selected) + */ +Xinha.prototype._stylistAddClasses = function(el, tag, classes) + { + if(el == 'new') + { + this.insertHTML('<' + tag + ' class="' + classes + '">' + this.getSelectedHTML() + ''); + } + else + { + if(tag != null && el.tagName.toLowerCase() != tag) + { + // Have to change the tag! + var new_el = this.switchElementTag(el, tag); + + if(typeof el._stylist_usedToBe != 'undefined') + { + new_el._stylist_usedToBe = el._stylist_usedToBe; + new_el._stylist_usedToBe[new_el._stylist_usedToBe.length] = {'tagName' : el.tagName, 'className' : el.getAttribute('class')}; + } + else + { + new_el._stylist_usedToBe = [{'tagName' : el.tagName, 'className' : el.getAttribute('class')}]; + } + + Xinha.addClasses(new_el, classes); + } + else + { + Xinha._addClasses(el, classes); + } + } + this.focusEditor(); + this.updateToolbar(); + }; + +/** + * Remove the given classes (space seperated list) from the given elements (array of elements) + */ +Xinha.prototype._stylistRemoveClasses = function(classes, from) + { + for(var x = 0; x < from.length; x++) + { + this._stylistRemoveClassesFull(from[x], classes); + } + this.focusEditor(); + this.updateToolbar(); + }; + +Xinha.prototype._stylistRemoveClassesFull = function(el, classes) +{ + if(el != null) + { + var thiers = el.className.trim().split(' '); + var new_thiers = [ ]; + var ours = classes.split(' '); + for(var x = 0; x < thiers.length; x++) + { + var exists = false; + for(var i = 0; exists == false && i < ours.length; i++) + { + if(ours[i] == thiers[x]) + { + exists = true; + } + } + if(exists == false) + { + new_thiers[new_thiers.length] = thiers[x]; + } + } + + if(new_thiers.length == 0 && el._stylist_usedToBe && el._stylist_usedToBe.length > 0 && el._stylist_usedToBe[el._stylist_usedToBe.length - 1].className != null) + { + // Revert back to what we were IF the classes are identical + var last_el = el._stylist_usedToBe[el._stylist_usedToBe.length - 1]; + var last_classes = Xinha.arrayFilter(last_el.className.trim().split(' '), function(c) { if (c == null || c.trim() == '') { return false;} return true; }); + + if( + (new_thiers.length == 0) + || + ( + Xinha.arrayContainsArray(new_thiers, last_classes) + && Xinha.arrayContainsArray(last_classes, new_thiers) + ) + ) + { + el = this.switchElementTag(el, last_el.tagName); + new_thiers = last_classes; + } + else + { + // We can't rely on the remembered tags any more + el._stylist_usedToBe = [ ]; + } + } + + if( new_thiers.length > 0 + || el.tagName.toLowerCase() != 'span' + || (el.id && el.id != '') + ) + { + el.className = new_thiers.join(' ').trim(); + } + else + { + // Must be a span with no classes and no id, so we can splice it out + var prnt = el.parentNode; + var tmp; + while (el.hasChildNodes()) + { + if (el.firstChild.nodeType == 1) + { + // if el.firstChild is an element, we've got to recurse to make sure classes are + // removed from it and and any of its children. + this._stylistRemoveClassesFull(el.firstChild, classes); + } + tmp = el.removeChild(el.firstChild); + prnt.insertBefore(tmp, el); + } + prnt.removeChild(el); + } + } +}; + +/** + * Change the tag of an element + */ +Xinha.prototype.switchElementTag = function(el, tag) +{ + var prnt = el.parentNode; + var new_el = this._doc.createElement(tag); + + if(Xinha.is_ie || el.hasAttribute('id')) new_el.setAttribute('id', el.getAttribute('id')); + if(Xinha.is_ie || el.hasAttribute('style')) new_el.setAttribute('style', el.getAttribute('style')); + + var childs = el.childNodes; + for(var x = 0; x < childs.length; x++) + { + new_el.appendChild(childs[x].cloneNode(true)); + } + + prnt.insertBefore(new_el, el); + new_el._stylist_usedToBe = [el.tagName]; + prnt.removeChild(el); + this.selectNodeContents(new_el); + return new_el; +}; + +Xinha.prototype._getAncestorsClassNames = function(sel) +{ + // Scan upwards to find a block level element that we can change or apply to + var prnt = this._activeElement(sel); + if(prnt == null) + { + prnt = (Xinha.is_ie ? this._createRange(sel).parentElement() : this._createRange(sel).commonAncestorContainer); + } + + var classNames = [ ]; + while(prnt) + { + if(prnt.nodeType == 1) + { + var classes = prnt.className.trim().split(' '); + for(var x = 0; x < classes.length; x++) + { + classNames[classNames.length] = classes[x]; + } + + if(prnt.tagName.toLowerCase() == 'body') break; + if(prnt.tagName.toLowerCase() == 'table' ) break; + } + prnt = prnt.parentNode; + } + + return classNames; +}; + +Xinha.prototype._ancestorsWithClasses = function(sel, tag, classes) +{ + var ancestors = [ ]; + var prnt = this._activeElement(sel); + if(prnt == null) + { + try + { + prnt = (Xinha.is_ie ? this._createRange(sel).parentElement() : this._createRange(sel).commonAncestorContainer); + } + catch(e) + { + return ancestors; + } + } + var search_classes = classes.trim().split(' '); + + while(prnt) + { + if(prnt.nodeType == 1 && prnt.className) + { + if(tag == null || prnt.tagName.toLowerCase() == tag) + { + var classes = prnt.className.trim().split(' '); + var found_all = true; + for(var i = 0; i < search_classes.length; i++) + { + var found_class = false; + for(var x = 0; x < classes.length; x++) + { + if(search_classes[i] == classes[x]) + { + found_class = true; + break; + } + } + + if(!found_class) + { + found_all = false; + break; + } + } + + if(found_all) ancestors[ancestors.length] = prnt; + } + if(prnt.tagName.toLowerCase() == 'body') break; + if(prnt.tagName.toLowerCase() == 'table' ) break; + } + prnt = prnt.parentNode; + } + + return ancestors; +}; + + +Xinha.ripStylesFromCSSFile = function(URL, skip_imports) +{ + var css = Xinha._geturlcontent(URL); + + return Xinha.ripStylesFromCSSString(css, skip_imports, URL); +}; + +Xinha.ripStylesFromCSSString = function(css, skip_imports, imports_relative_to) +{ + if(!skip_imports) + { + if(!imports_relative_to) + { + imports_relative_to = _editor_url + 'Xinha.css' + } + + var seen = { }; + + function resolve_imports(css, url) + { + seen[url] = true; // protects against infinite recursion + + var RE_atimport = '@import\\s*(url\\()?["\'](.*)["\'].*'; + var imports = css.match(new RegExp(RE_atimport,'ig')); + var m, file, re = new RegExp(RE_atimport,'i'); + + if (imports) + { + var path = url.replace(/\?.*$/,'').split("/"); + path.pop(); + path = path.join('/'); + for (var i=0;i 0) ? main.offsetHeight - args.panel.offsetHeight : 0) + 'px'; + dialog.rootElem.style.height = caption.offsetHeight + "px"; + editor.sizeEditor(); + break; + case 'hide': + stylist.resize(); + break; + } + } + ); + editor.notifyOn('before_resize', + function() + { + if (!dialog.attached) + { + return; + } + dialog.rootElem.style.height = caption.offsetHeight + "px"; + } + ); + editor.notifyOn('resize', + function() + { + if (!dialog.attached) + { + return; + } + stylist.resize(); + } + ); +} +Stylist.prototype.resize = function() +{ + var editor = this.editor; + var rootElem = this.dialog.rootElem; + + if (rootElem.style.display == 'none') return; + + var panelContainer = rootElem.parentNode; + + var newSize = panelContainer.offsetHeight; + for (var i=0; i < panelContainer.childNodes.length;++i) + { + if (panelContainer.childNodes[i] == rootElem || !panelContainer.childNodes[i].offsetHeight) + { + continue; + } + newSize -= panelContainer.childNodes[i].offsetHeight; + } + rootElem.style.height = newSize-5 + 'px'; + this.dialog.main.style.height = newSize - this.dialog.captionBar.offsetHeight -5 + 'px'; +} + +Stylist.prototype.onUpdateToolbar = function() +{ + if(this.dialog) + { + if(this._timeoutID) + { + window.clearTimeout(this._timeoutID); + } + + var e = this.editor; + this._timeoutID = window.setTimeout(function() { if(e.editorIsActivated()) e._fillStylist(); }, 500); + } +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/de.js new file mode 100644 index 0000000000..efc24e97af --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/de.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Styles": "Stile" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/fr.js new file mode 100644 index 0000000000..082146de3b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/fr.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Styles": "Styles" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/ja.js new file mode 100644 index 0000000000..ba898f1d6c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/ja.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Styles": "スタイル" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/lc_base.js new file mode 100644 index 0000000000..354b51dd1a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/lc_base.js @@ -0,0 +1,25 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Styles": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/nb.js new file mode 100644 index 0000000000..fd5826061b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/nb.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Styles": "Stiler" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/nl.js new file mode 100644 index 0000000000..47e8d94813 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/nl.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Styles": "Style" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/pl.js new file mode 100644 index 0000000000..129a308e3b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/pl.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Styles": "Style" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/pt_br.js new file mode 100644 index 0000000000..c9d58de3fa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/pt_br.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Styles": "Estilos" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/ru.js new file mode 100644 index 0000000000..2ff97e2ea2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/Stylist/lang/ru.js @@ -0,0 +1,13 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Styles": "Стили" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/SuperClean.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/SuperClean.js new file mode 100644 index 0000000000..e35a43750b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/SuperClean.js @@ -0,0 +1,182 @@ +/** superClean combines HTMLTidy, Word Cleaning and font stripping into a single function + * it works a bit differently in how it asks for parameters */ + +function SuperClean(editor, args) +{ + this.editor = editor; + var superclean = this; + editor._superclean_on = false; + editor.config.registerButton('superclean', this._lc("Clean up HTML"), [_editor_url +'iconsets/Tango/ed_buttons_main.png',6,4], true, function(e, objname, obj) { superclean._superClean(null, obj); }); + + // See if we can find 'killword' and replace it with superclean + editor.config.addToolbarElement("superclean", "killword", 0); +} + +SuperClean._pluginInfo = +{ + name : "SuperClean", + version : "1.0", + developer: "James Sleeman, Niko Sams", + developer_url: "http://www.gogo.co.nz/", + c_owner : "Gogo Internet Services", + license : "htmlArea", + sponsor : "Gogo Internet Services", + sponsor_url : "http://www.gogo.co.nz/" +}; + +SuperClean.prototype._lc = function(string) { + return Xinha._lc(string, 'SuperClean'); +}; + +Xinha.Config.prototype.SuperClean = +{ + // set to the URL of a handler for html tidy, this handler + // (see tidy.php for an example) must that a single post variable + // "content" which contains the HTML to tidy, and return javascript like + // editor.setHTML('Tidied Html') + // it's called through XMLHTTPRequest + 'tidy_handler': Xinha.getPluginDir("SuperClean") + '/tidy.php', + + // set additional arguments needed for the tidy request + 'tidy_args' : {}, + + //avaliable filters (these are built-in filters) + // You can either use + // 'filter_name' : "Label/Description String" + // or 'filter_name' : {label: "Label", checked: true/false, filterFunction: function(html) { ... return html;} } + // filterFunction in the second format above is optional. + + 'filters': { 'tidy': {label:Xinha._lc('General tidy up and correction of some problems.', 'SuperClean'), checked:true, fullonly: true}, + 'word_clean': {label:Xinha._lc('Clean bad HTML from Microsoft Word.', 'SuperClean'), checked:true, fullonly: true}, + 'word': {label:Xinha._lc('Vigorously purge HTML from Microsoft Word.', 'SuperClean'), checked:false, fullonly: true}, + 'remove_faces': {label:Xinha._lc('Remove custom typefaces (font "styles").', 'SuperClean'),checked:true}, + 'remove_sizes': {label:Xinha._lc('Remove custom font sizes.', 'SuperClean'),checked:true}, + 'remove_colors': {label:Xinha._lc('Remove custom text colors.', 'SuperClean'),checked:true}, + 'remove_emphasis': {label:Xinha._lc('Remove emphasis and annotations.', 'SuperClean'), checked:true}, + 'remove_sup_sub': {label:Xinha._lc('Remove superscripts and subscripts.', 'SuperClean'), checked:false}, + 'remove_alignment': {label:Xinha._lc('Remove alignment (left/right/justify).', 'SuperClean'),checked:true}, + 'remove_all_css_classes': {label:Xinha._lc('Remove all classes (CSS).', 'SuperClean'), checked: false}, + 'remove_all_css_styles': {label:Xinha._lc('Remove all styles (CSS).', 'SuperClean'),checked:true}, + 'remove_lang': {label:Xinha._lc('Remove lang attributes.', 'SuperClean'),checked:true}, + 'remove_fancy_quotes': {label:Xinha._lc('Replace directional quote marks with non-directional quote marks.', 'SuperClean'), checked:false}, + //additional custom filters (defined in plugins/SuperClean/filters/word.js) + 'paragraph':{label:Xinha._lc('Remove Paragraphs', 'SuperClean'), checked:false}, + 'remove_all_tags': {label:Xinha._lc('Remove All HTML Tags', 'SuperClean'), checked:false } + }, + //if false all filters are applied, if true a dialog asks what filters should be used + 'show_dialog': true +}; + +SuperClean.filterFunctions = { }; + +/** Helper function to strip tags from given html. + * + * @param string + * @param array|string An array pf tag names, or a tag name string + * @param bool true == completely remove tag and contents, false == remove tag only + * @return string + */ + +SuperClean.stripTags = function(html, tagNames, completelyRemove) +{ + if(typeof tagNames == 'string') + { + tagNames = [ tagNames ]; + } + + for(var i = 0; i < tagNames.length; i++) + { + var tagName = tagNames[i]; + if(completelyRemove) + { + html = html.replace(new RegExp('<'+tagName+'( [^>]*)?>.*?]*)?>', 'gi'), ''); + } + else + { + html = html.replace(new RegExp(']*)?>', 'gi'), ''); + } + } + + return html; +} + +SuperClean.stripAttributes = function(html, attributeNames) +{ + if(typeof attributeNames == 'string') + { + attributeNames = [ attributeNames ]; + } + + for(var i = 0; i < attributeNames.length; i++) + { + var attributeName = attributeNames[i]; + + // @TODO - make this less likely to false-positive outside of tags + html = html.replace(new RegExp(' ('+attributeName+'="[^"]*"|'+attributeName+'=\'[^\']*\'|'+attributeName+'=[^ >]*)', 'gi'), ' '); + } + + return html; +} + +SuperClean.prototype.onGenerateOnce = function() +{ + + if(this.editor.config.tidy_handler) + { + //for backwards compatibility + this.editor.config.SuperClean.tidy_handler = this.editor.config.tidy_handler; + this.editor.config.tidy_handler = null; + } + if(!this.editor.config.SuperClean.tidy_handler && this.editor.config.filters.tidy) { + //unset tidy-filter if no tidy_handler + this.editor.config.filters.tidy = null; + } + SuperClean.loadAssets(); + this.loadFilters(); +}; + +SuperClean.prototype.onUpdateToolbar = function() +{ + if (!(SuperClean.methodsReady && SuperClean.html)) + { + this.editor._toolbarObjects.superclean.state("enabled", false); + } + else this.onUpdateToolbar = null; +}; + +SuperClean.loadAssets = function() +{ + var self = SuperClean; + if (self.loading) return; + self.loading = true; + Xinha._getback(Xinha.getPluginDir("SuperClean") + '/pluginMethods.js', function(getback) { eval(getback); self.methodsReady = true; }); + Xinha._getback( Xinha.getPluginDir("SuperClean") + '/dialog.html', function(getback) { self.html = getback; } ); +}; + +SuperClean.prototype.loadFilters = function() +{ + var sc = this; + //load the filter-functions + for(var filter in this.editor.config.SuperClean.filters) + { + if (/^(remove_colors|remove_sizes|remove_faces|remove_lang|word_clean|remove_fancy_quotes|tidy|remove_emphasis|remove_sup_sub|remove_alignment|remove_all_css_classes|remove_all_css_styles|remove_all_tags)$/.test(filter)) continue; //skip built-in functions + + if(!SuperClean.filterFunctions[filter]) + { + var filtDetail = this.editor.config.SuperClean.filters[filter]; + if(typeof filtDetail.filterFunction != 'undefined') + { + SuperClean.filterFunctions[filter] = filterFunction; + } + else + { + Xinha._getback(Xinha.getPluginDir("SuperClean") + '/filters/'+filter+'.js', + function(func) { + eval('SuperClean.filterFunctions.'+filter+'='+func+';'); + sc.loadFilters(); + }); + } + return; + } + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/dialog.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/dialog.html new file mode 100644 index 0000000000..f3f88d9b3d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/dialog.html @@ -0,0 +1,24 @@ +

    Clean up HTML

    +
    + Please select from the following cleaning options... + + + + +
    + Cleaning Scope + +

    ^ - Items so marked operate on the entire editor contents regardless of this setting.

    +
    +
    + + + + +
    + + +
    \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/filters/paragraph.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/filters/paragraph.js new file mode 100644 index 0000000000..041a575c2d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/filters/paragraph.js @@ -0,0 +1,6 @@ +function(html) { + html = html.replace(/<\s*p[^>]*>/gi, ''); + html = html.replace(/<\/\s*p\s*>/gi, ''); + html = html.trim(); + return html; +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/filters/word.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/filters/word.js new file mode 100644 index 0000000000..495a71942e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/filters/word.js @@ -0,0 +1,53 @@ +function(html) { + // Remove HTML comments + html = html.replace(//gi, "" ); + html = html.replace(//gi, ''); + // Remove all HTML tags + html = html.replace(/<\/?\s*HTML[^>]*>/gi, "" ); + // Remove all BODY tags + html = html.replace(/<\/?\s*BODY[^>]*>/gi, "" ); + // Remove all META tags + html = html.replace(/<\/?\s*META[^>]*>/gi, "" ); + // Remove all SPAN tags + html = html.replace(/<\/?\s*SPAN[^>]*>/gi, "" ); + // Remove all FONT tags + html = html.replace(/<\/?\s*FONT[^>]*>/gi, ""); + // Remove all IFRAME tags. + html = html.replace(/<\/?\s*IFRAME[^>]*>/gi, ""); + // Remove all STYLE tags & content + html = html.replace(/<\/?\s*STYLE[^>]*>(.|[\n\r\t])*<\/\s*STYLE\s*>/gi, "" ); + // Remove all TITLE tags & content + html = html.replace(/<\s*TITLE[^>]*>(.|[\n\r\t])*<\/\s*TITLE\s*>/gi, "" ); + // Remove javascript + html = html.replace(/<\s*SCRIPT[^>]*>[^\0]*<\/\s*SCRIPT\s*>/gi, ""); + // Remove all HEAD tags & content + html = html.replace(/<\s*HEAD[^>]*>(.|[\n\r\t])*<\/\s*HEAD\s*>/gi, "" ); + // Remove Class attributes + html = html.replace(/<\s*(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ; + // Remove Style attributes + html = html.replace(/<\s*(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3") ; + // Remove Lang attributes + html = html.replace(/<\s*(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ; + // Remove XML elements and declarations + html = html.replace(/<\\?\?xml[^>]*>/gi, "") ; + // Remove Tags with XML namespace declarations: + html = html.replace(/<\/?\w+:[^>]*>/gi, "") ; + // Replace the   + html = html.replace(/ /, " " ); + + // Transform


    to
    + //html = html.replace(/<\s*p[^>]*>\s*<\s*br\s*\/>\s*<\/\s*p[^>]*>/gi, "
    "); + html = html.replace(/<\s*p[^>]*><\s*br\s*\/?>\s*<\/\s*p[^>]*>/gi, "
    "); + + // Remove

    + html = html.replace(/<\s*p[^>]*>/gi, ""); + + // Replace

    with
    + html = html.replace(/<\/\s*p[^>]*>/gi, "
    "); + + // Remove any
    at the end + html = html.replace(/(\s*
    \s*)*$/, ""); + + html = html.trim(); + return html; +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/img/ed_superclean.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/img/ed_superclean.gif new file mode 100644 index 0000000000..53180a80ba Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/img/ed_superclean.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ch.js new file mode 100644 index 0000000000..9d78e4459e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ch.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消", + "OK": "好" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/cz.js new file mode 100644 index 0000000000..36b99297ee --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/cz.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/da.js new file mode 100644 index 0000000000..4f9353f502 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/da.js @@ -0,0 +1,28 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller", + "Clean up HTML": "Rengør HTML", + "General tidy up and correction of some problems.": "Generel oprydning og rettelse af diverse problemer.", + "OK": "OK", + "Please select from the following cleaning options...": "Vælg et eller flere af følgende rengøringsværktøjer...", + "Remove custom font sizes.": "Slet skriftstørrelser.", + "Remove custom text colors.": "Slet tekstfarver.", + "Remove custom typefaces (font \"styles\").": "Slet skriftsnit (font \"styles\").", + "Remove lang attributes.": "Slet lang attributter.", + "Replace directional quote marks with non-directional quote marks.": "Erstat directional anførselstegn med ikke-directional anførselstegn", + "__OBSOLETE__": { + "Clean bad HTML from Microsoft Word": "Rengør uønsket HTML fra Microsoft Word", + "Go": "Ok", + "Tidy failed. Check your HTML for syntax errors.": "Tidy mislykkedes. Tjek din HTML for syntaksfejl.", + "You don't have anything to tidy!": "Der er ikke noget at rengøre!" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/de.js new file mode 100644 index 0000000000..437ca8d57b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/de.js @@ -0,0 +1,28 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Abbrechen", + "Clean up HTML": "HTML säubern", + "General tidy up and correction of some problems.": "Allgemeines aufräumen und Korrektur einiger Probleme.", + "OK": "OK", + "Please select from the following cleaning options...": "Bitte Optionen auswählen...", + "Please stand by while cleaning in process...": "Bitte warten Sie, während die Säuberung läuft...", + "Remove custom font sizes.": "Schriftgrößen entfernen (font size).", + "Remove custom text colors.": "Schriftfarben entfernen (font color).", + "Remove custom typefaces (font \"styles\").": "Schriftarten entfernen (font face).", + "Remove lang attributes.": "Sprachattribute entfernen.", + "__OBSOLETE__": { + "Clean bad HTML from Microsoft Word": "Schlechtes HTML aus Microsoft Word aufräumen", + "Go": "Go", + "Tidy failed. Check your HTML for syntax errors.": "Säubern fehlgeschlagen. Überprüfen Sie Ihren Code auf Fehler.", + "You don't have anything to tidy!": "Es gibt nichts zu säubern...!" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ee.js new file mode 100644 index 0000000000..ba916e9d88 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ee.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/el.js new file mode 100644 index 0000000000..f6e006c463 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/el.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση", + "OK": "Εντάξει" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/es.js new file mode 100644 index 0000000000..9f23c0fb69 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/es.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "OK": "Aceptar" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/eu.js new file mode 100644 index 0000000000..3bc9dbb122 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/eu.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi", + "OK": "Ados" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/fa.js new file mode 100644 index 0000000000..84e7f7e297 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/fa.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف", + "OK": "بله" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/fi.js new file mode 100644 index 0000000000..82552b9755 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/fi.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta", + "OK": "Hyväksy" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/fr.js new file mode 100644 index 0000000000..b0530d75da --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/fr.js @@ -0,0 +1,27 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuler", + "Clean up HTML": "Nettoyer le code HTML", + "General tidy up and correction of some problems.": "Nettoyage générique et correction des problèmes mineurs.", + "OK": "OK", + "Please select from the following cleaning options...": "Veuillez sélectionner une option de nettoyage.", + "Remove custom font sizes.": "Supprimer les tailles de polices personnalisées.", + "Remove custom text colors.": "Supprimer les couleurs de texte personalisées.", + "Remove custom typefaces (font \"styles\").": "Supprimer les polices personalisées (font \"styles\").", + "Remove lang attributes.": "Supprimer les attributs de langue.", + "__OBSOLETE__": { + "Clean bad HTML from Microsoft Word": "Nettoyer les balises HTML de Microsoft Word", + "Go": "Commencer", + "Tidy failed. Check your HTML for syntax errors.": "Tidy a échoué. Vérifier la syntaxe HTML.", + "You don't have anything to tidy!": "Rien à transmettre à tidy !" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/he.js new file mode 100644 index 0000000000..a602f7cac8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/he.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול", + "OK": "אישור" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/hu.js new file mode 100644 index 0000000000..b38528d99d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/hu.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem", + "OK": "Rendben" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/it.js new file mode 100644 index 0000000000..a0acb45476 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/it.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ja.js new file mode 100644 index 0000000000..d4105ef2a3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ja.js @@ -0,0 +1,29 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "中止", + "Clean up HTML": "HTMLのクリーンナップ", + "General tidy up and correction of some problems.": "一般的な適正化といくつかの問題を修正します。", + "OK": "OK", + "Please select from the following cleaning options...": "以下のクリーンナップオプションを選択してください...", + "Remove custom font sizes.": "独自フォントサイズ設定の除去。", + "Remove custom text colors.": "独自文字色設定の除去。", + "Remove custom typefaces (font \"styles\").": "独自フォント名設定の除去 (font face)。", + "Remove lang attributes.": "言語属性の除去。", + "Replace directional quote marks with non-directional quote marks.": "方向つき引用符を方向なし引用符に置換。", + "__OBSOLETE__": { + "CANCEL": "中止", + "Clean bad HTML from Microsoft Word": "Microsoft Wordによる不正なHTMLの清潔化", + "Go": "実行", + "Tidy failed. Check your HTML for syntax errors.": "適正化に失敗しました。HTMLの文法エラーを確認してください。", + "You don't have anything to tidy!": "適正化するものは何もありません!" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/lc_base.js new file mode 100644 index 0000000000..da8fff9914 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/lc_base.js @@ -0,0 +1,46 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Cancel": "", + "Clean Selection Only": "", + "Clean bad HTML from Microsoft Word.": "", + "Clean up HTML": "", + "Cleaning Scope": "", + "General tidy up and correction of some problems.": "", + "OK": "", + "Please select from the following cleaning options...": "", + "Please stand by while cleaning in process...": "", + "Remove All HTML Tags": "", + "Remove Paragraphs": "", + "Remove alignment (left/right/justify).": "", + "Remove all classes (CSS).": "", + "Remove all styles (CSS).": "", + "Remove custom font sizes.": "", + "Remove custom text colors.": "", + "Remove custom typefaces (font \"styles\").": "", + "Remove emphasis and annotations.": "", + "Remove lang attributes.": "", + "Remove superscripts and subscripts.": "", + "Replace directional quote marks with non-directional quote marks.": "", + "Vigorously purge HTML from Microsoft Word.": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/lt.js new file mode 100644 index 0000000000..d118909d22 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/lt.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/lv.js new file mode 100644 index 0000000000..f83d5d3efc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/lv.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt", + "OK": "Labi" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/nb.js new file mode 100644 index 0000000000..c4ee434eab --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/nb.js @@ -0,0 +1,27 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "Clean up HTML": "Vask HTML kode", + "General tidy up and correction of some problems.": "Generell opprydding i HTML koden samt korrigering av typiske feil", + "OK": "OK", + "Please select from the following cleaning options...": "Vennligst velg blandt de forskjellige mulighetene å vaske/ rydde i HTML koden", + "Remove custom font sizes.": "Fjerne egendefinerte skriftstørrelser (font size)", + "Remove custom text colors.": "Fjerne egendefinerte skriftfarger (font color)", + "Remove custom typefaces (font \"styles\").": "Fjerne egendefinerte skrifttyper (font face)", + "Remove lang attributes.": "Fjerne lang-attributter.", + "__OBSOLETE__": { + "Clean bad HTML from Microsoft Word": "Vask HTML kode for feil og problemer etter Microsoft Word", + "Go": "Utfør", + "Tidy failed. Check your HTML for syntax errors.": "Tidy (Programmet som retter HTML koden) feilet. Vennligst se over HTML koden for feil.", + "You don't have anything to tidy!": "Det finnes ingen HTML kode å vaske!" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/nl.js new file mode 100644 index 0000000000..1bc8a8b11e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/nl.js @@ -0,0 +1,27 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuleren", + "Clean up HTML": "HTML opschonen", + "General tidy up and correction of some problems.": "Algemeen opschonen en correctie", + "OK": "OK", + "Please select from the following cleaning options...": "Selecteer de gewenste opschoon opties...", + "Remove custom font sizes.": "Verwijder aangepaste lettergroottes (font size)", + "Remove custom text colors.": "Verwijder aangepaste tekstkleuren (font color)", + "Remove custom typefaces (font \"styles\").": "Verwijder aangepaste lettertypes (font face)", + "Remove lang attributes.": "Verwijder alle taal (lang) attributen.", + "__OBSOLETE__": { + "Clean bad HTML from Microsoft Word": "Overbodige/verkeerde HTML van Microsoft Word opschonen", + "Go": "Opschonen", + "Tidy failed. Check your HTML for syntax errors.": "Tidy mislukt. Controleer HTML op fouten.", + "You don't have anything to tidy!": "Er is niets om op te schonen!" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/pl.js new file mode 100644 index 0000000000..7779afc586 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/pl.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anuluj", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/pt_br.js new file mode 100644 index 0000000000..488fd3f987 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/pt_br.js @@ -0,0 +1,26 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "Clean up HTML": "Limpar HTML", + "General tidy up and correction of some problems.": "Limpesa geral e correção de alguns problemas.", + "OK": "OK", + "Please select from the following cleaning options...": "Por favor, selecione uma das opções de limpesa...", + "Remove custom font sizes.": "Remover tamanho de fontes personalizados (font size).", + "Remove custom text colors.": "Remover cores de texto personalizados (font color).", + "Remove custom typefaces (font \"styles\").": "Remover tipos de letras personalizadas (font \"styles\").", + "Remove lang attributes.": "Remover atributos de idioma.", + "__OBSOLETE__": { + "Clean bad HTML from Microsoft Word": "Limpar códigos mal formatados do Microsoft Word", + "Tidy failed. Check your HTML for syntax errors.": "Limpesa falhou. Verifique seu HTML por erros de sintaxe.", + "You don't have anything to tidy!": "Você não possui nada para limpar!" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ro.js new file mode 100644 index 0000000000..9d6e1c3d35 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ro.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă", + "OK": "Acceptă" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ru.js new file mode 100644 index 0000000000..fad59f2f64 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/ru.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/sh.js new file mode 100644 index 0000000000..62e76f77ed --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/sh.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/si.js new file mode 100644 index 0000000000..7674892b4c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/si.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči", + "OK": "V redu" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/sr.js new file mode 100644 index 0000000000..b7ee6f5c95 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/sr.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/sv.js new file mode 100644 index 0000000000..98336d80fa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/sv.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "OK": "OK" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/th.js new file mode 100644 index 0000000000..9da9c8d94d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/th.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก", + "OK": "ตกลง" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/tr.js new file mode 100644 index 0000000000..8a4e22a892 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/tr.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal", + "OK": "Tamam" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/vn.js new file mode 100644 index 0000000000..2d82e026dc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/lang/vn.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy", + "OK": "Đồng ý" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/pluginMethods.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/pluginMethods.js new file mode 100644 index 0000000000..6412621ccf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/pluginMethods.js @@ -0,0 +1,357 @@ +SuperClean.prototype._superClean = function(opts, obj) +{ + if(this.editor.config.SuperClean.show_dialog && !this._dialog) + { + this._dialog = new SuperClean.Dialog(this); + } + var superclean = this; + + // Do the clean if we got options + var doOK = function() + { + superclean._dialog.dialog.getElementById("main").style.display = "none"; + superclean._dialog.dialog.getElementById("waiting").style.display = ""; + superclean._dialog.dialog.getElementById("buttons").style.display = "none"; + + var opts = superclean._dialog.dialog.getValues(); + var editor = superclean.editor; + + if(opts.word_clean) editor._wordClean(); + + var D; + + if(opts['scope'].value == 'selection') + { + D = editor.getSelectedHTML(); + } + else + { + D = editor.getEditorContent(); + } + + for(var filter in editor.config.SuperClean.filters) + { + if(filter=='tidy' || filter=='word_clean') continue; + + // Any full only ones need to happen later + if(typeof filter == 'object' && filter.fullonly) continue; + + if(opts[filter]) + { + D = SuperClean.filterFunctions[filter](D, editor); + } + } + + D = D.replace(/(style|class)="\s*"/gi, ''); + D = D.replace(/<(font|span)\s*>/gi, ''); + + if(opts['scope'].value == 'selection') + { + editor.insertHTML(D); + } + else + { + editor.setEditorContent(D); + } + + // Do the full only ones + D = editor.getEditorContent(); + for(var filter in editor.config.SuperClean.filters) + { + // Skip tidy we do that last, and word_clean was done + // first + if(filter=='tidy' || filter=='word_clean') continue; + + // Any full only ones need to happen last + if(typeof filter == 'object' && filter.fullonly && opts[filter]) + { + D = SuperClean.filterFunctions[filter](D, editor); + } + } + + if(opts.tidy) + { + var callback = function(javascriptResponse) + { + eval("var response = " + javascriptResponse); + switch (response.action) + { + case 'setHTML': + editor.setEditorContent(response.value); + superclean._dialog.hide(); + break; + case 'alert': + superclean._dialog.dialog.getElementById("buttons").style.display = ""; + superclean._dialog.dialog.getElementById("ok").style.display = "none"; + superclean._dialog.dialog.getElementById("waiting").style.display = "none"; + superclean._dialog.dialog.getElementById("alert").style.display = ""; + superclean._dialog.dialog.getElementById("alert").innerHTML = superclean._lc(response.value); + break; + default: // make the dialog go away if sth goes wrong, who knows... + superclean._dialog.hide(); + break; + } + } + + var args = editor.config.SuperClean.tidy_args; + if ( typeof args != 'object' ) + { + args = {}; + } + args['content'] = editor.getInnerHTML(); + + Xinha._postback(editor.config.SuperClean.tidy_handler, args, callback); + } + else + { + superclean._dialog.hide(); + } + return true; + } + + if(this.editor.config.SuperClean.show_dialog) + { + var inputs = {}; + this._dialog.show(inputs, doOK); + } + else + { + var editor = this.editor; + var html = editor.getEditorContent(); + for(var filter in editor.config.SuperClean.filters) + { + if(filter=='tidy') continue; //call tidy last + html = SuperClean.filterFunctions[filter](html, editor); + } + + html = html.replace(/(style|class)="\s*"/gi, ''); + html = html.replace(/<(font|span)\s*>/gi, ''); + + editor.setEditorContent(html); + + if(editor.config.SuperClean.filters.tidy) + { + SuperClean.filterFunctions.tidy(html, editor); + } + } +}; + +SuperClean.filterFunctions.remove_colors = function(D) +{ + D = D.replace(/color="?[^" >]*"?/gi, ''); + // { (stops jedit's fold breaking) + D = D.replace(/([^-])color:[^;}"']+;?/gi, '$1'); + return(D); +}; +SuperClean.filterFunctions.remove_sizes = function(D) +{ + D = D.replace(/size="?[^" >]*"?/gi, ''); + // { (stops jedit's fold breaking) + D = D.replace(/font-size:[^;}"']+;?/gi, ''); + return(D); +}; +SuperClean.filterFunctions.remove_faces = function(D) +{ + D = D.replace(/face="?[^" >]*"?/gi, ''); + // { (stops jedit's fold breaking) + D = D.replace(/font-family:[^;}"']+;?/gi, ''); + return(D); +}; +SuperClean.filterFunctions.remove_lang = function(D) +{ + D = D.replace(/lang="?[^" >]*"?/gi, ''); + return(D); +}; +SuperClean.filterFunctions.word_clean = function(html, editor) +{ + editor.setHTML(html); + editor._wordClean(); + return editor.getInnerHTML(); +}; + +SuperClean.filterFunctions.remove_fancy_quotes = function(D) +{ + D = D.replace(new RegExp(String.fromCharCode(8216),"g"),"'"); + D = D.replace(new RegExp(String.fromCharCode(8217),"g"),"'"); + D = D.replace(new RegExp(String.fromCharCode(8218),"g"),"'"); + D = D.replace(new RegExp(String.fromCharCode(8219),"g"),"'"); + D = D.replace(new RegExp(String.fromCharCode(8220),"g"),"\""); + D = D.replace(new RegExp(String.fromCharCode(8221),"g"),"\""); + D = D.replace(new RegExp(String.fromCharCode(8222),"g"),"\""); + D = D.replace(new RegExp(String.fromCharCode(8223),"g"),"\""); + return D; +}; + +SuperClean.filterFunctions.tidy = function(html, editor) +{ + var callback = function(javascriptResponse) + { + eval("var response = " + javascriptResponse); + switch (response.action) + { + case 'setHTML': + editor.setEditorContent(response.value); + break; + case 'alert': + alert(Xinha._lc(response.value, 'SuperClean')); + break; + } + } + + var args = editor.config.SuperClean.tidy_args; + if ( typeof args != 'object' ) + { + args = {}; + } + args['content'] = html; + + Xinha._postback(editor.config.SuperClean.tidy_handler, args, callback); +}; + +SuperClean.filterFunctions.remove_emphasis = function(html) +{ + html = SuperClean.stripTags(html, [ 'b', 'strong', 'i', 'em', 'u', 'mark', 'ins','abbr', 'acronym', 'kbd', 'samp', 'strike', 's' ]); + + // for del we delete it entirely or it would be confising (old thing new thing would become old thing new thing) + html = SuperClean.stripTags(html, [ 'del' ], true); + + html = html.replace(/font-weight:[^;}"']+;?/gi, ''); + html = html.replace(/font-style:[^;}"']+;?/gi, ''); + return html; +}; + +SuperClean.filterFunctions.remove_sup_sub = function(html) +{ + return SuperClean.stripTags(html, ['sup', 'sub']).replace(/vertical-align:\s*(sub|super)[^;}"']+;?/gi); +}; + +SuperClean.filterFunctions.remove_alignment = function(html) +{ + return html.replace(/ align=[^\s|>]*/gi,'').replace(/(text-align|vertical-align|float):[^;}"']+;?/gi, ''); +}; + +SuperClean.filterFunctions.remove_all_css_classes = function(html) +{ + return SuperClean.stripAttributes(html, 'class'); +}; + +SuperClean.filterFunctions.remove_all_css_styles = function(html) +{ + return SuperClean.stripAttributes(html, 'style'); +}; + +SuperClean.filterFunctions.remove_all_tags = function(html) +{ + return html.replace(/<[\!]*?[^<>]*?>/g, ""); +}; + +SuperClean.Dialog = function (SuperClean) +{ + var lDialog = this; + this.Dialog_nxtid = 0; + this.SuperClean = SuperClean; + this.id = { }; // This will be filled below with a replace, nifty + + this.ready = false; + this.dialog = false; + + // load the dTree script + this._prepareDialog(); + +}; + +SuperClean.Dialog.prototype._prepareDialog = function() +{ + var lDialog = this; + var SuperClean = this.SuperClean; + + var html = window.SuperClean.html; + + var htmlFilters = ""; + for(var filter in this.SuperClean.editor.config.SuperClean.filters) + { + htmlFilters += "
    \n"; + var filtDetail = this.SuperClean.editor.config.SuperClean.filters[filter]; + if(typeof filtDetail.label == 'undefined') + { + htmlFilters += " \n"; + htmlFilters += " \n"; + } + else + { + htmlFilters += " \n"; + htmlFilters += " \n"; + } + htmlFilters += "
    \n"; + } + html = html.replace('', htmlFilters); + + + // Now we have everything we need, so we can build the dialog. + var dialog = this.dialog = new Xinha.Dialog(SuperClean.editor, html, 'SuperClean',{width:400}); + + this.ready = true; +}; + +SuperClean.Dialog.prototype._lc = SuperClean.prototype._lc; + +SuperClean.Dialog.prototype.show = function(inputs, ok, cancel) +{ + if(!this.ready) + { + var lDialog = this; + window.setTimeout(function() {lDialog.show(inputs,ok,cancel);},100); + return; + } + + // Connect the OK and Cancel buttons + var dialog = this.dialog; + var lDialog = this; + if(ok) + { + this.dialog.getElementById('ok').onclick = ok; + } + else + { + this.dialog.getElementById('ok').onclick = function() {lDialog.hide();}; + } + + if(cancel) + { + this.dialog.getElementById('cancel').onclick = cancel; + } + else + { + this.dialog.getElementById('cancel').onclick = function() { lDialog.hide()}; + } + + // If there is selected text, set that the default scope + if(this.SuperClean.editor.hasSelectedText()) + { + this.dialog.getElementsByName('scope')[0].selectedIndex = 1; + } + else + { + this.dialog.getElementsByName('scope')[0].selectedIndex = 0; + } + + // Show the dialog + this.SuperClean.editor.disableToolbar(['fullscreen','SuperClean']); + + this.dialog.show(inputs); + + // Init the sizes + this.dialog.onresize(); +}; + +SuperClean.Dialog.prototype.hide = function() +{ + var ret = this.dialog.hide(); + this.SuperClean.editor.enableToolbar(); + this.dialog.getElementById("main").style.display = ""; + this.dialog.getElementById("buttons").style.display = ""; + this.dialog.getElementById("waiting").style.display = "none"; + this.dialog.getElementById("alert").style.display = "none"; + this.dialog.getElementById("ok").style.display = ""; + return ret; +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/tidy.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/tidy.php new file mode 100644 index 0000000000..9ff7981a5a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/SuperClean/tidy.php @@ -0,0 +1,179 @@ +,{,},@,\n,\r"; + + if(!is_array($strings)) + { + $tr = array(); + foreach(explode(',', $strings) as $chr) + { + $tr[$chr] = sprintf('\x%02X', ord($chr)); + } + $strings = $tr; + } + + return strtr($string, $strings); + } + + // Any errors would screq up our javascript + error_reporting(0); + ini_set('display_errors', false); + + if(trim(@$_REQUEST['content'])) + { + // PHP's urldecode doesn't understand %uHHHH for unicode + $_REQUEST['content'] = preg_replace('/%u([a-f0-9]{4,4})/ei', 'utf8_chr(0x$1)', $_REQUEST['content']); + function utf8_chr($num) + { + if($num<128)return chr($num); + if($num<1024)return chr(($num>>6)+192).chr(($num&63)+128); + if($num<32768)return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128); + if($num<2097152)return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128) .chr(($num&63)+128); + return ''; + } + ob_start(); + passthru("echo " . escapeshellarg($_REQUEST['content']) . " | tidy -q -i -u -wrap 9999 -utf8 -bare -asxhtml 2>/dev/null", $result); + $content = ob_get_contents(); + ob_end_clean(); + + if(strlen($content) < 4) + { + // Tidy on the local machine failed, try a post + $res_1 + = PostIt( + array + ( + '_function' => 'tidy', + '_html' => $_REQUEST['content'], + 'char-encoding' => 'utf8', + '_output' => 'warn', + 'indent' => 'auto', + 'wrap' => 9999, + 'break-before-br' => 'y', + 'bare' => 'n', + 'word-2000' => 'n', + 'drop-empty-paras' => 'y', + 'drop-font-tags' => 'n', + + ), + 'http://infohound.net/tidy/tidy.pl'); + + if(preg_match('/ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/TableOperations/TableOperations.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/TableOperations/TableOperations.js new file mode 100644 index 0000000000..cb6b5bfc9a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/plugins/TableOperations/TableOperations.js @@ -0,0 +1,974 @@ +// Table Operations Plugin for HTMLArea-3.0 +// Implementation by Mihai Bazon. Sponsored by http://www.bloki.com +// +// htmlArea v3.0 - Copyright (c) 2002 interactivetools.com, inc. +// This notice MUST stay intact for use (see license.txt). +// +// A free WYSIWYG editor replacement for
    '; + +if (param["f_affcode"]) string2 = string2 + Xinha._lc("GUIDO Code","NoteServer") + " : " + param["f_code"] + "
    "; +if (param["f_midi"]) string2 = string2 + "
    " + Xinha._lc("MIDI File","NoteServer") + "
    "; + + editor.focusEditor(); + editor.insertHTML(string2); + + //var html = linktext.link(stringmidi); + //editor.insertHTML(html); +} + +// this routine includes the applet-definition +function IncludeGuidoStringAsApplet(editor, gmnstring, zoom) { + gmnstring = escape(gmnstring); + gmnstring = gmnstring.replace(/\//g,"%2F"); + + var string = '' + + "" + + "" + + "" + + '' + + '' + + "" + + ""; + alert(string); + editor.focusEditor(); + editor.insertHTML(string); +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/img/note.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/img/note.gif new file mode 100644 index 0000000000..e3c117a7c5 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/img/note.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/b5.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/b5.js new file mode 100644 index 0000000000..7a406d92f8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/b5.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "b5", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ch.js new file mode 100644 index 0000000000..406d476ea2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ch.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消", + "OK": "好", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/cz.js new file mode 100644 index 0000000000..5c1a759026 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/cz.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/da.js new file mode 100644 index 0000000000..af7626d585 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/da.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller", + "Image Preview": "Billede smugkig:", + "OK": "OK", + "Preview": "Smugkig", + "Preview the image in a new window": "Smugkig af billedet i et nyt vindue", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/de.js new file mode 100644 index 0000000000..b96d88f168 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/de.js @@ -0,0 +1,30 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Add GUIDO Code in a textbox on the page": "GUIDO Code in einer Textbox auf der Seite anzeigen", + "Add MIDI link to allow students to hear the music": "MIDI-Link hinzufügen um Studenten das hören der Musik zu ermöglichen", + "Cancel": "Abbrechen", + "Format": "Format", + "Guido code": "Guido code", + "Image Preview": "Bild Voransicht", + "Image in applet": "Bild im Applet", + "Insert GUIDO Music Notation": "Einfügung einer GUIDO Musik-Tonfolge", + "MIDI File": "MIDI Datei", + "OK": "OK", + "Options": "Einstellungen", + "Preview": "Voransicht", + "Preview the image in a new window": "Voransicht des Bildes in einem neuen Fenster", + "Source Code": "Quell-Code", + "Zoom": "Zoom", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ee.js new file mode 100644 index 0000000000..c53d7ce7cf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ee.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/el.js new file mode 100644 index 0000000000..5dc6d9dce3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/el.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση", + "OK": "Εντάξει", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/es.js new file mode 100644 index 0000000000..66ba9ce575 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/es.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "Image Preview": "Previsualización de la imagen:", + "OK": "Aceptar", + "Preview": "Previsualizar", + "Preview the image in a new window": "Previsualizar en una nueva ventana", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/eu.js new file mode 100644 index 0000000000..c14bfcaed8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/eu.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi", + "Image Preview": "Irudiaren aurrebista:", + "OK": "Ados", + "Preview": "Aurrebista", + "Preview the image in a new window": "Aurreikusi irudia beste lehio batean", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fa.js new file mode 100644 index 0000000000..61893d0458 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fa.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف", + "Image Preview": "پیش نمایش تصویر", + "OK": "بله", + "Preview": "پیش نمایش", + "Preview the image in a new window": "پیش نمایش تصویر در پنجره ای جدید", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fi.js new file mode 100644 index 0000000000..938da3dd88 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fi.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta", + "OK": "Hyväksy", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fr.js new file mode 100644 index 0000000000..d92802e511 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fr.js @@ -0,0 +1,30 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Add GUIDO Code in a textbox on the page": "Ajouter le code source GUIDO dans un cadre", + "Add MIDI link to allow students to hear the music": "Ajouter un lien MIDI pour permettre aux étudiants d'écouter la partition", + "Cancel": "Annuler", + "Format": "Format", + "Guido code": "Code Guido", + "Image Preview": "Aperçu de l'image", + "Image in applet": "Image dans une applet", + "Insert GUIDO Music Notation": "Insérer une partition musicale GUIDO", + "MIDI File": "Fichier MIDI", + "OK": "OK", + "Options": "Options", + "Preview": "Aperçu ", + "Preview the image in a new window": "Prévisualiser l'image dans une nouvelle fenêtre", + "Source Code": "Code source", + "Zoom": "Zoom", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fr_ca.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fr_ca.js new file mode 100644 index 0000000000..cf98868ded --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/fr_ca.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fr_ca", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/gb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/gb.js new file mode 100644 index 0000000000..77eaf9a2a9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/gb.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "gb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/he.js new file mode 100644 index 0000000000..3397bd1537 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/he.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול", + "OK": "אישור", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/hu.js new file mode 100644 index 0000000000..9b6a7358d4 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/hu.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem", + "OK": "Rendben", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/it.js new file mode 100644 index 0000000000..57ec68e47b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/it.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ja.js new file mode 100644 index 0000000000..8a4a549bcb --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ja.js @@ -0,0 +1,31 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Add GUIDO Code in a textbox on the page": "ページ内のテキストボックスにGUIDOコードを追加", + "Add MIDI link to allow students to hear the music": "MIDIへのリンクを追加し、楽曲を聴かせてもよい", + "Cancel": "中止", + "Format": "フォーマット", + "Guido code": "GUIDOコード", + "Image Preview": "画像プレビュー", + "Image in applet": "アプレット画像", + "Insert GUIDO Music Notation": "GUIDO Music Notationの挿入", + "MIDI File": "MIDIファイル", + "OK": "OK", + "Options": "オプション", + "Preview": "表示", + "Preview the image in a new window": "ウィンドウで画像を表示", + "Source Code": "ソースコード", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "Mozillaではエディタ内にアプレットは表示されませんが、送信後のWebページ内では有効です。", + "Zoom": "拡大率:", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/lc_base.js new file mode 100644 index 0000000000..7110203750 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/lc_base.js @@ -0,0 +1,46 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "100%": "", + "120%": "", + "150%": "", + "80%": "", + "Add GUIDO Code in a textbox on the page": "", + "Add MIDI link to allow students to hear the music": "", + "Cancel": "", + "Format": "", + "GUIDO Code": "", + "Guido code": "", + "Image Preview": "", + "Image in applet": "", + "Insert GUIDO Music Notation": "", + "MIDI File": "", + "OK": "", + "Options": "", + "Preview": "", + "Preview the image in a new window": "", + "Source Code": "", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "", + "Zoom": "", + "Zoom :": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/lt.js new file mode 100644 index 0000000000..bb660b7e1b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/lt.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/lv.js new file mode 100644 index 0000000000..5de40aa1cc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/lv.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt", + "OK": "Labi", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/nb.js new file mode 100644 index 0000000000..5432cd77ab --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/nb.js @@ -0,0 +1,29 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Add GUIDO Code in a textbox on the page": "Sett inn GUIDO-kode i et tekstfelt på siden", + "Add MIDI link to allow students to hear the music": "Legg til MIDI-link for at studenter kan høre musikken", + "Cancel": "Avbryt", + "Format": "Format", + "Guido code": "GUIDO-kode", + "Image Preview": "Bilde forhåndsvisning", + "Image in applet": "Bilde i applet", + "Insert GUIDO Music Notation": "Sett inn GUIDO-noter", + "MIDI File": "MIDIfil", + "OK": "OK", + "Options": "Muligheter", + "Preview": "Preview", + "Source Code": "Kildekode", + "Zoom": "Forstørr", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/nl.js new file mode 100644 index 0000000000..0ef06d6362 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/nl.js @@ -0,0 +1,30 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Add GUIDO Code in a textbox on the page": "GUIDO code in een tekstgebied op de pagina invoegen", + "Add MIDI link to allow students to hear the music": "MIDI link invoegen om de muziek te beluisteren", + "Cancel": "Annuleren", + "Format": "Indeling", + "Guido code": "GUIDO-code", + "Image Preview": "Afbeeldingsvoorbeeld", + "Image in applet": "Afbeelding in applet", + "Insert GUIDO Music Notation": "GUIDO muziek notatie invoegen", + "MIDI File": "MIDI bestand", + "OK": "OK", + "Options": "Opties", + "Preview": "Voorbeeld", + "Preview the image in a new window": "Afbeelding bekijken in nieuw venster", + "Source Code": "Broncode", + "Zoom": "Vergroot/verklein", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/pl.js new file mode 100644 index 0000000000..8ec9c93d75 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/pl.js @@ -0,0 +1,21 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anuluj", + "Image Preview": "Podgląd obrazka:", + "OK": "OK", + "Options": "Opcje", + "Preview": "Podgląd", + "Preview the image in a new window": "Podgląd obrazka w nowym oknie", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/pt_br.js new file mode 100644 index 0000000000..4660ee722f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/pt_br.js @@ -0,0 +1,33 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Add GUIDO Code in a textbox on the page": "Adicionar código GUIDO em uma caixa de texto na página", + "Add MIDI link to allow students to hear the music": "Adicionar um link MIDI para permitir que os estudantes escutem a música", + "Cancel": "Cancelar", + "Format": "Formato", + "GUIDO Code": "Código GUIDO", + "Guido code": "Código Guido", + "Image Preview": "Visualização da Imagem", + "Image in applet": "Imagem em Applet", + "Insert GUIDO Music Notation": "Inserir Notação GUIDO de Música", + "MIDI File": "Arquivo MIDI", + "OK": "OK", + "Options": "Opções", + "Preview": "Visualização", + "Preview the image in a new window": "Visualizar imagem em uma nova janela", + "Source Code": "Codigo Fonte", + "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "Com Mozilla, o applet não estará visível no editor, somente na Página Web depois do envio.", + "Zoom": "Ampliação", + "Zoom :": "Ampliação :", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ro.js new file mode 100644 index 0000000000..2d09411ab6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ro.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă", + "OK": "Acceptă", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ru.js new file mode 100644 index 0000000000..d761ad90c8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/ru.js @@ -0,0 +1,21 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена", + "Image Preview": "Предварительный просмотр", + "OK": "OK", + "Options": "Опции", + "Preview": "Предварительный просмотр", + "Preview the image in a new window": "Предварительный просмотр в отдельном окне", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/sh.js new file mode 100644 index 0000000000..4018039856 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/sh.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi", + "Image Preview": "Pregled slike", + "OK": "OK", + "Preview": "Pregled", + "Preview the image in a new window": "Pregledaj sliku u novom prozoru", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/si.js new file mode 100644 index 0000000000..09f9893907 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/si.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči", + "OK": "V redu", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/sr.js new file mode 100644 index 0000000000..8e68152e11 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/sr.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи", + "Image Preview": "Преглед слике", + "OK": "OK", + "Preview": "Преглед", + "Preview the image in a new window": "Прегледај слику у новом прозору", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/sv.js new file mode 100644 index 0000000000..c9de08db34 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/sv.js @@ -0,0 +1,21 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "Image Preview": "Förhandsgranskning:", + "OK": "OK", + "Options": "Välj", + "Preview": "Förhandsgranska", + "Preview the image in a new window": "Öppna bild i nytt fönster", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/th.js new file mode 100644 index 0000000000..ef04db2b17 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/th.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก", + "OK": "ตกลง", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/tr.js new file mode 100644 index 0000000000..e2d0c6e109 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/tr.js @@ -0,0 +1,20 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal", + "Image Preview": "Resim önizleme:", + "OK": "Tamam", + "Preview": "Önizleme", + "Preview the image in a new window": "Resmi yeni pencerede önizleme", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/vn.js new file mode 100644 index 0000000000..861fdfe7c8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/vn.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy", + "OK": "Đồng ý", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/zh_cn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/zh_cn.js new file mode 100644 index 0000000000..5d2e1c7e7d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/lang/zh_cn.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "zh_cn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** NOTESERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/popups/codenote.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/popups/codenote.html new file mode 100644 index 0000000000..3f1ba5f3f5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/NoteServer/popups/codenote.html @@ -0,0 +1,162 @@ + + + + +Insert GUIDO Music Notation + + + + + + + + +
    Insert GUIDO Music Notation
    + +Guido code : +

    + +
    +
    +Options + Add MIDI link to allow students to hear the music +
    + Add GUIDO Code in a textbox on the page +
    +
    + +
    +Format + Image in applet +
    + Zoom : + +
    +
    + +
    + + + + + + + + + + +
    + Image Preview:
    + +
    +
    +
    + +
    +

    Sample Guido Codes:

    +

    Code Sample 1 or type [ do re mi fa sol la si ] | Code Sample 2

    +

    Resources:

    +

    The Guido Specification (PDF) | (HTML)

    +

    GUIDO Music Notation Format Site | Guido Note Server | SourceForge Homepage

    +
    + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSFixed/PSFixed.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSFixed/PSFixed.js new file mode 100644 index 0000000000..ad41cf1965 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSFixed/PSFixed.js @@ -0,0 +1,147 @@ +/** + * PSFixed PSFixed.js file. + * This plugin is a fake persistent storage backed. It is configured with a + * fixed list of stored objects and presents them to the user for insertion. + * A sample config is below: + * + * PSFixed.config = { + * 'xinha.png': { + * $type: 'image', + * URL: 'http://trac.xinha.org/chrome/common/trac_banner.png' + * }, + * 'browser': { + * $type: 'folder', + * 'firefox.png': { + * $type: 'image', + * URL: 'http://www.mozilla.com/img/tignish/firefox/vs-firefox-logo.png' + * } + * } + * } + */ +(function() { +var PSFixed = window.PSFixed = function PSFixed(editor) { + this.editor = editor; +} + +PSFixed._pluginInfo = { + name : "PSFixed", + version : "2.0", + developer : "Douglas Mayle", + developer_url : "http://xinha.org", + license : "BSD" +}; + +PSFixed.prototype.onGenerateOnce = function () { + // We use _prepareDialog to asynchronously load the dialog markup and then + // perform necessary processing. + this._registerBackend(); +}; + +PSFixed.prototype._registerBackend = function(timeWaited) { + var editor = this.editor; + var self = this; + + if (!timeWaited) { + timeWaited = 0; + } + + // Retry over a period of ten seconds to register. We back off exponentially + // to limit resouce usage in the case of misconfiguration. + var registerTimeout = 10000; + + if (timeWaited > registerTimeout) { + // This is most likely a configuration error. We're loaded and + // PersistentStorage is not. + return; + } + + if (!editor.plugins['PersistentStorage'] || + !editor.plugins['PersistentStorage'].instance || + !editor.plugins['PersistentStorage'].instance.ready) { + + window.setTimeout(function() {self._registerBackend(timeWaited ? timeWaited*2 : 50);}, timeWaited ? timeWaited : 50); + return; + } + editor.plugins['PersistentStorage'].instance.registerBackend('PSFixed', this); +} + +PSFixed.prototype.loadData = function (asyncCallback) { + // We don't expect the user to set the type on the root folder, so we set it + // ourselves. + if (!this.config.$type) { + this.config.$type = 'folder'; + } + asyncCallback(this.config); +} + +var treeRecurse = function treeRecurse(tree, callback, root) { + if (typeof root == 'undefined') { + root = '/'; + callback('/', '', tree); + } + + for (var key in tree) { + callback(root, key, tree[key]); + + if (tree[key].$type == 'folder') { + treeRecurse(tree[key], callback, root + key + '/'); + } + } +}; + +PSFixed.prototype.getFilters = function(dirTree) { + var filters = []; + + treeRecurse(dirTree, function(path, key, value) { + if (value.$type != 'folder') { + return; + } + + var filePath = key.length ? path + key + '/' : path; + filters.push({ + value: filePath, + display: filePath + }); + }); + + return filters; +} + +PSFixed.prototype.getMetadata = function(dirTree, filterPath) { + var editor = this.editor; + var self = this; + + var metadata = []; + + treeRecurse(dirTree, function(path, key, value) { + if (!value.$type || !key) { + // This is a builtin property of objects, not one returned by the + // backend. + return; + } + + if (path != filterPath) { + return; + } + + if (value.$type == 'folder') { + metadata.push({ + URL: self.editor.imgURL('folder.gif', 'PersistentStorage'), + name: key, + key: path + key, + $type: value.$type + }); + } else { + metadata.push({ + URL: value.URL, + name: key, + key: path + key, + $type: value.$type + }); + } + }); + + return metadata; +} + +})(); diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/PSLocal.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/PSLocal.js new file mode 100644 index 0000000000..d9ebe53bca --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/PSLocal.js @@ -0,0 +1,355 @@ +/** + * PSLocal PSLocal.js file. + * This plugin is a Gears based local persistent storage backend. + */ +(function() { +var PSLocal = window.PSLocal = function PSLocal(editor) { + this.editor = editor; + + this.config = { + capabilities: { + directory_operations: true, + file_operations: true, + image_operations: false, + upload_operations: true, + import_operations: false, + user_publish: false, + shared_publish: false, + user_storage: true + }, + displayName: 'Local' + } +} + +PSLocal._pluginInfo = { + name : "PSLocal", + version : "2.0", + developer : "Douglas Mayle", + developer_url : "http://xinha.org", + license : "BSD" +}; + +PSLocal.prototype.onGenerateOnce = function () { + // We use _prepareBackend to asynchronously load the Gears backend. + this._prepareBackend(); +}; + +PSLocal.prototype._showGearsButton = function() { + var self = this; + var editor = this.editor; + + editor.config.registerButton({ + id : 'localstorage', + tooltip : Xinha._lc( 'Learn About Local Storage', 'PSLocal' ), + image : [_editor_url + editor.config.imgURL + 'ed_buttons_main.png',2,8], + textMode : true, + action : function() { self.learnDialog(); } + } + ); + editor.config.addToolbarElement('localstorage', 'fullscreen', 1); + + // Since this is after the editor load, we have to trigger an udate manually... + editor._rebuildToolbar(); +} + +PSLocal.prototype._prepareBackend = function() { + var self = this; + var editor = this.editor; + + if (!this.gears_init) { + this.gears_init = true; + Xinha._loadback(Xinha.getPluginDir("PSLocal") + "/gears_init.js", + function() { + self._prepareBackend(); + }); + return; + } + + if (!window.google || !google.gears) { + // No gears, so no need to register. We'll register a button, however, to + // enable users to learn about the support we offer. + this._showGearsButton(); + return; + } + + if (!google.gears.factory.hasPermission) { + if (!google.gears.factory.getPermission('Xinha', editor.imgURL('/images/xinha-small-icon.gif'), Xinha._lc( 'Enable Gears in order to use local document storage and configuration.', 'PSLocal' ))) { + // The user has denied access to Gears. We'll give them a UI to allow + // them to change their mind. + this._showGearsButton(); + return; + } + } + + this.workerPool = google.gears.factory.create('beta.workerpool', '1.0'); + + this.remoteStorageWorker = this.workerPool.createWorkerFromUrl("http://xinhadocs.org/worker.js"); + + this._registerBackend(); +} + +PSLocal.prototype.learnDialog = function(timeWaited) { + var self = this; + var editor = this.editor; + + if (!this.html) { + Xinha._getback(Xinha.getPluginDir("PSLocal") + "/dialog.html", + function(getback) { + self.html = getback; + self.learnDialog(); + }); + return; + } + + if (this.dialog) { + this.dialog.show(); + return; + } + + this.dialog = new Xinha.Dialog(editor, this.html, "PersistentStorage", + {width: 700, + closeOnEscape: true, + resizable: true, + centered: true, + modal: true + }); + + var link = this.dialog.getElementById('GearsLink'); + + // Tack on our URL so that Google will return here after installation. + link.href += location.href; + + var button = this.dialog.getElementById("confirm"); + if (window.google && google.gears) { + Xinha._addClass(this.dialog.getElementById('InstallText'), 'hidden'); + // The user has gears installed, but has denied us access to it, so we'll + // give them the option to change their mind. + button.value = Xinha._lc('Enable', 'PSLocal'); + + button.onclick = function() { + // The user gave us permission, so we'll reload the page. + if (confirm(Xinha._lc('This will reload the page, causing you to lose any unsaved work. Press "OK" to reload.', 'PSLocal' ))) { + window.location.reload(true); + } + } + } else { + Xinha._addClass(this.dialog.getElementById('EnableText'), 'hidden'); + // Gears isn't installed, so we'll build the dialog to prompt installation. + button.value = Xinha._lc('Install', 'PSLocal'); + + button.onclick = function() { + location.href = link.href; + } + } + + var cancel = this.dialog.getElementById('cancel'); + cancel.onclick = function() { + self.dialog.hide(); + } + + this.dialog.show(); +} + +PSLocal.prototype._registerBackend = function(timeWaited) { + var editor = this.editor; + var self = this; + + if (!timeWaited) { + timeWaited = 0; + } + + // Retry over a period of ten seconds to register. We back off exponentially + // to limit resouce usage in the case of misconfiguration. + var registerTimeout = 10000; + + if (timeWaited > registerTimeout) { + // This is most likely a configuration error. We're loaded and + // PersistentStorage is not. + return; + } + + if (!editor.plugins['PersistentStorage'] || + !editor.plugins['PersistentStorage'].instance || + !editor.plugins['PersistentStorage'].instance.ready) { + + window.setTimeout(function() {self._registerBackend(timeWaited ? timeWaited*2 : 50);}, timeWaited ? timeWaited : 50); + return; + } + var PS = editor.plugins['PersistentStorage'].instance; + var self = this; + + this.config.thumbURL = this.editor.imgURL('images/tango/32x32/places/folder.png'); + this.loadDocument({URL:'', name:'config.js', key:'/config.js'}, function(json) { + var userconfig = json ? eval('(' + json + ')') : false; + PS.registerBackend('PSLocal', self, self.config, userconfig); + }); +} + +PSLocal.prototype.loadDocument = function(entry, asyncCallback) { + + this.workerPool.onmessage = function(a, b, message) { + if (!message.body || !message.body.authorized) { + // Fail + asyncCallback(''); + } + + if (message.body.response) { + asyncCallback(message.body.response); + } else if (entry.URL) { + Xinha._getback(entry.URL, + function(documentSource) { + asyncCallback(documentSource); + }); + } else { + // Oops, no data :-( + asyncCallback(''); + } + } + + this.workerPool.sendMessage({func: 'loadDocument', entry: entry}, this.remoteStorageWorker); +} + +PSLocal.prototype.loadData = function (asyncCallback) { + this.workerPool.onmessage = function(a, b, message) { + if (!message.body || !message.body.authorized) { + // Fail + asyncCallback(''); + } + + asyncCallback({dirs: message.body.dirs, files: message.body.files}); + } + + this.workerPool.sendMessage({func: 'loadData'}, this.remoteStorageWorker); +} + +PSLocal.prototype.getFilters = function(filedata) { + // Clear out the previous directory listing. + var filters = [], paths = {}; + var dirList = filedata.dirs; + + for (var index=0; index 2) { + pathpart = pathpart.slice(0,pathpart.length-1).join('/'); + } else { + pathpart = '/'; + } + + var filepart = fileList[index].fullpath.split('/').slice(-1)[0]; + if (filterPath == pathpart) { + metadata.push({ + URL: fileList[index].url, + thumbURL: editor.imgURL('images/tango/32x32/mimetypes/text-x-generic.png'), + name: filepart, + key: fileList[index].fullpath, + $type: fileList[index].filetype + }); + } + } + + var dirList = filedata.dirs; + + for (var index=0; index 1 && dirList[index].split('/').length == 2; + } else { + // Chop the last component of the directory and compare against the filter. + var matches = dirList[index].split('/').slice(0,-1).join('/') == filterPath; + } + if (matches) { + metadata.push({ + name: dirList[index].split('/').slice(-1), + key: dirList[index], + $type: 'folder' + }); + } + } + + return metadata; +} + +PSLocal.prototype.saveDocument = function(parentpath, filename, documentSource, asyncCallback) { + this.workerPool.onmessage = function(a, b, message) { + if (!message.body || !message.body.authorized) { + // Fail + asyncCallback(false); + } + + if (asyncCallback) { + asyncCallback(message.body.response); + } + } + + this.workerPool.sendMessage({func: 'saveDocument', parentpath: parentpath, filename: filename, content:documentSource}, this.remoteStorageWorker); +} +PSLocal.prototype.deleteEntry = function(entry, asyncCallback) { + this.workerPool.onmessage = function(a, b, message) { + if (!message.body || !message.body.authorized) { + // Fail + asyncCallback(false); + } + + if (asyncCallback) { + asyncCallback(message.body.response); + } + } + + this.workerPool.sendMessage({func: 'deleteEntry', entry: entry}, this.remoteStorageWorker); +} + +PSLocal.prototype.makeFolder = function(currentPath, folderName, asyncCallback) { + this.workerPool.onmessage = function(a, b, message) { + if (!message.body || !message.body.authorized) { + // Fail + asyncCallback(false); + } + + if (asyncCallback) { + asyncCallback(true); + } + } + + this.workerPool.sendMessage({func: 'makeFolder', parentpath: currentPath, dirname: folderName}, this.remoteStorageWorker); +} + +PSLocal.prototype.copyEntry = function(entry, asyncCallback) { + this.workerPool.onmessage = function(a, b, message) { + if (!message.body || !message.body.authorized) { + // Fail + asyncCallback(false); + } + + if (asyncCallback) { + asyncCallback(message.body.response, message.body.entry); + } + } + + this.workerPool.sendMessage({func: 'copyEntry', entry: entry}, this.remoteStorageWorker); +} + +})(); diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/dialog.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/dialog.html new file mode 100644 index 0000000000..8e8113852e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/dialog.html @@ -0,0 +1,6 @@ +

    Enabling Local Storage

    +

    Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.

    +

    To learn more about Gears, and enable this functionality on your system, please see http://gears.google.com or click "Install" below.

    +

    To enable Gears for this website, click "Enable" to reload the page then enable Gears.. Since the page will be refreshed, please be sure to save any unfinished work.

    + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/gears_init.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/gears_init.js new file mode 100644 index 0000000000..5f44f09b4b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/gears_init.js @@ -0,0 +1,86 @@ +// Copyright 2007, Google Inc. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// 3. Neither the name of Google Inc. nor the names of its contributors may be +// used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Sets up google.gears.*, which is *the only* supported way to access Gears. +// +// Circumvent this file at your own risk! +// +// In the future, Gears may automatically define google.gears.* without this +// file. Gears may use these objects to transparently fix bugs and compatibility +// issues. Applications that use the code below will continue to work seamlessly +// when that happens. + +(function() { + // We are already defined. Hooray! + if (window.google && google.gears) { + return; + } + + var factory = null; + + // Firefox + if (typeof GearsFactory != 'undefined') { + factory = new GearsFactory(); + } else { + // IE + try { + factory = new ActiveXObject('Gears.Factory'); + // privateSetGlobalObject is only required and supported on WinCE. + if (factory.getBuildInfo().indexOf('ie_mobile') != -1) { + factory.privateSetGlobalObject(this); + } + } catch (e) { + // Safari + if ((typeof navigator.mimeTypes != 'undefined') + && navigator.mimeTypes["application/x-googlegears"]) { + factory = document.createElement("object"); + factory.style.display = "none"; + factory.width = 0; + factory.height = 0; + factory.type = "application/x-googlegears"; + document.documentElement.appendChild(factory); + } + } + } + + // *Do not* define any objects if Gears is not installed. This mimics the + // behavior of Gears defining the objects in the future. + if (!factory) { + return; + } + + // Now set up the objects, being careful not to overwrite anything. + // + // Note: In Internet Explorer for Windows Mobile, you can't add properties to + // the window object. However, global objects are automatically added as + // properties of the window object in all browsers. + if (!window.google) { + google = {}; + } + + if (!google.gears) { + google.gears = {factory: factory}; + } +})(); diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/b5.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/b5.js new file mode 100644 index 0000000000..7c32fc5282 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/b5.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "b5", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ch.js new file mode 100644 index 0000000000..703496aea8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ch.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/cz.js new file mode 100644 index 0000000000..aa82d260e8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/cz.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/da.js new file mode 100644 index 0000000000..c15b3b13de --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/da.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/de.js new file mode 100644 index 0000000000..3f0056ebff --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/de.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Abbrechen", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ee.js new file mode 100644 index 0000000000..c19679b7d1 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ee.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/el.js new file mode 100644 index 0000000000..4bb6ebaa6a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/el.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/es.js new file mode 100644 index 0000000000..f9f7603e7b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/es.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/eu.js new file mode 100644 index 0000000000..676a5b23b5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/eu.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fa.js new file mode 100644 index 0000000000..f9e87f570d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fa.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fi.js new file mode 100644 index 0000000000..c1c68e91c6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fi.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fr.js new file mode 100644 index 0000000000..e38c4887b8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fr.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuler", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fr_ca.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fr_ca.js new file mode 100644 index 0000000000..276d37b7ce --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/fr_ca.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fr_ca", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/gb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/gb.js new file mode 100644 index 0000000000..dd1ba3fb41 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/gb.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "gb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/he.js new file mode 100644 index 0000000000..116dea683b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/he.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/hu.js new file mode 100644 index 0000000000..702caa636c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/hu.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/it.js new file mode 100644 index 0000000000..b2045d2df8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/it.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ja.js new file mode 100644 index 0000000000..195b20350e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ja.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "中止", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/lc_base.js new file mode 100644 index 0000000000..b84dc110fc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/lc_base.js @@ -0,0 +1,33 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Cancel": "", + "Confirm": "", + "Enable": "", + "Enable Gears in order to use local document storage and configuration.": "", + "Enabling Local Storage": "", + "Install": "", + "Learn About Local Storage": "", + "This will reload the page, causing you to lose any unsaved work. Press \"OK\" to reload.": "", + "Xinha uses Google Gears to enable local document storage. With Gears installed, you can save drafts of your documents on your hard drive, configure Xinha to look the way you want, and carry this information wherever you use Xinha on the web.": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/lt.js new file mode 100644 index 0000000000..44fd02e96b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/lt.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/lv.js new file mode 100644 index 0000000000..162ace6f63 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/lv.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/nb.js new file mode 100644 index 0000000000..c78e1e0807 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/nb.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/nl.js new file mode 100644 index 0000000000..0f39f953ea --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/nl.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuleren", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/pl.js new file mode 100644 index 0000000000..efc8b8428b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/pl.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anuluj", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/pt_br.js new file mode 100644 index 0000000000..675ac40914 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/pt_br.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ro.js new file mode 100644 index 0000000000..a08bd65a18 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ro.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ru.js new file mode 100644 index 0000000000..fc35cb13a6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/ru.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/sh.js new file mode 100644 index 0000000000..da9ad44c66 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/sh.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/si.js new file mode 100644 index 0000000000..da484131b5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/si.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/sr.js new file mode 100644 index 0000000000..3d02c61503 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/sr.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/sv.js new file mode 100644 index 0000000000..7fe72e3369 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/sv.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/th.js new file mode 100644 index 0000000000..83718c7a5a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/th.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/tr.js new file mode 100644 index 0000000000..cef4e038f2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/tr.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/vn.js new file mode 100644 index 0000000000..0e4ced5500 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/vn.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/zh_cn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/zh_cn.js new file mode 100644 index 0000000000..d307ffd7db --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSLocal/lang/zh_cn.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "zh_cn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSLOCAL IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/PSServer.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/PSServer.js new file mode 100644 index 0000000000..639cec88c1 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/PSServer.js @@ -0,0 +1,282 @@ +/** + * PSServer PSServer.js file. + * This plugin is a server based persistent storage backend. + */ +(function() { +var PSServer = window.PSServer = function PSServer(editor) { + this.editor = editor; +} + +PSServer._pluginInfo = { + name : "PSServer", + version : "2.0", + developer : "Douglas Mayle", + developer_url : "http://xinha.org", + license : "MIT" +}; + +PSServer.prototype.onGenerateOnce = function () { + // We use _loadConfig to asynchronously load the config and then register the + // backend. + this._loadConfig(); +}; + +PSServer.prototype._loadConfig = function() { + var self = this; + if (!this._serverConfig) { + Xinha._getback(Xinha.getPluginDir("PSServer") + "/config.inc.php", + function(config) { + self._serverConfig = eval('(' + config + ')'); + self._serverConfig.user_affinity = 20; + self._serverConfig.displayName = 'Server'; + self._loadConfig(); + }); + return; + } + + this._registerBackend(); +} + +PSServer.prototype._registerBackend = function(timeWaited) { + var editor = this.editor; + var self = this; + + if (!timeWaited) { + timeWaited = 0; + } + + // Retry over a period of ten seconds to register. We back off exponentially + // to limit resouce usage in the case of misconfiguration. + var registerTimeout = 10000; + + if (timeWaited > registerTimeout) { + // This is most likely a configuration error. We're loaded and + // PersistentStorage is not. + return; + } + + if (!editor.plugins['PersistentStorage'] || + !editor.plugins['PersistentStorage'].instance || + !editor.plugins['PersistentStorage'].instance.ready) { + + window.setTimeout(function() {self._registerBackend(timeWaited ? timeWaited*2 : 50);}, timeWaited ? timeWaited : 50); + return; + } + editor.plugins['PersistentStorage'].instance.registerBackend('PSServer', this, this._serverConfig); +} + +PSServer.prototype.loadData = function (asyncCallback) { + var self = this; + Xinha._getback(Xinha.getPluginDir("PSServer") + "/backend.php?directory&listing", + function(json) { + self.dirTree = eval('(' + json + ')'); + asyncCallback(self.dirTree); + }); +} + +var treeRecurse = function treeRecurse(tree, callback, root) { + if (typeof root == 'undefined') { + root = '/'; + callback('/', '', tree); + } + + for (var key in tree) { + callback(root, key, tree[key]); + + if (tree[key].$type == 'folder') { + treeRecurse(tree[key], callback, root + key + '/'); + } + } +}; + +PSServer.prototype.getFilters = function(dirTree) { + // Clear out the previous directory listing. + var filters = []; + + treeRecurse(dirTree, function(path, key, value) { + if (value.$type != 'folder') { + return; + } + + var filePath = key.length ? path + key + '/' : path; + var filePathDisplay = key.length ? path + key + '/' : path; + if (filePathDisplay.length > 1) { + filePathDisplay = filePathDisplay.substring(0, filePathDisplay.length-1); + } + filters.push({ + value: filePath, + display: filePathDisplay + }); + }); + + return filters; +} + +PSServer.prototype.loadDocument = function(entry, asyncCallback) { + + Xinha._getback(entry.URL, + function(documentSource) { + asyncCallback(documentSource); + }); +} +PSServer.prototype.getMetadata = function(dirTree, pathFilter, typeFilter) { + var editor = this.editor; + var self = this; + + var metadata = []; + + var typeKeys = {}; + for (var index=0; index + // File: + // + // + var iframeID = dialog.createId('importFrame'); + + var form = document.createElement('form'); + form.setAttribute('enctype', 'multipart/form-data'); + form.setAttribute('method', 'post'); + form.setAttribute('action', Xinha.getPluginDir("PSServer") + "/backend.php?upload&replace=true&"); + + var fileentry = document.createElement('input'); + fileentry.setAttribute('type', 'file'); + fileentry.setAttribute('name', 'filedata'); + + var submitbutton = document.createElement('input'); + submitbutton.setAttribute('type', 'submit'); + submitbutton.setAttribute('value',Xinha._lc('Import', 'PSServer')); + + var filetext = document.createTextNode(Xinha._lc('File: ', 'PSServer')); + filetext = form.appendChild(filetext); + + fileentry = form.appendChild(fileentry); + + submitbutton = form.appendChild(submitbutton); + + form = element.appendChild(form); + form.setAttribute('target', iframeID); + + // The iframe must be added to the document after the form has been, or the targeting fails. + var iframe = document.createElement('iframe'); + iframe.setAttribute('src', 'about:blank'); + iframe.style.display = 'none'; + iframe.id = iframe.name = iframeID; + iframe.onload = function() { + var docCheck = iframe.contentDocument || iframe.contentWindow; + if (docCheck.location.href == 'about:blank') { + return; + } + // What to do on import? Add an entry to the UI, I guess... + alert('Add entry here'); + } + iframe = element.appendChild(iframe); + +} + +PSServer.prototype.saveDocument = function(path, filename, documentSource, asyncCallback) { + Xinha._postback(Xinha.getPluginDir("PSServer") + "/backend.php?upload&replace=true&filedata=" + escape(documentSource)+"&filename="+escape(path + filename), + null, + function(response) { + asyncCallback(true); + }, + function(response) { + asyncCallback(false); + }); +} + +PSServer.prototype.makeFolder = function(currentPath, folderName, asyncCallback) { + Xinha._postback(Xinha.getPluginDir("PSServer") + "/backend.php?directory&create&dirname="+escape(currentPath + '/' + folderName), + null, + function(response) { + asyncCallback(true); + }, + function(response) { + asyncCallback(false); + }); +} + +PSServer.prototype.deleteEntry = function(entry, asyncCallback) { + Xinha._postback(Xinha.getPluginDir("PSServer") + "/backend.php?file&delete&filename="+escape(entry.key), + null, + function(response) { + asyncCallback(true); + }, + function(response) { + asyncCallback(false); + }); +} + +PSServer.prototype.moveEntry = function(entry, container, asyncCallback) { + Xinha._postback(Xinha.getPluginDir("PSServer") + "/backend.php?file&rename&filename="+escape(entry.key)+'&newname='+escape(container.key + '/' + entry.name), + null, + function(json) { + asyncCallback(true); + }, + function(json) { + asyncCallback(false); + }); +} + +PSServer.prototype.copyEntry = function(entry, asyncCallback) { + Xinha._postback(Xinha.getPluginDir("PSServer") + "/backend.php?file©&filename="+escape(entry.key), + null, + function(json) { + var newentry = eval('(' + json + ')'); + asyncCallback(true, newentry); + }, + function(json) { + var newentry = eval('(' + json + ')'); + asyncCallback(false, newentry); + }); +} + +})(); diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/backend.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/backend.php new file mode 100644 index 0000000000..f78ed9f288 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/backend.php @@ -0,0 +1,830 @@ + + * @version 1.0 + * @package PersistentStorage + * + */ + +/** + * Config file + */ +require_once('config.inc.php'); + + +// Strip slashes if MQGPC is on +set_magic_quotes_runtime(0); +if(get_magic_quotes_gpc()) +{ + $to_clean = array(&$_GET, &$_POST, &$_REQUEST, &$_COOKIE); + while(count($to_clean)) + { + $cleaning =& $to_clean[array_pop($junk = array_keys($to_clean))]; + unset($to_clean[array_pop($junk = array_keys($to_clean))]); + foreach(array_keys($cleaning) as $k) + { + if(is_array($cleaning[$k])) + { + $to_clean[] =& $cleaning[$k]; + } + else + { + $cleaning[$k] = stripslashes($cleaning[$k]); + } + } + } +} + +// Set the return headers for a JSON response. +header('Cache-Control: no-cache, must-revalidate'); +header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); +//header('Content-type: application/json'); + + +/**#@+ + * Constants + * + * Since this is being used as part of a web interface, we'll set some rather + * conservative limits to keep from overloading the user or the backend. + */ + +/** + * This is the maximum folder depth to present to the user + */ +define('MAX_DEPTH', 10); + +/** + * This is the maximum number of file entries per folder to show to the user, + */ +define('MAX_FILES_PER_FOLDER', 50); + +/** + * This array contains the default HTTP Response messages + * + */ +$HTTP_ERRORS = array( + 'HTTP_SUCCESS_OK' => array('code' => 200, 'message' => 'OK'), + 'HTTP_SUCCESS_CREATED' => array('code' => 201, 'message' => 'Created'), + 'HTTP_SUCCESS_ACCEPTED' => array('code' => 202, 'message' => 'Accepted'), + 'HTTP_SUCCESS_NON_AUTHORITATIVE' => array('code' => 203, 'message' => 'Non-Authoritative Information'), + 'HTTP_SUCCESS_NO_CONTENT' => array('code' => 204, 'message' => 'No Content'), + 'HTTP_SUCCESS_RESET_CONTENT' => array('code' => 205, 'message' => 'Reset Content'), + 'HTTP_SUCCESS_PARTIAL_CONTENT' => array('code' => 206, 'message' => 'Partial Content'), + + 'HTTP_REDIRECTION_MULTIPLE_CHOICES' => array('code' => 300, 'message' => 'Multiple Choices'), + 'HTTP_REDIRECTION_PERMANENT' => array('code' => 301, 'message' => 'Moved Permanently'), + 'HTTP_REDIRECTION_FOUND' => array('code' => 302, 'message' => 'Found'), + 'HTTP_REDIRECTION_SEE_OTHER' => array('code' => 303, 'message' => 'See Other'), + 'HTTP_REDIRECTION_NOT_MODIFIED' => array('code' => 304, 'message' => 'Not Modified'), + 'HTTP_REDIRECTION_USE_PROXY' => array('code' => 305, 'message' => 'Use Proxy'), + 'HTTP_REDIRECTION_UNUSED' => array('code' => 306, 'message' => '(Unused)'), + 'HTTP_REDIRECTION_TEMPORARY' => array('code' => 307, 'message' => 'Temporary Redirect'), + + 'HTTP_CLIENT_BAD_REQUEST' => array('code' => 400, 'message' => 'Bad Request'), + 'HTTP_CLIENT_UNAUTHORIZED' => array('code' => 401, 'message' => 'Unauthorized'), + 'HTTP_CLIENT_PAYMENT_REQUIRED' => array('code' => 402, 'message' => 'Payment Required'), + 'HTTP_CLIENT_FORBIDDEN' => array('code' => 403, 'message' => 'Forbidden'), + 'HTTP_CLIENT_NOT_FOUND' => array('code' => 404, 'message' => 'Not Found'), + 'HTTP_CLIENT_METHOD_NOT_ALLOWED' => array('code' => 405, 'message' => 'Method Not Allowed'), + 'HTTP_CLIENT_NOT_ACCEPTABLE' => array('code' => 406, 'message' => 'Not Acceptable'), + 'HTTP_CLIENT_PROXY_AUTH_REQUIRED' => array('code' => 407, 'message' => 'Proxy Authentication Required'), + 'HTTP_CLIENT_REQUEST_TIMEOUT' => array('code' => 408, 'message' => 'Request Timeout'), + 'HTTP_CLIENT_CONFLICT' => array('code' => 409, 'message' => 'Conflict'), + 'HTTP_CLIENT_GONE' => array('code' => 410, 'message' => 'Gone'), + 'HTTP_CLIENT_LENGTH_REQUIRED' => array('code' => 411, 'message' => 'Length Required'), + 'HTTP_CLIENT_PRECONDITION_FAILED' => array('code' => 412, 'message' => 'Precondition Failed'), + 'HTTP_CLIENT_REQUEST_TOO_LARGE' => array('code' => 413, 'message' => 'Request Entity Too Large'), + 'HTTP_CLIENT_REQUEST_URI_TOO_LARGE' => array('code' => 414, 'message' => 'Request-URI Too Long'), + 'HTTP_CLIENT_UNSUPPORTED_MEDIA_TYPE' => array('code' => 415, 'message' => 'Unsupported Media Type'), + 'HTTP_CLIENT_REQUESTED_RANGE_NOT_POSSIBLE' => array('code' => 416, 'message' => 'Requested Range Not Satisfiable'), + 'HTTP_CLIENT_EXPECTATION_FAILED' => array('code' => 417, 'message' => 'Expectation Failed'), + + 'HTTP_SERVER_INTERNAL' => array('code' => 500, 'message' => 'Internal Server Error'), + 'HTTP_SERVER_NOT_IMPLEMENTED' => array('code' => 501, 'message' => 'Not Implemented'), + 'HTTP_SERVER_BAD_GATEWAY' => array('code' => 502, 'message' => 'Bad Gateway'), + 'HTTP_SERVER_SERVICE_UNAVAILABLE' => array('code' => 503, 'message' => 'Service Unavailable'), + 'HTTP_SERVER_GATEWAY_TIMEOUT' => array('code' => 504, 'message' => 'Gateway Timeout'), + 'HTTP_SERVER_UNSUPPORTED_VERSION' => array('code' => 505, 'message' => 'HTTP Version not supported') + ); + +/** + * This is a regular expression used to detect reserved or dangerous filenames. + * Most NTFS special filenames begin with a dollar sign ('$'), and most Unix + * special filenames begin with a period (.), so we'll keep them out of this + * list and just prevent those two characters in the first position. The rest + * of the special filenames are included below. + */ +define('RESERVED_FILE_NAMES', 'pagefile\.sys|a\.out|core'); +/** + * This is a regular expression used to detect invalid file names. It's more + * strict than necessary, to be valid multi-platform, but not posix-strict + * because we want to allow unicode filenames. We do, however, allow path + * seperators in the filename because the file could exist in a subdirectory. + */ +define('INVALID_FILE_NAME','^[.$]|^(' . RESERVED_FILE_NAMES . ')$|[?%*:|"<>]'); +/**#@-*/ + +function main($arguments) { + $config = get_config(true); + + // Trigger authentication if it's configured. + if ($config['capabilities']['user_storage'] && empty($_SERVER['PHP_AUTH_USER'])) { + header('WWW-Authenticate: Basic realm="Xinha Persistent Storage"'); + header('HTTP/1.0 401 Unauthorized'); + echo "You must login in order to use Persistent Storage"; + exit; + } + if (!input_valid($arguments, $config['capabilities'])) { + http_error_exit(); + } + if (!method_valid($arguments)) { + http_error_exit('HTTP_CLIENT_METHOD_NOT_ALLOWED'); + } + if (!dispatch($arguments)) { + http_error_exit(); + } + exit(); +} + +main($_REQUEST + $_FILES); +// ************************************************************ +// ************************************************************ +// Helper Functions +// ************************************************************ +// ************************************************************ + +/** + * Take the call and properly dispatch it to the methods below. This method + * assumes valid input. + */ +function dispatch($arguments) { + if (array_key_exists('file', $arguments)) { + if (array_key_exists('rename', $arguments)) { + if (!file_directory_rename($arguments['filename'], $arguments['newname'], working_directory())) { + http_error_exit('HTTP_CLIENT_FORBIDDEN'); + } + return true; + } + if (array_key_exists('copy', $arguments)) { + if (!$newentry = file_copy($arguments['filename'], working_directory())) { + http_error_exit('HTTP_CLIENT_FORBIDDEN'); + } + echo json_encode($newentry); + return true; + } + if (array_key_exists('delete', $arguments)) { + if (!file_delete($arguments['filename'], working_directory())) { + http_error_exit('HTTP_CLIENT_FORBIDDEN'); + } + return true; + } + } + if (array_key_exists('directory', $arguments)) { + if (array_key_exists('listing', $arguments)) { + echo json_encode(directory_listing()); + return true; + } + if (array_key_exists('create', $arguments)) { + if (!directory_create($arguments['dirname'], working_directory())) { + http_error_exit('HTTP_CLIENT_FORBIDDEN'); + } + return true; + } + if (array_key_exists('delete', $arguments)) { + if (!directory_delete($arguments['dirname'], working_directory())) { + http_error_exit('HTTP_CLIENT_FORBIDDEN'); + } + return true; + } + if (array_key_exists('rename', $arguments)) { + if (!file_directory_rename($arguments['dirname'], $arguments['newname'], working_directory())) { + http_error_exit('HTTP_CLIENT_FORBIDDEN'); + } + return true; + } + } + if (array_key_exists('image', $arguments)) { + } + if (array_key_exists('upload', $arguments)) { + store_uploaded_file($arguments['filename'], $arguments['filedata'], working_directory()); + return true; + } + + return false; +} + +/** + * Validation of the HTTP Method. For operations that make changes we require + * POST. To err on the side of safety, we'll only allow GET for known safe + * operations. This way, if the API is extended, and the method is not + * updated, we will not accidentally expose non-idempotent methods to GET. + * This method can only correctly validate the operation if the input is + * already known to be valid. + * + * @param array $arguments The arguments array received by the page. + * @return boolean Whether or not the HTTP method is correct for the given input. + */ +function method_valid($arguments) { + // We assume that the only + $method = $_SERVER['REQUEST_METHOD']; + + if ($method == 'GET') { + if (array_key_exists('directory', $arguments) && array_key_exists('listing', $arguments)) { + return true; + } + + return false; + } + + if ($method == 'POST') { + return true; + } + return false; +} + +/** + * Validation of the user input. We'll verify what we receive from the user, + * and send an error in the case of malformed input. + * + * Some examples of the URLS associated with this API: + * ** File Operations ** + * ?file&delete&filename='' + * ?file©&filename='' + * ?file&rename&filename=''&newname='' + * + * ** Directory Operations ** + * ?directory&listing + * ?directory&create&dirname='' + * ?directory&delete&dirname='' + * ?directory&rename&dirname=''&newname='' + * + * ** Image Operations ** + * ?image&filename=''&[scale|rotate|convert] + * + * ** Upload ** + * ?upload&filedata=[binary|text]&filename=''&replace=[true|false] + * + * @param array $arguments The arguments array received by the page. + * @param array $capabilities The capabilities config array used to limit operations. + * @return boolean Whether or not the input received is valid. + */ +function input_valid($arguments, $capabilities) { + // This is going to be really ugly code because it's basically a DFA for + // parsing arguments. To make things a little clearer, I'll put a + // pseudo-BNF for each block to show the decision structure. + // + // file[empty] filename[valid] (delete[empty] | copy[empty] | (rename[empty] newname[valid])) + if ($capabilities['file_operations'] && + array_key_exists('file', $arguments) && + empty($arguments['file']) && + array_key_exists('filename', $arguments) && + !ereg(INVALID_FILE_NAME, $arguments['filename'])) { + + if (array_key_exists('delete', $arguments) && + empty($arguments['delete']) && + 3 == count($arguments)) { + + return true; + } + + if (array_key_exists('copy', $arguments) && + empty($arguments['copy']) && + 3 == count($arguments)) { + + return true; + } + + if (array_key_exists('rename', $arguments) && + empty($arguments['rename']) && + 4 == count($arguments)) { + + if (array_key_exists('newname', $arguments) && + !ereg(INVALID_FILE_NAME, $arguments['newname'])) { + + return true; + } + } + + return false; + } elseif (array_key_exists('file', $arguments)) { + // This isn't necessary because we'll fall through to false, but I'd + // rather return earlier than later. + return false; + } + + // directory[empty] (listing[empty] | (dirname[valid] (create[empty] | delete[empty] | (rename[empty] newname[valid])))) + if ($capabilities['directory_operations'] && + array_key_exists('directory', $arguments) && + empty($arguments['directory'])) { + + if (array_key_exists('listing', $arguments) && + empty($arguments['listing']) && + 2 == count($arguments)) { + + return true; + } + + if (array_key_exists('dirname', $arguments) && + !ereg(INVALID_FILE_NAME, $arguments['dirname'])) { + + if (array_key_exists('create', $arguments) && + empty($arguments['create']) && + 3 == count($arguments)) { + + return true; + } + + if (array_key_exists('delete', $arguments) && + empty($arguments['delete']) && + 3 == count($arguments)) { + + return true; + } + + if (array_key_exists('rename', $arguments) && + empty($arguments['rename']) && + 4 == count($arguments)) { + + if (array_key_exists('newname', $arguments) && + !ereg(INVALID_FILE_NAME, $arguments['newname'])) { + + return true; + } + } + } + + return false; + } elseif (array_key_exists('directory', $arguments)) { + // This isn't necessary because we'll fall through to false, but I'd + // rather return earlier than later. + return false; + } + + // image[empty] filename[valid] ((scale[empty] dimensions[valid]) | (rotate[empty] angle[valid]) | (convert[empty] imagetype[valid])) + if ($capabilities['image_operations'] && + array_key_exists('image', $arguments) && + empty($arguments['image']) && + array_key_exists('filename', $arguments) && + !ereg(INVALID_FILE_NAME, $arguments['filename']) && + 4 == count($arguments)) { + + if (array_key_exists('scale', $arguments) && + empty($arguments['scale']) && + !ereg(INVALID_FILE_NAME, $arguments['dimensions'])) { + // TODO: FIX REGEX + http_error_exit(); + + return true; + } + + if (array_key_exists('rotate', $arguments) && + empty($arguments['rotate']) && + !ereg(INVALID_FILE_NAME, $arguments['angle'])) { + // TODO: FIX REGEX + http_error_exit(); + + return true; + } + + if (array_key_exists('convert', $arguments) && + empty($arguments['convert']) && + !ereg(INVALID_FILE_NAME, $arguments['imagetype'])) { + // TODO: FIX REGEX + http_error_exit(); + + return true; + } + + return false; + } elseif (array_key_exists('image', $arguments)) { + // This isn't necessary because we'll fall through to false, but I'd + // rather return earlier than later. + return false; + } + + // upload[empty] filedata[binary|text] replace[true|false] filename[valid]? + if ($capabilities['upload_operations'] && + array_key_exists('upload', $arguments) && + empty($arguments['upload']) && + array_key_exists('filedata', $arguments) && + !empty($arguments['filedata']) && + array_key_exists('replace', $arguments) && + ereg('true|false', $arguments['replace'])) { + + if (4 == count($arguments) && + array_key_exists('filename', $arguments) && + !ereg(INVALID_FILE_NAME, $arguments['filename'])) { + + return true; + } + + if (3 == count($arguments)) { + + return true; + } + + return false; + } elseif (array_key_exists('upload', $arguments)) { + // This isn't necessary because we'll fall through to false, but I'd + // rather return earlier than later. + return false; + } + + + return false; +} + +/** + * HTTP level error handling. + * @param integer $code The HTTP error code to return to the client. This defaults to 400. + * @param string $message Error message to send to the client. This defaults to the standard HTTP error messages. + */ +function http_error_exit($error = 'HTTP_CLIENT_BAD_REQUEST', $message='') { + global $HTTP_ERRORS; + $message = !empty($message) ? $message : "HTTP/1.0 {$HTTP_ERRORS[$error]['code']} {$HTTP_ERRORS[$error]['message']}"; + header($message); + exit($message); +} + +/** + * Process the config and return the absolute directory we should be working with, + * @return string contains the path of the directory all file operations are limited to. + */ +function working_directory() { + $config = get_config(true); + return realpath(getcwd() . DIRECTORY_SEPARATOR . $config['storage_dir'] . DIRECTORY_SEPARATOR); +} + +/** + * Check to see if the supplied filename is inside + */ +function directory_contains($container_directory, $checkfile) { + + // Get the canonical directory and canonical filename. We add a directory + // seperator to prevent the user from sidestepping into a sibling directory + // that starts with the same prefix. (e.g. from /home/john to + // /home/johnson) + $container_directory = realpath($container_directory) + DIRECTORY_SEPARATOR; + $checkfile = realpath($checkfile); + + // Now that we have the canonical versions, we can do a string comparison + // to see if checkfile is inside of container_directory. + if (strlen($checkfile) <= strlen($container_directory)) { + // We don't consider the directory to be inside of itself. This + // prevents users from trying to perform operations on the container + // directory itself. + return false; + } + + // PHP equivalent of string.startswith() + return substr($checkfile, 0, strlen($container_directory)) == $container_directory; +} + +/**#@+ + * Directory Operations + * {@internal ***************************************************************** + * **************************************************************************}} + */ + +/** + * Return a directory listing as a PHP array. + * @param string $directory The directory to return a listing of. + * @param integer $depth The private argument used to limit recursion depth. + * @return array representing the directory structure. + */ + +function directory_listing($directory='', $depth=1) { + // We return an empty array if the directory is empty + $result = array('$type'=>'folder'); + + // We won't recurse below MAX_DEPTH. + if ($depth > MAX_DEPTH) { + return $result; + } + + $path = empty($directory) ? working_directory() : $directory; + + // We'll open the directory to check each of the entries + if ($dir = opendir($path)) { + + // We'll keep track of how many file we process. + $count = 0; + + // For each entry in the file + while (($file = readdir($dir)) !== false) { + + // Limit the number of files we process in this folder + $count += 1; + if ($count > MAX_FILES_PER_FOLDER) { + return $result; + } + + // Ignore hidden files (this includes special files '.' and '..') + if (strlen($file) && ($file[0] == '.')) { + continue; + } + + $filepath = $path . DIRECTORY_SEPARATOR . $file; + + if (filetype($filepath) == 'dir') { + // We'll recurse and add those results + $result[$file] = directory_listing($filepath, $depth + 1); + } else { + // We'll check to see if we can read any image information from + // the file. If so, we know it's an image, and we can return + // it's metadata. + $imageinfo = @getimagesize($filepath); + if ($imageinfo) { + + $result[$file] = array('$type'=>'image','metadata'=>array( + 'width'=>$imageinfo[0], + 'height'=>$imageinfo[1], + 'mimetype'=>$imageinfo['mime'] + )); + + } elseif ($extension = strrpos($file, '.')) { + $extension = substr($file, $extension); + if (($extension == '.htm') || ($extension == '.html')) { + $result[$file] = array('$type'=>'html'); + } else { + $result[$file] = array('$type'=>'text'); + } + } else { + $result[$file] = array('$type'=>'document'); + } + } + } + + closedir($dir); + } + return $result; +} + +/** + * Create a directory, limiting operations to the chroot directory. + * @param string $dirname The path to the directory, relative to $chroot. + * @param string $chroot Only directories inside this directory or its subdirectories can be affected. + * @return boolean Returns TRUE if successful, and FALSE otherwise. + */ +function directory_create($dirname, $chroot) { + // If chroot is empty, then we will not perform the operation. + if (empty($chroot)) { + return false; + } + + // We have to take the dirname of the parent directory first, since + // realpath just returns false if the directory doesn't already exist on + // the filesystem. + $createparent = realpath(dirname($chroot . DIRECTORY_SEPARATOR . $dirname)); + $createsub = basename($chroot . DIRECTORY_SEPARATOR . $dirname); + + // The bailout rules for directories that don't exist are complicated + // because of having to work around realpath. If the parent directory is + // the same as the chroot, it won't be contained. For this case, we'll + // check to see if the chroot and the parent are the same and allow it only + // if the sub portion of dirname is not-empty. + if (!directory_contains($chroot, $createparent) && + !(($chroot == $createparent) && !empty($createsub))) { + return false; + } + + return @mkdir($createparent . DIRECTORY_SEPARATOR . $createsub); +} + +/** + * Delete a directory, limiting operations to the chroot directory. + * @param string $dirname The path to the directory, relative to $chroot. + * @param string $chroot Only directories inside this directory or its subdirectories can be affected. + * @return boolean Returns TRUE if successful, and FALSE otherwise. + */ +function directory_delete($dirname, $chroot) { + // If chroot is empty, then we will not perform the operation. + if (empty($chroot)) { + return false; + } + + // $dirname is relative to $chroot. + $dirname = realpath($chroot . DIRECTORY_SEPARATOR . $dirname); + + // Limit directory operations to the supplied directory. + if (!directory_contains($chroot, $dirname)) { + return false; + } + + return @rmdir($dirname); +} + + +/**#@-*/ +/**#@+ + * File Operations + * {@internal ***************************************************************** + * **************************************************************************}} + */ + +/** + * Rename a file or directory, limiting operations to the chroot directory. + * @param string $filename The path to the file or directory, relative to $chroot. + * @param string $renameto The path to the renamed file or directory, relative to $chroot. + * @param string $chroot Only files and directories inside this directory or its subdirectories can be affected. + * @return boolean Returns TRUE if successful, and FALSE otherwise. + */ +function file_directory_rename($filename, $renameto, $chroot) { + // If chroot is empty, then we will not perform the operation. + if (empty($chroot)) { + return false; + } + + // $filename is relative to $chroot. + $filename = realpath($chroot . DIRECTORY_SEPARATOR . $filename); + + // We have to take the dirname of the renamed file or directory first, + // since realpath just returns false if the file or direcotry doesn't + // already exist on the filesystem. + $renameparent = realpath(dirname($chroot . DIRECTORY_SEPARATOR . $renameto)); + $renamefile = basename($chroot . DIRECTORY_SEPARATOR . $renameto); + + // Limit file operations to the supplied directory. + if (!directory_contains($chroot, $filename)) { + return false; + } + + // The bailout rules for the renamed file or directory are more complicated + // because of having to work around realpath. If the renamed parent + // directory is the same as the chroot, it won't be contained. For this + // case, we'll check to see if they're the same and allow it only if the + // file portion of renameto is not-empty. + if (!directory_contains($chroot, $renameparent) && + !(($chroot == $renameparent) && !empty($renamefile))) { + return false; + } + + return @rename($filename, $renameparent . DIRECTORY_SEPARATOR . $renamefile); +} + + +/** + * Copy a file, limiting operations to the chroot directory. + * @param string $filename The path to the file, relative to $chroot. + * @param string $chroot Only files inside this directory or its subdirectories can be affected. + * @return boolean Returns TRUE if successful, and FALSE otherwise. + */ +function file_copy($filename, $chroot) { + // If chroot is empty, then we will not perform the operation. + if (empty($chroot)) { + return false; + } + + // $filename is relative to $chroot. + $filename = realpath($chroot . DIRECTORY_SEPARATOR . $filename); + + // Limit file operations to the supplied directory. + if (!directory_contains($chroot, $filename)) { + return false; + } + + // The PHP copy function blindly copies over existing files. We don't wish + // this to happen, so we have to perform the copy a bit differently. If we + // do a check to make sure the file exists, there's always the chance of a + // race condition where someone else creates the file in between the check + // and the copy. The only safe way to ensure we don't overwrite an + // existing file is to call fopen in create-only mode (mode 'x'). If it + // succeeds, the file did not exist before, and we've successfully created + // it, meaning we own the file. After that, we can safely copy over our + // own file. + for ($count=1; $countarray('$type'=>'image')); + } + } + + return false; +} + +/** + * Delete a file, limiting operations to the chroot directory. + * @param string $filename The path to the file, relative to $chroot. + * @param string $chroot Only files inside this directory or its subdirectories can be affected. + * @return boolean Returns TRUE if successful, and FALSE otherwise. + */ +function file_delete($filename, $chroot) { + // If chroot is empty, then we will not perform the operation. + if (empty($chroot)) { + return false; + } + + // $filename is relative to $chroot. + $filename = realpath($chroot . DIRECTORY_SEPARATOR . $filename); + + // Limit file operations to the supplied directory. + if (!directory_contains($chroot, $filename)) { + return false; + } + + return @unlink($filename); +} +/**#@-*/ +/**#@+ + * Upload Operations + * {@internal ***************************************************************** + * **************************************************************************}} + */ + +function store_uploaded_file($filename, $filedata, $chroot) { + + // If chroot is empty, then we will not perform the operation. + if (empty($chroot)) { + return false; + } + + // If the filename is empty, it was possibly supplied as part of the + // upload. + $filename = empty($filename) ? $filedata['name'] : $filename; + + // We have to take the dirname of the parent directory first, since + // realpath just returns false if the directory doesn't already exist on + // the filesystem. + $uploadparent = realpath(dirname($chroot . DIRECTORY_SEPARATOR . $filename)); + $uploadfile = basename($chroot . DIRECTORY_SEPARATOR . $filename); + + // The bailout rules for directories that don't exist are complicated + // because of having to work around realpath. If the parent directory is + // the same as the chroot, it won't be contained. For this case, we'll + // check to see if the chroot and the parent are the same and allow it only + // if the sub portion of dirname is not-empty. + if (!directory_contains($chroot, $uploadparent) && + !(($chroot == $uploadparent) && !empty($uploadfile))) { + return false; + } + + $target_path = $uploadparent . DIRECTORY_SEPARATOR . $uploadfile; + + if (is_array($filedata)) { + // We've received the file as an upload, so it's been saved to a temp + // directory. We'll move it to where it belongs. + + if(move_uploaded_file($filedata['tmp_name'], $target_path)) { + return true; + } + } elseif ($file = @fopen($target_path, 'w')) { + // We've received the file as data. We'll create/open the file and + // save the data. + @fwrite($file, $filedata); + @fclose($file); + return true; + } + + return false; +} + +/**#@-*/ + +?> diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/config.inc.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/config.inc.php new file mode 100644 index 0000000000..11235e3c69 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/config.inc.php @@ -0,0 +1,194 @@ + + * @version 1.0 + * @package PersistentStorage + */ + +/** + * If this file is being requested over the web, we display a JSON version of + * the publicly viewable config info. + */ +if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { + echo json_encode(get_config()); +} + +/** + * Gets the configuration information used by this package. + * {@source } + * @param boolean $getprivates Return private configuration info merged with the public. + * @returns array The configuration information for this package. + */ +function get_config($getprivates=False) { + + // We set up two different settings array, so that we can have settings + // that won't be shown to the public. + $Private = array(); + $Public = array(); + + /** + * For demo purposes, we can lie to the frontend and pretend to have user + * storage. Since we don't have a password mechanism, this simulation will + * accept any password. + */ + $Private['simulate_user_auth'] = false; + + /** + * The capabilities array contains directives about what major options to + * allow or disallow. + */ + $Public['capabilities'] = array( + // Allow directory operations (e.g. rename, create, delete directories) + 'directory_operations' => true, + // Allow file operations (e.g. copy, rename, delete files) + 'file_operations' => true, + // Allow image operations (e.g. scale, rotate, convert images) + 'image_operations' => true, + // Allow file uploads + 'upload_operations' => true, + // Stored files have a published URL + 'shared_publish' => true, + // By default, if the user is authenticated, we enable user storage. + // Set to false to disable. + 'user_storage' => !empty($_SERVER['PHP_AUTH_USER']) || $Private['simulate_user_auth'] + ); + + /** + * Directory exposed to user operations. Be sure that the web server has + * read and write access to this directory. + */ + $Private['storage_dir'] = 'demo_images'; + + /** + * The URL that the storage directory is exposed as. By default, we try + * and guess based on the URL used to access this page. Also, since we + * allow user upload, this directory should not be executable by the + * server. A sample .htaccess file is included in demo_images. + */ + $Private['storage_url'] = str_replace( array("backend.php","manager.php"), + "", $_SERVER["PHP_SELF"] ) . $Private['storage_dir']; + + /* + Possible values: true, false + + TRUE - If PHP on the web server is in safe mode, set this to true. + SAFE MODE restrictions: directory creation will not be possible, + only the GD library can be used, other libraries require + Safe Mode to be off. + + FALSE - Set to false if PHP on the web server is not in safe mode. + */ + $Private['safe_mode'] = ini_get('safe_mode'); + + /** + * If PHP Safe Mode is on than only the GD image library will function, so + * we force the default + */ + if ($Private['safe_mode']) { + @define('IMAGE_CLASS', 'GD'); + } else { + /* + Possible values: 'GD', 'IM', or 'NetPBM' + + The image manipulation library to use, either GD or ImageMagick or NetPBM. + */ + @define('IMAGE_CLASS', 'GD'); + + /* + After defining which library to use, if it is NetPBM or IM, you need to + specify where the binary for the selected library are. And of course + your server and PHP must be able to execute them (i.e. safe mode is OFF). + GD does not require the following definition. + */ + @define('IMAGE_TRANSFORM_LIB_PATH', '/usr/bin/'); + } + + /* + The prefix for thumbnail files, something like .thumb will do. The + thumbnails files will be named as "prefix_imagefile.ext", that is, + prefix + orginal filename. + */ + $Private['thumbnail_prefix'] = 't_'; + + /** + * The thumbnail array groups all of the configuration related to thumbnail + * operations. + */ + $Private['thumbnails'] = array( + // The prefix to apply to all created thumbnails. + 'prefix' => 't_', + // A subdirectory to keep thumbnails in. If this is empty, thumbnails + // will be stored alongside the files. + 'directory' => '', + // Whether or not to filter thumbnails from the directory listing. + 'filter' => true, + // Filetypes which we restrict thumbnail operations to. + 'filetypes' => array("jpg", "gif", "png", "bmp"), + // What pixel sizes to save the thumbnails as. + 'width' => 84, + 'height' => 84 + ); + + + /** + * Resized prefix + * + * The prefix for resized files, something like .resized will do. The + * resized files will be named _x_ + * resized files are created when one changes the dimensions of an image + * in the image manager selection dialog - the image is scaled when the + * user clicks the ok button. + */ + + $Private['resized_prefix'] = '.resized'; + + // ------------------------------------------------------------------------- + + /** + * Resized Directory + * + * Resized images may also be stored in a directory, except in safe mode. + */ + + $Private['resized_dir'] = ''; + + /* Maximum upload file size + + Possible values: number, "max" + + number - maximum size in Kilobytes. + + "max" - the maximum allowed by the server (the value is retrieved from the server configuration). + */ + $Private['max_filesize_kb_image'] = 200; + + $Private['max_filesize_kb_link'] = 5000; + + /* Maximum upload folder size in Megabytes. Use 0 to disable limit */ + $Private['max_foldersize_mb'] = 0; + + /* + Allowed extensions that can be shown and allowed to upload. + Available icons are for "doc,fla,gif,gz,html,jpg,js,mov,pdf,php,png,ppt,rar,txt,xls,zip" + -Changed by AFRU. + */ + + $Private['allowed_image_extensions'] = array("jpg","gif","png","bmp"); + $Private['allowed_link_extensions'] = array("jpg","gif","js","php","pdf","zip","txt","psd","png","html","swf","xml","xls","doc"); + + + /* + Image Editor temporary filename prefix. + */ + $Private['tmp_prefix'] = '.editor_'; + + + // Config variables are finished, this returns our data to the caller. + if ($getprivates) { + return $Public+$Private; + } + + return $Public; +} +?> diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/.htaccess b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/.htaccess new file mode 100644 index 0000000000..0471132208 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/.htaccess @@ -0,0 +1,2 @@ +php_flag engine off +AddType text/html .html .htm .shtml .php .php3 .phtml .phtm .pl .py .cgi \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/bikerpeep.jpg b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/bikerpeep.jpg new file mode 100644 index 0000000000..a2e7028eb7 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/bikerpeep.jpg differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/linux/linux.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/linux/linux.gif new file mode 100644 index 0000000000..3f42d2ce6b Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/linux/linux.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/wesnoth078.jpg b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/wesnoth078.jpg new file mode 100644 index 0000000000..ea37d1aea7 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/demo_images/wesnoth078.jpg differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/b5.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/b5.js new file mode 100644 index 0000000000..b3281e5881 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/b5.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "b5", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ch.js new file mode 100644 index 0000000000..c6331746fd --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ch.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/cz.js new file mode 100644 index 0000000000..ebcdfd0d81 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/cz.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/da.js new file mode 100644 index 0000000000..7fd158a14e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/da.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/de.js new file mode 100644 index 0000000000..fd045b9fee --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/de.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ee.js new file mode 100644 index 0000000000..90d4fcfff1 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ee.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/el.js new file mode 100644 index 0000000000..0cc540bedd --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/el.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/es.js new file mode 100644 index 0000000000..7900dfc522 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/es.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/eu.js new file mode 100644 index 0000000000..c0d23b321a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/eu.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fa.js new file mode 100644 index 0000000000..3054d7b0aa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fa.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fi.js new file mode 100644 index 0000000000..fa646890cd --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fi.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fr.js new file mode 100644 index 0000000000..05624fad2f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fr.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fr_ca.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fr_ca.js new file mode 100644 index 0000000000..f4fc2e2520 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/fr_ca.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fr_ca", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/gb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/gb.js new file mode 100644 index 0000000000..9633886781 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/gb.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "gb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/he.js new file mode 100644 index 0000000000..d7a08b5a45 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/he.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/hu.js new file mode 100644 index 0000000000..76c06f637e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/hu.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/it.js new file mode 100644 index 0000000000..0baad7867a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/it.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ja.js new file mode 100644 index 0000000000..e7fa008878 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ja.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/lc_base.js new file mode 100644 index 0000000000..fde2a1bfe1 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/lc_base.js @@ -0,0 +1,26 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "File: ": "", + "Import": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/lt.js new file mode 100644 index 0000000000..51a91131f7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/lt.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/lv.js new file mode 100644 index 0000000000..a18c5ea48d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/lv.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/nb.js new file mode 100644 index 0000000000..8743ace685 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/nb.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/nl.js new file mode 100644 index 0000000000..3f0eaf2789 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/nl.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/pl.js new file mode 100644 index 0000000000..b63a57dcc2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/pl.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/pt_br.js new file mode 100644 index 0000000000..0c6ea8b781 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/pt_br.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ro.js new file mode 100644 index 0000000000..40e9f93223 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ro.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ru.js new file mode 100644 index 0000000000..34845491bb --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/ru.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/sh.js new file mode 100644 index 0000000000..f2a566f577 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/sh.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/si.js new file mode 100644 index 0000000000..53450f8caf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/si.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/sr.js new file mode 100644 index 0000000000..10c14e4074 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/sr.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/sv.js new file mode 100644 index 0000000000..8c05863695 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/sv.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/th.js new file mode 100644 index 0000000000..0986274a7b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/th.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/tr.js new file mode 100644 index 0000000000..90aa647fd3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/tr.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/vn.js new file mode 100644 index 0000000000..38f7cc5da5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/vn.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/zh_cn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/zh_cn.js new file mode 100644 index 0000000000..1847d3935d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PSServer/lang/zh_cn.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "zh_cn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PSSERVER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/PersistentStorage.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/PersistentStorage.js new file mode 100644 index 0000000000..a3bfac7d0a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/PersistentStorage.js @@ -0,0 +1,1142 @@ +/** + * @fileOverview PersistentStorage PersistentStorage.js file. + * This plugin is a rethinking of the ExtendFileManager plugin written and + * designed by Wei Zhuo, Afru, Krzysztof Kotowicz, Raimund Meyer. + * + * @author Douglas Mayle + * @version 1.0 + */ + +/** + * The global namespace + * @name window + */ +(function($) { +/** + * @name PersistentStorage + * @class Provides an interface for persistant storage options to the user. + * @param editor A reference to the Xinha Editor this plugin instance is attached to. + */ +var PersistentStorage = window.PersistentStorage = function (editor) { + /** + * @memberOf Xinha + */ + this.editor = editor; + var self = this; +} + +/** + * Plugin Metadata + * @namespace + * @static + */ +PersistentStorage._pluginInfo = { + /** Plugin name */ + name : "PersistentStorage", + /** Plugin version */ + version : "1.0", + /** Plugin author */ + developer : "Douglas Mayle", + /** Plugin author's website */ + developer_url : "http://douglas.mayle.org", + /** Plugin license */ + license : "BSD" +}; + +/** + * The list of backend modules registered with this instance. + */ +PersistentStorage.prototype._backends = {}; + +/** + * The list of user config files received from backends. + */ +PersistentStorage.prototype._userconfigs = []; + +/** + * The name of the currently active backend. + */ +PersistentStorage.prototype._activeBackend = ''; + +/** + * The value of the type filter that's currently in effect. + */ +PersistentStorage.prototype._typeFilter = ''; + +/** + * The currently displayed view type. + */ +PersistentStorage.prototype._viewType = 'thumbnail'; + +/** + * On Xinha activation, this get's called so that we can prepare any resources + * we need to function. + */ +PersistentStorage.prototype.onGenerateOnce = function () { + // We use _prepareDialog to asynchronously load the dialog markup and then + // perform necessary processing. + this._prepareDialog(); +}; + +function addClass(element, className) { + var classRegex = new RegExp(' ?' + className + ' ?'); + + if (!classRegex.test(element.className)) { + element.className += ' ' + className; + } +} + +function removeClass(element, className) { + var classRegex = new RegExp(' ?' + className + ' ?'); + + if (classRegex.test(element.className)) { + element.className = element.className.replace(classRegex, ' '); + } +} + +function toggleClass(element, className) { + var classRegex = new RegExp(' ?' + className + ' ?'); + + if (classRegex.test(element.className)) { + element.className = element.className.replace(classRegex, ' '); + } else { + element.className += ' ' + className; + } +} + +/** + * Once we're sure we have a backend that supports document functionality, + * we'll load the interface that exposes it. + */ +PersistentStorage.prototype._registerDocumentUI = function () { + if (this._documentEnabled) { + // No need to repeated rebuild the UI. + return; + } + + this._documentEnabled = true; + var self = this; + + var editor = this.editor; + + editor.config.registerButton({ + id : 'newdocument', + tooltip : Xinha._lc( 'New Document', 'PersistentStorage' ), + image : [_editor_url + editor.config.imgURL + 'ed_buttons_main.png',0,5], + textMode : true, + action : function() { self.newDocument(); } + } + ); + editor.config.registerButton({ + id : 'opendocument', + tooltip : Xinha._lc( 'Open Document', 'PersistentStorage' ), + image : [_editor_url + editor.config.imgURL + 'ed_buttons_main.png',1,5], + textMode : true, + action : function() { self.openDialog(); } + } + ); + editor.config.registerButton({ + id : 'savedocument', + tooltip : Xinha._lc( 'Save Document', 'PersistentStorage' ), + image : [_editor_url + editor.config.imgURL + 'ed_buttons_main.png',9,1], + textMode : true, + action : function() { self.saveDialog(); } + } + ); + editor.config.addToolbarElement('newdocument', 'fullscreen', 1); + editor.config.addToolbarElement('opendocument', 'newdocument', 1); + editor.config.addToolbarElement('savedocument', 'opendocument', 1); + + // Since this is after the editor load, we have to trigger an udate manually... + editor._rebuildToolbar(); +}; + +/** + * Backend storage plugins should call this method so that they can be exposed + * to the user. Because of possible quirks in plugin loading, you should use + * the following example code when registering. + * @param name The name of the module + * @param module The module instance + * @param config Configuration information that tells us about the module + * @param user_config AN object representing the user configuration loaded from + * this module. + * @example + + * PSBackend.prototype.onGenerateOnce = function () { + * // Register with the Persistent Storage plugin. + * this._registerBackend(); + * }; + * PSBackend.prototype._registerBackend = function(timeWaited) { + * var editor = this.editor; + * var self = this; + * + * if (!timeWaited) { + * timeWaited = 0; + * } + * + * // Retry over a period of ten seconds to register. We back off exponentially + * // to limit resouce usage in the case of misconfiguration. + * var registerTimeout = 10000; + * + * if (timeWaited > registerTimeout) { + * // This is most likely a configuration error. We're loaded and + * // PersistentStorage is not. + * return; + * } + * + * if (!editor.plugins['PersistentStorage'] || + * !editor.plugins['PersistentStorage'].instance || + * !editor.plugins['PersistentStorage'].instance.ready) { + * + * window.setTimeout(function() { + * self._registerBackend(timeWaited ? timeWaited*2 : 50); + * }, timeWaited ? timeWaited : 50); + * + * return; + * } + * var PS = editor.plugins['PersistentStorage'].instance; + * + * // Support user configuration. This loading should be moved into PersistentStorage... + * this.loadDocument({URL:'', name:'config.js', key:'/config.js'}, function(json) { + * var userconfig = json ? eval('(' + json + ')') : false; + * PS.registerBackend('PSLocal', self, self.config, userconfig); + * }); + */ +PersistentStorage.prototype.registerBackend = function (name, module, config, user_config) { + this._backends[name] = {module: module, config: config, name: name}; + + // TODO I'd like something more than just whoever calls back first wins for ordering. + if (!this._activeBackend) { + this.setBackend(name); + } + + if (config.capabilities.upload_operations && + config.capabilities.file_operations) { + this._registerDocumentUI(); + } + + // Handle user configuration + if (user_config) { + this._userconfigs.push(user_config); + this.configureUser(); + } + + this.updatePlacesDisplay(); +} + +/** + * Go through the list of user configs and reconfigure Xinha. + */ +PersistentStorage.prototype.configureUser = function () { + // Temp code does not handle user affinity + var self = this; + for (var index=0; index # # *(Delete) * *(Delete) * *(Delete) * *(Delete) * # * + * * # \/ # # *********** *********** *********** *********** # * + * * # Gears # # # * + * * # # ############################################################## * + * * # # * + * * # # *Import-(Collapsed)******************************************* * + * * # # * + * * # # #File Name -or- File Details################################## * + * * # # # # * + * * # # # # * + * * # # # # * + * * # # # # * + * * ######### ############################################################## * + * * * + * **************************************************************************** + */ + +PersistentStorage.prototype.showDialog = function (options) { + // Create a reference to this PS instance to allow for asynchronous + // continuation (if we're not ready.) + var self = this; + + if (!this.ready) { + window.setTimeout(function() {self.showDialog(options);}, 80); + return; + } + + // We hide and show the various elements of the dialog depending on usage. + removeClass(this.dialog.getElementById("WWW"), 'hidden'); + addClass(this.dialog.getElementById("namefield"), 'hidden'); + addClass(this.dialog.getElementById("placeWww"), 'hidden'); + addClass(this.dialog.getElementById("placeBackend"), 'hidden'); + + switch (options.styleFor) { + case 'link': + removeClass(this.dialog.getElementById("placeWww"), 'hidden'); + this.updatePlacesDisplay('shared_publish'); + break; + case 'insertion': + removeClass(this.dialog.getElementById("placeBackend"), 'hidden'); + this.updatePlacesDisplay('shared_publish'); + break; + case 'documentsave': + addClass(this.dialog.getElementById("WWW"), 'hidden'); + removeClass(this.dialog.getElementById("namefield"), 'hidden'); + removeClass(this.dialog.getElementById("placeBackend"), 'hidden'); + this.updatePlacesDisplay('file_operations'); + break; + case 'documentload': + addClass(this.dialog.getElementById("WWW"), 'hidden'); + removeClass(this.dialog.getElementById("placeBackend"), 'hidden'); + this.updatePlacesDisplay('file_operations'); + break; + } + + var directories = this.dialog.getElementById("filters"); + var fileBrowser = this.dialog.getElementById("fileList"); + + // Store the type filter so that view updates will correctly filter the contents. + this._typeFilter = options.typeFilter; + + var module = this._backends[this._activeBackend].module; + + this.updateFileBrowser(); +} + +/** + * Take the list of filters and build the contents of the select element. + * @param filters {Filter[]} An array of filter choices to display to the user. + * @param filters[n].value The unique key that represents this filter to the backend. + * @param filters[n].display {String} A text string to display to the user to + * represent the given filter. + * @param select {HTMLElement} The select node to update. + */ +PersistentStorage.prototype.displayFilters = function(filters, viewFilter) { + // Clear out the previous directory listing. + var select = this.dialog.getElementById("filters"); + while (select.lastChild) { + select.removeChild(select.lastChild); + } + + // For each element in the array, we extract out the display text and the + // value and put them into an option element to add to the select element. + for (var index=0; index
  • diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/b5.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/b5.js new file mode 100644 index 0000000000..cfb8054e23 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/b5.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "b5", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ch.js new file mode 100644 index 0000000000..7ca0791b0f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ch.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/cz.js new file mode 100644 index 0000000000..b30bcd3959 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/cz.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/da.js new file mode 100644 index 0000000000..4da6036b7c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/da.js @@ -0,0 +1,24 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller", + "Copy": "Kopier", + "Directory Up": "Mappe op", + "File Manager": "Fil Manager", + "Filename": "Filnavn:", + "Insert Image": "Indsæt billede", + "New Folder": "Ny mappe", + "Save": "Gem", + "You must select some text before making a new link.": "Vælg venligst noget tekst før du laver et nyt link.", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/de.js new file mode 100644 index 0000000000..d2ba11b5ea --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/de.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Abbrechen", + "Copy": "Kopieren", + "Delete": "Löschen", + "Directory Up": "übergeordneter Ordner", + "File Manager": "Dateimanager", + "Filename": "Dateiname:", + "Insert Image": "Bild einfügen", + "New Folder": "Neuer Ordner", + "Save": "Speichern", + "You must select some text before making a new link.": "Sie müssen einen Text markieren um einen Link zu erstellen", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ee.js new file mode 100644 index 0000000000..6c7f1dbcd9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ee.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/el.js new file mode 100644 index 0000000000..c510f55dcc --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/el.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση", + "Copy": "Αντιγραφή", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/es.js new file mode 100644 index 0000000000..ca01a6379c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/es.js @@ -0,0 +1,23 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "Copy": "Copiar", + "Delete": "Suprimir", + "Directory Up": "Directorio superior", + "Filename": "Nombre del fichero:", + "Insert Image": "insertar imagen", + "New Folder": "Crear directorio", + "Save": "Guardar", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/eu.js new file mode 100644 index 0000000000..9e9156bf86 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/eu.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi", + "Insert Image": "Irudia txertatu", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fa.js new file mode 100644 index 0000000000..40a9e28286 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fa.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف", + "Insert Image": "افزودن تصویر", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fi.js new file mode 100644 index 0000000000..aad2b0a0d9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fi.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fr.js new file mode 100644 index 0000000000..b00c51030c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fr.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuler", + "Copy": "Copier", + "Delete": "Supprimer", + "Directory Up": "Remonter", + "File Manager": "Gestionnaire de fichiers", + "Filename": "Nom", + "Insert Image": "Insérer une image", + "New Folder": "Nouveau répertoire", + "Save": "Enregistrer", + "You must select some text before making a new link.": "Vous devez sélectionner un texte avant de créer un nouveau lien", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fr_ca.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fr_ca.js new file mode 100644 index 0000000000..5eba5884b3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/fr_ca.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fr_ca", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/gb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/gb.js new file mode 100644 index 0000000000..eb8298cf44 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/gb.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "gb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/he.js new file mode 100644 index 0000000000..73e9e96577 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/he.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול", + "Copy": "העתק", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/hu.js new file mode 100644 index 0000000000..7b00507e10 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/hu.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/it.js new file mode 100644 index 0000000000..d1f51af88f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/it.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ja.js new file mode 100644 index 0000000000..21e9c50e81 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ja.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "中止", + "Copy": "コピー", + "Delete": "削除", + "Directory Up": "親ディレクトリへ", + "File Manager": "ファイルマネージャ", + "Filename": "ファイル名:", + "Insert Image": "画像の挿入", + "New Folder": "新規フォルダ", + "Save": "保存", + "You must select some text before making a new link.": "リンクを作成するにはテキストを選択する必要があります", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/lc_base.js new file mode 100644 index 0000000000..06f40de90d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/lc_base.js @@ -0,0 +1,52 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Cancel": "", + "Confirm": "", + "Copy": "", + "Delete": "", + "Details": "", + "Directory Up": "", + "File Browser": "", + "File List": "", + "File Manager": "", + "Filename": "", + "Hello There C ": "", + "Hello There A ": "", + "Hello \" There B \"": "", + "Hello ' There D '": "", + "Insert": "", + "Insert Image": "", + "List of Places": "", + "New Document": "", + "New Folder": "", + "Open": "", + "Open Document": "", + "Places": "", + "Please enter the name of the directory you'd like to create.": "", + "Save": "", + "Save Document": "", + "This will erase any unsaved content. If you're certain, please click OK to continue.": "", + "Web URL": "", + "You must select some text before making a new link.": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/lt.js new file mode 100644 index 0000000000..b66db89bf0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/lt.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/lv.js new file mode 100644 index 0000000000..5739e7e143 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/lv.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/nb.js new file mode 100644 index 0000000000..4f2c32de80 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/nb.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "Copy": "Kopier", + "Delete": "Fjerne", + "Directory Up": "Opp et nivå", + "File Manager": "Filbehandler", + "Filename": "Filnavn:", + "Insert Image": "Sett inn bilde", + "New Folder": "Ny mappe", + "Save": "Lagre", + "You must select some text before making a new link.": "Du må markere tekst eller et bilde før du kan lage en lenke.", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/nl.js new file mode 100644 index 0000000000..dc5be2336f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/nl.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuleren", + "Copy": "Kopiëren", + "Delete": "Verwijderen", + "Directory Up": "Bovenliggende map", + "File Manager": "Bestandsbeheer", + "Filename": "Bestandsnaam:", + "Insert Image": "Afbeelding invoegen", + "New Folder": "Nieuw map", + "Save": "Opslaan", + "You must select some text before making a new link.": "Selecteer de tekst welke gelinkt moet worden.", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/pl.js new file mode 100644 index 0000000000..4f0c6c958e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/pl.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anuluj", + "Copy": "Kopiuj", + "Delete": "Usuń", + "Directory Up": "Katalog wyżej", + "File Manager": "Menedżer plików", + "Filename": "Nazwa pliku:", + "Insert Image": "Wstaw obrazek", + "New Folder": "Nowy katalog", + "Save": "Zapisz", + "You must select some text before making a new link.": "Zaznacz tekst przed dodaniem odnośnika.", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/pt_br.js new file mode 100644 index 0000000000..3f0d6d21c7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/pt_br.js @@ -0,0 +1,27 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "Copy": "Copiar", + "Delete": "Deletar", + "Directory Up": "Diretório Acima", + "File List": "Lista de Arquivos", + "File Manager": "Gerenciador de Arquivos", + "Filename": "Nome do arquivo:", + "Insert": "Inserir", + "Insert Image": "Inserir Imagem", + "New Folder": "Nova Pasta", + "Save": "Salvar", + "You must select some text before making a new link.": "Você precisa selecionar algum texto antes de criar um novo link.", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ro.js new file mode 100644 index 0000000000..43e29106b9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ro.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ru.js new file mode 100644 index 0000000000..289470014a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/ru.js @@ -0,0 +1,21 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена", + "Directory Up": "Папка наверх", + "Filename": "Имя файла", + "Insert Image": "Вставка картинки", + "New Folder": "Новая папка", + "Save": "Сохранить", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/sh.js new file mode 100644 index 0000000000..995375352b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/sh.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi", + "Insert Image": "Ubaci sliku", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/si.js new file mode 100644 index 0000000000..67ecf28457 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/si.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/sr.js new file mode 100644 index 0000000000..ca587a407b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/sr.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи", + "Insert Image": "Убаци слику", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/sv.js new file mode 100644 index 0000000000..2ce721840c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/sv.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "Copy": "Kopiera", + "Insert Image": "Infoga bild", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/th.js new file mode 100644 index 0000000000..fd7142ab86 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/th.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/tr.js new file mode 100644 index 0000000000..015316f7e1 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/tr.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal", + "Delete": "Sil", + "Insert Image": "Resim ekle", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/vn.js new file mode 100644 index 0000000000..baf3c43194 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/vn.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/zh_cn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/zh_cn.js new file mode 100644 index 0000000000..a27eb16de2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/PersistentStorage/lang/zh_cn.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "zh_cn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** PERSISTENTSTORAGE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/README b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/README new file mode 100644 index 0000000000..9b5a2c86f9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/README @@ -0,0 +1,8 @@ +ExecCGI Note: +If you intend to use the perl (.cgi) backend then you will need to have the ExecCGI option enabled for this directory (if you are using Apache), you may be able to do this by adding a file called .htaccess in this directory, with the below contents. + +## EXAMPLE .htaccess +Options +ExecCGI +#################### + +It is however recommended that you use the PHP backend where possible. \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/SpellChecker.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/SpellChecker.js new file mode 100644 index 0000000000..f3f33c02e3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/SpellChecker.js @@ -0,0 +1,73 @@ +// Spell Checker Plugin for HTMLArea-3.0 +// Sponsored by www.americanbible.org +// Implementation by Mihai Bazon, http://dynarch.com/mishoo/ +// +// (c) dynarch.com 2003. +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// $Id:spell-checker.js 856M 2007-06-13 18:34:34Z (local) $ + +Xinha.Config.prototype.SpellChecker = { 'backend': 'php', 'personalFilesDir' : '', 'defaultDictionary' : 'en_GB', 'utf8_to_entities' : true }; + +function SpellChecker(editor) { + this.editor = editor; + + var cfg = editor.config; + var bl = SpellChecker.btnList; + var self = this; + + // see if we can find the mode switch button, insert this before that + var id = "SC-spell-check"; + cfg.registerButton(id, this._lc("Spell-check"), editor.imgURL("spell-check.gif", "SpellChecker"), false, + function(editor, id) { + // dispatch button press event + self.buttonPress(editor, id); + }); + + cfg.addToolbarElement("SC-spell-check", "htmlmode", 1); +} + +SpellChecker._pluginInfo = { + name : "SpellChecker", + version : "1.0", + developer : "Mihai Bazon", + developer_url : "http://dynarch.com/mishoo/", + c_owner : "Mihai Bazon", + sponsor : "American Bible Society", + sponsor_url : "http://www.americanbible.org", + license : "htmlArea" +}; + +SpellChecker.prototype._lc = function(string) { + return Xinha._lc(string, 'SpellChecker'); +}; + +SpellChecker.btnList = [ + null, // separator + ["spell-check"] + ]; + +SpellChecker.prototype.buttonPress = function(editor, id) { + switch (id) { + case "SC-spell-check": + SpellChecker.editor = editor; + SpellChecker.init = true; + var uiurl = Xinha.getPluginDir("SpellChecker") + "/spell-check-ui.html"; + var win; + if (Xinha.is_ie) { + win = window.open(uiurl, "SC_spell_checker", + "toolbar=no,location=no,directories=no,status=no,menubar=no," + + "scrollbars=no,resizable=yes,width=600,height=450"); + } else { + win = window.open(uiurl, "SC_spell_checker", + "toolbar=no,menubar=no,personalbar=no,width=600,height=450," + + "scrollbars=no,resizable=yes"); + } + win.focus(); + break; + } +}; + +// this needs to be global, it's accessed from spell-check-ui.html +SpellChecker.editor = null; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/aspell_setup.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/aspell_setup.php new file mode 100644 index 0000000000..c13a5af82a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/aspell_setup.php @@ -0,0 +1,123 @@ + (int)$aVer[1], 'minor' => (int)$aVer[2], 'release' => (int)@$aVer[3]); + if($aVer['major'] >= 0 && $aVer['minor'] >= 60) + { + $aspell_args .= ' -H --encoding=utf-8'; + } + elseif(preg_match('/--encoding/', shell_exec('aspell 2>&1'))) + { + $aspell_args .= ' --mode=none --add-filter=sgml --encoding=utf-8'; + } + else + { + $aspell_args .= ' --mode=none --add-filter=sgml'; + } + + // Personal dictionaries + $p_dicts_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'personal_dicts'; + + if(isset($_REQUEST['p_dicts_path']) && file_exists($_REQUEST['p_dicts_path']) && is_writable($_REQUEST['p_dicts_path'])) + { + if(!isset($_REQUEST['p_dicts_name'])) + { + if(isset($_COOKIE['SpellChecker_p_dicts_name'])) + { + $_REQUEST['p_dicts_name'] = $_COOKIE['SpellChecker_p_dicts_name']; + } + else + { + $_REQUEST['p_dicts_name'] = uniqid('dict'); + setcookie('SpellChecker_p_dicts_name', $_REQUEST['p_dicts_name'], time() + 60*60*24*365*10); + } + } + $p_dict_path = $_REQUEST['p_dicts_path'] . DIRECTORY_SEPARATOR . preg_replace('/[^a-z0-9_]/i', '', $_REQUEST['p_dicts_name']); + + if(!file_exists($p_dict_path)) + { + // since there is a single directory for all users this could end up containing + // quite a few subdirectories. To prevent a DOS situation we'll limit the + // total directories created to 2000 (arbitrary). Adjust to suit your installation. + + $count = 0; + + if( $dir = @opendir( $p_dicts_path ) ) + { + + while( FALSE !== ($file = readdir($dir)) ) + { + $count++; + } + } + + // TODO: make this a config value. + + if ( $count > 2000 ) + { + + // either very heavy use or a DOS attempt + + die(); + + } + + mkdir($p_dict_path); + chmod($p_dict_path, 02770); + } + + if(file_exists($p_dict_path) && is_writable($p_dict_path)) + { + // Good To Go! + $aspell_args .= ' --home-dir=' . $p_dict_path ; + } + } + +// as an additional precaution check the aspell_args for illegal +// characters + $aspell_args = preg_replace( "/[|><;\$]+/", '', $aspell_args ); + $aspelldictionaries = "$aspell dump dicts"; + $aspellcommand = "$aspell $aspell_args < $temptext"; + + +?> diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/img/he-spell-check.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/img/he-spell-check.gif new file mode 100644 index 0000000000..8015d2ff22 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/img/he-spell-check.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/img/spell-check.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/img/spell-check.gif new file mode 100644 index 0000000000..fce009a552 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/img/spell-check.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/b5.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/b5.js new file mode 100644 index 0000000000..ab763f7651 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/b5.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "b5", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ch.js new file mode 100644 index 0000000000..e3043da3b4 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ch.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消", + "OK": "好", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/cz.js new file mode 100644 index 0000000000..e79ad257a5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/cz.js @@ -0,0 +1,35 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit", + "Dictionary": "Slovník", + "Finished list of mispelled words": "Dokončen seznam chybných slov", + "I will open it in a new page.": "Bude otevřen jej v nové stránce.", + "Ignore": "Ignorovat", + "Ignore all": "Ignorovat vše", + "No mispelled words found with the selected dictionary.": "Podle zvoleného slovníku nebyla nalezena žádná chybná slova.", + "OK": "OK", + "Original word": "Původní slovo", + "Please confirm that you want to open this link": "Prosím potvrďte otevření tohoto odkazu", + "Please wait. Calling spell checker.": "Prosím čekejte. Komunikuace s kontrolou správnosti slov.", + "Please wait: changing dictionary to": "Prosím čekejte: změna adresáře na", + "Re-check": "Překontrolovat", + "Replace": "Zaměnit", + "Replace all": "Zaměnit všechno", + "Replace with": "Zaměnit za", + "Spell-check": "Kontrola správnosti slov", + "Suggestions": "Doporučení", + "This will drop changes and quit spell checker. Please confirm.": "Změny budou zrušeny a kontrola správnosti slov ukončena. Prosím potvrďte.", + "__OBSOLETE__": { + "One moment...": "strpení prosím ;-)", + "Spell check complete, didn't find any mispelled words. Closing now...": "Kontrola správnosti slov dokončena, nebyla nalezena žádná chybná slova. Ukončování ..." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/da.js new file mode 100644 index 0000000000..a80419b9f7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/da.js @@ -0,0 +1,35 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ann uler", + "Dictionary": "Ordbog", + "Finished list of mispelled words": "Listen med stavefejl er gennemgået", + "I will open it in a new page.": "Jeg vil åbne det i en ny side.", + "Ignore": "Ignorer", + "Ignore all": "Ignorer alle", + "No mispelled words found with the selected dictionary.": "Der blev ikke fundet nogle stavefejl med den valgte ordbog.", + "OK": "OK", + "Original word": "Oprindeligt ord", + "Please confirm that you want to open this link": "Vil du følge dette link?", + "Please wait. Calling spell checker.": "Vent venligst. Henter stavekontrol.", + "Please wait: changing dictionary to": "Vent venligst: skifter ordbog til", + "Re-check": "Tjek igen", + "Replace": "Erstat", + "Replace all": "Erstat alle", + "Replace with": "Erstat med", + "Spell-check": "Stavekontrol", + "Suggestions": "Forslag", + "This will drop changes and quit spell checker. Please confirm.": "Alle dine ændringer vil gå tabt, vil du fortsætte?", + "__OBSOLETE__": { + "One moment...": "Vent venligst", + "Spell check complete, didn't find any mispelled words. Closing now...": "Stavekontrollen er gennemført, der blev ikke fundet nogle stavefejl. Lukker..." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/de.js new file mode 100644 index 0000000000..febf66e020 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/de.js @@ -0,0 +1,35 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Abbrechen", + "Dictionary": "Woerterbuch", + "Finished list of mispelled words": "Liste der nicht bekannten Woerter", + "I will open it in a new page.": "Wird auf neuer Seite geoeffnet", + "Ignore": "Ignorieren", + "Ignore all": "Alle ignorieren", + "No mispelled words found with the selected dictionary.": "Keine falschen Woerter mit gewaehlten Woerterbuch gefunden", + "OK": "OK", + "Original word": "Original Wort", + "Please confirm that you want to open this link": "Wollen Sie diesen Link oeffnen", + "Please wait. Calling spell checker.": "Bitte warten. Woerterbuch wird durchsucht.", + "Please wait: changing dictionary to": "Bitte warten: Woerterbuch wechseln zu", + "Re-check": "Neuueberpruefung", + "Replace": "Ersetzen", + "Replace all": "Alle ersetzen", + "Replace with": "Ersetzen mit", + "Spell-check": "Ueberpruefung", + "Suggestions": "Vorschlag", + "This will drop changes and quit spell checker. Please confirm.": "Aenderungen werden nicht uebernommen. Bitte bestaettigen.", + "__OBSOLETE__": { + "One moment...": "Bitte warten...", + "Spell check complete, didn't find any mispelled words. Closing now...": "Rechtsschreibpruefung wurde ohne Fehler fertiggestellt. Wird nun geschlossen..." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ee.js new file mode 100644 index 0000000000..926c748aa9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ee.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/el.js new file mode 100644 index 0000000000..9a05a3ec5b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/el.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση", + "OK": "Εντάξει", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/es.js new file mode 100644 index 0000000000..b83ead7af7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/es.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "OK": "Aceptar", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/eu.js new file mode 100644 index 0000000000..8cb216cdc6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/eu.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi", + "OK": "Ados", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fa.js new file mode 100644 index 0000000000..8f7d5772ab --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fa.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف", + "OK": "بله", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fi.js new file mode 100644 index 0000000000..1978fa911e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fi.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta", + "OK": "Hyväksy", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fr.js new file mode 100644 index 0000000000..f17da3fe77 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fr.js @@ -0,0 +1,36 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuler", + "Dictionary": "Dictionnaire", + "Finished list of mispelled words": "Liste des mots mal orthographiés", + "I will open it in a new page.": "Ouverture dans une nouvelle fenêtre", + "Ignore": "Ignorer", + "Ignore all": "Tout ignorer", + "No mispelled words found with the selected dictionary.": "Aucune erreur orthographique avec le dictionnaire sélectionné.", + "OK": "OK", + "Original word": "Mot original", + "Please confirm that you want to open this link": "Veuillez confirmer l'ouverture de ce lien", + "Please wait. Calling spell checker.": "Veuillez patienter. Appel du correcteur.", + "Please wait: changing dictionary to": "Veuillez patienter. Changement du dictionnaire vers", + "Re-check": "Vérifier encore", + "Replace": "Remplacer", + "Replace all": "Tout remplacer", + "Replace with": "Remplacer par", + "Revert": "Annuler", + "Spell-check": "Correction", + "Suggestions": "Suggestions", + "This will drop changes and quit spell checker. Please confirm.": "Ceci fermera la fenêtre et annulera les modifications. Veuillez confirmer.", + "__OBSOLETE__": { + "One moment...": "Veuillez patienter", + "Spell check complete, didn't find any mispelled words. Closing now...": "Vérification terminée, aucune erreur orthographique détectée. Fermeture en cours..." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fr_ca.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fr_ca.js new file mode 100644 index 0000000000..2cbe6bcc3b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/fr_ca.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fr_ca", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/gb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/gb.js new file mode 100644 index 0000000000..f73dc9458d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/gb.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "gb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/he.js new file mode 100644 index 0000000000..47b99bd8ae --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/he.js @@ -0,0 +1,36 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול", + "Dictionary": "מילון", + "Finished list of mispelled words": "הסתיימה רשימת המילים המאויתות באופן שגוי", + "I will open it in a new page.": "אני אפתח את זה בחלון חדש.", + "Ignore": "התעלם", + "Ignore all": "התעלם מהכל", + "No mispelled words found with the selected dictionary.": "לא נמצאו מילים מאויתות באופן שגוי עם המילון הנבחר.", + "OK": "אישור", + "Original word": "המילה המקורית", + "Please confirm that you want to open this link": "אנא אשר שברצונך לפתוח קישור זה", + "Please wait. Calling spell checker.": "אנא המתן. קורא לבודק איות.", + "Please wait: changing dictionary to": "אנא המתן: מחליף מילון ל-", + "Re-check": "בדוק מחדש", + "Replace": "החלף", + "Replace all": "החלף הכל", + "Replace with": "החלף ב-", + "Revert": "החזר שינויים", + "Spell-check": "בדיקת איות", + "Suggestions": "הצעות", + "This will drop changes and quit spell checker. Please confirm.": "זה יבטל את השינויים ויצא מבודק האיות. אנא אשר.", + "__OBSOLETE__": { + "One moment...": "ענא המטן ;-)", + "Spell check complete, didn't find any mispelled words. Closing now...": "בדיקת האיות נסתיימה, לא נמצאו מילים מאויתות באופן שגוי. נסגר כעת..." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/hu.js new file mode 100644 index 0000000000..f6f6a00698 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/hu.js @@ -0,0 +1,35 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem", + "Dictionary": "Szótár", + "Finished list of mispelled words": "A tévesztett szavak listájának vége", + "I will open it in a new page.": "Megnyitás új lapon", + "Ignore": "Elvetés", + "Ignore all": "Minden elvetése", + "No mispelled words found with the selected dictionary.": "A választott szótár szerint nincs tévesztett szó.", + "OK": "Rendben", + "Original word": "Eredeti szó", + "Please confirm that you want to open this link": "Megerősítés", + "Please wait. Calling spell checker.": "Kis türelmet, a helyesírásellenőrző hívása folyamatban.", + "Please wait: changing dictionary to": "Kis türelmet, szótár cseréje", + "Re-check": "Újraellenőrzés", + "Replace": "Csere", + "Replace all": "Mind cseréje", + "Replace with": "Csere a következőre:", + "Spell-check": "Helyesírásellenőrzés", + "Suggestions": "Tippek", + "This will drop changes and quit spell checker. Please confirm.": "Kilépés a változások eldobásával. Jóváhagyja?", + "__OBSOLETE__": { + "One moment...": "Kis türelmet ;-)", + "Spell check complete, didn't find any mispelled words. Closing now...": "A helyesírásellenőrzés kész, tévesztett szó nem fordult elő. Bezárás..." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/it.js new file mode 100644 index 0000000000..c68f5a036e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/it.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ja.js new file mode 100644 index 0000000000..d1f69baa1c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ja.js @@ -0,0 +1,38 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "中止", + "Dictionary": "辞書", + "Finished list of mispelled words": "つづり間違単語の一覧", + "I will open it in a new page.": "新しいページで開きます。", + "Ignore": "無視", + "Ignore all": "すべて無視", + "Info": "情報", + "Learn": "学習", + "No mispelled words found with the selected dictionary.": "選択された辞書にはつづり間違い単語がありません。", + "OK": "OK", + "Original word": "元の単語", + "Please confirm that you want to open this link": "本当にこのリンクを開きますか", + "Please wait. Calling spell checker.": "しばらくお待ちください。スペルチェッカーを呼び出しています。", + "Please wait: changing dictionary to": "しばらくお待ちください: 辞書を切り替えています", + "Re-check": "再チェック", + "Replace": "置換", + "Replace all": "すべて置換", + "Replace with": "これに置換", + "Revert": "戻す", + "Spell-check": "スペルチェック", + "Suggestions": "候補", + "This will drop changes and quit spell checker. Please confirm.": "変更を破棄してスペルチェッカーを終了します。よろしいいですか。", + "__OBSOLETE__": { + "One moment...": "あともう少し...", + "Spell check complete, didn't find any mispelled words. Closing now...": "スペルチェックが完了しましたが、つづり間違い単語はありませんでした。すぐに閉じます..." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/lc_base.js new file mode 100644 index 0000000000..dfc809a369 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/lc_base.js @@ -0,0 +1,49 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Cancel": "", + "Dictionary": "", + "Finished list of mispelled words": "", + "HTMLArea Spell Checker": "", + "I will open it in a new page.": "", + "Ignore": "", + "Ignore all": "", + "Info": "", + "Learn": "", + "No mispelled words found with the selected dictionary.": "", + "OK": "", + "Original word": "", + "Please confirm that you want to open this link": "", + "Please wait. Calling spell checker.": "", + "Please wait: changing dictionary to": "", + "Re-check": "", + "Replace": "", + "Replace all": "", + "Replace with": "", + "Revert": "", + "Spell Checker": "", + "Spell-check": "", + "Suggestions": "", + "This will drop changes and quit spell checker. Please confirm.": "", + "pliz weit ;-)": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/lt.js new file mode 100644 index 0000000000..854773d12b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/lt.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/lv.js new file mode 100644 index 0000000000..cd0f5f52ed --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/lv.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt", + "OK": "Labi", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/nb.js new file mode 100644 index 0000000000..53c1f46e90 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/nb.js @@ -0,0 +1,35 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "Dictionary": "Ordliste", + "Finished list of mispelled words": "Ferdig med liste over feilstavede ord", + "I will open it in a new page.": "Åpnes i ny side", + "Ignore": "Ignorer", + "Ignore all": "Ignorer alle", + "No mispelled words found with the selected dictionary.": "Ingen feilstavede ord funnet med den valgte ordlisten", + "OK": "OK", + "Original word": "Opprinnelig ord", + "Please confirm that you want to open this link": "Ønsker du å åpne denne lenken", + "Please wait. Calling spell checker.": "Vennligst vent, kaller opp stavekontrollprogrammet", + "Please wait: changing dictionary to": "Vennligst vent, endrer ordliste til", + "Re-check": "Kjør stavekontroll på nytt", + "Replace": "Erstatt", + "Replace all": "Erstatt alle", + "Replace with": "Erstatt med", + "Spell-check": "Stavekontroll", + "Suggestions": "Forslag", + "This will drop changes and quit spell checker. Please confirm.": "Dette vil droppe endringene og avbryte stavekontrollen, vennligst bekreft.", + "__OBSOLETE__": { + "One moment...": "Et øyeblikk...", + "Spell check complete, didn't find any mispelled words. Closing now...": "Stavekontroll fullført, ingen feilstavede ord ble funnet, stavekontroll avsluttes." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/nl.js new file mode 100644 index 0000000000..918a4ae1a3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/nl.js @@ -0,0 +1,36 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuleer", + "Dictionary": "Woordenboek", + "Finished list of mispelled words": "klaar met de lijst van fouten woorden", + "I will open it in a new page.": "Ik zal het in een nieuwe pagina openen.", + "Ignore": "Overslaan", + "Ignore all": "alles overslaan", + "No mispelled words found with the selected dictionary.": "Geen fouten gevonden met dit woordenboek.", + "OK": "OK", + "Original word": "Originele woord", + "Please confirm that you want to open this link": "Weet u zeker dat u deze link wilt openen?", + "Please wait. Calling spell checker.": "Even wachten. spell checker wordt geladen.", + "Please wait: changing dictionary to": "even wachten: woordenboek wordt veranderd naar", + "Re-check": "Opnieuw", + "Replace": "Vervangen", + "Replace all": "Alles vervangen", + "Replace with": "Vervangen met", + "Revert": "Omkeren", + "Spell-check": "Spell-check", + "Suggestions": "Suggestie", + "This will drop changes and quit spell checker. Please confirm.": "Dit zal alle veranderingen annuleren en de spell checker sluiten. Weet u het zeker?", + "__OBSOLETE__": { + "One moment...": "Even wachten ;-)", + "Spell check complete, didn't find any mispelled words. Closing now...": "Spell checking is klaar, geen fouten gevonden. spell checking word gesloten..." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/pl.js new file mode 100644 index 0000000000..53d773bacf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/pl.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anuluj", + "OK": "OK", + "Replace with": "Zamień na:", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/pt_br.js new file mode 100644 index 0000000000..dcb03a3e4c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/pt_br.js @@ -0,0 +1,40 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "Dictionary": "Dicionário", + "Finished list of mispelled words": "Finalizada lista de palavras desconhecidas", + "HTMLArea Spell Checker": "Dicionário HTMLArea", + "I will open it in a new page.": "Será aberto em uma nova página", + "Ignore": "Ignorar", + "Ignore all": "Ignorar todas", + "Info": "Informação", + "Learn": "Aprender", + "No mispelled words found with the selected dictionary.": "Nenhuma palavra desconhecida foi encontrada no dicionário selecionado", + "OK": "OK", + "Original word": "Palavra Original", + "Please confirm that you want to open this link": "Por favor, confirme se deseja abrir este link", + "Please wait. Calling spell checker.": "Por favor, aguarde. Chamando dicionário.", + "Please wait: changing dictionary to": "Por favor, aguarde: mudando dicionário para", + "Re-check": "Re-verificar", + "Replace": "Substituir", + "Replace all": "Substituir tudo", + "Replace with": "Substituir com", + "Revert": "Reverter", + "Spell Checker": "Dicionário", + "Spell-check": "Dicionário", + "Suggestions": "Sugestões", + "This will drop changes and quit spell checker. Please confirm.": "Isso desfará as mudanças e finalizará o dicionário. Por favor, confirme.", + "pliz weit ;-)": "Por favor, aguarde...", + "__OBSOLETE__": { + "One moment...": "Um momento..." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ro.js new file mode 100644 index 0000000000..6b802aa949 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ro.js @@ -0,0 +1,35 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anulează", + "Dictionary": "Dicţionar", + "Finished list of mispelled words": "Am terminat lista de cuvinte greşite", + "I will open it in a new page.": "O voi deschide într-o altă fereastră.", + "Ignore": "Ignoră", + "Ignore all": "Ignoră toate", + "No mispelled words found with the selected dictionary.": "Nu am găsit nici un cuvânt greşit cu acest dicţionar.", + "OK": "OK", + "Original word": "Cuvântul original", + "Please confirm that you want to open this link": "Vă rog confirmaţi că vreţi să deschideţi acest link", + "Please wait. Calling spell checker.": "Vă rog aşteptaţi. Apelez spell-checker-ul.", + "Please wait: changing dictionary to": "Vă rog aşteptaţi. Schimb dicţionarul cu", + "Re-check": "Scanează", + "Replace": "Înlocuieşte", + "Replace all": "Înlocuieşte toate", + "Replace with": "Înlocuieşte cu", + "Spell-check": "Detectează greşeli", + "Suggestions": "Sugestii", + "This will drop changes and quit spell checker. Please confirm.": "Doriţi să renunţaţi la modificări şi să închid spell-checker-ul?", + "__OBSOLETE__": { + "One moment...": "va rog ashteptatzi ;-)", + "Spell check complete, didn't find any mispelled words. Closing now...": "Am terminat, nu am detectat nici o greşeală. Acum închid fereastra..." + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ru.js new file mode 100644 index 0000000000..200bd1de36 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/ru.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена", + "OK": "OK", + "Replace with": "Заменить с", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/sh.js new file mode 100644 index 0000000000..1c71aa5f3a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/sh.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/si.js new file mode 100644 index 0000000000..d09543aebf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/si.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči", + "OK": "V redu", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/sr.js new file mode 100644 index 0000000000..7bcf64fc75 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/sr.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/sv.js new file mode 100644 index 0000000000..171553bf90 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/sv.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "OK": "OK", + "Replace with": "Ersätt med:", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/th.js new file mode 100644 index 0000000000..e6bebfc8af --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/th.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก", + "OK": "ตกลง", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/tr.js new file mode 100644 index 0000000000..895c17c1ed --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/tr.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal", + "OK": "Tamam", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/vn.js new file mode 100644 index 0000000000..9f7614cb57 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/vn.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy", + "OK": "Đồng ý", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/zh_cn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/zh_cn.js new file mode 100644 index 0000000000..bd43da7a84 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/lang/zh_cn.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "zh_cn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** SPELLCHECKER IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/readme-tech.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/readme-tech.html new file mode 100644 index 0000000000..127d6baf90 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/readme-tech.html @@ -0,0 +1,114 @@ + + + + HTMLArea Spell Checker + + + +

    HTMLArea Spell Checker

    + +

    The HTMLArea Spell Checker subsystem consists of the following + files:

    + +
      + +
    • spell-checker.js — the spell checker plugin interface for + HTMLArea
    • + +
    • spell-checker-ui.html — the HTML code for the user + interface
    • + +
    • spell-checker-ui.js — functionality of the user + interface
    • + +
    • spell-checker-logic.cgi — Perl CGI script that checks a text + given through POST for spelling errors
    • + +
    • spell-checker-style.css — style for mispelled words
    • + +
    • lang/en.js — main language file (English).
    • + +
    + +

    Process overview

    + +

    + When an end-user clicks the "spell-check" button in the HTMLArea + editor, a new window is opened with the URL of "spell-check-ui.html". + This window initializes itself with the text found in the editor (uses + window.opener.SpellChecker.editor global variable) and it + submits the text to the server-side script "spell-check-logic.cgi". + The target of the FORM is an inline frame which is used both to + display the text and correcting. +

    + +

    + Further, spell-check-logic.cgi calls Aspell for each portion of plain + text found in the given HTML. It rebuilds an HTML file that contains + clear marks of which words are incorrect, along with suggestions for + each of them. This file is then loaded in the inline frame. Upon + loading, a JavaScript function from "spell-check-ui.js" is called. + This function will retrieve all mispelled words from the HTML of the + iframe and will setup the user interface so that it allows correction. +

    + +

    The server-side script (spell-check-logic.cgi)

    + +

    + Unicode safety — the program is + Unicode safe. HTML entities are expanded into their corresponding + Unicode characters. These characters will be matched as part of the + word passed to Aspell. All texts passed to Aspell are in Unicode + (when appropriate). However, Aspell seems to not support Unicode + yet (thread concerning Aspell and Unicode). + This mean that words containing Unicode + characters that are not in 0..255 are likely to be reported as "mispelled" by Aspell. +

    + +

    + Update: though I've never seen it mentioned + anywhere, it looks that Aspell does, in fact, speak + Unicode. Or else, maybe Text::Aspell does + transparent conversion; anyway, this new version of our + SpellChecker plugin is, as tests show so far, fully + Unicode-safe... well, probably the only freeware + Web-based spell-checker which happens to have Unicode support. +

    + +

    + The Perl Unicode manual (man perluniintro) states: +

    + +
    + + Starting from Perl 5.6.0, Perl has had the capacity to handle Unicode + natively. Perl 5.8.0, however, is the first recommended release for + serious Unicode work. The maintenance release 5.6.1 fixed many of the + problems of the initial Unicode implementation, but for example regular + expressions still do not work with Unicode in 5.6.1. + +
    + +

    In other words, do not assume that this script is + Unicode-safe on Perl interpreters older than 5.8.0.

    + +

    The following Perl modules are required:

    + + + +

    Of these, only Text::Aspell might need to be installed manually. The + others are likely to be available by default in most Perl distributions.

    + +
    +
    Mihai Bazon
    + + Last modified: Fri Jan 30 19:14:11 EET 2004 + + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-logic.cgi b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-logic.cgi new file mode 100755 index 0000000000..dbf40f8f73 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-logic.cgi @@ -0,0 +1,210 @@ +#! /usr/bin/perl -w + +# Spell Checker Plugin for HTMLArea-3.0 +# Sponsored by www.americanbible.org +# Implementation by Mihai Bazon, http://dynarch.com/mishoo/ +# +# (c) dynarch.com 2003. +# Distributed under the same terms as HTMLArea itself. +# This notice MUST stay intact for use (see license.txt). +# +# $Id:spell-check-logic.cgi 21 2005-02-19 05:23:56Z gogo $ + +use strict; +use utf8; +use Encode; +use Text::Aspell; +use XML::DOM; +use CGI; + +my $TIMER_start = undef; +eval { + use Time::HiRes qw( gettimeofday tv_interval ); + $TIMER_start = [gettimeofday()]; +}; +# use POSIX qw( locale_h ); + +binmode STDIN, ':utf8'; +binmode STDOUT, ':utf8'; + +my $debug = 0; + +my $speller = new Text::Aspell; +my $cgi = new CGI; + +my $total_words = 0; +my $total_mispelled = 0; +my $total_suggestions = 0; +my $total_words_suggested = 0; + +# FIXME: report a nice error... +die "Can't create speller!" unless $speller; + +my $dict = $cgi->param('dictionary') || $cgi->cookie('dictionary') || 'en'; + +# add configurable option for this +$speller->set_option('lang', $dict); +$speller->set_option('encoding', 'UTF-8'); +#setlocale(LC_CTYPE, $dict); + +# ultra, fast, normal, bad-spellers +# bad-spellers seems to cause segmentation fault +$speller->set_option('sug-mode', 'normal'); + +my %suggested_words = (); +keys %suggested_words = 128; + +my $file_content = decode('UTF-8', $cgi->param('content')); +$file_content = parse_with_dom($file_content); + +my $ck_dictionary = $cgi->cookie(-name => 'dictionary', + -value => $dict, + -expires => '+30d'); + +print $cgi->header(-type => 'text/html; charset: utf-8', + -cookie => $ck_dictionary); + +my $js_suggested_words = make_js_hash(\%suggested_words); +my $js_spellcheck_info = make_js_hash_from_array + ([ + [ 'Total words' , $total_words ], + [ 'Mispelled words' , $total_mispelled . ' in dictionary \"'.$dict.'\"' ], + [ 'Total suggestions' , $total_suggestions ], + [ 'Total words suggested' , $total_words_suggested ], + [ 'Spell-checked in' , defined $TIMER_start ? (tv_interval($TIMER_start) . ' seconds') : 'n/a' ] + ]); + +print qq^ + + + + + + +^; + +print $file_content; +if ($cgi->param('init') eq '1') { + my @dicts = $speller->dictionary_info(); + my $dictionaries = ''; + foreach my $i (@dicts) { + next if $i->{jargon}; + my $name = $i->{name}; + if ($name eq $dict) { + $name = '@'.$name; + } + $dictionaries .= ',' . $name; + } + $dictionaries =~ s/^,//; + print qq^
    $dictionaries
    ^; +} + +print ''; + +# Perl is beautiful. +sub spellcheck { + my $node = shift; + my $doc = $node->getOwnerDocument; + my $check = sub { # called for each word in the text + # input is in UTF-8 + my $word = shift; + my $already_suggested = defined $suggested_words{$word}; + ++$total_words; + if (!$already_suggested && $speller->check($word)) { + return undef; + } else { + # we should have suggestions; give them back to browser in UTF-8 + ++$total_mispelled; + if (!$already_suggested) { + # compute suggestions for this word + my @suggestions = $speller->suggest($word); + my $suggestions = decode($speller->get_option('encoding'), join(',', @suggestions)); + $suggested_words{$word} = $suggestions; + ++$total_suggestions; + $total_words_suggested += scalar @suggestions; + } + # HA-spellcheck-error + my $err = $doc->createElement('span'); + $err->setAttribute('class', 'HA-spellcheck-error'); + my $tmp = $doc->createTextNode; + $tmp->setNodeValue($word); + $err->appendChild($tmp); + return $err; + } + }; + while ($node->getNodeValue =~ /([\p{IsWord}']+)/) { + my $word = $1; + my $before = $`; + my $after = $'; + my $df = &$check($word); + if (!$df) { + $before .= $word; + } + { + my $parent = $node->getParentNode; + my $n1 = $doc->createTextNode; + $n1->setNodeValue($before); + $parent->insertBefore($n1, $node); + $parent->insertBefore($df, $node) if $df; + $node->setNodeValue($after); + } + } +}; + +sub check_inner_text { + my $node = shift; + my $text = ''; + for (my $i = $node->getFirstChild; defined $i; $i = $i->getNextSibling) { + if ($i->getNodeType == TEXT_NODE) { + spellcheck($i); + } + } +}; + +sub parse_with_dom { + my ($text) = @_; + $text = ''.$text.''; + + my $parser = new XML::DOM::Parser; + if ($debug) { + open(FOO, '>:utf8', '/tmp/foo'); + print FOO $text; + close FOO; + } + my $doc = $parser->parse($text); + my $nodes = $doc->getElementsByTagName('*'); + my $n = $nodes->getLength; + + for (my $i = 0; $i < $n; ++$i) { + my $node = $nodes->item($i); + if ($node->getNodeType == ELEMENT_NODE) { + check_inner_text($node); + } + } + + my $ret = $doc->toString; + $ret =~ s{(.*)}{$1}sg; + return $ret; +}; + +sub make_js_hash { + my ($hash) = @_; + my $js_hash = ''; + while (my ($key, $val) = each %$hash) { + $js_hash .= ',' if $js_hash; + $js_hash .= '"'.$key.'":"'.$val.'"'; + } + return $js_hash; +}; + +sub make_js_hash_from_array { + my ($array) = @_; + my $js_hash = ''; + foreach my $i (@$array) { + $js_hash .= ',' if $js_hash; + $js_hash .= '"'.$i->[0].'":"'.$i->[1].'"'; + } + return $js_hash; +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-logic.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-logic.php new file mode 100644 index 0000000000..e1e5e608d0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-logic.php @@ -0,0 +1,171 @@ + + + + +'; + +// Lets define some values outside the condition below, in case we have an empty +// document. +$textarray = array(); +$varlines = ''; + +echo ' +'; + +foreach ($textarray as $key=>$value) +{ + echo $value; +} + +$dictionaries = str_replace(chr(10),",", shell_exec($aspelldictionaries)); +if(ereg(",$",$dictionaries)) + $dictionaries = ereg_replace(",$","",$dictionaries); +echo '
    '.$dictionaries.'
    '; + +echo ''; +?> \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-savedicts.php b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-savedicts.php new file mode 100644 index 0000000000..cb2d281567 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-savedicts.php @@ -0,0 +1,38 @@ +&1'); + unlink($temptext); + } +?> \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-style.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-style.css new file mode 100644 index 0000000000..1408ba0626 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-style.css @@ -0,0 +1,10 @@ +.HA-spellcheck-error { border-bottom: 1px dashed #f00; cursor: default; } +.HA-spellcheck-same { background-color: #cef; color: #000; } +.HA-spellcheck-hover { background-color: #433; color: white; } +.HA-spellcheck-fixed { border-bottom: 1px dashed #0b8; } +.HA-spellcheck-current { background-color: #9be; color: #000; } +.HA-spellcheck-suggestions { display: none; } + +#HA-spellcheck-dictionaries { display: none; } + +a:link, a:visited { color: #55e; } diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-ui.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-ui.html new file mode 100644 index 0000000000..499da9764c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-ui.html @@ -0,0 +1,125 @@ + + + + + Spell Checker + + + + + + + + + +
    + + + + + + + + + + + + + +
    +
    Dictionary + + +
    + Please wait. Calling spell checker. +
    +
    + +
    +
    Original word
    +
    pliz weit ;-)
    +
    + +
    +
    Replace with
    +
    +
    +
    +
    + +
    +
    +
    Suggestions
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    + + + + diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-ui.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-ui.js new file mode 100644 index 0000000000..f471c07265 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/SpellChecker/spell-check-ui.js @@ -0,0 +1,454 @@ +// Spell Checker Plugin for HTMLArea-3.0 +// Sponsored by www.americanbible.org +// Implementation by Mihai Bazon, http://dynarch.com/mishoo/ +// +// (c) dynarch.com 2003. +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// $Id:spell-check-ui.js 987M 2008-04-12 12:39:04Z (local) $ + +// internationalization file was already loaded in parent ;-) +var SpellChecker = window.opener.SpellChecker; + +var Xinha = window.opener.Xinha; + +var _editor_url = window.opener._editor_url; + +var is_ie = Xinha.is_ie; +var editor = SpellChecker.editor; +var frame = null; +var currentElement = null; +var wrongWords = null; +var modified = false; +var allWords = {}; +var fixedWords = []; +var suggested_words = {}; + +var to_p_dict = []; // List of words to add to personal dictionary. +var to_r_list = []; // List of words to add to replacement list. + +function _lc(string) { + return Xinha._lc(string, 'SpellChecker'); +} + +function makeCleanDoc(leaveFixed) { + // document.getElementById("status").innerHTML = 'Please wait: rendering valid HTML'; + var words = wrongWords.concat(fixedWords); + for (var i = words.length; --i >= 0;) { + var el = words[i]; + if (!(leaveFixed && /HA-spellcheck-fixed/.test(el.className))) { + if(el.firstChild) + el.parentNode.insertBefore(el.firstChild, el); + el.parentNode.removeChild(el); + } else + el.className = "HA-spellcheck-fixed"; + } + // we should use innerHTML here, but IE6's implementation fucks up the + // HTML to such extent that our poor Perl parser doesn't understand it + // anymore. + return Xinha.getHTML(frame.contentWindow.document.body, true, editor); +} + +function recheckClicked() { + document.getElementById("status").innerHTML = _lc("Please wait: changing dictionary to") + ': "' + document.getElementById("f_dictionary").value + '".'; + var field = document.getElementById("f_content"); + field.value = makeCleanDoc(true); + field.form.submit(); +} + +function saveClicked() { + if (modified) { + editor.setHTML(makeCleanDoc(false)); + } + + if(to_p_dict.length || to_r_list.length && editor.config.SpellChecker.backend == 'php') + { + var data = {}; + for(var i = 0;i < to_p_dict.length;i++) + { + data['to_p_dict[' + i + ']'] = to_p_dict[i]; + } + for(var i = 0;i < to_r_list.length;i++) + { + data['to_r_list[' + i + '][0]'] = to_r_list[i][0]; + data['to_r_list[' + i + '][1]'] = to_r_list[i][1]; + } + // var win = window; + window.opener.Xinha._postback(Xinha.getPluginDir("SpellChecker") + '/spell-check-savedicts.php', data); + window.close(); + } + else + { + window.close(); + } + return false; +} + +function cancelClicked() { + var ok = true; + if (modified) { + ok = confirm(_lc("This will drop changes and quit spell checker. Please confirm.")); + } + if (ok) { + window.close(); + } + return false; +} + +function replaceWord(el) { + var replacement = document.getElementById("v_replacement").value; + var this_word_modified = (el.innerHTML != replacement); + if (this_word_modified) + modified = true; + if (el) { + el.className = el.className.replace(/\s*HA-spellcheck-(hover|fixed)\s*/g, " "); + } + el.className += " HA-spellcheck-fixed"; + el.__msh_fixed = true; + if (!this_word_modified) { + return false; + } + to_r_list.push([el.innerHTML, replacement]); + el.innerHTML = replacement; +} + +function replaceClicked() { + replaceWord(currentElement); + var start = currentElement.__msh_id; + var index = start; + do { + ++index; + if (index == wrongWords.length) { + index = 0; + } + } while ((index != start) && wrongWords[index].__msh_fixed); + if (index == start) { + index = 0; + alert(_lc("Finished list of mispelled words")); + } + wrongWords[index].__msh_wordClicked(true); + return false; +} + +function revertClicked() { + document.getElementById("v_replacement").value = currentElement.__msh_origWord; + replaceWord(currentElement); + currentElement.className = "HA-spellcheck-error HA-spellcheck-current"; + return false; +} + +function replaceAllClicked() { + var replacement = document.getElementById("v_replacement").value; + var ok = true; + var spans = allWords[currentElement.__msh_origWord]; + if (spans.length == 0) { + alert("An impossible condition just happened. Call FBI. ;-)"); + } else if (spans.length == 1) { + replaceClicked(); + return false; + } + /* + var message = "The word \"" + currentElement.__msh_origWord + "\" occurs " + spans.length + " times.\n"; + if (replacement == currentElement.__msh_origWord) { + ok = confirm(message + "Ignore all occurrences?"); + } else { + ok = confirm(message + "Replace all occurrences with \"" + replacement + "\"?"); + } + */ + if (ok) { + for (var i = 0; i < spans.length; ++i) { + if (spans[i] != currentElement) { + replaceWord(spans[i]); + } + } + // replace current element the last, so that we jump to the next word ;-) + replaceClicked(); + } + return false; +} + +function ignoreClicked() { + document.getElementById("v_replacement").value = currentElement.__msh_origWord; + replaceClicked(); + return false; +} + +function ignoreAllClicked() { + document.getElementById("v_replacement").value = currentElement.__msh_origWord; + replaceAllClicked(); + return false; +} + +function learnClicked() { + to_p_dict.push(currentElement.__msh_origWord); + return ignoreAllClicked(); +} + +function internationalizeWindow() { + var types = ["div", "span", "button"]; + for (var i = 0; i < types.length; ++i) { + var tag = types[i]; + var els = document.getElementsByTagName(tag); + for (var j = els.length; --j >= 0;) { + var el = els[j]; + if (el.childNodes.length == 1 && /\S/.test(el.innerHTML)) { + var txt = el.innerHTML; + el.innerHTML = _lc(txt); + } + } + } +} + +function initDocument() { + internationalizeWindow(); + modified = false; + frame = document.getElementById("i_framecontent"); + var field = document.getElementById("f_content"); + field.value = Xinha.getHTML(editor._doc.body, false, editor); + var dict = document.getElementById("f_dictionary"); + if(typeof editor.config.SpellChecker.defaultDictionary != "undefined" + && editor.config.SpellChecker.defaultDictionary != "") { + dict.value = editor.config.SpellChecker.defaultDictionary; + } else { + dict.value = "en_GB"; + } + if(editor.config.SpellChecker.backend == 'php') + { + field.form.action = Xinha.getPluginDir("SpellChecker") + '/spell-check-logic.php'; + } + if(editor.config.SpellChecker.utf8_to_entities) + { + document.getElementById('utf8_to_entities').value = 1; + } + else + { + document.getElementById('utf8_to_entities').value = 0; + } + field.form.submit(); + document.getElementById("f_init").value = "0"; + + // assign some global event handlers + + var select = document.getElementById("v_suggestions"); + select.onchange = function() { + document.getElementById("v_replacement").value = this.value; + }; + if (is_ie) { + select.attachEvent("ondblclick", replaceClicked); + } else { + select.addEventListener("dblclick", replaceClicked, true); + } + + document.getElementById("b_replace").onclick = replaceClicked; + if(editor.config.SpellChecker.backend == 'php') + { + document.getElementById("b_learn").onclick = learnClicked; + } + else + { + document.getElementById("b_learn").parentNode.removeChild(document.getElementById("b_learn")); + } + document.getElementById("b_replall").onclick = replaceAllClicked; + document.getElementById("b_ignore").onclick = ignoreClicked; + document.getElementById("b_ignall").onclick = ignoreAllClicked; + document.getElementById("b_recheck").onclick = recheckClicked; + document.getElementById("b_revert").onclick = revertClicked; + document.getElementById("b_info").onclick = displayInfo; + + document.getElementById("b_ok").onclick = saveClicked; + document.getElementById("b_cancel").onclick = cancelClicked; + + select = document.getElementById("v_dictionaries"); + select.onchange = function() { + document.getElementById("f_dictionary").value = this.value; + }; +} + +function getAbsolutePos(el) { + var r = { x: el.offsetLeft, y: el.offsetTop }; + if (el.offsetParent) { + var tmp = getAbsolutePos(el.offsetParent); + r.x += tmp.x; + r.y += tmp.y; + } + return r; +} + +function wordClicked(scroll) { + var self = this; + if (scroll) (function() { + var pos = getAbsolutePos(self); + var ws = { x: frame.offsetWidth - 4, + y: frame.offsetHeight - 4 }; + var wp = { x: frame.contentWindow.document.body.scrollLeft, + y: frame.contentWindow.document.body.scrollTop }; + pos.x -= Math.round(ws.x/2); + if (pos.x < 0) pos.x = 0; + pos.y -= Math.round(ws.y/2); + if (pos.y < 0) pos.y = 0; + frame.contentWindow.scrollTo(pos.x, pos.y); + })(); + if (currentElement) { + var a = allWords[currentElement.__msh_origWord]; + currentElement.className = currentElement.className.replace(/\s*HA-spellcheck-current\s*/g, " "); + for (var i = 0; i < a.length; ++i) { + var el = a[i]; + if (el != currentElement) { + el.className = el.className.replace(/\s*HA-spellcheck-same\s*/g, " "); + } + } + } + currentElement = this; + this.className += " HA-spellcheck-current"; + var a = allWords[currentElement.__msh_origWord]; + for (var i = 0; i < a.length; ++i) { + var el = a[i]; + if (el != currentElement) { + el.className += " HA-spellcheck-same"; + } + } + // document.getElementById("b_replall").disabled = (a.length <= 1); + // document.getElementById("b_ignall").disabled = (a.length <= 1); + var txt; + if (a.length == 1) { + txt = "one occurrence"; + } else if (a.length == 2) { + txt = "two occurrences"; + } else { + txt = a.length + " occurrences"; + } + var suggestions = suggested_words[this.__msh_origWord]; + if (suggestions) + suggestions = suggestions.split(/,/); + else + suggestions = []; + var select = document.getElementById("v_suggestions"); + document.getElementById("statusbar").innerHTML = "Found " + txt + + ' for word "' + currentElement.__msh_origWord + '"'; + for (var i = select.length; --i >= 0;) { + select.remove(i); + } + for (var i = 0; i < suggestions.length; ++i) { + var txt = suggestions[i]; + var option = document.createElement("option"); + option.value = txt; + option.appendChild(document.createTextNode(txt)); + select.appendChild(option); + } + document.getElementById("v_currentWord").innerHTML = this.__msh_origWord; + if (suggestions.length > 0) { + select.selectedIndex = 0; + select.onchange(); + } else { + document.getElementById("v_replacement").value = this.innerHTML; + } + select.style.display = "none"; + select.style.display = "block"; + return false; +} + +function wordMouseOver() { + this.className += " HA-spellcheck-hover"; +} + +function wordMouseOut() { + this.className = this.className.replace(/\s*HA-spellcheck-hover\s*/g, " "); +} + +function displayInfo() { + var info = frame.contentWindow.spellcheck_info; + if (!info) + alert("No information available"); + else { + var txt = "** Document information **"; + for (var i in info) { + txt += "\n" + i + " : " + info[i]; + } + alert(txt); + } + return false; +} + +function finishedSpellChecking() { + // initialization of global variables + currentElement = null; + wrongWords = null; + allWords = {}; + fixedWords = []; + suggested_words = frame.contentWindow.suggested_words; + + document.getElementById("status").innerHTML = "Xinha Spell Checker (info)"; + var doc = frame.contentWindow.document; + var spans = doc.getElementsByTagName("span"); + var sps = []; + var id = 0; + for (var i = 0; i < spans.length; ++i) { + var el = spans[i]; + if (/HA-spellcheck-error/.test(el.className)) { + sps.push(el); + el.__msh_wordClicked = wordClicked; + el.onclick = function(ev) { + ev || (ev = window.event); + ev && Xinha._stopEvent(ev); + return this.__msh_wordClicked(false); + }; + el.onmouseover = wordMouseOver; + el.onmouseout = wordMouseOut; + el.__msh_id = id++; + var txt = (el.__msh_origWord = el.firstChild.data); + el.__msh_fixed = false; + if (typeof allWords[txt] == "undefined") { + allWords[txt] = [el]; + } else { + allWords[txt].push(el); + } + } else if (/HA-spellcheck-fixed/.test(el.className)) { + fixedWords.push(el); + } + } + + var dicts = doc.getElementById("HA-spellcheck-dictionaries"); + if (dicts) { + dicts.parentNode.removeChild(dicts); + dicts = dicts.innerHTML.split(/,/); + var select = document.getElementById("v_dictionaries"); + for (var i = select.length; --i >= 0;) { + select.remove(i); + } + var activeDictionary = document.getElementById("f_dictionary").value; + for (var i = 0; i < dicts.length; ++i) { + var txt = dicts[i]; + var option = document.createElement("option"); + if(txt == activeDictionary) { + option.selected = true; + } + option.value = txt; + option.appendChild(document.createTextNode(txt)); + select.appendChild(option); + } + } + + wrongWords = sps; + if (sps.length == 0) { + if (!modified) { + alert(_lc("No mispelled words found with the selected dictionary.")); + // window.close(); + } else { + alert(_lc("No mispelled words found with the selected dictionary.")); + } + return false; + } + (currentElement = sps[0]).__msh_wordClicked(true); + var as = doc.getElementsByTagName("a"); + for (var i = as.length; --i >= 0;) { + var a = as[i]; + a.onclick = function() { + if (confirm(_lc("Please confirm that you want to open this link") + ":\n" + + this.href + "\n" + _lc("I will open it in a new page."))) { + window.open(this.href); + } + return false; + }; + } +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/Template.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/Template.js new file mode 100644 index 0000000000..92c5c2d94d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/Template.js @@ -0,0 +1,107 @@ +// Template plugin for Xinha +// Implementation by Udo Schmal based on HTMLArea 3.0 +// Original Author - Udo Schmal www.Schaffrath-NeueMedien.de +// +// (c) Udo Schmal & Schaffrath NeueMedien 2004 +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). + +function Template(editor) { + this.editor = editor; + var cfg = editor.config; + var self = this; + + // register the toolbar buttons provided by this plugin + cfg.registerButton({ + id : "template", + tooltip : Xinha._lc("Insert template","Template"), + image : editor.imgURL("ed_template.gif", "Template"), + textMode : false, + action : function(editor) { + self.buttonPress(editor); + } + }); + cfg.addToolbarElement("template", "inserthorizontalrule", 1); +} + +Template._pluginInfo = { + name : "Template", + version : "1.0", + developer : "Udo Schmal", + developer_url : "http://www.schaffrath-neuemedien.de/", + c_owner : "Udo Schmal & Schaffrath NeueMedien", + license : "htmlArea" +}; + +Template.prototype.onGenerate = function() { + this.editor.addEditorStylesheet(Xinha.getPluginDir("Template") + '/template.css'); +}; + +Template.prototype.buttonPress = function(editor) { + editor._popupDialog( "plugin://Template/template", function( obj ) { + if ( !obj ) {//user must have pressed Cancel + return false; + } + + var bodys = editor._doc.getElementsByTagName("body"); + var body = bodys[0]; + + function getElement(x) { + var result = editor._doc.getElementById(x); + if (!result) { + result = editor._doc.createElement("div"); + result.id = x; + result.innerHTML = x; + body.appendChild(result); + } + if (result.style) + result.removeAttribute("style"); + return result; + } + + var content = getElement("content"); + var menu1 = getElement("menu1"); + var menu2 = getElement("menu2"); + var menu3 = getElement("menu3"); + switch (obj["templ"]) { + case "1": menu1.style.position = "absolute"; + menu1.style.right = "0px"; + menu1.style.width = "28%"; + menu1.style.backgroundColor = "#e1ddd9"; + menu1.style.padding = "2px 20px"; + content.style.position = "absolute"; + content.style.left = "0px"; + content.style.width = "70%"; + content.style.backgroundColor = "#fff"; + menu2.style.visibility = "hidden"; + menu3.style.visibility = "hidden"; + break; + case "2": menu1.style.position = "absolute"; + menu1.style.left = "0px"; + menu1.style.width = "28%"; + menu1.style.height = "100%"; + menu1.style.backgroundColor = "#e1ddd9"; + content.style.position = "absolute"; + content.style.right = "0px"; + content.style.width = "70%"; + content.style.backgroundColor = "#fff"; + menu2.style.visibility = "hidden"; + menu3.style.visibility = "hidden"; + break + case "3": menu1.style.position = "absolute"; + menu1.style.left = "0px"; + menu1.style.width = "28%"; + menu1.style.backgroundColor = "#e1ddd9"; + menu2.style.position = "absolute"; + menu2.style.right = "0px"; + menu2.style.width = "28%"; + menu2.style.backgroundColor = "#e1ddd9"; + content.style.position = "absolute"; + content.style.right = "30%"; + content.style.width = "60%"; + content.style.backgroundColor = "#fff"; + menu3.style.visibility = "hidden"; + break + } + }, null); +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/ed_template.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/ed_template.gif new file mode 100644 index 0000000000..7715a5092b Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/ed_template.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/layout_01.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/layout_01.gif new file mode 100644 index 0000000000..d7133e50f5 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/layout_01.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/layout_02.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/layout_02.gif new file mode 100644 index 0000000000..e5e3d1e63f Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/layout_02.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/layout_03.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/layout_03.gif new file mode 100644 index 0000000000..7757e26a6c Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/img/layout_03.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/b5.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/b5.js new file mode 100644 index 0000000000..88d870baf5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/b5.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "b5", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ch.js new file mode 100644 index 0000000000..a0e7a30a31 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ch.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/cz.js new file mode 100644 index 0000000000..b81993bc09 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/cz.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/da.js new file mode 100644 index 0000000000..005e8afc7c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/da.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/de.js new file mode 100644 index 0000000000..74f90b09c3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/de.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Abbrechen", + "Insert template": "Template einfügen" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ee.js new file mode 100644 index 0000000000..718fb72d80 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ee.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/el.js new file mode 100644 index 0000000000..9c52b877d9 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/el.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/es.js new file mode 100644 index 0000000000..130965b0e8 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/es.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/eu.js new file mode 100644 index 0000000000..72735a20e2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/eu.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fa.js new file mode 100644 index 0000000000..f8cc61307b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fa.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fi.js new file mode 100644 index 0000000000..b3fd264aaa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fi.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fr.js new file mode 100644 index 0000000000..054c18ec9b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fr.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annulation", + "Insert template": "Insérer un template" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fr_ca.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fr_ca.js new file mode 100644 index 0000000000..74ef89a3a2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/fr_ca.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fr_ca", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/gb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/gb.js new file mode 100644 index 0000000000..3b54d43b59 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/gb.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "gb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/he.js new file mode 100644 index 0000000000..68d336aa09 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/he.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/hu.js new file mode 100644 index 0000000000..b4e2c5dc3a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/hu.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/it.js new file mode 100644 index 0000000000..b1c72c6076 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/it.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento", + "Insert template": "Inserisca il template" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ja.js new file mode 100644 index 0000000000..dade035b82 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ja.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "中止", + "Insert template": "テンプレートの挿入" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/lc_base.js new file mode 100644 index 0000000000..14fc527891 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/lc_base.js @@ -0,0 +1,26 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "Cancel": "", + "Insert template": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/lt.js new file mode 100644 index 0000000000..55fbf9914f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/lt.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/lv.js new file mode 100644 index 0000000000..b44584cf5e --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/lv.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/nb.js new file mode 100644 index 0000000000..ce2f9c0825 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/nb.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "Insert template": "Sett inn template" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/nl.js new file mode 100644 index 0000000000..fe40a929a6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/nl.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuleren", + "Insert template": "Template invoegen" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/pl.js new file mode 100644 index 0000000000..cff991eed0 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/pl.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anuluj", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/pt_br.js new file mode 100644 index 0000000000..01ea7e5d54 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/pt_br.js @@ -0,0 +1,14 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "Insert template": "Inserir modelo" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ro.js new file mode 100644 index 0000000000..ac63572922 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ro.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ru.js new file mode 100644 index 0000000000..800bbbd83a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/ru.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/sh.js new file mode 100644 index 0000000000..bed992ca56 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/sh.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/si.js new file mode 100644 index 0000000000..ffc750f407 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/si.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/sr.js new file mode 100644 index 0000000000..d69248004b --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/sr.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/sv.js new file mode 100644 index 0000000000..bf44edc4ac --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/sv.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/th.js new file mode 100644 index 0000000000..e624980965 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/th.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/tr.js new file mode 100644 index 0000000000..1d284120c3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/tr.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/vn.js new file mode 100644 index 0000000000..8234968495 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/vn.js @@ -0,0 +1,16 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/zh_cn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/zh_cn.js new file mode 100644 index 0000000000..28e7aa03f7 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/lang/zh_cn.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "zh_cn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** TEMPLATE IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/popups/template.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/popups/template.html new file mode 100644 index 0000000000..727f322069 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/popups/template.html @@ -0,0 +1,52 @@ + + +Insert template + + + + + + + +
    Insert template
    +
    + + + + + + +
    + + + + +
    +
    + +
    + +
    +
    + + \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/template.css b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/template.css new file mode 100644 index 0000000000..86c359afea --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/Template/template.css @@ -0,0 +1,3 @@ +div { + border: 1px dotted ActiveBorder; +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/UnFormat.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/UnFormat.js new file mode 100644 index 0000000000..44dcfc0f2c --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/UnFormat.js @@ -0,0 +1,107 @@ +// Unormat plugin for Xinha + + +UnFormat._pluginInfo = { + name : "UnFormat", + version : "1.0", + license : "htmlArea" +}; + + +function UnFormat(editor) { + this.editor = editor; + var cfg = editor.config; + var self = this; + + cfg.registerButton({ + id : "unformat", + tooltip : Xinha._lc("Page Cleaner",'UnFormat'), + image : editor.imgURL("unformat.gif", "UnFormat"), + textMode : false, + action : function(editor) { + self.show(); + } + }); + + cfg.addToolbarElement("unformat", "killword", 1); +} + +UnFormat.prototype.onGenerateOnce = function(editor){ + // Load assets + var self = UnFormat; + if (self.loading) return; + self.loading = true; + self.methodsReady = true; + Xinha._getback(Xinha.getPluginDir('UnFormat') + '/dialog.html', function(getback) { self.html = getback; self.dialogReady = true; }); +} +UnFormat.prototype.onUpdateToolbar = function(editor){ + if (!(UnFormat.dialogReady && UnFormat.methodsReady)) + { + this.editor._toolbarObjects.unformat.state("enabled", false); + } + else this.onUpdateToolbar = null; + +} +UnFormat.prototype.prepareDialog = function(editor){ + var self = this; + var editor = this.editor; + + var dialog = this.dialog = new Xinha.Dialog(editor, UnFormat.html, 'Xinha',{width:400}) + // Connect the OK and Cancel buttons + dialog.getElementById('ok').onclick = function() {self.apply();} + dialog.getElementById('cancel').onclick = function() { self.dialog.hide()}; + + this.dialogReady = true; +} +UnFormat.prototype.show = function(editor){ + if (!this.dialog) this.prepareDialog(); + + var editor = this.editor; + + var values = + { + "cleaning_area" : 'selection', + "formatting" : '', + "html_all" : '' + } + // now calling the show method of the Xinha.Dialog object to set the values and show the actual dialog + this.dialog.show(values); + this.dialog.onresize(); +} +UnFormat.prototype.apply = function(editor){ + var editor = this.editor; + var doc = editor._doc; + var param = this.dialog.getValues(); + + // selection is only restored on dialog.hide() + this.dialog.hide(); + // assign the given arguments + + if (param["cleaning_area"] == "all") { + var html = editor._doc.body.innerHTML; + } else { + var html = editor.getSelectedHTML(); + } + + if (param.html_all) { + html = html.replace(/<[\!]*?[^<>]*?>/g, ""); + } + + if (param.formatting) { + html = html.replace(/style="[^"]*"/gi, ""); + html = html.replace(/<\/?font[^>]*>/gi,""); + html = html.replace(/<\/?b>/gi,""); + html = html.replace(/<\/?strong[^>]*>/gi,""); + html = html.replace(/<\/?i>/gi,""); + html = html.replace(/<\/?em[^>]*>/gi,""); + html = html.replace(/<\/?u[^>]*>/gi,""); + html = html.replace(/<\/?strike[^>]*>/gi,""); + html = html.replace(/ align=[^\s|>]*/gi,""); + html = html.replace(/ class=[^\s|>]*/gi,""); + } + if (param["cleaning_area"] == "all") { + editor._doc.body.innerHTML = html; + } else { + editor.insertHTML(html); + } +}; diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/dialog.html b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/dialog.html new file mode 100644 index 0000000000..5cbd89a4aa --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/dialog.html @@ -0,0 +1,28 @@ +

    Page Cleaner

    + +
    +
    + Cleaning Area + Selection + All +
    +
    +
    + Cleaning options +
    +
    Formatting:
    + +

    +

    All HTML:
    + +

    +

    +

    +

    Select which types of formatting you would like to remove.

    + +
    + + +
    + +
    diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/img/unformat.gif b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/img/unformat.gif new file mode 100644 index 0000000000..606b902d01 Binary files /dev/null and b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/img/unformat.gif differ diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/b5.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/b5.js new file mode 100644 index 0000000000..227f7538f6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/b5.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "b5", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ch.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ch.js new file mode 100644 index 0000000000..251b0f8a34 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ch.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ch", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "取消", + "OK": "好", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/cz.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/cz.js new file mode 100644 index 0000000000..a4067be69a --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/cz.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Zrušit", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/da.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/da.js new file mode 100644 index 0000000000..0dbb85190d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/da.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annuller", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/de.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/de.js new file mode 100644 index 0000000000..d123bcdac5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/de.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "All": "Alles", + "All HTML:": "Ganzes HTML:", + "Cancel": "Abbrechen", + "Cleaning Area": "Reinigungsbereich", + "Cleaning options": "Reinigungsoptionen", + "Formatting:": "Formatierung:", + "OK": "OK", + "Page Cleaner": "Seite bereinigen", + "Select which types of formatting you would like to remove.": "Wählen Sie aus welche Formatierungen Sie entfernen wollen.", + "Selection": "Ausgewählter Bereich", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ee.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ee.js new file mode 100644 index 0000000000..44546b2585 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ee.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ee", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Loobu", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/el.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/el.js new file mode 100644 index 0000000000..985969fdc3 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/el.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Ακύρωση", + "OK": "Εντάξει", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/es.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/es.js new file mode 100644 index 0000000000..e233f35212 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/es.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "es", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Cancelar", + "OK": "Aceptar", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/eu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/eu.js new file mode 100644 index 0000000000..7a084a306f --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/eu.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "eu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Utzi", + "OK": "Ados", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fa.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fa.js new file mode 100644 index 0000000000..526eb9e6bd --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fa.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "fa", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "انصراف", + "OK": "بله", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fi.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fi.js new file mode 100644 index 0000000000..d403a2cb42 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fi.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Peruuta", + "OK": "Hyväksy", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fr.js new file mode 100644 index 0000000000..aeda9cb154 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fr.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "All": "Tout", + "All HTML:": "Tout le HTML", + "Cancel": "Annuler", + "Cleaning Area": "Zone de nettoyage", + "Cleaning options": "Options de nettoyage", + "Formatting:": "Format", + "OK": "OK", + "Page Cleaner": "Nettoyeur de page", + "Select which types of formatting you would like to remove.": "Sélectionnez quel type de formatage vous voulez supprimer.", + "Selection": "Sélection", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fr_ca.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fr_ca.js new file mode 100644 index 0000000000..0e7e9c1549 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/fr_ca.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "fr_ca", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/gb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/gb.js new file mode 100644 index 0000000000..87566db7ac --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/gb.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "gb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/he.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/he.js new file mode 100644 index 0000000000..d2fa17fb8d --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/he.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ביטול", + "OK": "אישור", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/hu.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/hu.js new file mode 100644 index 0000000000..b2a04ec3e5 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/hu.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Mégsem", + "OK": "Rendben", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/it.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/it.js new file mode 100644 index 0000000000..eb0f90ea42 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/it.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Annullamento", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ja.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ja.js new file mode 100644 index 0000000000..215291c427 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ja.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "All": "すべて", + "All HTML:": "全HTMLタグ:", + "Cancel": "中止", + "Cleaning Area": "クリーニング領域", + "Cleaning options": "クリーニングオプション", + "Formatting:": "書式指定タグ:", + "OK": "OK", + "Page Cleaner": "ページクリーナー", + "Select which types of formatting you would like to remove.": "削除する書式を選択してください。", + "Selection": "選択部分", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/lc_base.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/lc_base.js new file mode 100644 index 0000000000..9a42e4eeeb --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/lc_base.js @@ -0,0 +1,34 @@ +// I18N constants +// +// LANG: "en", ENCODING: UTF-8 +// Author: Translator-Name, +// +// Last revision: 2018-04-12 +// Please don´t remove this information +// If you modify any source, please insert a comment with your name and e-mail +// +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +// +// (Please, remove information below) +// FOR TRANSLATORS: +// +// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE +// (at least a valid email address) +// +// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; +// (if this is not possible, please include a comment +// that states what encoding is necessary.) + +{ + "All": "", + "All HTML:": "", + "Cancel": "", + "Cleaning Area": "", + "Cleaning options": "", + "Formatting:": "", + "OK": "", + "Page Cleaner": "", + "Select which types of formatting you would like to remove.": "", + "Selection": "" +} \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/lt.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/lt.js new file mode 100644 index 0000000000..24e768d6f6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/lt.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "lt", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atšaukti", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/lv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/lv.js new file mode 100644 index 0000000000..7bd5607d49 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/lv.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "lv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Atcelt", + "OK": "Labi", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/nb.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/nb.js new file mode 100644 index 0000000000..a424f31bcf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/nb.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "All": "Hele dokumentet", + "All HTML:": "All HTML-kode:", + "Cancel": "Avbryt", + "Cleaning Area": "Vaskeområde", + "Cleaning options": "Vaskemetoder", + "Formatting:": "Formattering:", + "OK": "OK", + "Page Cleaner": "Dokumentvasker", + "Select which types of formatting you would like to remove.": "Velg hva slags formattering du ønsker å fjerne.", + "Selection": "Markert område", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/nl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/nl.js new file mode 100644 index 0000000000..406773e813 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/nl.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "All": "Alles", + "All HTML:": "Alle html", + "Cancel": "Annuleren", + "Cleaning Area": "Schoonmaak gebied", + "Cleaning options": "Schoonmaak opties", + "Formatting:": "Format", + "OK": "OK", + "Page Cleaner": "Pagina Schoonmaker", + "Select which types of formatting you would like to remove.": "Selecteer welke types van Formatteren je wilt verwijderen", + "Selection": "Geselecteerde tekst", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/pl.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/pl.js new file mode 100644 index 0000000000..0b6c85c204 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/pl.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "pl", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Anuluj", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/pt_br.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/pt_br.js new file mode 100644 index 0000000000..39f2c38863 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/pt_br.js @@ -0,0 +1,22 @@ +// I18N constants +// LANG: "pt_br", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "All": "Tudo", + "All HTML:": "Todo HTML:", + "Cancel": "Cancelar", + "Cleaning Area": "Limpando Área", + "Cleaning options": "Opções de limpesa", + "Formatting:": "Formatação:", + "OK": "OK", + "Page Cleaner": "Limpesa de página", + "Select which types of formatting you would like to remove.": "Selecione o tipo de formatação que deseja remover.", + "Selection": "Seleção" +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ro.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ro.js new file mode 100644 index 0000000000..604b8800ca --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ro.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Renunţă", + "OK": "Acceptă", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ru.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ru.js new file mode 100644 index 0000000000..8c52f9a139 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/ru.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Отмена", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/sh.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/sh.js new file mode 100644 index 0000000000..ee52b35eaf --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/sh.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "sh", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Poništi", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/si.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/si.js new file mode 100644 index 0000000000..b703e499ac --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/si.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "si", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Prekliči", + "OK": "V redu", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/sr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/sr.js new file mode 100644 index 0000000000..d51f4d27ff --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/sr.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "sr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Поништи", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/sv.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/sv.js new file mode 100644 index 0000000000..bcf9a19aa2 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/sv.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Avbryt", + "OK": "OK", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/th.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/th.js new file mode 100644 index 0000000000..bdd1d3adff --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/th.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "th", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "ยกเลิก", + "OK": "ตกลง", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/tr.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/tr.js new file mode 100644 index 0000000000..35fe04cf18 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/tr.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "tr", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "İptal", + "OK": "Tamam", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/vn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/vn.js new file mode 100644 index 0000000000..80a68f7765 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/vn.js @@ -0,0 +1,17 @@ +// I18N constants +// LANG: "vn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "Cancel": "Hủy", + "OK": "Đồng ý", + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file diff --git a/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/zh_cn.js b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/zh_cn.js new file mode 100644 index 0000000000..2a481c91f6 --- /dev/null +++ b/app/src/main/webapp/roller-ui/authoring/editors/xinha-1.5.1/unsupported_plugins/UnFormat/lang/zh_cn.js @@ -0,0 +1,15 @@ +// I18N constants +// LANG: "zh_cn", ENCODING: UTF-8 +// +// IMPORTANT NOTICE FOR TRANSLATORS +// ============================================================================ +// +// Please be sure you read the README_TRANSLATORS.TXT in the Xinha Root +// Directory. Unless you are making a new plugin or module it is unlikely +// that you want to be editing this file directly. +// +{ + "__OBSOLETE__": { + "___ TRANSLATOR NOTE ___": "*** UNFORMAT IS UNSUPPORTED (TRANSLATE AT YOUR DISCRETION) ***" + } +}; \ No newline at end of file