From 2d4b27530ddba6d509095b52dbc1efd7f5e16bf6 Mon Sep 17 00:00:00 2001 From: Chris Morgan Date: Thu, 31 May 2007 22:43:05 +0000 Subject: [PATCH] Upgrade to Xinha 0.931. Xinha has been optimized for size and dozens of issues have been closed out since the last upgrade . Add Firefox and Xinha buttons to main page to show our support. --- images/xinha-red-95.png | Bin 0 -> 4379 bytes include/util.php | 2 +- index.php | 20 + xinha/{htmlarea.css => Xinha.css} | 43 +- xinha/XinhaCore.js | 3668 +++++++++++ xinha/contrib/lc_parse_strings.php | 264 - xinha/contrib/php-xinha.php | 202 + xinha/dialog.js | 76 - xinha/examples/Extended.html | 203 +- xinha/examples/Newbie.html | 22 + xinha/examples/XinhaConfig.js | 17 + xinha/examples/custom.css | 6 +- xinha/examples/dynamic.css | 6 +- xinha/examples/ext_example-body.html | 126 +- xinha/examples/ext_example-menu.php | 153 +- xinha/examples/ext_example.html | 12 +- xinha/examples/full_example-body.html | 185 - xinha/examples/full_example-menu.html | 213 - xinha/examples/full_example.css | 9 +- xinha/examples/full_example.html | 16 - xinha/examples/full_example.js | 252 +- xinha/examples/simple_example.html | 138 + xinha/examples/stylist.css | 6 +- xinha/examples/testbed.html | 43 +- xinha/htmlarea.js | 5610 +---------------- xinha/images/de/bold.gif | Bin 69 -> 57 bytes xinha/images/de/italic.gif | Bin 71 -> 63 bytes xinha/images/de/underline.gif | Bin 82 -> 69 bytes xinha/images/ed_about.gif | Bin 87 -> 76 bytes xinha/images/ed_align.gif | Bin 3440 -> 3388 bytes xinha/images/ed_align_center.gif | Bin 69 -> 61 bytes xinha/images/ed_align_justify.gif | Bin 69 -> 60 bytes xinha/images/ed_align_left.gif | Bin 69 -> 60 bytes xinha/images/ed_align_right.gif | Bin 68 -> 61 bytes xinha/images/ed_buttons_main.gif | Bin 6664 -> 6629 bytes xinha/images/ed_charmap.gif | Bin 143 -> 134 bytes xinha/images/ed_clearfonts.gif | Bin 149 -> 134 bytes xinha/images/ed_color_bg.gif | Bin 181 -> 172 bytes xinha/images/ed_color_fg.gif | Bin 171 -> 164 bytes xinha/images/ed_copy.gif | Bin 110 -> 97 bytes xinha/images/ed_custom.gif | Bin 67 -> 50 bytes xinha/images/ed_cut.gif | Bin 91 -> 78 bytes xinha/images/ed_delete.gif | Bin 90 -> 80 bytes xinha/images/ed_format_bold.gif | Bin 74 -> 57 bytes xinha/images/ed_format_italic.gif | Bin 77 -> 67 bytes xinha/images/ed_format_strike.gif | Bin 78 -> 66 bytes xinha/images/ed_format_sub.gif | Bin 78 -> 67 bytes xinha/images/ed_format_sup.gif | Bin 77 -> 67 bytes xinha/images/ed_format_underline.gif | Bin 85 -> 69 bytes xinha/images/ed_help.gif | Bin 70 -> 55 bytes xinha/images/ed_hr.gif | Bin 70 -> 53 bytes xinha/images/ed_html.gif | Bin 75 -> 64 bytes xinha/images/ed_image.gif | Bin 148 -> 125 bytes xinha/images/ed_indent_less.gif | Bin 87 -> 84 bytes xinha/images/ed_indent_more.gif | Bin 87 -> 84 bytes xinha/images/ed_killword.gif | Bin 154 -> 151 bytes xinha/images/ed_left_to_right.gif | Bin 89 -> 72 bytes xinha/images/ed_link.gif | Bin 97 -> 78 bytes xinha/images/ed_list_bullet.gif | Bin 80 -> 72 bytes xinha/images/ed_list_num.gif | Bin 82 -> 76 bytes xinha/images/ed_overwrite.gif | Bin 888 -> 100 bytes xinha/images/ed_paste.gif | Bin 139 -> 126 bytes xinha/images/ed_print.gif | Bin 128 -> 117 bytes xinha/images/ed_redo.gif | Bin 80 -> 67 bytes xinha/images/ed_right_to_left.gif | Bin 88 -> 75 bytes xinha/images/ed_rmformat.gif | Bin 118 -> 105 bytes xinha/images/ed_save.gif | Bin 143 -> 128 bytes xinha/images/ed_saveas.gif | Bin 905 -> 104 bytes xinha/images/ed_selectall.gif | Bin 941 -> 150 bytes xinha/images/ed_show_border.gif | Bin 104 -> 88 bytes xinha/images/ed_splitblock.gif | Bin 886 -> 82 bytes xinha/images/ed_splitcel.gif | Bin 143 -> 111 bytes xinha/images/ed_undo.gif | Bin 81 -> 67 bytes xinha/images/ed_word_cleaner.gif | Bin 660 -> 652 bytes xinha/images/fr/bold.gif | Bin 0 -> 128 bytes xinha/images/fr/strikethrough.gif | Bin 0 -> 131 bytes xinha/images/fr/underline.gif | Bin 0 -> 134 bytes xinha/images/fullscreen_maximize.gif | Bin 97 -> 87 bytes xinha/images/fullscreen_minimize.gif | Bin 97 -> 87 bytes xinha/images/insert_table.gif | Bin 121 -> 104 bytes xinha/images/insertfilelink.gif | Bin 158 -> 148 bytes xinha/images/tidy.gif | Bin 988 -> 375 bytes xinha/images/toggle_borders.gif | Bin 129 -> 73 bytes xinha/images/xinha_logo.gif | Bin 0 -> 3006 bytes xinha/inline-dialog.js | 327 - xinha/lang/b5.js | 58 +- xinha/lang/ch.js | 112 +- xinha/lang/cz.js | 100 +- xinha/lang/da.js | 60 +- xinha/lang/de.js | 315 +- xinha/lang/ee.js | 100 +- xinha/lang/el.js | 110 +- xinha/lang/es.js | 80 +- xinha/lang/eu.js | 169 + xinha/lang/fa.js | 167 + xinha/lang/fi.js | 76 +- xinha/lang/fr.js | 297 +- xinha/lang/gb.js | 58 +- xinha/lang/he.js | 128 +- xinha/lang/hu.js | 128 +- xinha/lang/it.js | 110 +- xinha/lang/ja.js | 163 +- xinha/lang/lt.js | 106 +- xinha/lang/lv.js | 84 +- xinha/lang/nb.js | 109 +- xinha/lang/nl.js | 128 +- xinha/lang/no.js | 69 - xinha/lang/pl.js | 6 +- xinha/lang/ro.js | 126 +- xinha/lang/ru.js | 235 +- xinha/lang/se.js | 32 - xinha/lang/sh.js | 140 + xinha/lang/si.js | 100 +- xinha/lang/sr.js | 140 + xinha/lang/sv.js | 116 + xinha/lang/vn.js | 112 +- xinha/modules/ColorPicker/ColorPicker.js | 590 ++ .../{popups => modules/CreateLink}/link.html | 12 +- xinha/modules/CreateLink/link.js | 84 + xinha/modules/Dialogs/dialog.js | 62 + xinha/modules/Dialogs/inline-dialog.js | 204 + xinha/{ => modules/Dialogs}/panel-dialog.js | 22 +- xinha/modules/Dialogs/popupwin.js | 120 + xinha/modules/FullScreen/full-screen.js | 136 + xinha/modules/FullScreen/lang/de.js | 6 + xinha/modules/FullScreen/lang/fr.js | 5 + xinha/modules/FullScreen/lang/ja.js | 5 + xinha/modules/FullScreen/lang/nb.js | 6 + xinha/modules/FullScreen/lang/pl.js | 6 + xinha/modules/FullScreen/lang/ru.js | 6 + xinha/modules/FullScreen/lang/sv.js | 6 + xinha/modules/Gecko/Gecko.js | 413 ++ xinha/modules/Gecko/paraHandlerBest.js | 293 + xinha/modules/Gecko/paraHandlerDirty.js | 116 + xinha/modules/GetHtml/DOMwalk.js | 183 + xinha/modules/GetHtml/TransformInnerHTML.js | 143 + .../InsertImage}/insert_image.html | 344 +- xinha/modules/InsertImage/insert_image.js | 107 + .../InsertTable}/insert_table.html | 312 +- xinha/modules/InsertTable/insert_table.js | 63 + .../InternetExplorer/InternetExplorer.js | 217 + xinha/plugins/CSS/css.js | 217 +- xinha/plugins/CharCounter/char-counter.js | 193 +- xinha/plugins/CharCounter/lang/de.js | 4 +- xinha/plugins/CharCounter/lang/fr.js | 3 +- xinha/plugins/CharCounter/lang/ja.js | 7 + .../plugins/CharCounter/lang/{no.js => nb.js} | 2 +- xinha/plugins/CharacterMap/character-map.js | 183 +- xinha/plugins/CharacterMap/img/ed_charmap.gif | Bin 143 -> 134 bytes xinha/plugins/CharacterMap/lang/de.js | 22 +- xinha/plugins/CharacterMap/lang/fr.js | 2 +- xinha/plugins/CharacterMap/lang/ja.js | 6 + .../CharacterMap/lang/{no.js => nb.js} | 2 +- xinha/plugins/CharacterMap/lang/ru.js | 7 + xinha/plugins/CharacterMap/lang/sv.js | 7 + .../CharacterMap/popups/select_character.html | 365 +- xinha/plugins/ContextMenu/1.pl | 76 +- xinha/plugins/ContextMenu/context-menu.js | 823 ++- xinha/plugins/ContextMenu/lang/de.js | 100 +- xinha/plugins/ContextMenu/lang/el.js | 94 +- xinha/plugins/ContextMenu/lang/fr.js | 98 +- xinha/plugins/ContextMenu/lang/he.js | 94 +- xinha/plugins/ContextMenu/lang/ja.js | 53 + .../plugins/ContextMenu/lang/{no.js => nb.js} | 6 +- xinha/plugins/ContextMenu/lang/nl.js | 94 +- xinha/plugins/ContextMenu/lang/sv.js | 54 + xinha/plugins/DoubleClick/double-click.js | 6 +- xinha/plugins/DynamicCSS/dynamiccss.js | 422 +- xinha/plugins/DynamicCSS/lang/de.js | 24 +- xinha/plugins/DynamicCSS/lang/fr.js | 12 +- xinha/plugins/DynamicCSS/lang/ja.js | 7 + .../plugins/DynamicCSS/lang/{no.js => nb.js} | 2 +- .../EnterParagraphs/enter-paragraphs.js | 1087 ---- xinha/plugins/FindReplace/fr_engine.js | 291 +- xinha/plugins/FindReplace/img/ed_find.gif | Bin 111 -> 98 bytes xinha/plugins/FindReplace/lang/ja.js | 26 + .../plugins/FindReplace/lang/{no.js => nb.js} | 2 +- xinha/plugins/FindReplace/lang/ru.js | 28 + xinha/plugins/FindReplace/lang/sv.js | 27 + .../FindReplace/popups/find_replace.html | 4 +- xinha/plugins/Forms/forms.js | 700 +- xinha/plugins/Forms/img/ed_button.gif | Bin 882 -> 89 bytes xinha/plugins/Forms/img/ed_checkbox.gif | Bin 905 -> 102 bytes xinha/plugins/Forms/img/ed_fieldset.gif | Bin 872 -> 76 bytes xinha/plugins/Forms/img/ed_file.gif | Bin 925 -> 130 bytes xinha/plugins/Forms/img/ed_form.gif | Bin 906 -> 114 bytes xinha/plugins/Forms/img/ed_hidden.gif | Bin 898 -> 83 bytes xinha/plugins/Forms/img/ed_image.gif | Bin 987 -> 562 bytes xinha/plugins/Forms/img/ed_label.gif | Bin 857 -> 58 bytes xinha/plugins/Forms/img/ed_password.gif | Bin 906 -> 111 bytes xinha/plugins/Forms/img/ed_radio.gif | Bin 891 -> 104 bytes xinha/plugins/Forms/img/ed_reset.gif | Bin 895 -> 97 bytes xinha/plugins/Forms/img/ed_select.gif | Bin 909 -> 111 bytes xinha/plugins/Forms/img/ed_submit.gif | Bin 889 -> 94 bytes xinha/plugins/Forms/img/ed_text.gif | Bin 910 -> 112 bytes xinha/plugins/Forms/img/ed_textarea.gif | Bin 914 -> 115 bytes xinha/plugins/Forms/lang/ja.js | 86 + xinha/plugins/Forms/popups/form.html | 2 +- xinha/plugins/Forms/popups/input.html | 6 +- xinha/plugins/Forms/popups/select.html | 8 +- xinha/plugins/Forms/popups/textarea.html | 2 +- xinha/plugins/FullPage/full-page.js | 401 +- xinha/plugins/FullPage/img/docprop.gif | Bin 623 -> 613 bytes xinha/plugins/FullPage/lang/de.js | 36 +- xinha/plugins/FullPage/lang/fr.js | 32 +- xinha/plugins/FullPage/lang/he.js | 28 +- xinha/plugins/FullPage/lang/ja.js | 17 + xinha/plugins/FullPage/lang/{no.js => nb.js} | 2 +- xinha/plugins/FullPage/lang/ro.js | 28 +- xinha/plugins/FullPage/popups/docprop.html | 282 +- xinha/plugins/FullPage/test.html | 89 - xinha/plugins/HtmlTidy/html-tidy-logic.php | 156 +- xinha/plugins/HtmlTidy/html-tidy.js | 208 +- xinha/plugins/HtmlTidy/img/html-tidy.gif | Bin 609 -> 599 bytes xinha/plugins/HtmlTidy/lang/ja.js | 8 + xinha/plugins/HtmlTidy/lang/{no.js => nb.js} | 4 +- .../InsertAnchor/img/insert-anchor.gif | Bin 375 -> 370 bytes xinha/plugins/InsertAnchor/insert-anchor.js | 171 +- xinha/plugins/InsertAnchor/lang/ja.js | 7 + .../InsertAnchor/lang/{no.js => nb.js} | 4 +- xinha/plugins/InsertAnchor/lang/nl.js | 8 + .../InsertAnchor/popups/insert_anchor.html | 4 +- xinha/plugins/InsertPicture/InsertPicture.php | 171 +- xinha/plugins/InsertPicture/img/btn_open.gif | Bin 185 -> 173 bytes xinha/plugins/InsertPicture/img/nopic.gif | Bin 1545 -> 1537 bytes xinha/plugins/InsertPicture/insert-picture.js | 94 +- xinha/plugins/InsertPicture/lang/de.js | 7 +- xinha/plugins/InsertPicture/lang/ja.js | 25 + .../InsertPicture/lang/{no.js => nb.js} | 7 +- xinha/plugins/InsertPicture/lang/sv.js | 35 + xinha/plugins/Linker/dTree/api.html | 502 +- xinha/plugins/Linker/dTree/dtree.css | 2 +- xinha/plugins/Linker/dTree/dtree.js | 1058 +--- xinha/plugins/Linker/dTree/example01.html | 104 +- xinha/plugins/Linker/dTree/img/base.gif | Bin 1040 -> 1018 bytes xinha/plugins/Linker/dTree/img/cd.gif | Bin 239 -> 228 bytes xinha/plugins/Linker/dTree/img/copy.gif | Bin 676 -> 641 bytes xinha/plugins/Linker/dTree/img/folder.gif | Bin 372 -> 355 bytes xinha/plugins/Linker/dTree/img/folderopen.gif | Bin 376 -> 365 bytes xinha/plugins/Linker/dTree/img/globe.gif | Bin 1095 -> 1080 bytes xinha/plugins/Linker/dTree/img/imgfolder.gif | Bin 622 -> 609 bytes xinha/plugins/Linker/dTree/img/join.gif | Bin 69 -> 62 bytes xinha/plugins/Linker/dTree/img/joinbottom.gif | Bin 66 -> 55 bytes xinha/plugins/Linker/dTree/img/line.gif | Bin 66 -> 46 bytes xinha/plugins/Linker/dTree/img/minus.gif | Bin 86 -> 82 bytes .../plugins/Linker/dTree/img/minusbottom.gif | Bin 85 -> 76 bytes xinha/plugins/Linker/dTree/img/move.gif | Bin 688 -> 653 bytes .../plugins/Linker/dTree/img/musicfolder.gif | Bin 633 -> 626 bytes .../Linker/dTree/img/nolines_minus.gif | Bin 861 -> 64 bytes .../plugins/Linker/dTree/img/nolines_plus.gif | Bin 870 -> 67 bytes xinha/plugins/Linker/dTree/img/offline.gif | Bin 1012 -> 1001 bytes xinha/plugins/Linker/dTree/img/page.gif | Bin 582 -> 556 bytes xinha/plugins/Linker/dTree/img/plus.gif | Bin 89 -> 86 bytes xinha/plugins/Linker/dTree/img/plusbottom.gif | Bin 88 -> 82 bytes xinha/plugins/Linker/dTree/img/question.gif | Bin 1044 -> 1034 bytes xinha/plugins/Linker/dTree/img/trash.gif | Bin 1051 -> 1036 bytes xinha/plugins/Linker/dialog.html | 212 +- xinha/plugins/Linker/lang/de.js | 3 +- xinha/plugins/Linker/lang/fr.js | 3 +- xinha/plugins/Linker/lang/ja.js | 24 + xinha/plugins/Linker/lang/{no.js => nb.js} | 2 +- xinha/plugins/Linker/lang/pl.js | 3 +- xinha/plugins/Linker/linker.js | 916 ++- xinha/plugins/Linker/scan.php | 268 +- xinha/plugins/ListType/lang/de.js | 24 +- xinha/plugins/ListType/lang/ja.js | 11 + xinha/plugins/ListType/lang/{no.js => nb.js} | 6 +- xinha/plugins/ListType/lang/ru.js | 12 + xinha/plugins/ListType/lang/sv.js | 12 + xinha/plugins/ListType/list-type.js | 314 +- xinha/plugins/QuickTag/img/ed_quicktag.gif | Bin 90 -> 82 bytes xinha/plugins/QuickTag/lang/ja.js | 16 + xinha/plugins/QuickTag/lang/{no.js => nb.js} | 6 +- xinha/plugins/QuickTag/popups/quicktag.html | 2 - xinha/plugins/QuickTag/tag-lib.js | 381 +- xinha/plugins/SpellChecker/aspell_setup.php | 246 +- .../SpellChecker/img/he-spell-check.gif | Bin 899 -> 100 bytes .../plugins/SpellChecker/img/spell-check.gif | Bin 344 -> 337 bytes xinha/plugins/SpellChecker/lang/cz.js | 52 +- xinha/plugins/SpellChecker/lang/da.js | 52 +- xinha/plugins/SpellChecker/lang/de.js | 52 +- xinha/plugins/SpellChecker/lang/he.js | 54 +- xinha/plugins/SpellChecker/lang/hu.js | 52 +- xinha/plugins/SpellChecker/lang/ja.js | 28 + .../SpellChecker/lang/{no.js => nb.js} | 6 +- xinha/plugins/SpellChecker/lang/nl.js | 54 +- xinha/plugins/SpellChecker/lang/ro.js | 52 +- xinha/plugins/SpellChecker/readme-tech.html | 228 +- .../SpellChecker/spell-check-logic.cgi | 420 +- .../SpellChecker/spell-check-logic.php | 335 +- .../SpellChecker/spell-check-savedicts.php | 74 +- .../plugins/SpellChecker/spell-check-ui.html | 249 +- xinha/plugins/SpellChecker/spell-check-ui.js | 799 ++- xinha/plugins/SpellChecker/spell-checker.js | 144 +- xinha/plugins/Stylist/lang/ja.js | 5 + xinha/plugins/Stylist/lang/{no.js => nb.js} | 2 +- xinha/plugins/Stylist/stylist.js | 908 ++- xinha/plugins/SuperClean/dialog.html | 2 +- xinha/plugins/SuperClean/filters/paragraph.js | 6 + xinha/plugins/SuperClean/filters/word.js | 53 + .../plugins/SuperClean/img/ed_superclean.gif | Bin 941 -> 334 bytes xinha/plugins/SuperClean/lang/ja.js | 18 + .../plugins/SuperClean/lang/{no.js => nb.js} | 4 +- xinha/plugins/SuperClean/super-clean.js | 466 +- xinha/plugins/SuperClean/tidy.php | 358 +- .../TableOperations/img/cell-delete.gif | Bin 213 -> 207 bytes .../TableOperations/img/cell-insert-after.gif | Bin 330 -> 323 bytes .../img/cell-insert-before.gif | Bin 332 -> 325 bytes .../TableOperations/img/cell-merge.gif | Bin 377 -> 360 bytes .../plugins/TableOperations/img/cell-prop.gif | Bin 377 -> 352 bytes .../TableOperations/img/cell-split.gif | Bin 391 -> 374 bytes .../TableOperations/img/col-delete.gif | Bin 218 -> 208 bytes .../TableOperations/img/col-insert-after.gif | Bin 337 -> 328 bytes .../TableOperations/img/col-insert-before.gif | Bin 336 -> 325 bytes .../plugins/TableOperations/img/col-split.gif | Bin 394 -> 377 bytes .../TableOperations/img/row-delete.gif | Bin 336 -> 328 bytes .../TableOperations/img/row-insert-above.gif | Bin 333 -> 327 bytes .../TableOperations/img/row-insert-under.gif | Bin 333 -> 327 bytes .../plugins/TableOperations/img/row-prop.gif | Bin 379 -> 354 bytes .../plugins/TableOperations/img/row-split.gif | Bin 380 -> 363 bytes .../TableOperations/img/table-prop.gif | Bin 375 -> 338 bytes xinha/plugins/TableOperations/lang/cz.js | 158 +- xinha/plugins/TableOperations/lang/da.js | 158 +- xinha/plugins/TableOperations/lang/de.js | 162 +- xinha/plugins/TableOperations/lang/el.js | 158 +- xinha/plugins/TableOperations/lang/fi.js | 136 +- xinha/plugins/TableOperations/lang/fr.js | 154 +- xinha/plugins/TableOperations/lang/he.js | 158 +- xinha/plugins/TableOperations/lang/it.js | 158 +- xinha/plugins/TableOperations/lang/ja.js | 83 + .../TableOperations/lang/{no.js => nb.js} | 158 +- xinha/plugins/TableOperations/lang/nl.js | 158 +- xinha/plugins/TableOperations/lang/ro.js | 158 +- xinha/plugins/TableOperations/lang/ru.js | 79 + xinha/plugins/TableOperations/lang/sv.js | 79 + .../TableOperations/popups/merge_cells.html | 65 + .../TableOperations/table-operations.js | 2049 +++--- xinha/plugins/UnFormat/img/unformat.gif | Bin 149 -> 136 bytes xinha/plugins/UnFormat/lang/ja.js | 12 + xinha/plugins/UnFormat/lang/{no.js => nb.js} | 2 +- xinha/popups/about.html | 592 +- xinha/popups/blank.html | 2 +- xinha/popups/color_picker.js | 500 -- xinha/popups/custom2.html | 35 - xinha/popups/editor_help.html | 121 +- xinha/popups/old_insert_image.html | 206 - xinha/popups/popup.css | 15 +- xinha/popups/popup.js | 210 +- xinha/popups/select_color.html | 716 +-- xinha/popupwin.js | 140 - xinha/release-notes.txt | 98 + xinha/skins/blue-metallic/separator.gif | Bin 897 -> 198 bytes xinha/skins/green-look/button-background.gif | Bin 86 -> 78 bytes xinha/skins/green-look/separator.gif | Bin 99 -> 91 bytes 354 files changed, 19793 insertions(+), 21419 deletions(-) create mode 100644 images/xinha-red-95.png rename xinha/{htmlarea.css => Xinha.css} (89%) create mode 100644 xinha/XinhaCore.js delete mode 100755 xinha/contrib/lc_parse_strings.php create mode 100644 xinha/contrib/php-xinha.php delete mode 100644 xinha/dialog.js create mode 100644 xinha/examples/Newbie.html create mode 100644 xinha/examples/XinhaConfig.js delete mode 100644 xinha/examples/full_example-body.html delete mode 100644 xinha/examples/full_example-menu.html delete mode 100644 xinha/examples/full_example.html create mode 100644 xinha/examples/simple_example.html create mode 100644 xinha/images/fr/bold.gif create mode 100644 xinha/images/fr/strikethrough.gif create mode 100644 xinha/images/fr/underline.gif create mode 100644 xinha/images/xinha_logo.gif delete mode 100644 xinha/inline-dialog.js create mode 100644 xinha/lang/eu.js create mode 100644 xinha/lang/fa.js delete mode 100644 xinha/lang/no.js delete mode 100644 xinha/lang/se.js create mode 100644 xinha/lang/sh.js create mode 100644 xinha/lang/sr.js create mode 100644 xinha/lang/sv.js create mode 100644 xinha/modules/ColorPicker/ColorPicker.js rename xinha/{popups => modules/CreateLink}/link.html (92%) create mode 100644 xinha/modules/CreateLink/link.js create mode 100644 xinha/modules/Dialogs/dialog.js create mode 100644 xinha/modules/Dialogs/inline-dialog.js rename xinha/{ => modules/Dialogs}/panel-dialog.js (63%) create mode 100644 xinha/modules/Dialogs/popupwin.js create mode 100644 xinha/modules/FullScreen/full-screen.js create mode 100644 xinha/modules/FullScreen/lang/de.js create mode 100644 xinha/modules/FullScreen/lang/fr.js create mode 100644 xinha/modules/FullScreen/lang/ja.js create mode 100644 xinha/modules/FullScreen/lang/nb.js create mode 100644 xinha/modules/FullScreen/lang/pl.js create mode 100644 xinha/modules/FullScreen/lang/ru.js create mode 100644 xinha/modules/FullScreen/lang/sv.js create mode 100644 xinha/modules/Gecko/Gecko.js create mode 100644 xinha/modules/Gecko/paraHandlerBest.js create mode 100644 xinha/modules/Gecko/paraHandlerDirty.js create mode 100644 xinha/modules/GetHtml/DOMwalk.js create mode 100644 xinha/modules/GetHtml/TransformInnerHTML.js rename xinha/{popups => modules/InsertImage}/insert_image.html (63%) create mode 100644 xinha/modules/InsertImage/insert_image.js rename xinha/{popups => modules/InsertTable}/insert_table.html (88%) create mode 100644 xinha/modules/InsertTable/insert_table.js create mode 100644 xinha/modules/InternetExplorer/InternetExplorer.js create mode 100644 xinha/plugins/CharCounter/lang/ja.js rename xinha/plugins/CharCounter/lang/{no.js => nb.js} (76%) create mode 100644 xinha/plugins/CharacterMap/lang/ja.js rename xinha/plugins/CharacterMap/lang/{no.js => nb.js} (84%) create mode 100644 xinha/plugins/CharacterMap/lang/ru.js create mode 100644 xinha/plugins/CharacterMap/lang/sv.js create mode 100644 xinha/plugins/ContextMenu/lang/ja.js rename xinha/plugins/ContextMenu/lang/{no.js => nb.js} (94%) create mode 100644 xinha/plugins/ContextMenu/lang/sv.js create mode 100644 xinha/plugins/DynamicCSS/lang/ja.js rename xinha/plugins/DynamicCSS/lang/{no.js => nb.js} (85%) delete mode 100644 xinha/plugins/EnterParagraphs/enter-paragraphs.js create mode 100644 xinha/plugins/FindReplace/lang/ja.js rename xinha/plugins/FindReplace/lang/{no.js => nb.js} (96%) create mode 100644 xinha/plugins/FindReplace/lang/ru.js create mode 100644 xinha/plugins/FindReplace/lang/sv.js create mode 100644 xinha/plugins/Forms/lang/ja.js create mode 100644 xinha/plugins/FullPage/lang/ja.js rename xinha/plugins/FullPage/lang/{no.js => nb.js} (94%) delete mode 100644 xinha/plugins/FullPage/test.html create mode 100644 xinha/plugins/HtmlTidy/lang/ja.js rename xinha/plugins/HtmlTidy/lang/{no.js => nb.js} (72%) create mode 100644 xinha/plugins/InsertAnchor/lang/ja.js rename xinha/plugins/InsertAnchor/lang/{no.js => nb.js} (67%) create mode 100644 xinha/plugins/InsertAnchor/lang/nl.js create mode 100644 xinha/plugins/InsertPicture/lang/ja.js rename xinha/plugins/InsertPicture/lang/{no.js => nb.js} (81%) create mode 100644 xinha/plugins/InsertPicture/lang/sv.js create mode 100644 xinha/plugins/Linker/lang/ja.js rename xinha/plugins/Linker/lang/{no.js => nb.js} (90%) create mode 100644 xinha/plugins/ListType/lang/ja.js rename xinha/plugins/ListType/lang/{no.js => nb.js} (69%) create mode 100644 xinha/plugins/ListType/lang/ru.js create mode 100644 xinha/plugins/ListType/lang/sv.js create mode 100644 xinha/plugins/QuickTag/lang/ja.js rename xinha/plugins/QuickTag/lang/{no.js => nb.js} (84%) create mode 100644 xinha/plugins/SpellChecker/lang/ja.js rename xinha/plugins/SpellChecker/lang/{no.js => nb.js} (84%) create mode 100644 xinha/plugins/Stylist/lang/ja.js rename xinha/plugins/Stylist/lang/{no.js => nb.js} (79%) create mode 100644 xinha/plugins/SuperClean/filters/paragraph.js create mode 100644 xinha/plugins/SuperClean/filters/word.js create mode 100644 xinha/plugins/SuperClean/lang/ja.js rename xinha/plugins/SuperClean/lang/{no.js => nb.js} (92%) create mode 100644 xinha/plugins/TableOperations/lang/ja.js rename xinha/plugins/TableOperations/lang/{no.js => nb.js} (96%) create mode 100644 xinha/plugins/TableOperations/lang/ru.js create mode 100644 xinha/plugins/TableOperations/lang/sv.js create mode 100644 xinha/plugins/TableOperations/popups/merge_cells.html create mode 100644 xinha/plugins/UnFormat/lang/ja.js rename xinha/plugins/UnFormat/lang/{no.js => nb.js} (93%) delete mode 100644 xinha/popups/color_picker.js delete mode 100644 xinha/popups/custom2.html delete mode 100644 xinha/popups/old_insert_image.html delete mode 100644 xinha/popupwin.js create mode 100644 xinha/release-notes.txt diff --git a/images/xinha-red-95.png b/images/xinha-red-95.png new file mode 100644 index 0000000000000000000000000000000000000000..71e6a7785e7515cd22955e818f02e27005432da6 GIT binary patch literal 4379 zcmeAS@N?(olHy`uVBq!ia0y~yV2Ed6U`XL$V_;x-@bS%T1_lPs0*}aI1_o|n5N2eU zHAjMhfy+13**PE}BfliSI3vG6!PD7Up`a)~Ei)&TfuZ8o+~D$v$=}87?tf3^4|BTl zVdM0iMg}G2H5?}dA{PlvVn}Qe5OO%$+QAhjA}Tn?BlJkqRW6UY9gh}h>_~U)>WJzN zjj?zqe`opD+N$?&-~PV-d(ZPZ&;OjOJkQ@CD5N&=*`h24%b->ps~htD{vJn8?rmTa z^?1OdAn@$;p>)=x3=AKbD=X?sHrW4RT%XUt#87ZmPethX!~e~@0@T786ecn}P!f91 z%{U>5;e=ku2@!@95)2!HH>YqhOkrTisjP8QVpzq?@aBuB9V^3)m6Pv?Gu&7tvyy|M zmyuznhPw)r!)}Iz(8eGgrUQo<7OZhl(qlQWjIUWWEsh<}Q{RWi-RBFoul#KVyw=b1sPDx={7AyVBy1 zgWSA@0Vix^Ww^Mx->N1p+-vZ-+wQ;d!~6%`b>IFt$o;!r^?{*qmcz`o2NpN~ElkWS zTNl*#{4|S`Vcz%W%KwhH*8lC(y!gmuV~mby*T;y?9RW(d$18URO>|K_IrWjy%X*`a z^3(ouPA=zVSkvZzz;7G-*3&r$>fSLjb@N4BDr0b{`>fj|#XXThAl<~M@;d{=3yGK&Q^b9aaWF8rENIl);KF9}~B}^-wvL?oQD1Xu|60z)! zariai_6Y@}u0LIS+zqERZVF_+!c^+8bA`NA*Rch~7fVd|V;iO|%DyPIMb5Ti+oI(c zyJ;Eo#d4=j5SN>j}9h?>*tz z)UZZj`o!%M_$T;J`hD{7lkFl_M>`(*a4u2_S~5k*%QV&gDa+FNMou#qtO`84a^4k= zRUKCIqdapLlm+Mqx33g7DV?QycD9)F=_R_0uU?pynV$JQL;q#TF3!8na<0=aOuv-< zg8k+5m(5?wd3f7+n~!@WX-H;ER!c6I*e@m|gcw{mlAf79gMUVTXoS`` zts2pZr-Y_jO%0n`H}(0dkkH~#`>U0!xIdgIWm236AlyjHauE1TbyKa}Be`R+$ z`E}(>&abDw^1Zx!(fw=gm&ISjU%kKf{-V6OfeDA%1j!sji{uYyCM3Veo{_oZ;)j-p zD+Etx?3#EaWAR1L#p*lM-nFMcHmwl1OIwpKleEUDd&JyJG1_rAy@k$%lf znqPzSZW+G$^M>oqtT$|LEx#pxQ~j3v?Y!(686nwg)+N?8MJ1(Y%5n8Vep-tD@y_43!nvv<$Fv-W20 zmAhwbkJhgK?W;Fi`ef{3+xL!NK75aORCwm`+~u>EANoAuxqe((Tx8tuy>kAW=cvuQ zW{`X0_L1lZdrwyK$LT^P!YZ6^JD(i6am2RsaWT{LoLR77M8#h<-AcY0pA zO{8h$gc^(18A8)H**|Soa0<|u@PE2I&sSFXQ_JjDf7gABdKU$5+`hxhX412{VN<_Z z+_kQC{*}?@?^b%unA1NlTZ_H~2p z8r%KTw6!PmKB;_`drEq8`>F3wlz$d~zAc*5>T_}NmY{V3d}2QOE3_-3C88^KcBJ;zg+S3`Q zH%%K(oOcqU?niBdxYx>pbuzD@= zsqt$H)~s0fV}sj{XOF`D;;+_xt<1f3>z>#4Q*U2;yk7D;Z_W3}{p-E`@44a_I)?i zZe81dx4il@U$d;J^}Y8~-t5_`T@jwW*R}R*-lca%%ICF!{dgVN<3ZBkx$iFrF?X2>x1yNdjha8_CRKLHhruuQf zi-qS7-#L8t{>=LAUpZcTRBB(c+F!axcX93l+l71Izvx*!S2j-8ec$%~b?*%yCzl>K z?GK-~V6KMk$DdD{CO=-DvV7iLKYQCNGw)P>_xUq3J2o(OZ@TmOdG_KZ?|in$e?R&8 z-t+$04|@u}D1A@5t-9TNt?fEn_qu|=4?WgL=f6(zQ0`mE9=13 z;_E-I>&4Em-24968|m$NYIkLJsP6juqwL#T@p7(rK6hfP`YYD|*>~&jEB0Ufuj;q_ z+n9PF_rZ^Z0}1C3NAkbt<7}VzZ_5A6?GG=xpK-sc?55n?KUZE}npbM?r<8M(A1>dt zT=@K{y0HJ1uZvedzyJ5qZ}0OFe{Ou>{@Hzg|GLVRpNrnFUb)`txbkuNJ?AQIKQ8;T z_T25-_dDM2x_^AH{7j8M4*vo^U;LGPeE9|c?{?2?{{7Ma-tzgk>ZSR{3=9k`>5jgR z3=A9lYJLY!W?*1YNcITwWnidMWngG%W?=aFpMjy_B?CjL0RzLU1O^7H84L{K`IF+0 zx-l@YS$MiQhE&{oGuJoxwwuf``RWCdPFX%46`rTB)aFlRez$RNLY}SRlM8Vh)2jGq z)iIn=zfp9)XO6b`3jen!KX86v{l0gCXS7UH_JY!xEBRlg&duAtY44=1lfv$$yCqkz zxqJ2Byt`NH!#7Q3YVcYbWWe+I;gcs%ZvFUSvE|8%%P$w)&3k|K_1CvouU`EdvNT9j zM_)hOcxKNs;YsV(tt%)f*f7bA=kY=|`E^D!d3X+2%&@YxEq(U5pk4oFDJaqQF*^;my zzgDz)Pk;RV_pRFfA5L1Si4_+;wC>;b@XeHm7o3`J9N6QZx@pFbEgHQ4j{LPbCzrd} z^L0bRtAf)JpLp*7-thU0OV;TXR2Scs7!Ur$kO|zzT+AEtWczif@w&1YA1K*^_>$o43cl7RTcrJfRSAULs zLIcl-f78U17CfKE$$sFpQ2L>KL215*mHg8UwO7ihJ}l>LNMXLGw(W|Q#@o@cTvM(?_N*VpB=7jSpoODmGl2ICDqHnFg2GlR;-2j>Njzgq~<{i97uFtWn{@ z2FA|44eOd1JNH#TygoyE!jEY8x{W?tlClnX+}SQ1&g}MV*~;b9I`^yIuUz=>`vs+q zA159Eon`We;fvNrL*2r!m)9S2W2`Z2dmw!OQ+%i450}IH#fv|5%9gzolnypzpMPT7 z{skOAjvSmH&QY_dZEj_f@?wD>N4EU2WId?9=;?XE=vQx*cRl@nVa=fjQ`_pzSw7fD zsGU<;*Vea^>)*7L5B5=N^WIO1KQO)U^nxPY|9%_~>K8rO{p+65M;|Bt0Iq*NEDutp zCR}^)|LXZ^ouBO*_HXtvVKQ;x{IR{W_hiSx(*_FPJ}h@;sLz?1QN{2p*MV(`yX>D% z_YbkP$ulivFE!jabY4i>JekW*gZbDat~w{9AL`Cc?^pTND?WbCe(_%Pz9-fU%S4#& zU!9ox=*?=|pSt#2UE?GsIBod9-8fC>VOxLw`wxp=FP6&FdA8w0rRId>cl-AL4LtaH zu9eP-9CF`rmRB9!=eX3lidCs1F!HF8Z)|mZ4EvfG7nEw5r(_|o;db6rh@!Dx_DaWGYe^xv_vUA<8r|ue} zbutrKC#2iG_dfBR>A;4|e`W64$ft`P&}-1z{FL>Q=uVTC-*)F~?KSuh$@p^~FuXIr zr{qNIhD8_s0)B3~ct@|w{-CGDewzld$s0@$Fx35bjt?@YtlP(5 zQnz~7mDcIJACG6qay@BRn!aK>qtXM{hvG4(N;FpR{;J&`y*|+3%|BJgAG*)Bs!Y(A zG^kAees^i*6ODEz-}CR8*R#nKC%7K`-Ku|S(Q26x!5>Px6Y|gQ{g%t=^fdC>ABln! za~4F&X+37I3;poq*fLFyZGRkN?N2Y&{ARd+H!oAwi6`3?h2Bn?Iqkqai(((vEQYX* zB?3#fv3|2$_%zM-ne~eZ{fsGx_&oEX1UpVu&D0jj+9i2FZiy!2p6LQ>k2z>@ED=8Y z{fP6D&3-$d{0%7ym=nK@^~2p;Tnc*cuKyBPxYD2H@TaCXlI!j+7I<|1ElUS`Jllr` zKG(}7lFfIw{W+jts6NN&`Mwh;)iO^NKG3!L^X}rjr`NKl?>VH;bmPf^*(Hy6$Cn*> zu=$r$!6z-A{U?sz{LS;lDBU5hz|3ORtrzB2OJZX-?d*8ec-nJ^%_6orI}W(cPo3<0 zF+=^lZ-L*hBOlc+d+*BRyskZoYyMnz0fy5Ia>jFtVp=Q;>>iZ{p3VLCY@5!5^fv8P zs}B6?n_uJ2{ORnjE4#0|eYoH1{OH=J>pOSEn)JmlJh1tW(p5S0WRaPnRiVBKNn7k) zUca0Ap0$BLV}1E-=GY6r?3ev~QZ0Mjo|$3xdd|@KH@~|uFfcH9y85}Sb4q9e0RBpX A`2YX_ literal 0 HcmV?d00001 diff --git a/include/util.php b/include/util.php index fe3465d..0fff4d7 100644 --- a/include/util.php +++ b/include/util.php @@ -693,7 +693,7 @@ function HtmlAreaLoaderScript($aTextareas) echo ' - + + * + */ + + function xinha_pass_to_php_backend($Data, $KeyLocation = 'Xinha:BackendKey') + { + + $bk = array(); + $bk['data'] = serialize($Data); + + @session_start(); + if(!isset($_SESSION[$KeyLocation])) + { + $_SESSION[$KeyLocation] = uniqid('Key_'); + } + + $bk['session_name'] = session_name(); + $bk['key_location'] = $KeyLocation; + $bk['hash'] = + function_exists('sha1') ? + sha1($_SESSION[$KeyLocation] . $bk['data']) + : md5($_SESSION[$KeyLocation] . $bk['data']); + + + // The data will be passed via a postback to the + // backend, we want to make sure these are going to come + // out from the PHP as an array like $bk above, so + // we need to adjust the keys. + $backend_data = array(); + foreach($bk as $k => $v) + { + $backend_data["backend_data[$k]"] = $v; + } + + // The session_start() above may have been after data was sent, so cookies + // wouldn't have worked. + $backend_data[session_name()] = session_id(); + + echo 'backend_data = ' . xinha_to_js($backend_data) . "; \n"; + + } + + /** Convert PHP data structure to Javascript */ + + function xinha_to_js($var, $tabs = 0) + { + if(is_numeric($var)) + { + return $var; + } + + if(is_string($var)) + { + return "'" . xinha_js_encode($var) . "'"; + } + + if(is_array($var)) + { + $useObject = false; + foreach(array_keys($var) as $k) { + if(!is_numeric($k)) $useObject = true; + } + $js = array(); + foreach($var as $k => $v) + { + $i = ""; + if($useObject) { + if(preg_match('#^[a-zA-Z]+[a-zA-Z0-9]*$#', $k)) { + $i .= "$k: "; + } else { + $i .= "'$k': "; + } + } + $i .= xinha_to_js($v, $tabs + 1); + $js[] = $i; + } + if($useObject) { + $ret = "{\n" . xinha_tabify(implode(",\n", $js), $tabs) . "\n}"; + } else { + $ret = "[\n" . xinha_tabify(implode(",\n", $js), $tabs) . "\n]"; + } + return $ret; + } + + return 'null'; + } + + /** Like htmlspecialchars() except for javascript strings. */ + + function xinha_js_encode($string) + { + static $strings = "\\,\",',%,&,<,>,{,},@,\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); + } + + + /** Used by plugins to get the config passed via + * xinha_pass_to_backend() + * returns either the structure given, or NULL + * if none was passed or a security error was encountered. + */ + + function xinha_read_passed_data() + { + if(isset($_REQUEST['backend_data']) && is_array($_REQUEST['backend_data'])) + { + $bk = $_REQUEST['backend_data']; + session_name($bk['session_name']); + @session_start(); + if(!isset($_SESSION[$bk['key_location']])) return NULL; + + if($bk['hash'] === + function_exists('sha1') ? + sha1($_SESSION[$bk['key_location']] . $bk['data']) + : md5($_SESSION[$bk['key_location']] . $bk['data'])) + { + return unserialize(ini_get('magic_quotes_gpc') ? stripslashes($bk['data']) : $bk['data']); + } + } + + return NULL; + } + + /** Used by plugins to get a query string that can be sent to the backend + * (or another part of the backend) to send the same data. + */ + + function xinha_passed_data_querystring() + { + $qs = array(); + if(isset($_REQUEST['backend_data']) && is_array($_REQUEST['backend_data'])) + { + foreach($_REQUEST['backend_data'] as $k => $v) + { + $v = ini_get('magic_quotes_gpc') ? stripslashes($v) : $v; + $qs[] = "backend_data[" . rawurlencode($k) . "]=" . rawurlencode($v); + } + } + + $qs[] = session_name() . '=' . session_id(); + return implode('&', $qs); + } + + + /** Just space-tab indent some text */ + function xinha_tabify($text, $tabs) + { + if($text) + { + return str_repeat(" ", $tabs) . preg_replace('/\n(.)/', "\n" . str_repeat(" ", $tabs) . "\$1", $text); + } + } + + /** Return upload_max_filesize value from php.ini in kilobytes (function adapted from php.net)**/ + function upload_max_filesize_kb() + { + $val = ini_get('upload_max_filesize'); + $val = trim($val); + $last = strtolower($val{strlen($val)-1}); + switch($last) + { + // The 'G' modifier is available since PHP 5.1.0 + case 'g': + $val *= 1024; + case 'm': + $val *= 1024; + } + return $val; +} +?> \ No newline at end of file diff --git a/xinha/dialog.js b/xinha/dialog.js deleted file mode 100644 index b6e7b20..0000000 --- a/xinha/dialog.js +++ /dev/null @@ -1,76 +0,0 @@ -// htmlArea v3.0 - Copyright (c) 2003-2004 interactivetools.com, inc. -// This copyright notice MUST stay intact for use (see license.txt). -// -// Portions (c) dynarch.com, 2003-2004 -// -// A free WYSIWYG editor replacement for + + + \ No newline at end of file diff --git a/xinha/examples/XinhaConfig.js b/xinha/examples/XinhaConfig.js new file mode 100644 index 0000000..0fcf8fa --- /dev/null +++ b/xinha/examples/XinhaConfig.js @@ -0,0 +1,17 @@ +xinha_editors=null; +xinha_init=null; +xinha_config=null; +xinha_plugins=null; +xinha_init=xinha_init?xinha_init:function(){ +xinha_editors=xinha_editors?xinha_editors:["myTextArea","anotherOne"]; +xinha_plugins=xinha_plugins?xinha_plugins:["CharacterMap","ContextMenu","ListType","Stylist","Linker","SuperClean","TableOperations"]; +if(!Xinha.loadPlugins(xinha_plugins,xinha_init)){ +return; +} +xinha_config=xinha_config?xinha_config():new Xinha.Config(); +xinha_config.pageStyleSheets=[_editor_url+"examples/full_example.css"]; +xinha_editors=Xinha.makeEditors(xinha_editors,xinha_config,xinha_plugins); +Xinha.startEditors(xinha_editors); +}; +Xinha._addEvent(window,"load",xinha_init); + diff --git a/xinha/examples/custom.css b/xinha/examples/custom.css index b77dca1..079da8c 100644 --- a/xinha/examples/custom.css +++ b/xinha/examples/custom.css @@ -4,9 +4,9 @@ -- @TODO Make this CSS more useful. -- -- $HeadURL: http://svn.xinha.python-hosting.com/trunk/examples/custom.css $ - -- $LastChangedDate: 2005-02-18 23:10:03 -0500 (Fri, 18 Feb 2005) $ - -- $LastChangedRevision: 14 $ - -- $LastChangedBy: gogo $ + -- $LastChangedDate: 2007-01-19 23:24:36 +0100 (Fr, 19 Jan 2007) $ + -- $LastChangedRevision: 677 $ + -- $LastChangedBy: ray $ --------------------------------------------------------------------------*/ body { background-color: #234; color: #dd8; font-family: tahoma; font-size: 12px; } diff --git a/xinha/examples/dynamic.css b/xinha/examples/dynamic.css index 8d77bb6..238b043 100644 --- a/xinha/examples/dynamic.css +++ b/xinha/examples/dynamic.css @@ -4,9 +4,9 @@ -- @TODO Make this CSS more useful. -- -- $HeadURL: http://svn.xinha.python-hosting.com/trunk/examples/dynamic.css $ - -- $LastChangedDate: 2005-02-18 23:10:03 -0500 (Fri, 18 Feb 2005) $ - -- $LastChangedRevision: 14 $ - -- $LastChangedBy: gogo $ + -- $LastChangedDate: 2007-01-19 23:24:36 +0100 (Fr, 19 Jan 2007) $ + -- $LastChangedRevision: 677 $ + -- $LastChangedBy: ray $ --------------------------------------------------------------------------*/ p { diff --git a/xinha/examples/ext_example-body.html b/xinha/examples/ext_example-body.html index 0a155c8..82f501e 100644 --- a/xinha/examples/ext_example-body.html +++ b/xinha/examples/ext_example-body.html @@ -4,14 +4,14 @@ Example of Xinha - + - + -
-
- - + +
+ +
- diff --git a/xinha/examples/ext_example-menu.php b/xinha/examples/ext_example-menu.php index b81fd01..2fd27ac 100644 --- a/xinha/examples/ext_example-menu.php +++ b/xinha/examples/ext_example-menu.php @@ -1,7 +1,7 @@ + $LocalPluginPath = dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'plugins'; + $LocalSkinPath = dirname(dirname(__File__)).DIRECTORY_SEPARATOR.'skins'; +?> @@ -10,10 +10,10 @@ -- frame to provide a menu for generating example editors using -- full_example-body.html, and full_example.js. -- - -- $HeadURL$ - -- $LastChangedDate$ - -- $LastChangedRevision$ - -- $LastChangedBy$ + -- $HeadURL: http://svn.xinha.python-hosting.com/trunk/examples/ext_example-menu.php $ + -- $LastChangedDate: 2007-02-07 20:12:42 +0100 (Mi, 07 Feb 2007) $ + -- $LastChangedRevision: 715 $ + -- $LastChangedBy: htanaka $ ---------------------------------------------------------------------------> @@ -25,7 +25,30 @@ label { display:block;} -
+

Xinha Example

Settings @@ -223,6 +234,7 @@ Dialog._geckoOpenModal = function(url, action, init) { + - - - - - - - - - - - - - - -
@@ -263,17 +260,25 @@ Dialog._geckoOpenModal = function(url, action, init) {
read())) //not a dot file or directory { if(substr($entry,0,1) != '.') - { echo ''; + { + $dir_array[] = $entry; } } $d->close(); + sort($dir_array); + foreach ($dir_array as $entry) + { + echo ''."\n"; + } + ?>
- + - +
- - - - - - - - - - -
- - -
- - - - - - - - - - - - diff --git a/xinha/examples/full_example-menu.html b/xinha/examples/full_example-menu.html deleted file mode 100644 index 9efce77..0000000 --- a/xinha/examples/full_example-menu.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - -Example of Xinha - - - - - - -
-

- Select from the options below and -

-
- Settings - - - -
- -
- Plugins - - - -
- mode : -
- - - - - - - - - - - - - - - - - - - - - - - -
- mode : -
- - - - - - - -
- -
- PHP Plugins -

- These plugins require PHP in order to run. -

- - - - - - -
- -
- - - - diff --git a/xinha/examples/full_example.css b/xinha/examples/full_example.css index 93c9ea1..cdd57e5 100644 --- a/xinha/examples/full_example.css +++ b/xinha/examples/full_example.css @@ -2,9 +2,9 @@ -- Xinha example CSS file. This is ripped from Trac ;) -- -- $HeadURL: http://svn.xinha.python-hosting.com/trunk/examples/full_example.css $ - -- $LastChangedDate: 2005-02-18 23:10:03 -0500 (Fri, 18 Feb 2005) $ - -- $LastChangedRevision: 14 $ - -- $LastChangedBy: gogo $ + -- $LastChangedDate: 2007-01-19 23:24:36 +0100 (Fr, 19 Jan 2007) $ + -- $LastChangedRevision: 677 $ + -- $LastChangedBy: ray $ --------------------------------------------------------------------------*/ body { @@ -44,4 +44,5 @@ .area_holder { margin:10px; - } \ No newline at end of file + } + label {font-size: 11px;} \ No newline at end of file diff --git a/xinha/examples/full_example.html b/xinha/examples/full_example.html deleted file mode 100644 index bf06173..0000000 --- a/xinha/examples/full_example.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - diff --git a/xinha/examples/full_example.js b/xinha/examples/full_example.js index 751a744..64e4735 100644 --- a/xinha/examples/full_example.js +++ b/xinha/examples/full_example.js @@ -1,155 +1,97 @@ - - /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:-- - -- Xinha example logic. This javascript is used to auto-generate examples - -- as controlled by the options set in full_example-menu.html. it's called - -- from full_example-body.html. - -- - -- $HeadURL: http://svn.xinha.python-hosting.com/trunk/examples/full_example.js $ - -- $LastChangedDate: 2005-10-29 12:28:08 -0400 (Sat, 29 Oct 2005) $ - -- $LastChangedRevision: 416 $ - -- $LastChangedBy: gogo $ - --------------------------------------------------------------------------*/ - - var num = 1; - if(window.parent && window.parent != window) - { - var f = window.parent.menu.document.forms[0]; - _editor_lang = f.lang[f.lang.selectedIndex].value; - _editor_skin = f.skin[f.skin.selectedIndex].value; - - num = parseInt(f.num.value); - if(isNaN(num)) - { - num = 1; - f.num.value = 1; - } - xinha_plugins = [ ]; - for(var x = 0; x < f.plugins.length; x++) - { - if(f.plugins[x].checked) xinha_plugins.push(f.plugins[x].value); - } - } - - xinha_editors = [ ] - for(var x = 0; x < num; x++) - { - var ta = 'myTextarea' + x; - xinha_editors.push(ta); - } - - xinha_config = function() - { - var config = new HTMLArea.Config(); - - if(typeof CSS != 'undefined') - { - config.pageStyle = "@import url(custom.css);"; - } - - if(typeof Stylist != 'undefined') - { - // We can load an external stylesheet like this - NOTE : YOU MUST GIVE AN ABSOLUTE URL - // otherwise it won't work! - config.stylistLoadStylesheet(document.location.href.replace(/[^\/]*\.html/, 'stylist.css')); - - // Or we can load styles directly - config.stylistLoadStyles('p.red_text { color:red }'); - - // If you want to provide "friendly" names you can do so like - // (you can do this for stylistLoadStylesheet as well) - config.stylistLoadStyles('p.pink_text { color:pink }', {'p.pink_text' : 'Pretty Pink'}); - } - - if(typeof DynamicCSS != 'undefined') - { - config.pageStyle = "@import url(dynamic.css);"; - } - - if(typeof InsertWords != 'undefined') - { - // Register the keyword/replacement list - var keywrds1 = new Object(); - var keywrds2 = new Object(); - - keywrds1['-- Dropdown Label --'] = ''; - keywrds1['onekey'] = 'onevalue'; - keywrds1['twokey'] = 'twovalue'; - keywrds1['threekey'] = 'threevalue'; - - keywrds2['-- Insert Keyword --'] = ''; - keywrds2['Username'] = '%user%'; - keywrds2['Last login date'] = '%last_login%'; - config.InsertWords = { - combos : [ { options: keywrds1, context: "body" }, - { options: keywrds2, context: "li" } ] - } - - } - - if (typeof ListType != 'undefined') - { - if(window.parent && window.parent != window) - { - var f = window.parent.menu.document.forms[0]; - config.ListType.mode = f.elements['ListTypeMode'].options[f.elements['ListTypeMode'].selectedIndex].value; - } - } - - if (typeof CharacterMap != 'undefined') - { - if(window.parent && window.parent != window) - { - var f = window.parent.menu.document.forms[0]; - config.CharacterMap.mode = f.elements['CharacterMapMode'].options[f.elements['CharacterMapMode'].selectedIndex].value; - } - } - - if(typeof Filter != 'undefined') { - xinha_config.Filters = ["Word", "Paragraph"] - } - - return config; - } - - - var f = document.forms[0]; - f.innerHTML = ''; - - var lipsum = document.getElementById('lipsum').innerHTML; - - for(var x = 0; x < num; x++) - { - var ta = 'myTextarea' + x; - - var div = document.createElement('div'); - div.className = 'area_holder'; - - var txta = document.createElement('textarea'); - txta.id = ta; - txta.name = ta; - txta.value = lipsum; - txta.style.width="100%"; - txta.style.height="420px"; - - div.appendChild(txta); - f.appendChild(div); - } - - //check submitted values - var submit = document.createElement('input'); - submit.type = "submit"; - submit.id = "submit"; - submit.value = "submit"; - f.appendChild(submit); - - var _oldSubmitHandler = null; - if (document.forms[0].onsubmit != null) { - _oldSubmitHandler = document.forms[0].onsubmit; - } - function frame_onSubmit(){ - alert(document.getElementById("myTextarea0").value); - if (_oldSubmitHandler != null) { - _oldSubmitHandler(); - } - } - document.forms[0].onsubmit = frame_onSubmit; \ No newline at end of file +var num=1; +if(window.parent&&window.parent!=window){ +var f=window.parent.menu.document.forms[0]; +_editor_lang=f.lang[f.lang.selectedIndex].value; +_editor_skin=f.skin[f.skin.selectedIndex].value; +num=parseInt(f.num.value); +if(isNaN(num)){ +num=1; +f.num.value=1; +} +xinha_plugins=[]; +for(var x=0;x + + + +Simple example of Xinha + + + + + + + + + + + + + + +
+ + + +
+ + + \ No newline at end of file diff --git a/xinha/examples/stylist.css b/xinha/examples/stylist.css index 7a5b158..27b9475 100644 --- a/xinha/examples/stylist.css +++ b/xinha/examples/stylist.css @@ -3,9 +3,9 @@ -- when the Stylist plugin is included in an auto-generated example. -- -- $HeadURL: http://svn.xinha.python-hosting.com/trunk/examples/stylist.css $ - -- $LastChangedDate: 2005-07-19 02:23:58 -0400 (Tue, 19 Jul 2005) $ - -- $LastChangedRevision: 277 $ - -- $LastChangedBy: gogo $ + -- $LastChangedDate: 2007-01-19 23:24:36 +0100 (Fr, 19 Jan 2007) $ + -- $LastChangedRevision: 677 $ + -- $LastChangedBy: ray $ --------------------------------------------------------------------------*/ .bluetext diff --git a/xinha/examples/testbed.html b/xinha/examples/testbed.html index 8ce2b23..a1c8fae 100644 --- a/xinha/examples/testbed.html +++ b/xinha/examples/testbed.html @@ -13,10 +13,10 @@ -- of the file to remove the auto-example-generating code and allow for the -- use of the file as a boilerplate. -- - -- $HeadURL: svn://gogo@xinha.gogo.co.nz/repository/trunk/examples/full_example-body.html $ - -- $LastChangedDate: 2005-03-05 21:42:32 +1300 (Sat, 05 Mar 2005) $ - -- $LastChangedRevision: 35 $ - -- $LastChangedBy: gogo $ + -- $HeadURL: http://svn.xinha.python-hosting.com/trunk/examples/testbed.html $ + -- $LastChangedDate: 2007-01-19 23:24:36 +0100 (Fr, 19 Jan 2007) $ + -- $LastChangedRevision: 677 $ + -- $LastChangedBy: ray $ ---------------------------------------------------------------------------> @@ -54,10 +54,10 @@ xinha_plugins = xinha_plugins ? xinha_plugins : [ - + 'CharacterMap', 'SpellChecker', 'Linker' ]; // THIS BIT OF JAVASCRIPT LOADS THE PLUGINS, NO TOUCHING :) - if(!HTMLArea.loadPlugins(xinha_plugins, xinha_init)) return; + if(!Xinha.loadPlugins(xinha_plugins, xinha_init)) return; /** STEP 2 *************************************************************** * Now, what are the names of the textareas you will be turning into @@ -76,13 +76,15 @@ * * If you want to modify the default config you might do something like this. * - * xinha_config = new HTMLArea.Config(); + * xinha_config = new Xinha.Config(); * xinha_config.width = 640; * xinha_config.height = 420; * *************************************************************************/ - xinha_config = xinha_config ? xinha_config : new HTMLArea.Config(); + xinha_config = xinha_config ? xinha_config : new Xinha.Config(); + xinha_config.fullPage = true; + xinha_config.CharacterMap.mode = 'panel'; /* // We can load an external stylesheet like this - NOTE : YOU MUST GIVE AN ABSOLUTE URL // otherwise it won't work! @@ -100,11 +102,11 @@ * * You can do this in two ways, either * - * xinha_editors = HTMLArea.makeEditors(xinha_editors, xinha_config, xinha_plugins); + * 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 = HTMLArea.makeEditors(xinha_editors, xinha_config); + * xinha_editors = Xinha.makeEditors(xinha_editors, xinha_config); * xinha_editors['myTextArea'].registerPlugins(['Stylist','FullScreen']); * xinha_editors['anotherOne'].registerPlugins(['CSS','SuperClean']); * @@ -112,7 +114,7 @@ * editors. ************************************************************************/ - xinha_editors = HTMLArea.makeEditors(xinha_editors, xinha_config, xinha_plugins); + xinha_editors = Xinha.makeEditors(xinha_editors, xinha_config, xinha_plugins); /** STEP 4 *************************************************************** * If you want to change the configuration variables of any of the @@ -130,12 +132,12 @@ * Xinha editors. ************************************************************************/ - HTMLArea.startEditors(xinha_editors); + Xinha.startEditors(xinha_editors); window.onload = null; } window.onload = xinha_init; - // window.onunload = HTMLArea.collectGarbageForIE; + // window.onunload = Xinha.collectGarbageForIE; @@ -143,6 +145,19 @@
diff --git a/xinha/htmlarea.js b/xinha/htmlarea.js index be379bd..b103353 100644 --- a/xinha/htmlarea.js +++ b/xinha/htmlarea.js @@ -1,5587 +1,23 @@ - - /*--------------------------------------: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. - -- - -- Developers - Coding Style: - -- For the sake of not committing needlessly conflicting changes, - -- - -- * New code to be indented with 2 spaces ("soft tab"). - -- * New code preferably uses BSD-Style Bracing - -- if(foo) - -- { - -- bar(); - -- } - -- * Don't change brace styles unless you're working on the non BSD-Style - -- area (so we don't get spurious changes in line numbering). - -- * Don't change indentation unless you're working on the badly indented - -- area (so we don't get spurious changes of large blocks of code). - -- * Jedit is the recommended editor, a comment of this format should be - -- included in the top 10 lines of the file (see the embedded edit mode) - -- - -- $HeadURL: http://svn.xinha.python-hosting.com/trunk/htmlarea.js $ - -- $LastChangedDate: 2005-11-07 03:36:41 -0500 (Mon, 07 Nov 2005) $ - -- $LastChangedRevision: 421 $ - -- $LastChangedBy: gocher $ - --------------------------------------------------------------------------*/ - -HTMLArea.version = -{ - 'Release' : 'Trunk', - 'Head' : '$HeadURL: http://svn.xinha.python-hosting.com/trunk/htmlarea.js $'.replace(/^[^:]*: (.*) \$$/, '$1'), - 'Date' : '$LastChangedDate: 2005-11-07 03:36:41 -0500 (Mon, 07 Nov 2005) $'.replace(/^[^:]*: ([0-9-]*) ([0-9:]*) ([+0-9]*) \((.*)\) \$/, '$4 $2 $3'), - 'Revision' : '$LastChangedRevision: 421 $'.replace(/^[^:]*: (.*) \$$/, '$1'), - 'RevisionBy': '$LastChangedBy: gocher $'.replace(/^[^:]*: (.*) \$$/, '$1') -}; - -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 = ''; -} - -// 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 = ""; -} - -var __htmlareas = [ ]; - -// browser identification -HTMLArea.agt = navigator.userAgent.toLowerCase(); -HTMLArea.is_ie = ((HTMLArea.agt.indexOf("msie") != -1) && (HTMLArea.agt.indexOf("opera") == -1)); -HTMLArea.is_opera = (HTMLArea.agt.indexOf("opera") != -1); -HTMLArea.is_mac = (HTMLArea.agt.indexOf("mac") != -1); -HTMLArea.is_mac_ie = (HTMLArea.is_ie && HTMLArea.is_mac); -HTMLArea.is_win_ie = (HTMLArea.is_ie && !HTMLArea.is_mac); -HTMLArea.is_gecko = (navigator.product == "Gecko"); - -// Creates a new HTMLArea object. Tries to replace the textarea with the given -// ID with it. -function HTMLArea(textarea, config) -{ - if(!textarea) throw("Tried to create HTMLArea without textarea specified."); - - if (HTMLArea.checkSupportedBrowser()) { - if (typeof config == "undefined") { - this.config = new HTMLArea.Config(); - } else { - this.config = config; - } - this._htmlArea = null; - - if(typeof textarea != 'object') - { - textarea = HTMLArea.getElementById('textarea', textarea); - } - this._textArea = textarea; - - // Before we modify anything, get the initial textarea size - 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')) - }; - - this._editMode = "wysiwyg"; - this.plugins = {}; - this._timerToolbar = null; - this._timerUndo = null; - this._undoQueue = new Array(this.config.undoSteps); - this._undoPos = -1; - this._customUndo = true; - this._mdoc = document; // cache the document, we need it in plugins - this.doctype = ''; - this.__htmlarea_id_num = __htmlareas.length; - __htmlareas[this.__htmlarea_id_num] = this; - - this._notifyListeners = { }; - - // Panels - var panels = this._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 ' + i; - HTMLArea.freeLater(panels[i], 'container'); - HTMLArea.freeLater(panels[i], 'div'); - } - HTMLArea.freeLater(this, '_textArea'); - } -} - -HTMLArea.onload = function(){}; -HTMLArea.init = function() { - HTMLArea.onload(); -}; - - -// cache some regexps -HTMLArea.RE_tagName = /(<\/|<)\s*([^ \t\n>]+)/ig; -HTMLArea.RE_doctype = /()\n?/i; -HTMLArea.RE_head = /((.|\n)*?)<\/head>/i; -HTMLArea.RE_body = /]*>((.|\n|\r|\t)*?)<\/body>/i; -HTMLArea.RE_Specials = /([\/\^$*+?.()|{}[\]])/g; -HTMLArea.RE_email = /[a-z0-9_]{3,}@[a-z0-9_-]{2,}(\.[a-z0-9_-]{2,})+/i; -HTMLArea.RE_url = /(https?:\/\/)?(([a-z0-9_]+:[a-z0-9_]+@)?[a-z0-9_-]{2,}(\.[a-z0-9_-]{2,}){2,}(:[0-9]+)?(\/\S+)*)/i; - -HTMLArea.Config = function () { - var cfg = this; - this.version = HTMLArea.version.Revision; - - // Width and Height - // you may set these as follows - // width = 'auto' -- the width of the original textarea will be used - // width = 'toolbar' -- the width of the toolbar will be used - // width = '' -- use any css measurement, eg width = '75%' - // - // height = 'auto' -- the height of the original textarea - // height = '' -- any css measurement, eg height = '480px' - this.width = "auto"; - this.height = "auto"; - - // the next parameter specifies whether the toolbar should be included - // in the size above, or are extra to it. If false then it's recommended - // to have explicit pixel sizes above (or on your textarea and have auto above) - this.sizeIncludesBars = true; - - // the next parameter specifies whether the panels should be included - // in the size above, or are extra to it. If false then it's recommended - // to have explicit pixel sizes above (or on your textarea and have auto above) - this.sizeIncludesPanels = true; - - // each of the panels has a dimension, for the left/right it's the width - // for the top/bottom it's the height. - // - // WARNING: PANEL DIMENSIONS MUST BE SPECIFIED AS PIXEL WIDTHS - this.panel_dimensions = - { - left: '200px', // Width - right: '200px', - top: '100px', // Height - bottom: '100px' - }; - - // enable creation of a status bar? - this.statusBar = true; - - // intercept ^V and use the HTMLArea paste command - // If false, then passes ^V through to browser editor widget - this.htmlareaPaste = false; - - this.mozParaHandler = 'best'; // set to 'built-in', 'dirty' or 'best' - // built-in: will (may) use 'br' instead of 'p' tags - // dirty : will use p and work good enough for the majority of cases, - // best : works the best, but it's about 12kb worth of javascript - // and will probably be slower than 'dirty'. This is the "EnterParagraphs" - // plugin from "hipikat", rolled in to be part of the core code - - // maximum size of the undo queue - this.undoSteps = 20; - - // the time interval at which undo samples are taken - this.undoTimeout = 500; // 1/2 sec. - - // if true then HTMLArea will retrieve the full HTML, starting with the - // tag. - this.fullPage = false; - - // style included in the iframe document - this.pageStyle = ""; - - // external stylesheets to load (REFERENCE THESE ABSOLUTELY) - this.pageStyleSheets = [ ]; - - // specify a base href for relative links - this.baseHref = null; - - // we can strip the base href out of relative links to leave them relative, reason for this - // especially if you don't specify a baseHref is that mozilla at least (& IE ?) will prefix - // the baseHref to any relative links to make them absolute, which isn't what you want most the time. - this.stripBaseHref = true; - - // and we can strip the url of the editor page from named links (eg ...) - // reason for this is that mozilla at least (and IE ?) prefixes location.href to any - // that don't have a url prefixing them - this.stripSelfNamedAnchors = true; - - // sometimes high-ascii in links can cause problems for servers (basically they don't recognise them) - // so you can use this flag to ensure that all characters other than the normal ascii set (actually - // only ! through ~) are escaped in URLs to % codes - this.only7BitPrintablesInURLs = true; - - // if you are putting the HTML written in Xinha into an email you might want it to be 7-bit - // characters only. This config option (off by default) will convert all characters consuming - // more than 7bits into UNICODE decimal entity references (actually it will convert anything - // below (chr 20) except cr, lf and tab and above (~, chr 7E)) - this.sevenBitClean = false; - - // sometimes we want to be able to replace some string in the html comng in and going out - // so that in the editor we use the "internal" string, and outside and in the source view - // we use the "external" string this is useful for say making special codes for - // your absolute links, your external string might be some special code, say "{server_url}" - // an you say that the internal represenattion of that should be http://your.server/ - this.specialReplacements = { }; // { 'external_string' : 'internal_string' } - - // set to true if you want Word code to be cleaned upon Paste - this.killWordOnPaste = true; - - // enable the 'Target' field in the Make Link dialog - this.makeLinkShowsTarget = true; - - // CharSet of the iframe, default is the charset of the document - this.charSet = HTMLArea.is_gecko ? document.characterSet : document.charset; - - // URL-s - this.imgURL = "images/"; - this.popupURL = "popups/"; - - // remove tags (these have to be a regexp, or null if this functionality is not desired) - this.htmlRemoveTags = null; - - // Turning this on will turn all "linebreak" and "separator" items in your toolbar into soft-breaks, - // this means that if the items between that item and the next linebreak/separator can - // fit on the same line as that which came before then they will, otherwise they will - // float down to the next line. - - // If you put a linebreak and separator next to each other, only the separator will - // take effect, this allows you to have one toolbar that works for both flowToolbars = true and false - // infact the toolbar below has been designed in this way, if flowToolbars is false then it will - // create explictly two lines (plus any others made by plugins) breaking at justifyleft, however if - // flowToolbars is false and your window is narrow enough then it will create more than one line - // even neater, if you resize the window the toolbars will reflow. Niiiice. - - this.flowToolbars = true; - - /** CUSTOMIZING THE TOOLBAR - * ------------------------- - * - * It is recommended that you customize the toolbar contents in an - * external file (i.e. the one calling HTMLArea) and leave this one - * unchanged. That's because when we (InteractiveTools.com) release a - * new official version, it's less likely that you will have problems - * upgrading HTMLArea. - */ - this.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"], - ["separator","undo","redo","selectall","print"], (HTMLArea.is_gecko ? [] : ["cut","copy","paste","overwrite","saveas"]), - ["separator","killword","clearfonts","removeformat","toggleborders","splitblock","lefttoright", "righttoleft"], - ["separator","htmlmode","showhelp","about"] - ]; - - - this.fontname = { - "— font —": '', - "Arial": 'arial,helvetica,sans-serif', - "Courier New": 'courier new,courier,monospace', - "Georgia": 'georgia,times new roman,times,serif', - "Tahoma": 'tahoma,arial,helvetica,sans-serif', - "Times New Roman": 'times new roman,times,serif', - "Verdana": 'verdana,arial,helvetica,sans-serif', - "impact": 'impact', - "WingDings": 'wingdings' - }; - - this.fontsize = { - "— size —" : "", - "1 (8 pt)" : "1", - "2 (10 pt)": "2", - "3 (12 pt)": "3", - "4 (14 pt)": "4", - "5 (18 pt)": "5", - "6 (24 pt)": "6", - "7 (36 pt)": "7" - }; - - this.formatblock = { - "— format —" : "", - "Heading 1": "h1", - "Heading 2": "h2", - "Heading 3": "h3", - "Heading 4": "h4", - "Heading 5": "h5", - "Heading 6": "h6", - "Normal" : "p", - "Address" : "address", - "Formatted": "pre" - }; - - this.customSelects = {}; - - function cut_copy_paste(e, cmd, obj) { - e.execCommand(cmd); - }; - - this.debug = true; - - this.URIs = { - "blank": "popups/blank.html", - "link": "link.html", - "insert_image": "insert_image.html", - "insert_table": "insert_table.html", - "select_color": "select_color.html", - "about": "about.html", - "help": "editor_help.html" - }; - - - // ADDING CUSTOM BUTTONS: please read below! - // format of the btnList elements is "ID: [ ToolTip, Icon, Enabled in text mode?, ACTION ]" - // - ID: unique ID for the button. If the button calls document.execCommand - // it's wise to give it the same name as the called command. - // - ACTION: function that gets called when the button is clicked. - // it has the following prototype: - // function(editor, buttonName) - // - editor is the HTMLArea object that triggered the call - // - buttonName is the ID of the clicked button - // These 2 parameters makes it possible for you to use the same - // handler for more HTMLArea objects or for more different buttons. - // - ToolTip: tooltip, will be translated below - // - Icon: path to an icon image file for the button - // OR; you can use an 18x18 block of a larger image by supllying an array - // that has three elemtents, the first is the larger image, the second is the column - // the third is the row. The ros and columns numbering starts at 0 but there is - // a header row and header column which have numbering to make life easier. - // See images/buttons_main.gif to see how it's done. - // - Enabled in text mode: if false the button gets disabled for text-only mode; otherwise enabled all the time. - this.btnList = { - bold: [ "Bold", HTMLArea._lc({key: 'button_bold', string: ["ed_buttons_main.gif",3,2]}, 'HTMLArea'), false, function(e) {e.execCommand("bold");} ], - italic: [ "Italic", HTMLArea._lc({key: 'button_italic', string: ["ed_buttons_main.gif",2,2]}, 'HTMLArea'), false, function(e) {e.execCommand("italic");} ], - underline: [ "Underline", HTMLArea._lc({key: 'button_underline', string: ["ed_buttons_main.gif",2,0]}, 'HTMLArea'), false, function(e) {e.execCommand("underline");} ], - strikethrough: [ "Strikethrough", HTMLArea._lc({key: 'button_strikethrough', string: ["ed_buttons_main.gif",3,0]}, 'HTMLArea'), false, function(e) {e.execCommand("strikethrough");} ], - subscript: [ "Subscript", HTMLArea._lc({key: 'button_subscript', string: ["ed_buttons_main.gif",3,1]}, 'HTMLArea'), false, function(e) {e.execCommand("subscript");} ], - superscript: [ "Superscript", HTMLArea._lc({key: 'button_superscript', string: ["ed_buttons_main.gif",2,1]}, 'HTMLArea'), false, function(e) {e.execCommand("superscript");} ], - - justifyleft: [ "Justify Left", ["ed_buttons_main.gif",0,0], false, function(e) {e.execCommand("justifyleft");} ], - justifycenter: [ "Justify Center", ["ed_buttons_main.gif",1,1], false, function(e){e.execCommand("justifycenter");}], - justifyright: [ "Justify Right", ["ed_buttons_main.gif",1,0], false, function(e) {e.execCommand("justifyright");} ], - justifyfull: [ "Justify Full", ["ed_buttons_main.gif",0,1], false, function(e) {e.execCommand("justifyfull");} ], - - - orderedlist: [ "Ordered List", ["ed_buttons_main.gif",0,3], false, function(e) {e.execCommand("insertorderedlist");} ], - unorderedlist: [ "Bulleted List", ["ed_buttons_main.gif",1,3], false, function(e) {e.execCommand("insertunorderedlist");} ], - insertorderedlist: [ "Ordered List", ["ed_buttons_main.gif",0,3], false, function(e) {e.execCommand("insertorderedlist");} ], - insertunorderedlist: [ "Bulleted List", ["ed_buttons_main.gif",1,3], false, function(e) {e.execCommand("insertunorderedlist");} ], - - outdent: [ "Decrease Indent", ["ed_buttons_main.gif",1,2], false, function(e) {e.execCommand("outdent");} ], - indent: [ "Increase Indent",["ed_buttons_main.gif",0,2], false, function(e) {e.execCommand("indent");} ], - forecolor: [ "Font Color", ["ed_buttons_main.gif",3,3], false, function(e) {e.execCommand("forecolor");} ], - hilitecolor: [ "Background Color", ["ed_buttons_main.gif",2,3], false, function(e) {e.execCommand("hilitecolor");} ], - - undo: [ "Undoes your last action", ["ed_buttons_main.gif",4,2], false, function(e) {e.execCommand("undo");} ], - redo: [ "Redoes your last action", ["ed_buttons_main.gif",5,2], false, function(e) {e.execCommand("redo");} ], - cut: [ "Cut selection", ["ed_buttons_main.gif",5,0], false, cut_copy_paste ], - copy: [ "Copy selection", ["ed_buttons_main.gif",4,0], false, cut_copy_paste ], - paste: [ "Paste from clipboard", ["ed_buttons_main.gif",4,1], false, cut_copy_paste ], - selectall: [ "Select all", "ed_selectall.gif", false, function(e) {e.execCommand("selectall");} ], - - - inserthorizontalrule: [ "Horizontal Rule", ["ed_buttons_main.gif",6,0], false, function(e) {e.execCommand("inserthorizontalrule");} ], - createlink: [ "Insert Web Link", ["ed_buttons_main.gif",6,1], false, function(e) {e._createLink();} ], - insertimage: [ "Insert/Modify Image", ["ed_buttons_main.gif",6,3], false, function(e) {e.execCommand("insertimage");} ], - inserttable: [ "Insert Table", ["ed_buttons_main.gif",6,2], false, function(e) {e.execCommand("inserttable");} ], - - - htmlmode: [ "Toggle HTML Source", ["ed_buttons_main.gif",7,0], true, function(e) {e.execCommand("htmlmode");} ], - toggleborders: [ "Toggle Borders", ["ed_buttons_main.gif",7,2], false, function(e) { e._toggleBorders() } ], - print: [ "Print document", ["ed_buttons_main.gif",8,1], false, function(e) {if (HTMLArea.is_gecko) {e._iframe.contentWindow.print();} else {e.focusEditor(); print();}} ], - saveas: [ "Save as", "ed_saveas.gif", false, function(e) {e.execCommand("saveas",false,"noname.htm");} ], - about: [ "About this editor", ["ed_buttons_main.gif",8,2], true, function(e) {e.execCommand("about");} ], - showhelp: [ "Help using editor", ["ed_buttons_main.gif",9,2], true, function(e) {e.execCommand("showhelp");} ], - - splitblock: [ "Split Block", "ed_splitblock.gif", false, function(e) {e._splitBlock();} ], - lefttoright: [ "Direction left to right", ["ed_buttons_main.gif",0,4], false, function(e) {e.execCommand("lefttoright");} ], - righttoleft: [ "Direction right to left", ["ed_buttons_main.gif",1,4], false, function(e) {e.execCommand("righttoleft");} ], - overwrite: [ "Insert/Overwrite", "ed_overwrite.gif", false, function(e) {e.execCommand("overwrite");} ], - - wordclean: [ "MS Word Cleaner", ["ed_buttons_main.gif",5,3], false, function(e) {e._wordClean();} ], - clearfonts: [ "Clear Inline Font Specifications", ["ed_buttons_main.gif",5,4], true, function(e) {e._clearFonts();} ], - removeformat: [ "Remove formatting", ["ed_buttons_main.gif",4,4], false, function(e) {e.execCommand("removeformat");} ], - killword: [ "Clear MSOffice tags", ["ed_buttons_main.gif",4,3], false, function(e) {e.execCommand("killword");} ] - - }; - /* ADDING CUSTOM BUTTONS - * --------------------- - * - * It is recommended that you add the custom buttons in an external - * file and leave this one unchanged. That's because when we - * (InteractiveTools.com) release a new official version, it's less - * likely that you will have problems upgrading HTMLArea. - * - * Example on how to add a custom button when you construct the HTMLArea: - * - * var editor = new HTMLArea("your_text_area_id"); - * var cfg = editor.config; // this is the default configuration - * cfg.btnList["my-hilite"] = - * [ function(editor) { editor.surroundHTML('', ''); }, // action - * "Highlight selection", // tooltip - * "my_hilite.gif", // image - * false // disabled in text mode - * ]; - * cfg.toolbar.push(["linebreak", "my-hilite"]); // add the new button to the toolbar - * - * An alternate (also more convenient and recommended) way to - * accomplish this is to use the registerButton function below. - */ - // initialize tooltips from the I18N module and generate correct image path - for (var i in this.btnList) { - var btn = this.btnList[i]; - if (typeof btn != 'object') continue; // prevent iterating over wrong type - if (typeof btn[1] != 'string') - { - btn[1][0] = _editor_url + this.imgURL + btn[1][0]; - } - else - { - btn[1] = _editor_url + this.imgURL + btn[1]; - } - btn[0] = HTMLArea._lc(btn[0]); //initialize tooltip - } - -}; - -/** Helper function: register a new button with the configuration. It can be - * called with all 5 arguments, or with only one (first one). When called with - * only one argument it must be an object with the following properties: id, - * tooltip, image, textMode, action. Examples: - * - * 1. config.registerButton("my-hilite", "Hilite text", "my-hilite.gif", false, function(editor) {...}); - * 2. config.registerButton({ - * id : "my-hilite", // the ID of your button - * tooltip : "Hilite text", // the tooltip - * image : "my-hilite.gif", // image to be displayed in the toolbar - * textMode : false, // disabled in text mode - * action : function(editor) { // called when the button is clicked - * editor.surroundHTML('', ''); - * }, - * context : "p" // will be disabled if outside a

element - * }); - */ -HTMLArea.Config.prototype.registerButton = function(id, tooltip, image, textMode, action, context) { - var the_id; - if (typeof id == "string") { - the_id = id; - } else if (typeof id == "object") { - the_id = id.id; - } else { - alert("ERROR [HTMLArea.Config::registerButton]:\ninvalid arguments"); - return false; - } - // check for existing id - if (typeof this.customSelects[the_id] != "undefined") { - // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA dropdown with the same ID already exists."); - } - if (typeof this.btnList[the_id] != "undefined") { - // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA button with the same ID already exists."); - } - switch (typeof id) { - case "string": this.btnList[id] = [ tooltip, image, textMode, action, context ]; break; - case "object": this.btnList[id.id] = [ id.tooltip, id.image, id.textMode, id.action, id.context ]; break; - } -}; - -HTMLArea.prototype.registerPanel = function(side, object) -{ - if(!side) side = 'right'; - var panel = this.addPanel(side); - if(object) - { - object.drawPanelIn(panel); - } -}; - -/** The following helper function registers a dropdown box with the editor - * configuration. You still have to add it to the toolbar, same as with the - * buttons. Call it like this: - * - * FIXME: add example - */ -HTMLArea.Config.prototype.registerDropdown = function(object) { - // check for existing id - if (typeof this.customSelects[object.id] != "undefined") { - // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA dropdown with the same ID already exists."); - } - if (typeof this.btnList[object.id] != "undefined") { - // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA button with the same ID already exists."); - } - this.customSelects[object.id] = object; -}; - -/** Call this function to remove some buttons/drop-down boxes from the toolbar. - * Pass as the only parameter a string containing button/drop-down names - * delimited by spaces. Note that the string should also begin with a space - * and end with a space. Example: - * - * config.hideSomeButtons(" fontname fontsize textindicator "); - * - * It's useful because it's easier to remove stuff from the defaul toolbar than - * create a brand new toolbar ;-) - */ -HTMLArea.Config.prototype.hideSomeButtons = function(remove) { - var toolbar = this.toolbar; - for (var i = toolbar.length; --i >= 0;) { - var line = toolbar[i]; - for (var j = line.length; --j >= 0; ) { - if (remove.indexOf(" " + line[j] + " ") >= 0) { - var len = 1; - if (/separator|space/.test(line[j + 1])) { - len = 2; - } - line.splice(j, len); - } - } - } -}; - -/** Helper Function: add buttons/drop-downs boxes with title or separator to the toolbar - * if the buttons/drop-downs boxes doesn't allready exists. - * id: button or selectbox (as array with separator or title) - * where: button or selectbox (as array if the first is not found take the second and so on) - * position: - * -1 = insert button (id) one position before the button (where) - * 0 = replace button (where) by button (id) - * +1 = insert button (id) one position after button (where) - * - * cfg.addToolbarElement(["T[title]", "button_id", "separator"] , ["first_id","second_id"], -1); -*/ - -HTMLArea.Config.prototype.addToolbarElement = function(id, where, position) { - var toolbar = this.toolbar; - var a, i, j, o, sid; - var idIsArray = false; - var whereIsArray = false; - var whereLength = 0; - var whereJ = 0; - var whereI = 0; - var exists = false; - var found = false; - // check if id and where are arrys - if ((id && typeof id == "object") && (id.constructor == Array)) { - idIsArray = true; - } - if ((where && typeof where == "object") && (where.constructor == Array)) { - whereIsArray = true; - whereLength = where.length; - } - - if (idIsArray) { //find the button/select box in input array - for (i = 0; i < id.length; ++i) { - if ((id[i] != "separator") && (id[i].indexOf("T[") != 0)) { - sid = id[i]; - } - } - } else { - sid = id; - } - - for (var i = 0; !exists && !found && i < toolbar.length; ++i) { - a = toolbar[i] - for (j = 0; !found && j < a.length; ++j) { - if (a[i] == sid) { // check if button/select box exists - exists = true; - break; - } - if (whereIsArray) { - for (o = 0; o < whereLength; ++o) { - if(a[j] == where[o]) { - if (o == 0) { - found = true; - j--; - break; - } else { - whereI = i; - whereJ = j; - whereLength = o; - } - } - } - } else { - if (a[j] == where) { // find the position to insert - found = true; - break; - } - } - } - } - - if (!exists) { - if (!found && whereIsArray) { //if check found any other as the first button - if (where.length != whereLength) { - j = whereJ; - a = toolbar[whereI]; - found = true; - } - } - if (found) { - if (position == 0) { // replace the found button - if (idIsArray) { - a[j] = id[id.length-1]; - for (i = id.length-1; --i >= 0;) { - a.splice(j, 0, id[i]); - } - } else { - a[j] = id; - } - } else { // insert before/after the found button - if (position < 0) { - j = j + position + 1; //correct position before - } else if (position > 0) { - j = j + position; //correct posion after - } - if (idIsArray) { - for (i = id.length; --i >= 0;) { - a.splice(j, 0, id[i]); - } - } else { - a.splice(j, 0, id); - } - } - } else { // no button found - toolbar[0].splice(0, 0, "separator"); - if (idIsArray) { - for (i = id.length; --i >= 0;) { - toolbar[0].splice(0, 0, id[i]); - } - } else { - toolbar[0].splice(0, 0, id); - } - } - } -}; - -/** Helper function: replace all TEXTAREA-s in the document with HTMLArea-s. */ -HTMLArea.replaceAll = function(config) { - var tas = document.getElementsByTagName("textarea"); - for (var i = tas.length; i > 0; (new HTMLArea(tas[--i], config)).generate()); -}; - -/** Helper function: replaces the TEXTAREA with the given ID with HTMLArea. */ -HTMLArea.replace = function(id, config) -{ - var ta = HTMLArea.getElementById("textarea", id); - return ta ? (new HTMLArea(ta, config)).generate() : null;; -}; - -// Creates the toolbar and appends it to the _htmlarea -HTMLArea.prototype._createToolbar = function () { - var editor = this; // to access this in nested functions - - var toolbar = document.createElement("div"); - // ._toolbar is for legacy, ._toolBar is better thanks. - this._toolBar = this._toolbar = toolbar; - toolbar.className = "toolbar"; - toolbar.unselectable = "1"; - - HTMLArea.freeLater(this, '_toolBar'); - HTMLArea.freeLater(this, '_toolbar'); - - var tb_row = null; - var tb_objects = new Object(); - this._toolbarObjects = tb_objects; - - this._createToolbar1(editor, toolbar, tb_objects); - this._htmlArea.appendChild(toolbar); - - return toolbar; -}; - - -HTMLArea.prototype._setConfig = function(config) { - this.config = config; -}; - -HTMLArea.prototype._addToolbar = function() { - this._createToolbar1(this, this._toolbar, this._toolbarObjects); -}; - -// separate from previous createToolBar to allow dynamic change of toolbar -HTMLArea.prototype._createToolbar1 = function (editor, toolbar, tb_objects) { - - // This shouldn't be necessary, but IE seems to float outside of the container - // when we float toolbar sections, so we have to clear:both here as well - // as at the end (which we do have to do). - if(editor.config.flowToolbars) - { - var brk = document.createElement('div'); - brk.style.height = - brk.style.width = - brk.style.lineHeight = - brk.style.fontSize = '1px'; - brk.style.clear = 'both'; - toolbar.appendChild(brk); - } - - // creates a new line in the toolbar - function newLine() { - if(typeof tb_row != 'undefined' && tb_row.childNodes.length == 0) return; - - var table = document.createElement("table"); - table.border = "0px"; - table.cellSpacing = "0px"; - table.cellPadding = "0px"; - if(editor.config.flowToolbars) - { - if(HTMLArea.is_ie) - { - table.style.styleFloat = "left"; - } - else - { - table.style.cssFloat = "left"; - } - } - - toolbar.appendChild(table); - // TBODY is required for IE, otherwise you don't see anything - // in the TABLE. - var tb_body = document.createElement("tbody"); - table.appendChild(tb_body); - tb_row = document.createElement("tr"); - tb_body.appendChild(tb_row); - - table.className = 'toolbarRow'; // meh, kinda. - } // END of function: newLine - - // init first line - newLine(); - - // updates the state of a toolbar element. This function is member of - // a toolbar element object (unnamed objects created by createButton or - // createSelect functions below). - function setButtonStatus(id, newval) { - var oldval = this[id]; - var el = this.element; - if (oldval != newval) { - switch (id) { - case "enabled": - if (newval) { - HTMLArea._removeClass(el, "buttonDisabled"); - el.disabled = false; - } else { - HTMLArea._addClass(el, "buttonDisabled"); - el.disabled = true; - } - break; - case "active": - if (newval) { - HTMLArea._addClass(el, "buttonPressed"); - } else { - HTMLArea._removeClass(el, "buttonPressed"); - } - break; - } - this[id] = newval; - } - } // END of function: setButtonStatus - - // this function will handle creation of combo boxes. Receives as - // parameter the name of a button as defined in the toolBar config. - // This function is called from createButton, above, if the given "txt" - // doesn't match a button. - function createSelect(txt) { - var options = null; - var el = null; - var cmd = null; - var customSelects = editor.config.customSelects; - var context = null; - var tooltip = ""; - switch (txt) { - case "fontsize": - case "fontname": - case "formatblock": - // the following line retrieves the correct - // configuration option because the variable name - // inside the Config object is named the same as the - // button/select in the toolbar. For instance, if txt - // == "formatblock" we retrieve config.formatblock (or - // a different way to write it in JS is - // config["formatblock"]. - options = editor.config[txt]; - cmd = txt; - break; - default: - // try to fetch it from the list of registered selects - cmd = txt; - var dropdown = customSelects[cmd]; - if (typeof dropdown != "undefined") { - options = dropdown.options; - context = dropdown.context; - if (typeof dropdown.tooltip != "undefined") { - tooltip = dropdown.tooltip; - } - } else { - alert("ERROR [createSelect]:\nCan't find the requested dropdown definition"); - } - break; - } - if (options) { - el = document.createElement("select"); - el.title = tooltip; - var obj = { - name : txt, // field name - element : el, // the UI element (SELECT) - enabled : true, // is it enabled? - text : false, // enabled in text mode? - cmd : cmd, // command ID - state : setButtonStatus, // for changing state - context : context - }; - - HTMLArea.freeLater(obj); - - tb_objects[txt] = obj; - - for (var i in options) { - if (typeof(options[i]) != 'string') continue; // prevent iterating over wrong type - var op = document.createElement("option"); - op.innerHTML = HTMLArea._lc(i); - op.value = options[i]; - el.appendChild(op); - } - HTMLArea._addEvent(el, "change", function () { - editor._comboSelected(el, txt); - }); - } - return el; - } // END of function: createSelect - - // appends a new button to toolbar - function createButton(txt) { - // the element that will be created - var el = null; - var btn = null; - switch (txt) { - case "separator": - if(editor.config.flowToolbars) newLine(); - el = document.createElement("div"); - el.className = "separator"; - break; - case "space": - el = document.createElement("div"); - el.className = "space"; - break; - case "linebreak": - newLine(); - return false; - case "textindicator": - el = document.createElement("div"); - el.appendChild(document.createTextNode("A")); - el.className = "indicator"; - el.title = HTMLArea._lc("Current style"); - var obj = { - name : txt, // the button name (i.e. 'bold') - element : el, // the UI element (DIV) - enabled : true, // is it enabled? - active : false, // is it pressed? - text : false, // enabled in text mode? - cmd : "textindicator", // the command ID - state : setButtonStatus // for changing state - }; - - HTMLArea.freeLater(obj); - - tb_objects[txt] = obj; - break; - default: - btn = editor.config.btnList[txt]; - } - if (!el && btn) { - el = document.createElement("a"); - el.style.display = 'block'; - el.href = 'javascript:void(0)'; - el.style.textDecoration = 'none'; - el.title = btn[0]; - el.className = "button"; - // let's just pretend we have a button object, and - // assign all the needed information to it. - var obj = { - name : txt, // the button name (i.e. 'bold') - element : el, // the UI element (DIV) - enabled : true, // is it enabled? - active : false, // is it pressed? - text : btn[2], // enabled in text mode? - cmd : btn[3], // the command ID - state : setButtonStatus, // for changing state - context : btn[4] || null // enabled in a certain context? - }; - - HTMLArea.freeLater(obj); - - tb_objects[txt] = obj; - // handlers to emulate nice flat toolbar buttons - HTMLArea._addEvent(el, "mouseout", function () { - if (obj.enabled) with (HTMLArea) { - //_removeClass(el, "buttonHover"); - _removeClass(el, "buttonActive"); - (obj.active) && _addClass(el, "buttonPressed"); - } - }); - - HTMLArea._addEvent(el, "mousedown", function (ev) { - if (obj.enabled) with (HTMLArea) { - _addClass(el, "buttonActive"); - _removeClass(el, "buttonPressed"); - _stopEvent(is_ie ? window.event : ev); - } - }); - // when clicked, do the following: - HTMLArea._addEvent(el, "click", function (ev) { - if (obj.enabled) with (HTMLArea) { - _removeClass(el, "buttonActive"); - //_removeClass(el, "buttonHover"); - if(HTMLArea.is_gecko) - { - editor.activateEditor(); - } - obj.cmd(editor, obj.name, obj); - _stopEvent(is_ie ? window.event : ev); - } - }); - - var i_contain = HTMLArea.makeBtnImg(btn[1]); - var img = i_contain.firstChild; - el.appendChild(i_contain); - - obj.imgel = img; - obj.swapImage = function(newimg) - { - if(typeof newimg != 'string') - { - img.src = newimg[0]; - img.style.position = 'relative'; - img.style.top = newimg[2] ? ('-' + (18 * (newimg[2] + 1)) + 'px') : '-18px'; - img.style.left = newimg[1] ? ('-' + (18 * (newimg[1] + 1)) + 'px') : '-18px'; - } - else - { - obj.imgel.src = newimg; - img.style.top = '0px'; - img.style.left = '0px'; - } - }; - - } else if (!el) { - el = createSelect(txt); - } - - return el; - } - - var first = true; - for (var i = 0; i < this.config.toolbar.length; ++i) { - if (!first) { - // createButton("linebreak"); - } else { - first = false; - } - if(this.config.toolbar[i] == null) this.config.toolbar[i] = ['separator']; - var group = this.config.toolbar[i]; - - for (var j = 0; j < group.length; ++j) - { - var code = group[j]; - if (/^([IT])\[(.*?)\]/.test(code)) - { - // special case, create text label - var l7ed = RegExp.$1 == "I"; // localized? - var label = RegExp.$2; - if (l7ed) { - label = HTMLArea._lc(label); - } - var tb_cell = document.createElement("td"); - tb_row.appendChild(tb_cell); - tb_cell.className = "label"; - tb_cell.innerHTML = label; - } - else if(typeof code != 'function') - { - var tb_element = createButton(code); - - if (tb_element) - { - var tb_cell = document.createElement("td"); - tb_cell.className = 'toolbarElement'; - tb_row.appendChild(tb_cell); - tb_cell.appendChild(tb_element); - } - else if (tb_element == null) - { - alert("FIXME: Unknown toolbar item: " + code); - } - } - } - } - - if(editor.config.flowToolbars) - { - var brk = document.createElement('div'); - brk.style.height = - brk.style.width = - brk.style.lineHeight = - brk.style.fontSize = '1px'; - brk.style.clear = 'both'; - toolbar.appendChild(brk); - } - - return toolbar; -}; - -use_clone_img = false; -HTMLArea.makeBtnImg = function(imgDef, doc) -{ - if(!doc) doc = document; - - if(!doc._htmlareaImgCache) - { - doc._htmlareaImgCache = { }; - HTMLArea.freeLater(doc._htmlareaImgCache); - } - - var i_contain = null; - if(HTMLArea.is_ie && ((!doc.compatMode) || (doc.compatMode && doc.compatMode == "BackCompat"))) - { - i_contain = doc.createElement('span'); - } - else - { - i_contain = doc.createElement('div'); - i_contain.style.position = 'relative'; - } - - i_contain.style.overflow = 'hidden'; - i_contain.style.width = "18px"; - i_contain.style.height = "18px"; - i_contain.className = 'buttonImageContainer'; - - var img = null; - if(typeof imgDef == 'string') - { - if(doc._htmlareaImgCache[imgDef]) - { - img = doc._htmlareaImgCache[imgDef].cloneNode(); - } - else - { - img = doc.createElement("img"); - img.src = imgDef; - img.style.width = "18px"; - img.style.height = "18px"; - if(use_clone_img) - doc._htmlareaImgCache[imgDef] = img.cloneNode(); - } - } - else - { - if(doc._htmlareaImgCache[imgDef[0]]) - { - img = doc._htmlareaImgCache[imgDef[0]].cloneNode(); - } - else - { - img = doc.createElement("img"); - img.src = imgDef[0]; - img.style.position = 'relative'; - if(use_clone_img) - doc._htmlareaImgCache[imgDef[0]] = img.cloneNode(); - } - img.style.top = imgDef[2] ? ('-' + (18 * (imgDef[2] + 1)) + 'px') : '-18px'; - img.style.left = imgDef[1] ? ('-' + (18 * (imgDef[1] + 1)) + 'px') : '-18px'; - } - i_contain.appendChild(img); - return i_contain; -}; - -HTMLArea.prototype._createStatusBar = function() { - var statusbar = document.createElement("div"); - statusbar.className = "statusBar"; - this._statusBar = statusbar; - HTMLArea.freeLater(this, '_statusBar'); - - // statusbar.appendChild(document.createTextNode(HTMLArea._lc("Path") + ": ")); - // creates a holder for the path view - div = document.createElement("span"); - div.className = "statusBarTree"; - div.innerHTML = HTMLArea._lc("Path") + ": "; - this._statusBarTree = div; - HTMLArea.freeLater(this, '_statusBarTree'); - this._statusBar.appendChild(div); - - div = document.createElement("span"); - div.innerHTML = HTMLArea._lc("You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG."); - div.style.display = "none"; - this._statusBarTextMode = div; - HTMLArea.freeLater(this, '_statusBarTextMode'); - this._statusBar.appendChild(div); - - if (!this.config.statusBar) - { - // disable it... - statusbar.style.display = "none"; - } - - return statusbar; -}; - -// Creates the HTMLArea object and replaces the textarea with it. -HTMLArea.prototype.generate = function () -{ - var editor = this; // we'll need "this" in some nested functions - - if(typeof Dialog == 'undefined') - { - HTMLArea._loadback - (_editor_url + 'dialog.js', function() { editor.generate(); } ); - return false; - } - - if(typeof HTMLArea.Dialog == 'undefined') - { - HTMLArea._loadback - (_editor_url + 'inline-dialog.js', function() { editor.generate(); } ); - return false; - } - - if(typeof PopupWin == 'undefined') - { - HTMLArea._loadback - (_editor_url + 'popupwin.js', function() { editor.generate(); } ); - return false; - } - - if(_editor_skin != "") { - var found=false; - var head = document.getElementsByTagName("head")[0]; - var links = document.getElementsByTagName("link"); - for(var i = 0; i= 0;) { - for (var j = toolbar[i].length; --j >= 0; ) { - if (toolbar[i][j]=="popupeditor") { - if(typeof FullScreen == "undefined") { - HTMLArea.loadPlugin("FullScreen", function() { editor.generate(); } ); - return false; - } - editor.registerPlugin('FullScreen'); - } - } - } - - // If this is gecko, set up the paragraph handling now - if(HTMLArea.is_gecko) - { - switch(editor.config.mozParaHandler) - { - case 'best': - { - if(typeof EnterParagraphs == 'undefined') - { - HTMLArea.loadPlugin("EnterParagraphs", function() { editor.generate(); } ); - return false; - } - editor.registerPlugin('EnterParagraphs'); - } - break; - - case 'dirty' : - case 'built-in': - default : - { - // See _editorEvent - } - break; - } - } - - // create the editor framework, yah, table layout I know, but much easier - // to get it working correctly this way, sorry about that, patches welcome. - - this._framework = - { - 'table' :document.createElement('table'), - 'tbody' :document.createElement('tbody'), // IE will not show the table if it doesn't have a tbody! - 'tb_row' :document.createElement('tr'), - 'tb_cell' :document.createElement('td'), // Toolbar - - 'tp_row' :document.createElement('tr'), - 'tp_cell' :this._panels.top.container, // top panel - - 'ler_row' :document.createElement('tr'), - 'lp_cell' :this._panels.left.container, // left panel - 'ed_cell' :document.createElement('td'), // editor - 'rp_cell' :this._panels.right.container, // right panel - - 'bp_row' :document.createElement('tr'), - 'bp_cell' :this._panels.bottom.container,// bottom panel - - 'sb_row' :document.createElement('tr'), - 'sb_cell' :document.createElement('td') // status bar - - }; - - HTMLArea.freeLater(this._framework); - - var fw = this._framework; - fw.table.border="0"; - fw.table.cellPadding="0"; - fw.table.cellSpacing="0"; - - fw.tb_row.style.verticalAlign = 'top'; - fw.tp_row.style.verticalAlign = 'top'; - fw.ler_row.style.verticalAlign= 'top'; - fw.bp_row.style.verticalAlign = 'top'; - fw.sb_row.style.verticalAlign = 'top'; - fw.ed_cell.style.position = 'relative'; - - // Put the cells in the rows set col & rowspans - // note that I've set all these so that all panels are showing - // but they will be redone in sizeEditor() depending on which - // panels are shown. It's just here to clarify how the thing - // is put togethor. - fw.tb_row.appendChild(fw.tb_cell); fw.tb_cell.colSpan = 3; - - fw.tp_row.appendChild(fw.tp_cell); fw.tp_cell.colSpan = 3; - - fw.ler_row.appendChild(fw.lp_cell); - fw.ler_row.appendChild(fw.ed_cell); - fw.ler_row.appendChild(fw.rp_cell); - - fw.bp_row.appendChild(fw.bp_cell); fw.bp_cell.colSpan = 3; - - fw.sb_row.appendChild(fw.sb_cell); fw.sb_cell.colSpan = 3; - - // Put the rows in the table body - fw.tbody.appendChild(fw.tb_row); // Toolbar - fw.tbody.appendChild(fw.tp_row); // Left, Top, Right panels - fw.tbody.appendChild(fw.ler_row); // Editor/Textarea - fw.tbody.appendChild(fw.bp_row); // Bottom panel - fw.tbody.appendChild(fw.sb_row); // Statusbar - - // and body in the table - fw.table.appendChild(fw.tbody); - - var htmlarea = this._framework.table; - this._htmlArea = htmlarea; - HTMLArea.freeLater(this, '_htmlArea'); - htmlarea.className = "htmlarea"; - - // create the toolbar and put in the area - var toolbar = this._createToolbar(); - this._framework.tb_cell.appendChild(toolbar); - - // create the IFRAME & add to container - var iframe = document.createElement("iframe"); - iframe.src = _editor_url + editor.config.URIs["blank"]; - this._framework.ed_cell.appendChild(iframe); - this._iframe = iframe; - this._iframe.className = 'xinha_iframe'; - HTMLArea.freeLater(this, '_iframe'); - - // creates & appends the status bar - var statusbar = this._createStatusBar(); - this._framework.sb_cell.appendChild(statusbar); - - // insert Xinha before the textarea. - var textarea = this._textArea; - textarea.parentNode.insertBefore(htmlarea, textarea); - textarea.className = 'xinha_textarea'; - - // extract the textarea and insert it into the htmlarea - HTMLArea.removeFromParent(textarea); - this._framework.ed_cell.appendChild(textarea); - - - // Set up event listeners for saving the iframe content to the textarea - if (textarea.form) - { - // onsubmit get the HTMLArea content and update original textarea. - HTMLArea.prependDom0Event - ( - this._textArea.form, - 'submit', - function() {editor._textArea.value = editor.outwardHtml(editor.getHTML()); return true;} - ); - - var initialTAContent = textarea.value; - - // onreset revert the HTMLArea content to the textarea content - HTMLArea.prependDom0Event - ( - this._textArea.form, - 'reset', - function() { editor.setHTML(editor.inwardHtml(initialTAContent)); editor.updateToolbar(); return true; } - ); - } - - // add a handler for the "back/forward" case -- on body.unload we save - // the HTML content into the original textarea. - HTMLArea.prependDom0Event(window, 'unload', function() {textarea.value = editor.outwardHtml(editor.getHTML()); return true; }); - - // Hide textarea - textarea.style.display = "none"; - - // Initalize size - editor.initSize(); - - // Add an event to initialize the iframe once loaded. - editor._iframeLoadDone = false; - HTMLArea._addEvent - ( - this._iframe, - 'load', - function(e) - { - if(! editor._iframeLoadDone) - { - editor._iframeLoadDone = true; - editor.initIframe(); - } - return true; - } - ); - -}; - - - /** - * Size the editor according to the INITIAL sizing information. - * config.width - * The width may be set via three ways - * auto = the width is inherited from the original textarea - * toolbar = the width is set to be the same size as the toolbar - * = the width is an explicit size (any CSS measurement, eg 100em should be fine) - * - * config.height - * auto = the height is inherited from the original textarea - * = an explicit size measurement (again, CSS measurements) - * - * config.sizeIncludesBars - * true = the tool & status bars will appear inside the width & height confines - * false = the tool & status bars will appear outside the width & height confines - * - */ - - HTMLArea.prototype.initSize = function() - { - var editor = this; - - var width = null; - var height = null; - switch(this.config.width) - { - case 'auto': - { - width = this._initial_ta_size.w; - } - break; - - case 'toolbar': - { - width = this._toolBar.offsetWidth + 'px'; - } - break; - - default : - { - width = /[^0-9]/.test(this.config.width) ? this.config.width : this.config.width + 'px'; - } - break; - } - - switch(this.config.height) - { - case 'auto': - { - height = this._initial_ta_size.h; - } - break; - - default : - { - height = /[^0-9]/.test(this.config.height) ? this.config.height : this.config.height + 'px'; - } - break; - } - - this.sizeEditor(width, height, this.config.sizeIncludesBars, this.config.sizeIncludesPanels); - - HTMLArea.addDom0Event(window, 'resize', function(e) { editor.sizeEditor(); }); - - this.notifyOn('panel_change',function(){editor.sizeEditor();}); - }; - - /** - * Size the editor to a specific size, or just refresh the size (when window resizes for example) - * @param width optional width (CSS specification) - * @param height optional height (CSS specification) - * @param includingBars optional boolean to indicate if the size should include or exclude tool & status bars - */ - - HTMLArea.prototype.sizeEditor = function(width, height, includingBars, includingPanels) - { - - // We need to set the iframe & textarea to 100% height so that the htmlarea - // isn't "pushed out" when we get it's height, so we can change them later. - this._iframe.style.height = '100%'; - this._textArea.style.height = '100%'; - this._iframe.style.width = ''; - this._textArea.style.width = ''; - - if(includingBars != null) this._htmlArea.sizeIncludesToolbars = includingBars; - if(includingPanels != null) this._htmlArea.sizeIncludesPanels = includingPanels; - - if(width != null) - { - this._htmlArea.style.width = width; - if(!this._htmlArea.sizeIncludesPanels) - { - // Need to add some for l & r panels - var panel = this._panels.right; - if(panel.on && panel.panels.length && HTMLArea.hasDisplayedChildren(panel.div)) - { - this._htmlArea.style.width = this._htmlArea.offsetWidth + parseInt(this.config.panel_dimensions.right); - } - - var panel = this._panels.left; - if(panel.on && panel.panels.length && HTMLArea.hasDisplayedChildren(panel.div)) - { - this._htmlArea.style.width = this._htmlArea.offsetWidth + parseInt(this.config.panel_dimensions.left); - } - } - } - - if(height != null) - { - this._htmlArea.style.height = height; - if(!this._htmlArea.sizeIncludesToolbars) - { - // Need to add some for toolbars - this._htmlArea.style.height = this._htmlArea.offsetHeight + this._toolbar.offsetHeight + this._statusBar.offsetHeight; - } - - if(!this._htmlArea.sizeIncludesPanels) - { - // Need to add some for l & r panels - var panel = this._panels.top; - if(panel.on && panel.panels.length && HTMLArea.hasDisplayedChildren(panel.div)) - { - this._htmlArea.style.height = this._htmlArea.offsetHeight + parseInt(this.config.panel_dimensions.top); - } - - var panel = this._panels.bottom; - if(panel.on && panel.panels.length && HTMLArea.hasDisplayedChildren(panel.div)) - { - this._htmlArea.style.height = this._htmlArea.offsetHeight + parseInt(this.config.panel_dimensions.bottom); - } - } - } - - // At this point we have this._htmlArea.style.width & this._htmlArea.style.height - // which are the size for the OUTER editor area, including toolbars and panels - // now we size the INNER area and position stuff in the right places. - width = this._htmlArea.offsetWidth; - height = this._htmlArea.offsetHeight; - - // Set colspan for toolbar, and statusbar, rowspan for left & right panels, and insert panels to be displayed - // into thier rows - var panels = this._panels; - var editor = this; - var col_span = 1; - - function panel_is_alive(pan) - { - if(panels[pan].on && panels[pan].panels.length && HTMLArea.hasDisplayedChildren(panels[pan].container)) - { - panels[pan].container.style.display = ''; - return true; - } - - // Otherwise make sure it's been removed from the framework - else - { - panels[pan].container.style.display='none'; - return false; - } - } - - if(panel_is_alive('left')) - { - col_span += 1; - } - - if(panel_is_alive('top')) - { - // NOP - } - - if(panel_is_alive('right')) - { - col_span += 1; - } - - if(panel_is_alive('bottom')) - { - // NOP - } - - this._framework.tb_cell.colSpan = col_span; - this._framework.tp_cell.colSpan = col_span; - this._framework.bp_cell.colSpan = col_span; - this._framework.sb_cell.colSpan = col_span; - - // Put in the panel rows, top panel goes above editor row - if(!this._framework.tp_row.childNodes.length) - { - HTMLArea.removeFromParent(this._framework.tp_row); - } - else - { - if(!HTMLArea.hasParentNode(this._framework.tp_row)) - { - this._framework.tbody.insertBefore(this._framework.tp_row, this._framework.ler_row); - } - } - - // bp goes after the editor - if(!this._framework.bp_row.childNodes.length) - { - HTMLArea.removeFromParent(this._framework.bp_row); - } - else - { - if(!HTMLArea.hasParentNode(this._framework.bp_row)) - { - this._framework.tbody.insertBefore(this._framework.bp_row, this._framework.ler_row.nextSibling); - } - } - - // finally if the statusbar is on, insert it - if(!this.config.statusBar) - { - HTMLArea.removeFromParent(this._framework.sb_row); - } - else - { - if(!HTMLArea.hasParentNode(this._framework.sb_row)) - { - this._framework.table.appendChild(this._framework.sb_row); - } - } - - // Size and set colspans, link up the framework - this._framework.lp_cell.style.width = this.config.panel_dimensions.left; - this._framework.rp_cell.style.width = this.config.panel_dimensions.right; - this._framework.tp_cell.style.height = this.config.panel_dimensions.top; - this._framework.bp_cell.style.height = this.config.panel_dimensions.bottom; - this._framework.tb_cell.style.height = this._toolBar.offsetHeight + 'px'; - this._framework.sb_cell.style.height = this._statusBar.offsetHeight + 'px'; - - var edcellheight = height - this._toolBar.offsetHeight - this._statusBar.offsetHeight; - if(panel_is_alive('top')) edcellheight -= parseInt(this.config.panel_dimensions.top); - if(panel_is_alive('bottom')) edcellheight -= parseInt(this.config.panel_dimensions.bottom);; - this._iframe.style.height = edcellheight + 'px'; - - var edcellwidth = width; - if(panel_is_alive('left')) edcellwidth -= parseInt(this.config.panel_dimensions.left); - if(panel_is_alive('right')) edcellwidth -= parseInt(this.config.panel_dimensions.right); - this._iframe.style.width = edcellwidth + 'px'; - - this._textArea.style.height = this._iframe.style.height; - this._textArea.style.width = this._iframe.style.width; - - this.notifyOf('resize', {width:this._htmlArea.offsetWidth, height:this._htmlArea.offsetHeight}); - }; - - HTMLArea.prototype.addPanel = function(side) - { - var div = document.createElement('div'); - div.side = side; - if(side == 'left' || side == 'right') - { - div.style.width = this.config.panel_dimensions[side]; - } - HTMLArea.addClasses(div, 'panel'); - this._panels[side].panels.push(div); - this._panels[side].div.appendChild(div); - - this.notifyOf('panel_change', {'action':'add','panel':div}); - - return div; - }; - - HTMLArea.prototype.removePanel = function(panel) - { - this._panels[panel.side].div.removeChild(panel); - var clean = [ ]; - for(var i = 0; i < this._panels[panel.side].panels.length; i++) - { - if(this._panels[panel.side].panels[i] != panel) - { - clean.push(this._panels[panel.side].panels[i]); - } - } - this._panels[panel.side].panels = clean; - this.notifyOf('panel_change', {'action':'remove','panel':panel}); - }; - - HTMLArea.prototype.hidePanel = function(panel) - { - if(panel) - { - panel.style.display = 'none'; - this.notifyOf('panel_change', {'action':'hide','panel':panel}); - } - }; - - HTMLArea.prototype.showPanel = function(panel) - { - if(panel) - { - panel.style.display = ''; - this.notifyOf('panel_change', {'action':'show','panel':panel}); - } - }; - - HTMLArea.prototype.hidePanels = function(sides) - { - if(typeof sides == 'undefined') - { - sides = ['left','right','top','bottom']; - } - - var reShow = []; - for(var i = 0; i < sides.length;i++) - { - if(this._panels[sides[i]].on) - { - reShow.push(sides[i]); - this._panels[sides[i]].on = false; - } - } - this.notifyOf('panel_change', {'action':'multi_hide','sides':sides}); - }; - - HTMLArea.prototype.showPanels = function(sides) - { - if(typeof sides == 'undefined') - { - sides = ['left','right','top','bottom']; - } - - var reHide = []; - for(var i = 0; i < sides.length;i++) - { - if(!this._panels[sides[i]].on) - { - reHide.push(sides[i]); - this._panels[sides[i]].on = true; - } - } - this.notifyOf('panel_change', {'action':'multi_show','sides':sides}); - }; - - HTMLArea.objectProperties = function(obj) - { - var props = [ ]; - for(var x in obj) - { - props[props.length] = x; - } - return props; - }; - - /* - * EDITOR ACTIVATION NOTES: - * when a page has multiple Xinha editors, ONLY ONE should be activated at any time (this is mostly to - * work around a bug in Mozilla, but also makes some sense). No editor should be activated or focused - * automatically until at least one editor has been activated through user action (by mouse-clicking in - * the editor). - */ - - HTMLArea.prototype.editorIsActivated = function() { - try { - if (HTMLArea.is_gecko) return (this._doc.designMode == 'on'); - else return (this._doc.body.contentEditable); - } catch (e) - { - return false; - } - }; - - HTMLArea._someEditorHasBeenActivated = false; - HTMLArea._currentlyActiveEditor = false; - HTMLArea.prototype.activateEditor = function() - { - // We only want ONE editor at a time to be active - if(HTMLArea._currentlyActiveEditor) - { - if(HTMLArea._currentlyActiveEditor == this) return true; - HTMLArea._currentlyActiveEditor.deactivateEditor(); - } - - if (HTMLArea.is_gecko && this._doc.designMode != 'on') - { - try - { - // cannot set design mode if no display - if (this._iframe.style.display == 'none') - { - this._iframe.style.display = ''; - this._doc.designMode = 'on'; - this._iframe.style.display = 'none'; - } - else - { - this._doc.designMode = 'on'; - } - } catch (e) {} - } - else if(!HTMLArea.is_gecko && this._doc.body.contentEditable != true) - { - this._doc.body.contentEditable = true; - } - - // We need to know that at least one editor on the page has been activated - // this is because we will not focus any editor until an editor has been activated - HTMLArea._someEditorHasBeenActivated = true; - HTMLArea._currentlyActiveEditor = this; - - var editor = this; - this.enableToolbar(); - }; - - HTMLArea.prototype.deactivateEditor = function() - { - // If the editor isn't active then the user shouldn't use the toolbar - this.disableToolbar(); - - if (HTMLArea.is_gecko && this._doc.designMode != 'off') - { - try {this._doc.designMode = 'off';} catch (e) {} - } - else if(!HTMLArea.is_gecko && this._doc.body.contentEditable != false) - { - this._doc.body.contentEditable = false; - } - - if(HTMLArea._currentlyActiveEditor != this) - { - // We just deactivated an editor that wasn't marked as the currentlyActiveEditor - - return; // I think this should really be an error, there shouldn't be a situation where - // an editor is deactivated without first being activated. but it probably won't - // hurt anything. - } - - HTMLArea._currentlyActiveEditor = false; - }; - - HTMLArea.prototype.initIframe = function() - { - this.disableToolbar(); - var doc = null; - var editor = this; - try - { - if (editor._iframe.contentDocument) - { - this._doc = editor._iframe.contentDocument; - } - else - { - this._doc = editor._iframe.contentWindow.document; - } - doc = this._doc; - if (!doc) { // try later - if (HTMLArea.is_gecko) { - setTimeout(function() { editor.initIframe()}, 50); - return false; - } else { - alert("ERROR: IFRAME can't be initialized."); - } - } - } - catch(e) - { // try later - setTimeout(function() { editor.initIframe()}, 50); - } - - HTMLArea.freeLater(this, '_doc'); - - doc.open(); - if (!editor.config.fullPage) { - var html = "\n"; - html += "\n"; - html += "\n"; - if(typeof editor.config.baseHref != 'undefined' && editor.config.baseHref != null) - { - html += "\n"; - } - html += "\n"; - html += "\n"; - - if(editor.config.pageStyle) - { - html += ""; - } - - if(typeof editor.config.pageStyleSheets !== 'undefined') - { - for(style_i = 0; style_i < editor.config.pageStyleSheets.length; style_i++) - { - if(editor.config.pageStyleSheets[style_i].length > 0) - html += ""; - //html += "\n"; - } - } - html += "\n"; - html += "\n"; - html += editor.inwardHtml(editor._textArea.value); - html += "\n"; - html += ""; - } else { - var html = editor.inwardHtml(editor._textArea.value); - if (html.match(HTMLArea.RE_doctype)) { - editor.setDoctype(RegExp.$1); - html = html.replace(HTMLArea.RE_doctype, ""); - } - } - doc.write(html); - doc.close(); - - this.setEditorEvents(); - }; - -/** Delay a function until the document is ready for operations. See ticket:547 */ -HTMLArea.prototype.whenDocReady = function(doFunction) -{ - var editor = this; - - if(!this._doc.body) - { - setTimeout(function() {editor.whenDocReady(doFunction)}, 50); - } - else - { - doFunction(); - } -} - -// Switches editor mode; parameter can be "textmode" or "wysiwyg". If no -// parameter was passed this function toggles between modes. -HTMLArea.prototype.setMode = function(mode) { - if (typeof mode == "undefined") { - mode = ((this._editMode == "textmode") ? "wysiwyg" : "textmode"); - } - switch (mode) { - case "textmode": - { - var html = this.outwardHtml(this.getHTML()); - this.setHTML(html); - - // Hide the iframe - this.deactivateEditor(); - this._iframe.style.display = 'none'; - this._textArea.style.display = ''; - - if (this.config.statusBar) - { - this._statusBarTree.style.display = "none"; - this._statusBarTextMode.style.display = ""; - } - - this.notifyOf('modechange', {'mode':'text'}); - break; - } - - case "wysiwyg": - { - var html = this.inwardHtml(this.getHTML()); - this.deactivateEditor(); - this.setHTML(html); - this._iframe.style.display = ''; - this._textArea.style.display = "none"; - this.activateEditor(); - if (this.config.statusBar) - { - this._statusBarTree.style.display = ""; - this._statusBarTextMode.style.display = "none"; - } - - this.notifyOf('modechange', {'mode':'wysiwyg'}); - break; - } - - default: - { - alert("Mode <" + mode + "> not defined!"); - return false; - } - } - this._editMode = mode; - - for (var i in this.plugins) { - var plugin = this.plugins[i].instance; - if (plugin && typeof plugin.onMode == "function") plugin.onMode(mode); - } -}; - -HTMLArea.prototype.setFullHTML = function(html) { - var save_multiline = RegExp.multiline; - RegExp.multiline = true; - if (html.match(HTMLArea.RE_doctype)) { - this.setDoctype(RegExp.$1); - html = html.replace(HTMLArea.RE_doctype, ""); - } - RegExp.multiline = save_multiline; - if (!HTMLArea.is_ie) { - if (html.match(HTMLArea.RE_head)) - this._doc.getElementsByTagName("head")[0].innerHTML = RegExp.$1; - if (html.match(HTMLArea.RE_body)) - this._doc.getElementsByTagName("body")[0].innerHTML = RegExp.$1; - } else { - var reac = this.editorIsActivated(); - if(reac) this.deactivateEditor(); - var html_re = /((.|\n)*?)<\/html>/i; - html = html.replace(html_re, "$1"); - this._doc.open(); - this._doc.write(html); - this._doc.close(); - if(reac) this.activateEditor(); - this.setEditorEvents(); - return true; - } -}; - -HTMLArea.prototype.setEditorEvents = function() { - var editor=this; - var doc=this._doc; - editor.whenDocReady( - function() { - // if we have multiple editors some bug in Mozilla makes some lose editing ability - HTMLArea._addEvents - ( - doc, - ["mousedown"], - function() { editor.activateEditor(); return true; } - ); - - // intercept some events; for updating the toolbar & keyboard handlers - HTMLArea._addEvents - (doc, ["keydown", "keypress", "mousedown", "mouseup", "drag"], - function (event) { - return editor._editorEvent(HTMLArea.is_ie ? editor._iframe.contentWindow.event : event); - }); - - // check if any plugins have registered refresh handlers - for (var i in editor.plugins) { - var plugin = editor.plugins[i].instance; - HTMLArea.refreshPlugin(plugin); - }; - - // specific editor initialization - if(typeof editor._onGenerate == "function") { - editor._onGenerate(); - } - } - ); -}; - -/*************************************************** - * Category: PLUGINS - ***************************************************/ - -// Create the specified plugin and register it with this HTMLArea -// return the plugin created to allow refresh when necessary -HTMLArea.prototype.registerPlugin = function() { - var plugin = arguments[0]; - - // We can only register plugins that have been succesfully loaded - if - ( - plugin == null - || typeof plugin == 'undefined' - || (typeof plugin == 'string' && eval('typeof ' + plugin) == 'undefined') - ) return false; - - var args = []; - for (var i = 1; i < arguments.length; ++i) - args.push(arguments[i]); - return this.registerPlugin2(plugin, args); -}; - -// this is the variant of the function above where the plugin arguments are -// already packed in an array. Externally, it should be only used in the -// full-screen editor code, in order to initialize plugins with the same -// parameters as in the opener window. -HTMLArea.prototype.registerPlugin2 = function(plugin, args) { - if (typeof plugin == "string") - plugin = eval(plugin); - if (typeof plugin == "undefined") { - /* FIXME: This should never happen. But why does it do? */ - return false; - } - var obj = new plugin(this, args); - if (obj) { - var clone = {}; - var info = plugin._pluginInfo; - for (var i in info) - clone[i] = info[i]; - clone.instance = obj; - clone.args = args; - this.plugins[plugin._pluginInfo.name] = clone; - return obj; - } else - alert("Can't register plugin " + plugin.toString() + "."); -}; - -// static function that loads the required plugin and lang file, based on the -// language loaded already for HTMLArea. You better make sure that the plugin -// _has_ that language, otherwise shit might happen ;-) -HTMLArea.getPluginDir = function(pluginName) { - return _editor_url + "plugins/" + pluginName; -}; - -HTMLArea.loadPlugin = function(pluginName, callback) { - // Might already be loaded - if(eval('typeof ' + pluginName) != 'undefined') - { - if(callback) - { - callback(pluginName); - } - return true; - } - - var dir = this.getPluginDir(pluginName); - var plugin = pluginName.replace(/([a-z])([A-Z])([a-z])/g, - function (str, l1, l2, l3) { - return l1 + "-" + l2.toLowerCase() + l3; - }).toLowerCase() + ".js"; - var plugin_file = dir + "/" + plugin; - - if(callback) - { - HTMLArea._loadback(plugin_file, function() { callback(pluginName); }); - } - else - { - document.write(""); - } - return false; -}; - -HTMLArea._pluginLoadStatus = { }; -HTMLArea.loadPlugins = function(plugins, callbackIfNotReady) -{ - // Rip the ones that are loaded and look for ones that have failed - var retVal = true; - var nuPlugins = HTMLArea.cloneObject(plugins); - while(nuPlugins.length) - { - var p = nuPlugins.pop(); - if(typeof HTMLArea._pluginLoadStatus[p] == 'undefined') - { - // Load it - HTMLArea._pluginLoadStatus[p] = 'loading'; - HTMLArea.loadPlugin(p, - function(plugin) - { - if(eval('typeof ' + plugin) != 'undefined') - { - HTMLArea._pluginLoadStatus[plugin] = 'ready'; - } - else - { - // Actually, this won't happen, because if the script fails - // it will throw an exception preventing the callback from - // running. This will leave it always in the "loading" state - // unfortunatly that means we can't fail plugins gracefully - // by just skipping them. - HTMLArea._pluginLoadStatus[plugin] = 'failed'; - } - } - ); - retVal = false; - } - else - { - switch(HTMLArea._pluginLoadStatus[p]) - { - case 'failed': - case 'ready' : - break; - - case 'loading': - default : - retVal = false; - break; - } - } - } - - if(retVal) return true; // All done, just return - - // Waiting on plugins to load, return false now and come back a bit later - // if we have to callback - if(callbackIfNotReady) - { - setTimeout(function() { if(HTMLArea.loadPlugins(plugins, callbackIfNotReady)) callbackIfNotReady(); }, 150); - } - return retVal; -}; - -// refresh plugin by calling onGenerate or onGenerateOnce method. -HTMLArea.refreshPlugin = function(plugin) { - if (plugin && typeof plugin.onGenerate == "function") - plugin.onGenerate(); - if (plugin && typeof plugin.onGenerateOnce == "function") { - plugin.onGenerateOnce(); - plugin.onGenerateOnce = null; - } -}; - -HTMLArea.loadStyle = function(style, plugin) { - var url = _editor_url || ''; - if (typeof plugin != "undefined") { - url += "plugins/" + plugin + "/"; - } - url += style; - if (/^\//.test(style)) - url = style; - var head = document.getElementsByTagName("head")[0]; - var link = document.createElement("link"); - link.rel = "stylesheet"; - link.href = url; - head.appendChild(link); - //document.write(""); -}; -HTMLArea.loadStyle(typeof _editor_css == "string" ? _editor_css : "htmlarea.css"); - -/*************************************************** - * Category: EDITOR UTILITIES - ***************************************************/ - -HTMLArea.prototype.debugTree = function() { - var ta = document.createElement("textarea"); - ta.style.width = "100%"; - ta.style.height = "20em"; - ta.value = ""; - function debug(indent, str) { - for (; --indent >= 0;) - ta.value += " "; - ta.value += str + "\n"; - } - function _dt(root, level) { - var tag = root.tagName.toLowerCase(), i; - var ns = HTMLArea.is_ie ? root.scopeName : root.prefix; - debug(level, "- " + tag + " [" + ns + "]"); - for (i = root.firstChild; i; i = i.nextSibling) - if (i.nodeType == 1) - _dt(i, level + 2); - } - _dt(this._doc.body, 0); - document.body.appendChild(ta); -}; - -HTMLArea.getInnerText = function(el) { - var txt = '', i; - for (i = el.firstChild; i; i = i.nextSibling) { - if (i.nodeType == 3) - txt += i.data; - else if (i.nodeType == 1) - txt += HTMLArea.getInnerText(i); - } - return txt; -}; - -HTMLArea.prototype._wordClean = function() { - var - editor = this, - stats = { - empty_tags : 0, - mso_class : 0, - mso_style : 0, - mso_xmlel : 0, - orig_len : this._doc.body.innerHTML.length, - T : (new Date()).getTime() - }, - stats_txt = { - empty_tags : "Empty tags removed: ", - mso_class : "MSO class names removed: ", - mso_style : "MSO inline style removed: ", - mso_xmlel : "MSO XML elements stripped: " - }; - function showStats() { - var txt = "HTMLArea word cleaner stats: \n\n"; - for (var i in stats) - if (stats_txt[i]) - txt += stats_txt[i] + stats[i] + "\n"; - txt += "\nInitial document length: " + stats.orig_len + "\n"; - txt += "Final document length: " + editor._doc.body.innerHTML.length + "\n"; - txt += "Clean-up took " + (((new Date()).getTime() - stats.T) / 1000) + " seconds"; - alert(txt); - } - function clearClass(node) { - var newc = node.className.replace(/(^|\s)mso.*?(\s|$)/ig, ' '); - if (newc != node.className) { - node.className = newc; - if (!/\S/.test(node.className)) { - node.removeAttribute("className"); - ++stats.mso_class; - } - } - } - function clearStyle(node) { - var declarations = node.style.cssText.split(/\s*;\s*/); - for (var i = declarations.length; --i >= 0;) - if (/^mso|^tab-stops/i.test(declarations[i]) || - /^margin\s*:\s*0..\s+0..\s+0../i.test(declarations[i])) { - ++stats.mso_style; - declarations.splice(i, 1); - } - node.style.cssText = declarations.join("; "); - } - function stripTag(el) { - if (HTMLArea.is_ie) - el.outerHTML = HTMLArea.htmlEncode(el.innerText); - else { - var txt = document.createTextNode(HTMLArea.getInnerText(el)); - el.parentNode.insertBefore(txt, el); - HTMLArea.removeFromParent(el); - } - ++stats.mso_xmlel; - } - function checkEmpty(el) { - if (/^(a|span|b|strong|i|em|font)$/i.test(el.tagName) && - !el.firstChild) { - HTMLArea.removeFromParent(el); - ++stats.empty_tags; - } - } - function parseTree(root) { - var tag = root.tagName.toLowerCase(), i, next; - if ((HTMLArea.is_ie && root.scopeName != 'HTML') || (!HTMLArea.is_ie && /:/.test(tag))) { - stripTag(root); - return false; - } else { - clearClass(root); - clearStyle(root); - for (i = root.firstChild; i; i = next) { - next = i.nextSibling; - if (i.nodeType == 1 && parseTree(i)) - checkEmpty(i); - } - } - return true; - } - parseTree(this._doc.body); - // showStats(); - // this.debugTree(); - // this.setHTML(this.getHTML()); - // this.setHTML(this.getInnerHTML()); - // this.forceRedraw(); - this.updateToolbar(); -}; - -HTMLArea.prototype._clearFonts = function() { - var D = this.getInnerHTML(); - - if(confirm(HTMLArea._lc("Would you like to clear font typefaces?"))) - { - D = D.replace(/face="[^"]*"/gi, ''); - D = D.replace(/font-family:[^;}"']+;?/gi, ''); - } - - if(confirm(HTMLArea._lc("Would you like to clear font sizes?"))) - { - D = D.replace(/size="[^"]*"/gi, ''); - D = D.replace(/font-size:[^;}"']+;?/gi, ''); - } - - if(confirm(HTMLArea._lc("Would you like to clear font colours?"))) - { - D = D.replace(/color="[^"]*"/gi, ''); - D = D.replace(/([^-])color:[^;}"']+;?/gi, '$1'); - } - - D = D.replace(/(style|class)="\s*"/gi, ''); - D = D.replace(/<(font|span)\s*>/gi, ''); - this.setHTML(D); - this.updateToolbar(); -}; - -HTMLArea.prototype._splitBlock = function() -{ - this._doc.execCommand('formatblock', false, 'div'); -}; - -HTMLArea.prototype.forceRedraw = function() { - this._doc.body.style.visibility = "hidden"; - this._doc.body.style.visibility = "visible"; - // this._doc.body.innerHTML = this.getInnerHTML(); -}; - -// focuses the iframe window. returns a reference to the editor document. -HTMLArea.prototype.focusEditor = function() { - switch (this._editMode) { - // notice the try { ... } catch block to avoid some rare exceptions in FireFox - // (perhaps also in other Gecko browsers). Manual focus by user is required in - // case of an error. Somebody has an idea? - case "wysiwyg" : - try - { - // We don't want to focus the field unless at least one field has been activated. - if(HTMLArea._someEditorHasBeenActivated) - { - this.activateEditor(); // Ensure *this* editor is activated - this._iframe.contentWindow.focus(); // and focus it - } - } catch (e) {} break; - case "textmode": try { this._textArea.focus() } catch (e) {} break; - default : alert("ERROR: mode " + this._editMode + " is not defined"); - } - return this._doc; -}; - -// takes a snapshot of the current text (for undo) -HTMLArea.prototype._undoTakeSnapshot = function() { - ++this._undoPos; - if (this._undoPos >= this.config.undoSteps) { - // remove the first element - this._undoQueue.shift(); - --this._undoPos; - } - // use the fasted method (getInnerHTML); - var take = true; - var txt = this.getInnerHTML(); - if (this._undoPos > 0) - take = (this._undoQueue[this._undoPos - 1] != txt); - if (take) { - this._undoQueue[this._undoPos] = txt; - } else { - this._undoPos--; - } -}; - -HTMLArea.prototype.undo = function() { - if (this._undoPos > 0) { - var txt = this._undoQueue[--this._undoPos]; - if (txt) this.setHTML(txt); - else ++this._undoPos; - } -}; - -HTMLArea.prototype.redo = function() { - if (this._undoPos < this._undoQueue.length - 1) { - var txt = this._undoQueue[++this._undoPos]; - if (txt) this.setHTML(txt); - else --this._undoPos; - } -}; - -HTMLArea.prototype.disableToolbar = function(except) -{ - if(this._timerToolbar) clearTimeout(this._timerToolbar); - if(typeof except == 'undefined') - { - except = [ ]; - } - else if(typeof except != 'object') - { - except = [except]; - } - - for (var i in this._toolbarObjects) - { - var btn = this._toolbarObjects[i]; - if(except.contains(i)) - { - continue; - } - if (typeof(btn.state) != 'function') continue; // prevent iterating over wrong type - btn.state("enabled", false); - } -}; - -HTMLArea.prototype.enableToolbar = function() -{ - this.updateToolbar(); -}; - -if(!Array.prototype.contains) -{ - Array.prototype.contains = function(needle) - { - var haystack = this; - for(var i = 0; i < haystack.length; i++) - { - if(needle == haystack[i]) return true; - } - - return false; - }; -} - -if(!Array.prototype.indexOf) -{ - Array.prototype.indexOf = function(needle) - { - var haystack = this; - for(var i = 0; i < haystack.length; i++) - { - if(needle == haystack[i]) return i; - } - - return null; - }; -} - - -// updates enabled/disable/active state of the toolbar elements -HTMLArea.prototype.updateToolbar = function(noStatus) { - var doc = this._doc; - var text = (this._editMode == "textmode"); - var ancestors = null; - if (!text) { - ancestors = this.getAllAncestors(); - if (this.config.statusBar && !noStatus) { - this._statusBarTree.innerHTML = HTMLArea._lc("Path") + ": "; // clear - for (var i = ancestors.length; --i >= 0;) { - var el = ancestors[i]; - if (!el) { - // hell knows why we get here; this - // could be a classic example of why - // it's good to check for conditions - // that are impossible to happen ;-) - continue; - } - var a = document.createElement("a"); - a.href = "javascript:void(0)"; - a.el = el; - a.editor = this; - HTMLArea.addDom0Event(a, 'click', function() { - this.blur(); - this.editor.selectNodeContents(this.el); - this.editor.updateToolbar(true); - return false; - }); - HTMLArea.addDom0Event(a, 'contextmenu', function() { - // TODO: add context menu here - this.blur(); - var info = "Inline style:\n\n"; - info += this.el.style.cssText.split(/;\s*/).join(";\n"); - alert(info); - return false; - }); - var txt = el.tagName.toLowerCase(); - a.title = el.style.cssText; - if (el.id) { - txt += "#" + el.id; - } - if (el.className) { - txt += "." + el.className; - } - a.appendChild(document.createTextNode(txt)); - this._statusBarTree.appendChild(a); - if (i != 0) { - this._statusBarTree.appendChild(document.createTextNode(String.fromCharCode(0xbb))); - } - } - } - } - - for (var i in this._toolbarObjects) { - var btn = this._toolbarObjects[i]; - var cmd = i; - var inContext = true; - if (typeof(btn.state) != 'function') continue; // prevent iterating over wrong type - if (btn.context && !text) { - inContext = false; - var context = btn.context; - var attrs = []; - if (/(.*)\[(.*?)\]/.test(context)) { - context = RegExp.$1; - attrs = RegExp.$2.split(","); - } - context = context.toLowerCase(); - var match = (context == "*"); - for (var k = 0; k < ancestors.length; ++k) { - if (!ancestors[k]) { - // the impossible really happens. - continue; - } - if (match || (ancestors[k].tagName.toLowerCase() == context)) { - inContext = true; - for (var ka = 0; ka < attrs.length; ++ka) { - if (!eval("ancestors[k]." + attrs[ka])) { - inContext = false; - break; - } - } - if (inContext) { - break; - } - } - } - } - btn.state("enabled", (!text || btn.text) && inContext); - if (typeof cmd == "function") { - continue; - } - // look-it-up in the custom dropdown boxes - var dropdown = this.config.customSelects[cmd]; - if ((!text || btn.text) && (typeof dropdown != "undefined")) { - dropdown.refresh(this); - continue; - } - switch (cmd) - { - case "fontname": - case "fontsize": - { - if (!text) try { - var value = ("" + doc.queryCommandValue(cmd)).toLowerCase(); - if (!value) { - btn.element.selectedIndex = 0; - break; - } - - // HACK -- retrieve the config option for this - // combo box. We rely on the fact that the - // variable in config has the same name as - // button name in the toolbar. - var options = this.config[cmd]; - var k = 0; - for (var j in options) - { - // FIXME: the following line is scary. - if ((j.toLowerCase() == value) || (options[j].substr(0, value.length).toLowerCase() == value)) - { - btn.element.selectedIndex = k; - throw "ok"; - } - ++k; - } - btn.element.selectedIndex = 0; - } catch(e) {}; - } - break; - - // It's better to search for the format block by tag name from the - // current selection upwards, because IE has a tendancy to return - // things like 'heading 1' for 'h1', which breaks things if you want - // to call your heading blocks 'header 1'. Stupid MS. - case "formatblock" : - { - var blocks = [ ]; - for(var i in this.config['formatblock']) - { - if (typeof(this.config['formatblock'][i]) == 'string') // prevent iterating over wrong type - { - blocks[blocks.length] = this.config['formatblock'][i]; - } - } - - var deepestAncestor = this._getFirstAncestor(this._getSelection(), blocks); - if(deepestAncestor) - { - for(var x= 0; x < blocks.length; x++) - { - if(blocks[x].toLowerCase() == deepestAncestor.tagName.toLowerCase()) - { - btn.element.selectedIndex = x; - } - } - } - else - { - btn.element.selectedIndex = 0; - } - } - break; - - case "textindicator": - if (!text) { - try {with (btn.element.style) { - backgroundColor = HTMLArea._makeColor( - doc.queryCommandValue(HTMLArea.is_ie ? "backcolor" : "hilitecolor")); - if (/transparent/i.test(backgroundColor)) { - // Mozilla - backgroundColor = HTMLArea._makeColor(doc.queryCommandValue("backcolor")); - } - color = HTMLArea._makeColor(doc.queryCommandValue("forecolor")); - fontFamily = doc.queryCommandValue("fontname"); - fontWeight = doc.queryCommandState("bold") ? "bold" : "normal"; - fontStyle = doc.queryCommandState("italic") ? "italic" : "normal"; - }} catch (e) { - // alert(e + "\n\n" + cmd); - } - } - break; - case "htmlmode": btn.state("active", text); break; - case "lefttoright": - case "righttoleft": - var el = this.getParentElement(); - while (el && !HTMLArea.isBlockElement(el)) - el = el.parentNode; - if (el) - btn.state("active", (el.style.direction == ((cmd == "righttoleft") ? "rtl" : "ltr"))); - break; - default: - cmd = cmd.replace(/(un)?orderedlist/i, "insert$1orderedlist"); - try { - btn.state("active", (!text && doc.queryCommandState(cmd))); - } catch (e) {} - } - } - // take undo snapshots - if (this._customUndo && !this._timerUndo) { - this._undoTakeSnapshot(); - var editor = this; - this._timerUndo = setTimeout(function() { - editor._timerUndo = null; - }, this.config.undoTimeout); - } - - // Insert a space in certain locations, this is just to make editing a little - // easier (to "get out of" tags), it's not essential. - // TODO: Make this work for IE? - // TODO: Perhaps should use a plain space character, I'm not sure. - // OK, I've disabled this temporarily, to be honest, I can't rightly remember what the - // original problem was I was trying to solve with it. I think perhaps that EnterParagraphs - // might solve the problem, whatever the hell it was. I'm going senile, I'm sure. - if(0 && HTMLArea.is_gecko) - { - var s = this._getSelection(); - // If the last character in the last text node of the parent tag - // and the parent tag is not a block tag - if(s && s.isCollapsed && s.anchorNode - && s.anchorNode.parentNode.tagName.toLowerCase() != 'body' - && s.anchorNode.nodeType == 3 && s.anchorOffset == s.anchorNode.length - && ! - ( s.anchorNode.parentNode.nextSibling - && s.anchorNode.parentNode.nextSibling.nodeType == 3 - ) - && !HTMLArea.isBlockElement(s.anchorNode.parentNode) - ) - { - // Insert hair-width-space after the close tag if there isn't another text node on the other side - // It could also work with zero-width-space (\u200B) but I don't like it so much. - // Perhaps this won't work well in various character sets and we should use plain space (20)? - try - { - s.anchorNode.parentNode.parentNode.insertBefore - (this._doc.createTextNode('\t'), s.anchorNode.parentNode.nextSibling); - } - catch(e) - { - // Disregard - } - } - } - - // check if any plugins have registered refresh handlers - for (var i in this.plugins) { - var plugin = this.plugins[i].instance; - if (plugin && typeof plugin.onUpdateToolbar == "function") - plugin.onUpdateToolbar(); - } - - -}; - -/** Returns a node after which we can insert other nodes, in the current - * selection. The selection is removed. It splits a text node, if needed. - */ -HTMLArea.prototype.insertNodeAtSelection = function(toBeInserted) { - if (!HTMLArea.is_ie) { - var sel = this._getSelection(); - var range = this._createRange(sel); - // remove the current selection - sel.removeAllRanges(); - range.deleteContents(); - var node = range.startContainer; - var pos = range.startOffset; - switch (node.nodeType) { - case 3: // Node.TEXT_NODE - // we have to split it at the caret position. - if (toBeInserted.nodeType == 3) { - // do optimized insertion - node.insertData(pos, toBeInserted.data); - range = this._createRange(); - range.setEnd(node, pos + toBeInserted.length); - range.setStart(node, pos + toBeInserted.length); - sel.addRange(range); - } else { - node = node.splitText(pos); - var selnode = toBeInserted; - if (toBeInserted.nodeType == 11 /* Node.DOCUMENT_FRAGMENT_NODE */) { - selnode = selnode.firstChild; - } - node.parentNode.insertBefore(toBeInserted, node); - this.selectNodeContents(selnode); - this.updateToolbar(); - } - break; - case 1: // Node.ELEMENT_NODE - var selnode = toBeInserted; - if (toBeInserted.nodeType == 11 /* Node.DOCUMENT_FRAGMENT_NODE */) { - selnode = selnode.firstChild; - } - node.insertBefore(toBeInserted, node.childNodes[pos]); - this.selectNodeContents(selnode); - this.updateToolbar(); - break; - } - } else { - return null; // this function not yet used for IE - } -}; - -// Returns the deepest node that contains both endpoints of the selection. -HTMLArea.prototype.getParentElement = function(sel) { - if(typeof sel == 'undefined') - { - sel = this._getSelection(); - } - var range = this._createRange(sel); - if (HTMLArea.is_ie) { - switch (sel.type) { - case "Text": - // try to circumvent a bug in IE: - // the parent returned is not always the real parent element - var parent = range.parentElement(); - while (true) - { - var TestRange = range.duplicate(); - TestRange.moveToElementText(parent); - if (TestRange.inRange(range)) break; - if ((parent.nodeType != 1) || (parent.tagName.toLowerCase() == 'body')) break; - parent = parent.parentElement; - } - return parent; - case "None": - // It seems that even for selection of type "None", - // there _is_ a parent element and it's value is not - // only correct, but very important to us. MSIE is - // certainly the buggiest browser in the world and I - // wonder, God, how can Earth stand it? - return range.parentElement(); - case "Control": - return range.item(0); - default: - return this._doc.body; - } - } else try { - var p = range.commonAncestorContainer; - if (!range.collapsed && range.startContainer == range.endContainer && - range.startOffset - range.endOffset <= 1 && range.startContainer.hasChildNodes()) - p = range.startContainer.childNodes[range.startOffset]; - /* - alert(range.startContainer + ":" + range.startOffset + "\n" + - range.endContainer + ":" + range.endOffset); - */ - while (p.nodeType == 3) { - p = p.parentNode; - } - return p; - } catch (e) { - return null; - } -}; - -// Returns an array with all the ancestor nodes of the selection. -HTMLArea.prototype.getAllAncestors = function() { - var p = this.getParentElement(); - var a = []; - while (p && (p.nodeType == 1) && (p.tagName.toLowerCase() != 'body')) { - a.push(p); - p = p.parentNode; - } - a.push(this._doc.body); - return a; -}; - -// Returns the deepest ancestor of the selection that is of the current type -HTMLArea.prototype._getFirstAncestor = function(sel, types) -{ - var prnt = this._activeElement(sel); - if(prnt == null) - { - try - { - prnt = (HTMLArea.is_ie ? this._createRange(sel).parentElement() : this._createRange(sel).commonAncestorContainer); - } - catch(e) - { - return null; - } - } - - if(typeof types == 'string') - { - types = [types]; - } - - while(prnt) - { - if(prnt.nodeType == 1) - { - if(types == null) return prnt; - if(types.contains(prnt.tagName.toLowerCase())) - { - - return prnt; - } - if(prnt.tagName.toLowerCase() == 'body') break; - if(prnt.tagName.toLowerCase() == 'table') break; - } - prnt = prnt.parentNode; - } - - return null; -}; - -/** - * Returns the selected element, if any. That is, - * the element that you have last selected in the "path" - * at the bottom of the editor, or a "control" (eg image) - * - * @returns null | element - */ -HTMLArea.prototype._activeElement = function(sel) -{ - if(sel == null) return null; - if(this._selectionEmpty(sel)) return null; - - if(HTMLArea.is_ie) - { - if(sel.type.toLowerCase() == "control") - { - return sel.createRange().item(0); - } - else - { - - // If it's not a control, then we need to see if - // the selection is the _entire_ text of a parent node - // (this happens when a node is clicked in the tree) - var range = sel.createRange(); - var p_elm = this.getParentElement(sel); - if(p_elm.innerHTML == range.htmlText) - { - return p_elm; - } - /* - if(p_elm) - { - var p_rng = this._doc.body.createTextRange(); - p_rng.moveToElementText(p_elm); - if(p_rng.isEqual(range)) - { - return p_elm; - } - } - - if(range.parentElement()) - { - var prnt_range = this._doc.body.createTextRange(); - prnt_range.moveToElementText(range.parentElement()); - if(prnt_range.isEqual(range)) - { - return range.parentElement(); - } - } - */ - return null; - } - } - else - { - // For Mozilla we just see if the selection is not collapsed (something is selected) - // and that the anchor (start of selection) is an element. This might not be totally - // correct, we possibly should do a simlar check to IE? - if(! sel.isCollapsed) - { - if(sel.anchorNode.childNodes.length > sel.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 sel.anchorNode.parentNode; - } - } - return null; - } -}; - - -HTMLArea.prototype._selectionEmpty = function(sel) -{ - if(!sel) return true; - - if(HTMLArea.is_ie) - { - return this._createRange(sel).htmlText == ''; - } - else if(typeof sel.isCollapsed != 'undefined') - { - return sel.isCollapsed; - } - - return true; -}; - -HTMLArea.prototype._getAncestorBlock = function(sel) -{ - // Scan upwards to find a block level element that we can change or apply to - var prnt = (HTMLArea.is_ie ? this._createRange(sel).parentElement : this._createRange(sel).commonAncestorContainer); - - while(prnt && (prnt.nodeType == 1)) - { - switch(prnt.tagName.toLowerCase()) - { - case 'div' : - case 'p' : - case 'address' : - case 'blockquote' : - case 'center' : - case 'del' : - case 'ins' : - case 'pre' : - case 'h1' : - case 'h2' : - case 'h3' : - case 'h4' : - case 'h5' : - case 'h6' : - case 'h7' : - // Block Element - return prnt; - - case 'body' : - case 'noframes' : - case 'dd' : - case 'li' : - case 'th' : - case 'td' : - case 'noscript' : - // Halting element (stop searching) - return null; - - default : - // Keep lookin - break; - } - } - - return null; -}; - -HTMLArea.prototype._createImplicitBlock = function(type) -{ - // expand it until we reach a block element in either direction - // then wrap the selection in a block and return - var sel = this._getSelection(); - if(HTMLArea.is_ie) - { - sel.empty(); - } - else - { - sel.collapseToStart(); - } - - var rng = this._createRange(sel); - - // Expand UP - - // Expand DN -}; - -HTMLArea.prototype._formatBlock = function(block_format) -{ - var ancestors = this.getAllAncestors(); - var apply_to = null; - - // Block format can be a tag followed with class defs - // eg div.blue.left - var target_tag = null; - var target_classNames = [ ]; - - if(block_format.indexOf('.') >= 0) - { - target_tag = block_format.substr(0, block_format.indexOf('.')).toLowerCase();; - - target_classNames = block_format.substr(block_format.indexOf('.'), block_format.length - block_format.indexOf('.')).replace(/\./g, '').replace(/^\s*/, '').replace(/\s*$/, '').split(' '); - } - else - { - target_tag = block_format.toLowerCase(); - } - - var sel = this._getSelection(); - var rng = this._createRange(sel); - var apply_to = null; - - if(HTMLArea.is_gecko) - { - if(sel.isCollapsed) - { - // With no selection we want to apply to the whole contents of the ancestor block - apply_to = this._getAncestorBlock(sel); - if(apply_to == null) - { - // If there wasn't an ancestor, make one. - apply_to = this._createImplicitBlock(sel, target_tag); - } - } - else - { - // With a selection it's more tricky - switch(target_tag) - { - - case 'h1' : - case 'h2' : - case 'h3' : - case 'h4' : - case 'h5' : - case 'h6' : - case 'h7' : - apply_to = [ ]; - var search_tags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7']; - for(var y = 0; y < search_tags.length; y++) - { - var headers = this._doc.getElementsByTagName(search_tag[y]); - for(var x = 0; x < headers.length; x++) - { - if(sel.containsNode(headers[x])) - { - apply_to[apply_to.length] = headers[x]; - } - } - } - if(apply_to.length > 0) break; - // If there wern't any in the selection drop through - case 'div' : - apply_to = this._doc.createElement(target_tag); - apply_to.appendChild(rng.extractContents()); - rng.insertNode(apply_to); - break; - - case 'p' : - case 'center' : - case 'pre' : - case 'ins' : - case 'del' : - case 'blockquote' : - case 'address' : - apply_to = [ ]; - var paras = this._doc.getElementsByTagName(target_tag); - for(var x = 0; x < paras.length; x++) - { - if(sel.containsNode(paras[x])) - { - apply_to[apply_to.length] = paras[x]; - } - } - - if(apply_to.length == 0) - { - sel.collapseToStart(); - return this._formatBlock(block_format); - } - break; - } - } - } - -}; - -// Selects the contents inside the given node -HTMLArea.prototype.selectNodeContents = function(node, pos) { - this.focusEditor(); - this.forceRedraw(); - var range; - var collapsed = typeof pos == "undefined" ? true : false; - if (HTMLArea.is_ie) { - // Tables and Images get selected as "objects" rather than the text contents - if(collapsed && node.tagName && node.tagName.toLowerCase().match(/table|img|input|select|textarea/)) - { - range = this._doc.body.createControlRange(); - range.add(node); - } - else - { - range = this._doc.body.createTextRange(); - range.moveToElementText(node); - //(collapsed) && range.collapse(pos); - } - range.select(); - } else { - var sel = this._getSelection(); - range = this._doc.createRange(); - // Tables and Images get selected as "objects" rather than the text contents - if(collapsed && node.tagName && node.tagName.toLowerCase().match(/table|img|input|textarea|select/)) - { - range.selectNode(node); - } - else - { - range.selectNodeContents(node); - //(collapsed) && range.collapse(pos); - } - sel.removeAllRanges(); - sel.addRange(range); - } -}; - -/** Call this function to insert HTML code at the current position. It deletes - * the selection, if any. - */ -HTMLArea.prototype.insertHTML = function(html) { - var sel = this._getSelection(); - var range = this._createRange(sel); - this.focusEditor(); - if (HTMLArea.is_ie) { - range.pasteHTML(html); - } else { - // construct a new document fragment with the given HTML - var fragment = this._doc.createDocumentFragment(); - var div = this._doc.createElement("div"); - div.innerHTML = html; - while (div.firstChild) { - // the following call also removes the node from div - fragment.appendChild(div.firstChild); - } - // this also removes the selection - var node = this.insertNodeAtSelection(fragment); - } -}; - -/** - * Call this function to surround the existing HTML code in the selection with - * your tags. FIXME: buggy! This function will be deprecated "soon". - */ -HTMLArea.prototype.surroundHTML = function(startTag, endTag) { - var html = this.getSelectedHTML(); - // the following also deletes the selection - this.insertHTML(startTag + html + endTag); -}; - -/// Retrieve the selected block -HTMLArea.prototype.getSelectedHTML = function() { - var sel = this._getSelection(); - var range = this._createRange(sel); - var existing = null; - if (HTMLArea.is_ie) { - existing = range.htmlText; - } else { - existing = HTMLArea.getHTML(range.cloneContents(), false, this); - } - return existing; -}; - -/// Return true if we have some selection -HTMLArea.prototype.hasSelectedText = function() { - // FIXME: come _on_ mishoo, you can do better than this ;-) - return this.getSelectedHTML() != ''; -}; - -HTMLArea.prototype._createLink = function(link) { - var editor = this; - var outparam = null; - if (typeof link == "undefined") { - link = this.getParentElement(); - if (link) { - while (link && !/^a$/i.test(link.tagName)) - link = link.parentNode; - } - } - if (!link) { - var sel = editor._getSelection(); - var range = editor._createRange(sel); - var compare = 0; - if (HTMLArea.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(HTMLArea._lc("You need to select some text before creating a link")); - return; - } - outparam = { - f_href : '', - f_title : '', - f_target : '', - f_usetarget : editor.config.makeLinkShowsTarget - }; - } else - outparam = { - f_href : HTMLArea.is_ie ? editor.stripBaseURL(link.href) : link.getAttribute("href"), - f_title : link.title, - f_target : link.target, - f_usetarget : editor.config.makeLinkShowsTarget - }; - this._popupDialog(editor.config.URIs["link"], function(param) { - if (!param) - return false; - var a = link; - if (!a) try { - editor._doc.execCommand("createlink", false, param.f_href); - a = editor.getParentElement(); - var sel = editor._getSelection(); - var range = editor._createRange(sel); - if (!HTMLArea.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.target = param.f_target.trim(); - a.title = param.f_title.trim(); - editor.selectNodeContents(a); - editor.updateToolbar(); - }, outparam); -}; - -// Called when the user clicks on "InsertImage" button. If an image is already -// there, it will just modify it's properties. -HTMLArea.prototype._insertImage = function(image) { - var editor = this; // for nested functions - var outparam = null; - if (typeof image == "undefined") { - image = this.getParentElement(); - if (image && !/^img$/i.test(image.tagName)) - image = null; - } - if (image) outparam = { - f_base : editor.config.baseHref, - f_url : HTMLArea.is_ie ? editor.stripBaseURL(image.src) : image.getAttribute("src"), - f_alt : image.alt, - f_border : image.border, - f_align : image.align, - f_vert : image.vspace, - f_horiz : image.hspace - }; - this._popupDialog(editor.config.URIs["insert_image"], function(param) { - if (!param) { // user must have pressed Cancel - return false; - } - var img = image; - if (!img) { - if (HTMLArea.is_ie) { - 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); - if (!img.tagName) { - // if the cursor is at the beginning of the document - img = range.startContainer.firstChild; - } - } - } else { - img.src = param.f_url; - } - - for (var field in param) { - var value = param[field]; - switch (field) { - case "f_alt" : img.alt = value; break; - case "f_border" : img.border = parseInt(value || "0"); break; - case "f_align" : img.align = value; break; - case "f_vert" : img.vspace = parseInt(value || "0"); break; - case "f_horiz" : img.hspace = parseInt(value || "0"); break; - } - } - }, outparam); -}; - -// Called when the user clicks the Insert Table button -HTMLArea.prototype._insertTable = function() { - var sel = this._getSelection(); - var range = this._createRange(sel); - var editor = this; // for nested functions - this._popupDialog(editor.config.URIs["insert_table"], function(param) { - if (!param) { // user must have pressed Cancel - return false; - } - var doc = editor._doc; - // create the table element - var table = doc.createElement("table"); - // assign the given arguments - - for (var field in param) { - var value = param[field]; - if (!value) { - continue; - } - switch (field) { - case "f_width" : table.style.width = value + param["f_unit"]; break; - case "f_align" : table.align = value; break; - case "f_border" : table.border = parseInt(value); break; - case "f_spacing" : table.cellSpacing = parseInt(value); break; - case "f_padding" : table.cellPadding = parseInt(value); break; - } - } - var cellwidth = 0; - if (param.f_fixed) - cellwidth = Math.floor(100 / parseInt(param.f_cols)); - var tbody = doc.createElement("tbody"); - table.appendChild(tbody); - for (var i = 0; i < param["f_rows"]; ++i) { - var tr = doc.createElement("tr"); - tbody.appendChild(tr); - for (var j = 0; j < param["f_cols"]; ++j) { - var td = doc.createElement("td"); - if (cellwidth) - td.style.width = cellwidth + "%"; - tr.appendChild(td); - // Browsers like to see something inside the cell ( ). - td.appendChild(doc.createTextNode('\u00a0')); - } - } - if (HTMLArea.is_ie) { - range.pasteHTML(table.outerHTML); - } else { - // insert the table - editor.insertNodeAtSelection(table); - } - return true; - }, null); -}; - -/*************************************************** - * Category: EVENT HANDLERS - ***************************************************/ - -// el is reference to the SELECT object -// txt is the name of the select field, as in config.toolbar -HTMLArea.prototype._comboSelected = function(el, txt) { - this.focusEditor(); - var value = el.options[el.selectedIndex].value; - switch (txt) { - case "fontname": - case "fontsize": this.execCommand(txt, false, value); break; - case "formatblock": - // (HTMLArea.is_ie) && (value = "<" + value + ">"); - if(!HTMLArea.is_gecko || value !== 'blockquote') { value = "<" + value + ">";} - this.execCommand(txt, false, value); - break; - default: - // try to look it up in the registered dropdowns - var dropdown = this.config.customSelects[txt]; - if (typeof dropdown != "undefined") { - dropdown.action(this); - } else { - alert("FIXME: combo box " + txt + " not implemented"); - } - } -}; - -// the execCommand function (intercepts some commands and replaces them with -// our own implementation) -HTMLArea.prototype.execCommand = function(cmdID, UI, param) { - var editor = this; // for nested functions - this.focusEditor(); - cmdID = cmdID.toLowerCase(); - if (HTMLArea.is_gecko) try { this._doc.execCommand('useCSS', false, true); } catch (e) {}; //switch useCSS off (true=off) - switch (cmdID) { - case "htmlmode" : this.setMode(); break; - case "hilitecolor": - (HTMLArea.is_ie) && (cmdID = "backcolor"); - if (HTMLArea.is_gecko) try { editor._doc.execCommand('useCSS', false, false); } catch (e) {};//switch on useCSS (mozilla bug #279330) - case "forecolor": - this._popupDialog(editor.config.URIs["select_color"], function(color) { - if (color) { // selection not canceled - editor._doc.execCommand(cmdID, false, "#" + color); - } - }, HTMLArea._colorToRgb(this._doc.queryCommandValue(cmdID))); - break; - case "createlink": - this._createLink(); - break; - case "undo": - case "redo": - if (this._customUndo) - this[cmdID](); - else - this._doc.execCommand(cmdID, UI, param); - break; - case "inserttable": this._insertTable(); break; - case "insertimage": this._insertImage(); break; - case "about" : this._popupDialog(editor.config.URIs["about"], null, this); break; - case "showhelp" : this._popupDialog(editor.config.URIs["help"], null, this); break; - - case "killword": this._wordClean(); break; - - case "cut": - case "copy": - case "paste": - try { - this._doc.execCommand(cmdID, UI, param); - if (this.config.killWordOnPaste) - this._wordClean(); - } catch (e) { - if (HTMLArea.is_gecko) { - alert(HTMLArea._lc("The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.")); - } - } - break; - case "lefttoright": - case "righttoleft": - var dir = (cmdID == "righttoleft") ? "rtl" : "ltr"; - var el = this.getParentElement(); - while (el && !HTMLArea.isBlockElement(el)) - el = el.parentNode; - if (el) { - if (el.style.direction == dir) - el.style.direction = ""; - else - el.style.direction = dir; - } - break; - default: try { this._doc.execCommand(cmdID, UI, param); } - catch(e) { if (this.config.debug) { alert(e + "\n\nby execCommand(" + cmdID + ");"); } } - } - - this.updateToolbar(); - return false; -}; - -/** A generic event handler for things that happen in the IFRAME's document. - * This function also handles key bindings. */ -HTMLArea.prototype._editorEvent = function(ev) { - var editor = this; - var keyEvent = (HTMLArea.is_ie && ev.type == "keydown") || (!HTMLArea.is_ie && ev.type == "keypress"); - - //call events of textarea - if(typeof editor._textArea['on'+ev.type] == "function") { - editor._textArea['on'+ev.type](); - } - - if(HTMLArea.is_gecko && keyEvent && ev.ctrlKey && this._unLink && this._unlinkOnUndo) - { - if(String.fromCharCode(ev.charCode).toLowerCase() == 'z') - { - HTMLArea._stopEvent(ev); - this._unLink(); - editor.updateToolbar(); - return; - } - } - - if (keyEvent) - { - for (var i in editor.plugins) - { - var plugin = editor.plugins[i].instance; - if (plugin && typeof plugin.onKeyPress == "function") - if (plugin.onKeyPress(ev)) - return false; - } - } - - if (keyEvent && ev.ctrlKey && !ev.altKey) - { - var sel = null; - var range = null; - var key = String.fromCharCode(HTMLArea.is_ie ? ev.keyCode : ev.charCode).toLowerCase(); - var cmd = null; - var value = null; - switch (key) { - case 'a': - if (!HTMLArea.is_ie) { - // KEY select all - sel = this._getSelection(); - sel.removeAllRanges(); - range = this._createRange(); - range.selectNodeContents(this._doc.body); - sel.addRange(range); - HTMLArea._stopEvent(ev); - } - break; - - // simple key commands follow - - case 'b': cmd = "bold"; break; - case 'i': cmd = "italic"; break; - case 'u': cmd = "underline"; break; - case 's': cmd = "strikethrough"; break; - case 'l': cmd = "justifyleft"; break; - case 'e': cmd = "justifycenter"; break; - case 'r': cmd = "justifyright"; break; - case 'j': cmd = "justifyfull"; break; - case 'z': cmd = "undo"; break; - case 'y': cmd = "redo"; break; - case 'v': if (HTMLArea.is_ie || editor.config.htmlareaPaste) { cmd = "paste"; } break; - case 'n': cmd = "formatblock"; value = HTMLArea.is_ie ? "

" : "p"; break; - - case '0': cmd = "killword"; break; - - // headings - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - cmd = "formatblock"; - value = "h" + key; - if (HTMLArea.is_ie) - value = "<" + value + ">"; - break; - } - if (cmd) { - // execute simple command - this.execCommand(cmd, false, value); - HTMLArea._stopEvent(ev); - } - } - else if (keyEvent) - { - - // IE's textRange and selection object is woefully inadequate, - // which means this fancy stuff is gecko only sorry :-| - // Die Bill, Die. (IE supports it somewhat nativly though) - if(HTMLArea.is_gecko) - { - var s = editor._getSelection() - var autoWrap = function (textNode, tag) - { - var rightText = textNode.nextSibling; - if(typeof tag == 'string') tag = editor._doc.createElement(tag); - var a = textNode.parentNode.insertBefore(tag, rightText); - HTMLArea.removeFromParent(textNode); - a.appendChild(textNode); - rightText.data = ' ' + rightText.data; - - if(HTMLArea.is_ie) - { - var r = editor._createRange(s); - s.moveToElementText(rightText); - s.move('character', 1); - } - else - { - s.collapse(rightText, 1); - } - HTMLArea._stopEvent(ev); - - editor._unLink = function() - { - var t = a.firstChild; - a.removeChild(t); - a.parentNode.insertBefore(t, a); - HTMLArea.removeFromParent(a); - editor._unLink = null; - editor._unlinkOnUndo = false; - } - editor._unlinkOnUndo = true; - - return a; - }; - - switch(ev.which) - { - // Space, see if the text just typed looks like a URL, or email address - // and link it appropriatly - case 32: - { - if(s && s.isCollapsed && s.anchorNode.nodeType == 3 && s.anchorNode.data.length > 3 && s.anchorNode.data.indexOf('.') >= 0) - { - var midStart = s.anchorNode.data.substring(0,s.anchorOffset).search(/\S{4,}$/); - if(midStart == -1) break; - - if(this._getFirstAncestor(s, 'a')) - { - break; // already in an anchor - } - - var matchData = s.anchorNode.data.substring(0,s.anchorOffset).replace(/^.*?(\S*)$/, '$1'); - - var m = matchData.match(HTMLArea.RE_email); - if(m) - { - var leftText = s.anchorNode; - var rightText = leftText.splitText(s.anchorOffset); - var midText = leftText.splitText(midStart); - - autoWrap(midText, 'a').href = 'mailto:' + m[0]; - break; - } - - var m = matchData.match(HTMLArea.RE_url); - if(m) - { - var leftText = s.anchorNode; - var rightText = leftText.splitText(s.anchorOffset); - var midText = leftText.splitText(midStart); - autoWrap(midText, 'a').href = (m[1] ? m[1] : 'http://') + m[2]; - break; - } - } - - } - break; - - default : - { - if(ev.keyCode == 27 || (this._unlinkOnUndo && ev.ctrlKey && ev.which == 122) ) - { - if(this._unLink) - { - this._unLink(); - HTMLArea._stopEvent(ev); - } - break; - } - else if(ev.which || ev.keyCode == 8 || ev.keyCode == 46) - { - this._unlinkOnUndo = false; - - if(s.anchorNode && s.anchorNode.nodeType == 3) - { - // See if we might be changing a link - var a = this._getFirstAncestor(s, 'a'); - if(!a) break; // not an anchor - if(!a._updateAnchTimeout) - { - if( s.anchorNode.data.match(HTMLArea.RE_email) - && (a.href.match('mailto:' + s.anchorNode.data.trim())) - ) - { - var textNode = s.anchorNode; - var fn = function() - { - a.href = 'mailto:' + textNode.data.trim(); - a._updateAnchTimeout = setTimeout(fn, 250); - } - a._updateAnchTimeout = setTimeout(fn, 250); - break; - } - - var m = s.anchorNode.data.match(HTMLArea.RE_url); - if(m && a.href.match(s.anchorNode.data.trim()) ) - { - var textNode = s.anchorNode; - var fn = function() - { - var m = textNode.data.match(HTMLArea.RE_url); - a.href = (m[1] ? m[1] : 'http://') + m[2]; - a._updateAnchTimeout = setTimeout(fn, 250); - } - a._updateAnchTimeout = setTimeout(fn, 250); - } - } - } - - } - } - break; - } - } - - // other keys here - switch (ev.keyCode) - { - case 13: // KEY enter - if (HTMLArea.is_gecko && !ev.shiftKey && this.config.mozParaHandler == 'dirty' ) - { - this.dom_checkInsertP(); - HTMLArea._stopEvent(ev); - } - break; - case 8: // KEY backspace - case 46: // KEY delete - if (HTMLArea.is_gecko && !ev.shiftKey) { - if (this.dom_checkBackspace()) - HTMLArea._stopEvent(ev); - } else if (HTMLArea.is_ie) { - if (this.ie_checkBackspace()) - HTMLArea._stopEvent(ev); - } - break; - } - } - - // update the toolbar state after some time - if (editor._timerToolbar) { - clearTimeout(editor._timerToolbar); - } - editor._timerToolbar = setTimeout(function() { - editor.updateToolbar(); - editor._timerToolbar = null; - }, 250); -}; - -HTMLArea.prototype.convertNode = function(el, newTagName) { - var newel = this._doc.createElement(newTagName); - while (el.firstChild) - newel.appendChild(el.firstChild); - return newel; -}; - -HTMLArea.prototype.ie_checkBackspace = function() { - var sel = this._getSelection(); - if(HTMLArea.is_ie && sel.type == 'Control') - { - var elm = this._activeElement(sel); - HTMLArea.removeFromParent(elm); - return true; - } - - // This bit of code preseves links when you backspace over the - // endpoint of the link in IE. Without it, if you have something like - // link_here | - // where | is the cursor, and backspace over the last e, then the link - // will de-link, which is a bit tedious - var range = this._createRange(sel); - var r2 = range.duplicate(); - r2.moveStart("character", -1); - var a = r2.parentElement(); - if (a != range.parentElement() && - /^a$/i.test(a.tagName)) { - r2.collapse(true); - r2.moveEnd("character", 1); - r2.pasteHTML(''); - r2.select(); - return true; - } -}; - -HTMLArea.prototype.dom_checkBackspace = function() { - var self = this; - setTimeout(function() { - var sel = self._getSelection(); - var range = self._createRange(sel); - var SC = range.startContainer; - var SO = range.startOffset; - var EC = range.endContainer; - var EO = range.endOffset; - var newr = 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); - HTMLArea.removeFromParent(SC); - var r = range.cloneRange(); - r.setStartBefore(newr); - r.setEndAfter(newr); - r.extractContents(); - sel.removeAllRanges(); - sel.addRange(r); - } - }, 10); -}; - -/** The idea here is - * 1. See if we are in a block element - * 2. If we are not, then wrap the current "block" of text into a paragraph - * 3. Now that we have a block element, select all the text between the insertion point - * and just AFTER the end of the block - * eg

The quick |brown fox jumped over the lazy dog.

| - * --------------------------------------- - * 4. Extract that from the document, making - *

The quick

- * and a document fragment with - *

brown fox jumped over the lazy dog.

- * 5. Reinsert it just after the block element - *

The quick

brown fox jumped over the lazy dog.

- * - * Along the way, allow inserting blank paragraphs, which will look like


- */ - -HTMLArea.prototype.dom_checkInsertP = function() { - - // Get the insertion point, we'll scrub any highlighted text the user wants rid of while we are there. - var sel = this._getSelection(); - var range = this._createRange(sel); - if (!range.collapsed) - { - range.deleteContents(); - } - this.deactivateEditor(); - //sel.removeAllRanges(); - //sel.addRange(range); - - var SC = range.startContainer; - var SO = range.startOffset; - var EC = range.endContainer; - var EO = range.endOffset; - - // If the insertion point is character 0 of the - // document, then insert a space character that we will wrap into a paragraph - // in a bit. - if (SC == EC && SC == body && !SO && !EO) - { - p = this._doc.createTextNode(" "); - body.insertBefore(p, body.firstChild); - range.selectNodeContents(p); - SC = range.startContainer; - SO = range.startOffset; - EC = range.endContainer; - EO = range.endOffset; - } - - // See if we are in a block element, if so, great. - var p = this.getAllAncestors(); - - var block = null; - var body = this._doc.body; - for (var i = 0; i < p.length; ++i) - { - if(HTMLArea.isParaContainer(p[i])) - { - break; - } - else if (HTMLArea.isBlockElement(p[i]) && !/body|html/i.test(p[i].tagName)) - { - block = p[i]; - break; - } - } - - // If not in a block element, we'll have to turn some stuff into a paragraph - if (!block) - { - // We want to wrap as much stuff as possible into the paragraph in both directions - // from the insertion point. We start with the start container and walk back up to the - // node just before any of the paragraph containers. - var wrap = range.startContainer; - while(wrap.parentNode && !HTMLArea.isParaContainer(wrap.parentNode)) - { - wrap = wrap.parentNode; - } - var start = wrap; - var end = wrap; - - // Now we walk up the sibling list until we hit the top of the document - // or an element that we shouldn't put in a p (eg other p, div, ul, ol, table) - while(start.previousSibling) - { - if(start.previousSibling.tagName) - { - if(!HTMLArea.isBlockElement(start.previousSibling)) - { - start = start.previousSibling; - } - else - { - break; - } - } - else - { - start = start.previousSibling; - } - } - - // Same down the list - while(end.nextSibling) - { - if(end.nextSibling.tagName) - { - if(!HTMLArea.isBlockElement(end.nextSibling)) - { - end = end.nextSibling; - } - else - { - break; - } - } - else - { - end = end.nextSibling; - } - } - - // Select the entire block - range.setStartBefore(start); - range.setEndAfter(end); - - // Make it a paragraph - range.surroundContents(this._doc.createElement('p')); - - // Which becomes the block element - block = range.startContainer.firstChild; - - // And finally reset the insertion point to where it was originally - range.setStart(SC, SO); - } - - // The start point is the insertion point, so just move the end point to immediatly - // after the block - range.setEndAfter(block); - - // Extract the range, to split the block - // If we just did range.extractContents() then Mozilla does wierd stuff - // with selections, but if we clone, then remove the original range and extract - // the clone, it's quite happy. - var r2 = range.cloneRange(); - sel.removeRange(range); - var df = r2.extractContents(); - - if(df.childNodes.length == 0) - { - df.appendChild(this._doc.createElement('p')); - df.firstChild.appendChild(this._doc.createElement('br')); - } - - if(df.childNodes.length > 1) - { - var nb = this._doc.createElement('p'); - while(df.firstChild) - { - var s = df.firstChild; - df.removeChild(s); - nb.appendChild(s); - } - df.appendChild(nb); - } - - // If the original block is empty, put a nsbp in it. - if (!/\S/.test(block.innerHTML)) - block.innerHTML = " "; - - p = df.firstChild; - if (!/\S/.test(p.innerHTML)) - p.innerHTML = "
"; - - // If the new block is empty and it's a heading, make it a paragraph - // note, the new block is empty when you are hitting enter at the end of the existing block - if (/^\s*\s*$/.test(p.innerHTML) && /^h[1-6]$/i.test(p.tagName)) - { - df.appendChild(this.convertNode(p, "p")); - df.removeChild(p); - } - - var newblock = block.parentNode.insertBefore(df.firstChild, block.nextSibling); - - // Select the range (to set the insertion) - // collapse to the start of the new block - // (remember the block might be


, so if we collapsed to the end the
would be noticable) - - //range.selectNode(newblock.firstChild); - //range.collapse(true); - - this.activateEditor(); - - var sel = this._getSelection(); - sel.removeAllRanges(); - sel.collapse(newblock,0); - - // scroll into view - this.scrollToElement(newblock); - - //this.forceRedraw(); - -}; - -HTMLArea.prototype.scrollToElement = function(e) -{ - if(HTMLArea.is_gecko) - { - var top = 0; - var left = 0; - while(e) - { - top += e.offsetTop; - left += e.offsetLeft; - if(e.offsetParent && e.offsetParent.tagName.toLowerCase() != 'body') - { - e = e.offsetParent; - } - else - { - e = null; - } - } - this._iframe.contentWindow.scrollTo(left, top); - } -}; - -// retrieve the HTML -HTMLArea.prototype.getHTML = function() { - var html = ''; - switch (this._editMode) { - case "wysiwyg" : - { - if (!this.config.fullPage) - html = HTMLArea.getHTML(this._doc.body, false, this); - else - html = this.doctype + "\n" + HTMLArea.getHTML(this._doc.documentElement, true, this); - break; - } - case "textmode" : - { - html = this._textArea.value; - break; - } - default : - { - alert("Mode <" + mode + "> not defined!"); - return false; - } - } - return html; -}; - -HTMLArea.prototype.outwardHtml = function(html) -{ - html = html.replace(/<(\/?)b(\s|>|\/)/ig, "<$1strong$2"); - html = html.replace(/<(\/?)i(\s|>|\/)/ig, "<$1em$2"); - html = html.replace(/<(\/?)strike(\s|>|\/)/ig, "<$1del$2"); - - // replace window.open to that any clicks won't open a popup in designMode - html = html.replace("onclick=\"try{if(document.designMode && document.designMode == 'on') return false;}catch(e){} window.open(", "onclick=\"window.open("); - - // Figure out what our server name is, and how it's referenced - var serverBase = location.href.replace(/(https?:\/\/[^\/]*)\/.*/, '$1') + '/'; - - // IE puts this in can't figure out why - html = html.replace(/https?:\/\/null\//g, serverBase); - - // Make semi-absolute links to be truely absolute - // we do this just to standardize so that special replacements knows what - // to expect - html = html.replace(/((href|src|background)=[\'\"])\/+/ig, '$1' + serverBase); - - html = this.outwardSpecialReplacements(html); - - html = this.fixRelativeLinks(html); - - if(this.config.sevenBitClean) - { - html = html.replace(/[^ -~\r\n\t]/g, function(c){ return '&#'+c.charCodeAt(0)+';';}); - } - - // ticket:56, the "greesemonkey" plugin for Firefox adds this junk, - // so we strip it out. Original submitter gave a plugin, but that's - // a bit much just for this IMHO - james - if(HTMLArea.is_gecko) - { - html = html.replace(/[\s]*<\/script>/ig, ''); - } - - return html; -}; - -HTMLArea.prototype.inwardHtml = function(html) -{ - // Midas uses b and i instead of strong and em, um, hello, - // mozilla, this is the 21st century calling! - if (HTMLArea.is_gecko) { - html = html.replace(/<(\/?)strong(\s|>|\/)/ig, "<$1b$2"); - html = html.replace(/<(\/?)em(\s|>|\/)/ig, "<$1i$2"); - } - - // Both IE and Gecko use strike instead of del (#523) - html = html.replace(/<(\/?)del(\s|>|\/)/ig, "<$1strike$2"); - - - // replace window.open to that any clicks won't open a popup in designMode - html = html.replace("onclick=\"window.open(", "onclick=\"try{if(document.designMode && document.designMode == 'on') return false;}catch(e){} window.open("); - - html = this.inwardSpecialReplacements(html); - - // For IE's sake, make any URLs that are semi-absolute (="/....") to be - // truely absolute - var nullRE = new RegExp('((href|src|background)=[\'"])/+', 'gi'); - html = html.replace(nullRE, '$1' + location.href.replace(/(https?:\/\/[^\/]*)\/.*/, '$1') + '/'); - - html = this.fixRelativeLinks(html); - return html; -}; - -HTMLArea.prototype.outwardSpecialReplacements = function(html) -{ - for(var i in this.config.specialReplacements) - { - var from = this.config.specialReplacements[i]; - var to = i; - if (typeof(from.replace) != 'function' || typeof(to.replace) != 'function') continue; // prevent iterating over wrong type - // alert('out : ' + from + '=>' + to); - var reg = new RegExp(from.replace(HTMLArea.RE_Specials, '\\$1'), 'g'); - html = html.replace(reg, to.replace(/\$/g, '$$$$')); - //html = html.replace(from, to); - } - return html; -}; - -HTMLArea.prototype.inwardSpecialReplacements = function(html) -{ - // alert("inward"); - for(var i in this.config.specialReplacements) - { - var from = i; - var to = this.config.specialReplacements[i]; - - if (typeof(from.replace) != 'function' || typeof(to.replace) != 'function') continue; // prevent iterating over wrong type - // alert('in : ' + from + '=>' + to); - // - // html = html.replace(reg, to); - // html = html.replace(from, to); - var reg = new RegExp(from.replace(HTMLArea.RE_Specials, '\\$1'), 'g'); - html = html.replace(reg, to.replace(/\$/g, '$$$$')); // IE uses doubled dollar signs to escape backrefs, also beware that IE also implements $& $_ and $' like perl. - } - return html; -}; - - -HTMLArea.prototype.fixRelativeLinks = function(html) -{ - - if(typeof this.config.stripSelfNamedAnchors != 'undefined' && this.config.stripSelfNamedAnchors) - { - var stripRe = new RegExp(document.location.href.replace(HTMLArea.RE_Specials, '\\$1') + '(#[^\'" ]*)', 'g'); - html = html.replace(stripRe, '$1'); - } - - - if(typeof this.config.stripBaseHref != 'undefined' && this.config.stripBaseHref) - { - var baseRe = null - if(typeof this.config.baseHref != 'undefined' && this.config.baseHref != null) - { - baseRe = new RegExp(this.config.baseHref.replace(HTMLArea.RE_Specials, '\\$1'), 'g'); - } - else - { - baseRe = new RegExp(document.location.href.replace(/([^\/]*\/?)$/, '').replace(HTMLArea.RE_Specials, '\\$1'), 'g'); - } - - html = html.replace(baseRe, ''); - } - - if(HTMLArea.is_ie) - { - // This is now done in inward & outward - // Don't know why but IE is doing this (putting http://null/ on links?! - // alert(html); - // var nullRE = new RegExp('https?:\/\/null\/', 'g'); - // html = html.replace(nullRE, location.href.replace(/(https?:\/\/[^\/]*\/).*/, '$1')); - // alert(html); - } - - return html; -}; - -// retrieve the HTML (fastest version, but uses innerHTML) -HTMLArea.prototype.getInnerHTML = function() { - if(!this._doc.body) return ''; - switch (this._editMode) { - case "wysiwyg" : - if (!this.config.fullPage) - // return this._doc.body.innerHTML; - html = this._doc.body.innerHTML; - else - html = this.doctype + "\n" + this._doc.documentElement.innerHTML; - break; - case "textmode" : - html = this._textArea.value; - break; - default : - alert("Mode <" + mode + "> not defined!"); - return false; - } - - return html; -}; - -// completely change the HTML inside -HTMLArea.prototype.setHTML = function(html) { - if (!this.config.fullPage) - { - this._doc.body.innerHTML = html; - } - else - { - this.setFullHTML(html); - } - this._textArea.value = html; -}; - -// sets the given doctype (useful when config.fullPage is true) -HTMLArea.prototype.setDoctype = function(doctype) { - this.doctype = doctype; -}; - -/*************************************************** - * Category: UTILITY FUNCTIONS - ***************************************************/ - -// variable used to pass the object to the popup editor window. -HTMLArea._object = null; - -// function that returns a clone of the given object -HTMLArea.cloneObject = function(obj) { - if (!obj) return null; - var newObj = new Object; - - // check for array objects - if (obj.constructor.toString().match( /\s*function Array\(/ )) { - newObj = obj.constructor(); - } - - // check for function objects (as usual, IE is fucked up) - if (obj.constructor.toString().match( /\s*function Function\(/ )) { - newObj = obj; // just copy reference to it - } else for (var n in obj) { - var node = obj[n]; - if (typeof node == 'object') { newObj[n] = HTMLArea.cloneObject(node); } - else { newObj[n] = node; } - } - - return newObj; -}; - -// FIXME!!! this should return false for IE < 5.5 -HTMLArea.checkSupportedBrowser = function() { - if (HTMLArea.is_gecko) { - if (navigator.productSub < 20021201) { - alert("You need at least Mozilla-1.3 Alpha.\n" + - "Sorry, your Gecko is not supported."); - return false; - } - if (navigator.productSub < 20030210) { - alert("Mozilla < 1.3 Beta is not supported!\n" + - "I'll try, though, but it might not work."); - } - } - return HTMLArea.is_gecko || HTMLArea.is_ie; -}; - -// selection & ranges - -// returns the current selection object -HTMLArea.prototype._getSelection = function() { - if (HTMLArea.is_ie) { - return this._doc.selection; - } else { - return this._iframe.contentWindow.getSelection(); - } -}; - -// returns a range for the current selection -HTMLArea.prototype._createRange = function(sel) { - if (HTMLArea.is_ie) { - return sel.createRange(); - } else { - this.activateEditor(); - if (typeof sel != "undefined") { - try { - return sel.getRangeAt(0); - } catch(e) { - return this._doc.createRange(); - } - } else { - return this._doc.createRange(); - } - } -}; - -// event handling - -/** Event Flushing - * To try and work around memory leaks in the rather broken - * garbage collector in IE, HTMLArea.flushEvents can be called - * onunload, it will remove any event listeners (that were added - * through _addEvent(s)) and clear any DOM-0 events. - */ -HTMLArea._eventFlushers = [ ]; -HTMLArea.flushEvents = function() -{ - var x = 0; - var e = null; - while(e = HTMLArea._eventFlushers.pop()) - { - try - { - if(e.length == 3) - { - HTMLArea._removeEvent(e[0], e[1], e[2]); - x++; - } - else if (e.length == 2) - { - e[0]['on' + e[1]] = null; - e[0]._xinha_dom0Events[e[1]] = null; - x++; - } - } - catch(e) - { - // Do Nothing - } - } - - /* - // This code is very agressive, and incredibly slow in IE, so I've disabled it. - - if(document.all) - { - for(var i = 0; i < document.all.length; i++) - { - for(var j in document.all[i]) - { - if(/^on/.test(j) && typeof document.all[i][j] == 'function') - { - document.all[i][j] = null; - x++; - } - } - } - } - */ - - // alert('Flushed ' + x + ' events.'); -}; - -HTMLArea._addEvent = function(el, evname, func) { - if (HTMLArea.is_ie) { - el.attachEvent("on" + evname, func); - } else { - el.addEventListener(evname, func, true); - } - HTMLArea._eventFlushers.push([el, evname, func]); -}; - -HTMLArea._addEvents = function(el, evs, func) { - for (var i = evs.length; --i >= 0;) { - HTMLArea._addEvent(el, evs[i], func); - } -}; - -HTMLArea._removeEvent = function(el, evname, func) { - if (HTMLArea.is_ie) { - el.detachEvent("on" + evname, func); - } else { - el.removeEventListener(evname, func, true); - } -}; - -HTMLArea._removeEvents = function(el, evs, func) { - for (var i = evs.length; --i >= 0;) { - HTMLArea._removeEvent(el, evs[i], func); - } -}; - -HTMLArea._stopEvent = function(ev) { - if (HTMLArea.is_ie) { - try{ - ev.cancelBubble = true; - ev.returnValue = false; - } catch(e){} - } else { - ev.preventDefault(); - ev.stopPropagation(); - } -}; - -/** - * Adds a standard "DOM-0" event listener to an element. - * The DOM-0 events are those applied directly as attributes to - * an element - eg element.onclick = stuff; - * - * By using this function instead of simply overwriting any existing - * DOM-0 event by the same name on the element it will trigger as well - * as the existing ones. Handlers are triggered one after the other - * in the order they are added. - * - * Remember to return true/false from your handler, this will determine - * whether subsequent handlers will be triggered (ie that the event will - * continue or be canceled). - * - */ - -HTMLArea.addDom0Event = function(el, ev, fn) -{ - HTMLArea._prepareForDom0Events(el, ev); - el._xinha_dom0Events[ev].unshift(fn); -}; - - -/** - * See addDom0Event, the difference is that handlers registered using - * prependDom0Event will be triggered before existing DOM-0 events of the - * same name on the same element. - */ - -HTMLArea.prependDom0Event = function(el, ev, fn) -{ - HTMLArea._prepareForDom0Events(el, ev); - el._xinha_dom0Events[ev].push(fn); -}; - -/** - * Prepares an element to receive more than one DOM-0 event handler - * when handlers are added via addDom0Event and prependDom0Event. - */ -HTMLArea._prepareForDom0Events = function(el, ev) -{ - // Create a structure to hold our lists of event handlers - if(typeof el._xinha_dom0Events == 'undefined') - { - el._xinha_dom0Events = { }; - HTMLArea.freeLater(el, '_xinha_dom0Events'); - } - - // Create a list of handlers for this event type - if(typeof el._xinha_dom0Events[ev] == 'undefined') - { - el._xinha_dom0Events[ev] = [ ]; - if(typeof el['on'+ev] == 'function') - { - el._xinha_dom0Events[ev].push(el['on'+ev]); - } - - // Make the actual event handler, which runs through - // each of the handlers in the list and executes them - // in the correct context. - el['on'+ev] = function(event) - { - var a = el._xinha_dom0Events[ev]; - // call previous submit methods if they were there. - var allOK = true; - for (var i = a.length; --i >= 0;) - { - // We want the handler to be a member of the form, not the array, so that "this" will work correctly - el._xinha_tempEventHandler = a[i]; - if(el._xinha_tempEventHandler(event) == false) - { - el._xinha_tempEventHandler = null; - allOK = false; - break; - } - el._xinha_tempEventHandler = null; - } - return allOK; - }; - - HTMLArea._eventFlushers.push([el, ev]); - } -}; - -HTMLArea.prototype.notifyOn = function(ev, fn) -{ - if(typeof this._notifyListeners[ev] == 'undefined') - { - this._notifyListeners[ev] = [ ]; - HTMLArea.freeLater(this, '_notifyListeners'); - } - - this._notifyListeners[ev].push(fn); -}; - -HTMLArea.prototype.notifyOf = function(ev, args) -{ - - if(this._notifyListeners[ev]) - { - - for(var i = 0; i < this._notifyListeners[ev].length; i++) - { - this._notifyListeners[ev][i](ev, args); - } - } -}; - - -HTMLArea._removeClass = function(el, className) { - if (!(el && el.className)) { - return; - } - var cls = el.className.split(" "); - var ar = new Array(); - for (var i = cls.length; i > 0;) { - if (cls[--i] != className) { - ar[ar.length] = cls[i]; - } - } - el.className = ar.join(" "); -}; - -HTMLArea._addClass = function(el, className) { - // remove the class first, if already there - HTMLArea._removeClass(el, className); - el.className += " " + className; -}; - -HTMLArea._hasClass = function(el, className) { - if (!(el && el.className)) { - return false; - } - var cls = el.className.split(" "); - for (var i = cls.length; i > 0;) { - if (cls[--i] == className) { - return true; - } - } - return false; -}; - -HTMLArea._blockTags = " body form textarea fieldset ul ol dl li div " + -"p h1 h2 h3 h4 h5 h6 quote pre table thead " + -"tbody tfoot tr td th iframe address blockquote"; -HTMLArea.isBlockElement = function(el) { - return el && el.nodeType == 1 && (HTMLArea._blockTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1); -}; - -HTMLArea._paraContainerTags = " body td th caption fieldset div"; -HTMLArea.isParaContainer = function(el) -{ - return el && el.nodeType == 1 && (HTMLArea._paraContainerTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1); -}; - -// These are all the tags for which the end tag is not optional or -// forbidden, taken from the list at: -// http://www.w3.org/TR/REC-html40/index/elements.html -HTMLArea._closingTags = " a abbr acronym address applet b bdo big blockquote button caption center cite code del dfn dir div dl em fieldset font form frameset h1 h2 h3 h4 h5 h6 i iframe ins kbd label legend map menu noframes noscript object ol optgroup pre q s samp script select small span strike strong style sub sup table textarea title tt u ul var "; - -HTMLArea.needsClosingTag = function(el) { - return el && el.nodeType == 1 && (HTMLArea._closingTags.indexOf(" " + el.tagName.toLowerCase() + " ") != -1); -}; - -// performs HTML encoding of some given string -HTMLArea.htmlEncode = function(str) { - if(typeof str.replace == 'undefined') str = str.toString(); - // we don't need regexp for that, but.. so be it for now. - str = str.replace(/&/ig, "&"); - str = str.replace(//ig, ">"); - str = str.replace(/\xA0/g, " "); // Decimal 160, non-breaking-space - str = str.replace(/\x22/g, """); - // \x22 means '"' -- we use hex reprezentation so that we don't disturb - // JS compressors (well, at least mine fails.. ;) - return str; -}; - -// Retrieves the HTML code from the given node. This is a replacement for -// getting innerHTML, using standard DOM calls. -// Wrapper catch a Mozilla-Exception with non well formed html source code -HTMLArea.getHTML = function(root, outputRoot, editor){ - try{ - return HTMLArea.getHTMLWrapper(root,outputRoot,editor); - } - catch(e){ - alert(HTMLArea._lc('Your Document is not well formed. Check JavaScript console for details.')); - return editor._iframe.contentWindow.document.body.innerHTML; - } -}; - -HTMLArea.getHTMLWrapper = function(root, outputRoot, editor, indent) { - var html = ""; - if(!indent) indent = ''; - - switch (root.nodeType) { - case 10:// Node.DOCUMENT_TYPE_NODE - case 6: // Node.ENTITY_NODE - case 12:// Node.NOTATION_NODE - // this all are for the document type, probably not necessary - break; - - case 2: // Node.ATTRIBUTE_NODE - // Never get here, this has to be handled in the ELEMENT case because - // of IE crapness requring that some attributes are grabbed directly from - // the attribute (nodeValue doesn't return correct values), see - //http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&safe=off&selm=3porgu4mc4ofcoa1uqkf7u8kvv064kjjb4%404ax.com - // for information - break; - - case 4: // Node.CDATA_SECTION_NODE - // Mozilla seems to convert CDATA into a comment when going into wysiwyg mode, - // don't know about IE - html += (HTMLArea.is_ie ? ('\n' + indent) : '') + '' ; - break; - - case 5: // Node.ENTITY_REFERENCE_NODE - html += '&' + root.nodeValue + ';'; - break; - - case 7: // Node.PROCESSING_INSTRUCTION_NODE - // PI's don't seem to survive going into the wysiwyg mode, (at least in moz) - // so this is purely academic - html += (HTMLArea.is_ie ? ('\n' + indent) : '') + ''; - break; - - - case 1: // Node.ELEMENT_NODE - case 11: // Node.DOCUMENT_FRAGMENT_NODE - case 9: // Node.DOCUMENT_NODE - { - var closed; - var i; - var root_tag = (root.nodeType == 1) ? root.tagName.toLowerCase() : ''; - if (outputRoot) - outputRoot = !(editor.config.htmlRemoveTags && editor.config.htmlRemoveTags.test(root_tag)); - if (HTMLArea.is_ie && root_tag == "head") { - if (outputRoot) - html += (HTMLArea.is_ie ? ('\n' + indent) : '') + ""; - // lowercasize - var save_multiline = RegExp.multiline; - RegExp.multiline = true; - var txt = root.innerHTML.replace(HTMLArea.RE_tagName, function(str, p1, p2) { - return p1 + p2.toLowerCase(); - }); - RegExp.multiline = save_multiline; - html += txt + '\n'; - if (outputRoot) - html += (HTMLArea.is_ie ? ('\n' + indent) : '') + ""; - break; - } else if (outputRoot) { - closed = (!(root.hasChildNodes() || HTMLArea.needsClosingTag(root))); - html += (HTMLArea.is_ie && HTMLArea.isBlockElement(root) ? ('\n' + indent) : '') + "<" + root.tagName.toLowerCase(); - var attrs = root.attributes; - for (i = 0; i < attrs.length; ++i) { - var a = attrs.item(i); - if (!a.specified && !(root.tagName.toLowerCase().match(/input|option/) && a.nodeName == 'value')) { - continue; - } - var name = a.nodeName.toLowerCase(); - if (/_moz_editor_bogus_node/.test(name)) { - html = ""; - break; - } - if (/(_moz)|(contenteditable)|(_msh)/.test(name)) { - // avoid certain attributes - continue; - } - var value; - if (name != "style") { - // IE5.5 reports 25 when cellSpacing is - // 1; other values might be doomed too. - // For this reason we extract the - // values directly from the root node. - // I'm starting to HATE JavaScript - // development. Browser differences - // suck. - // - // Using Gecko the values of href and src are converted to absolute links - // unless we get them using nodeValue() - if (typeof root[a.nodeName] != "undefined" && name != "href" && name != "src" && !/^on/.test(name)) { - value = root[a.nodeName]; - } else { - value = a.nodeValue; - // IE seems not willing to return the original values - it converts to absolute - // links using a.nodeValue, a.value, a.stringValue, root.getAttribute("href") - // So we have to strip the baseurl manually :-/ - if (HTMLArea.is_ie && (name == "href" || name == "src")) { - value = editor.stripBaseURL(value); - } - - // High-ascii (8bit) characters in links seem to cause problems for some sites, - // while this seems to be consistent with RFC 3986 Section 2.4 - // because these are not "reserved" characters, it does seem to - // cause links to international resources not to work. See ticket:167 - - // IE always returns high-ascii characters un-encoded in links even if they - // were supplied as % codes (it unescapes them when we pul the value from the link). - - // Hmmm, very strange if we use encodeURI here, or encodeURIComponent in place - // of escape below, then the encoding is wrong. I mean, completely. - // Nothing like it should be at all. Using escape seems to work though. - // It's in both browsers too, so either I'm doing something wrong, or - // something else is going on? - - if(editor.config.only7BitPrintablesInURLs && (name == "href" || name == "src")) - { - value = value.replace(/([^!-~]+)/g, function(match) { return escape(match); }); - } - } - } else { // IE fails to put style in attributes list - // FIXME: cssText reported by IE is UPPERCASE - value = root.style.cssText; - } - if (/^(_moz)?$/.test(value)) { - // Mozilla reports some special tags - // here; we don't need them. - continue; - } - html += " " + name + '="' + HTMLArea.htmlEncode(value) + '"'; - } - if (html != "") { - if(closed && root_tag=="p") { - //never use

as empty paragraphs won't be visible - html += "> 

"; - } else if(closed) { - html += " />"; - } else { - html += ">"; - } - } - } - var containsBlock = false; - for (i = root.firstChild; i; i = i.nextSibling) { - if(!containsBlock && i.nodeType == 1 && HTMLArea.isBlockElement(i)) containsBlock = true; - html += HTMLArea.getHTMLWrapper(i, true, editor, indent + ' '); - } - if (outputRoot && !closed) { - html += (HTMLArea.is_ie && HTMLArea.isBlockElement(root) && containsBlock ? ('\n' + indent) : '') + ""; - } - break; - } - case 3: // Node.TEXT_NODE - html = /^script|style$/i.test(root.parentNode.tagName) ? root.data : HTMLArea.htmlEncode(root.data); - break; - - case 8: // Node.COMMENT_NODE - html = ""; - break; - } - return html; -}; - -/** @see getHTMLWrapper (search for "value = a.nodeValue;") */ - -HTMLArea.prototype.stripBaseURL = function(string) -{ - if(this.config.baseHref==null || !this.config.stripBaseHref) - { - return(string); - } - var baseurl = this.config.baseHref; - - // strip host-part of URL which is added by MSIE to links relative to server root - baseurl = baseurl.replace(/^(https?:\/\/[^\/]+)(.*)$/, '$1'); - basere = new RegExp(baseurl); - return string.replace(basere, ""); -}; - -String.prototype.trim = function() { - return this.replace(/^\s+/, '').replace(/\s+$/, ''); -}; - -// creates a rgb-style color from a number -HTMLArea._makeColor = function(v) { - if (typeof v != "number") { - // already in rgb (hopefully); IE doesn't get here. - return v; - } - // IE sends number; convert to rgb. - var r = v & 0xFF; - var g = (v >> 8) & 0xFF; - var b = (v >> 16) & 0xFF; - return "rgb(" + r + "," + g + "," + b + ")"; -}; - -// returns hexadecimal color representation from a number or a rgb-style color. -HTMLArea._colorToRgb = function(v) { - if (!v) - return ''; - - // returns the hex representation of one byte (2 digits) - function hex(d) { - return (d < 16) ? ("0" + d.toString(16)) : d.toString(16); - } - - if (typeof v == "number") { - // we're talking to IE here - var r = v & 0xFF; - var g = (v >> 8) & 0xFF; - var b = (v >> 16) & 0xFF; - return "#" + hex(r) + hex(g) + hex(b); - } - - if (v.substr(0, 3) == "rgb") { - // in rgb(...) form -- Mozilla - var re = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/; - if (v.match(re)) { - var r = parseInt(RegExp.$1); - var g = parseInt(RegExp.$2); - var b = parseInt(RegExp.$3); - return "#" + hex(r) + hex(g) + hex(b); - } - // doesn't match RE?! maybe uses percentages or float numbers - // -- FIXME: not yet implemented. - return null; - } - - if (v.substr(0, 1) == "#") { - // already hex rgb (hopefully :D ) - return v; - } - - // if everything else fails ;) - return null; -}; - -// modal dialogs for Mozilla (for IE we're using the showModalDialog() call). - -// receives an URL to the popup dialog and a function that receives one value; -// this function will get called after the dialog is closed, with the return -// value of the dialog. -HTMLArea.prototype._popupDialog = function(url, action, init) { - Dialog(this.popupURL(url), action, init); -}; - -// paths - -HTMLArea.prototype.imgURL = function(file, plugin) { - if (typeof plugin == "undefined") - return _editor_url + file; - else - return _editor_url + "plugins/" + plugin + "/img/" + file; -}; - -HTMLArea.prototype.popupURL = function(file) { - var url = ""; - if (file.match(/^plugin:\/\/(.*?)\/(.*)/)) { - var plugin = RegExp.$1; - var popup = RegExp.$2; - if (!/\.html$/.test(popup)) - popup += ".html"; - url = _editor_url + "plugins/" + plugin + "/popups/" + popup; - } else if(file.match(/^\/.*?/)) - url = file; - else - url = _editor_url + this.config.popupURL + file; - return url; -}; - -/** - * FIX: Internet Explorer returns an item having the _name_ equal to the given - * id, even if it's not having any id. This way it can return a different form - * field even if it's not a textarea. This workarounds the problem by - * specifically looking to search only elements having a certain tag name. - */ -HTMLArea.getElementById = function(tag, id) { - var el, i, objs = document.getElementsByTagName(tag); - for (i = objs.length; --i >= 0 && (el = objs[i]);) - if (el.id == id) - return el; - return null; -}; - - -/** Use some CSS trickery to toggle borders on tables */ - -HTMLArea.prototype._toggleBorders = function() -{ - tables = this._doc.getElementsByTagName('TABLE'); - if(tables.length != 0) - { - if(!this.borders) - { - name = "bordered"; - this.borders = true; - } - else - { - name = ""; - this.borders = false; - } - - for (var ix=0;ix < tables.length;ix++) - { - if(this.borders) - { - // flashing the display forces moz to listen (JB:18-04-2005) - #102 - if(HTMLArea.is_gecko) - { - tables[ix].style.display="none"; - tables[ix].style.display="table"; - } - HTMLArea._addClass(tables[ix], 'htmtableborders'); - } - else - { - HTMLArea._removeClass(tables[ix], 'htmtableborders'); - } - } - } - return true; -}; - - -HTMLArea.addClasses = function(el, classes) - { - if(el != null) - { - var thiers = el.className.trim().split(' '); - var ours = classes.split(' '); - for(var x = 0; x < ours.length; x++) - { - var exists = false; - for(var i = 0; exists == false && i < thiers.length; i++) - { - if(thiers[i] == ours[x]) - { - exists = true; - } - } - if(exists == false) - { - thiers[thiers.length] = ours[x]; - } - } - el.className = thiers.join(' ').trim(); - } - }; - -HTMLArea.removeClasses = function(el, classes) -{ - var existing = el.className.trim().split(); - var new_classes = [ ]; - var remove = classes.trim().split(); - - for(var i = 0; i < existing.length; i++) - { - var found = false; - for(var x = 0; x < remove.length && !found; x++) - { - if(existing[i] == remove[x]) - { - found = true; - } - } - if(!found) - { - new_classes[new_classes.length] = existing[i]; - } - } - return new_classes.join(' '); -}; - -/** Alias these for convenience */ -HTMLArea.addClass = HTMLArea._addClass; -HTMLArea.removeClass = HTMLArea._removeClass; -HTMLArea._addClasses = HTMLArea.addClasses; -HTMLArea._removeClasses = HTMLArea.removeClasses; - -/** Use XML HTTPRequest to post some data back to the server and do something - * with the response (asyncronously!), this is used by such things as the tidy functions - */ -HTMLArea._postback = function(url, data, handler) -{ - var req = null; - if(HTMLArea.is_ie) - { - req = new ActiveXObject("Microsoft.XMLHTTP"); - } - else - { - req = new XMLHttpRequest(); - } - - var content = ''; - for(var i in data) - { - content += (content.length ? '&' : '') + i + '=' + encodeURIComponent(data[i]); - } - - function callBack() - { - if(req.readyState == 4) - { - if(req.status == 200) - { - if(typeof handler == 'function') - handler(req.responseText, req); - } - else - { - alert('An error has occurred: ' + req.statusText); - } - } - } - - req.onreadystatechange = callBack; - - req.open('POST', url, true); - req.setRequestHeader - ( - 'Content-Type', - 'application/x-www-form-urlencoded; charset=UTF-8' - ); - //alert(content); - req.send(content); -}; - -HTMLArea._getback = function(url, handler) -{ - var req = null; - if(HTMLArea.is_ie) - { - req = new ActiveXObject("Microsoft.XMLHTTP"); - } - else - { - req = new XMLHttpRequest(); - } - - function callBack() - { - if(req.readyState == 4) - { - if(req.status == 200) - { - handler(req.responseText, req); - } - else - { - alert('An error has occurred: ' + req.statusText); - } - } - } - - req.onreadystatechange = callBack; - req.open('GET', url, true); - req.send(null); -}; - -HTMLArea._geturlcontent = function(url) -{ - var req = null; - if(HTMLArea.is_ie) - { - req = new ActiveXObject("Microsoft.XMLHTTP"); - } - else - { - req = new XMLHttpRequest(); - } - - // Synchronous! - req.open('GET', url, false); - req.send(null); - if(req.status == 200) - { - return req.responseText; - } - else - { - return ''; - } - -}; - -/** - * Unless somebody already has, make a little function to debug things - */ -if(typeof dump == 'undefined') -{ - function dump(o) { - var s = ''; - for (var prop in o) { - s += prop + ' = ' + o[prop] + '\n'; - } - - x = window.open("", "debugger"); - x.document.write('
' + s + '
'); - } -} - - -HTMLArea.arrayContainsArray = function(a1, a2) -{ - var all_found = true; - for(var x = 0; x < a2.length; x++) - { - var found = false; - for(var i = 0; i < a1.length; i++) - { - if(a1[i] == a2[x]) - { - found = true; - break; - } - } - if(!found) - { - all_found = false; - break; - } - } - return all_found; -}; - -HTMLArea.arrayFilter = function(a1, filterfn) -{ - var new_a = [ ]; - for(var x = 0; x < a1.length; x++) - { - if(filterfn(a1[x])) - new_a[new_a.length] = a1[x]; - } - - return new_a; -}; - -HTMLArea.uniq_count = 0; -HTMLArea.uniq = function(prefix) -{ - return prefix + HTMLArea.uniq_count++; -}; - -/** New language handling functions **/ - - -/** Load a language file. - * This function should not be used directly, HTMLArea._lc will use it when necessary. - * @param context Case sensitive context name, eg 'HTMLArea', 'TableOperations', ... - */ -HTMLArea._loadlang = function(context) -{ - if(typeof _editor_lcbackend == "string") - { - //use backend - var url = _editor_lcbackend; - url = url.replace(/%lang%/, _editor_lang); - url = url.replace(/%context%/, context); - } - else - { - //use internal files - if(context != 'HTMLArea') { - var url = _editor_url+"plugins/"+context+"/lang/"+_editor_lang+".js"; - } else { - var url = _editor_url+"lang/"+_editor_lang+".js"; - } - } - - var lang; - var langData = HTMLArea._geturlcontent(url); - if(langData != "") { - try { - eval('lang = ' + langData); - } catch(Error) { - alert('Error reading Language-File ('+url+'):\n'+Error.toString()); - lang = { } - } - } else { - lang = { }; - } - - return lang; -}; - -/** Return a localised string. - * @param string English language string - * @param context Case sensitive context name, eg 'HTMLArea' (default), 'TableOperations'... - * @param replace Replace $variables in String, eg {foo: 'replaceText'} ($foo in string will be replaced) - */ -HTMLArea._lc = function(string, context, replace) -{ - var ret; - if(_editor_lang == "en") - { - if(typeof string == 'object' && string.string) { - ret = string.string; - } else { - ret = string; - } - } - else - { - if(typeof HTMLArea._lc_catalog == 'undefined') - { - HTMLArea._lc_catalog = [ ]; - } - - if(typeof context == 'undefined') - { - context = 'HTMLArea'; - } - - if(typeof HTMLArea._lc_catalog[context] == 'undefined') - { - HTMLArea._lc_catalog[context] = HTMLArea._loadlang(context); - } - - var key; - if(typeof string == 'object' && string.key) - { - key = string.key; - } - else if(typeof string == 'object' && string.string) - { - key = string.string; - } - else - { - key = string; - } - - if(typeof HTMLArea._lc_catalog[context][key] == 'undefined') - { - if(context=='HTMLArea') - { - // Indicate it's untranslated - if(typeof string == 'object' && string.string) { - ret = string.string; - } else { - ret = string; - } - } - else - { - //if string is not found and context is not HTMLArea try if it is in HTMLArea - return HTMLArea._lc(string, 'HTMLArea', replace); - } - } - else - { - ret = HTMLArea._lc_catalog[context][key]; - } - } - - if(typeof string == 'object' && string.replace) - { - replace = string.replace; - } - if(typeof replace != "undefined") - { - for(var i in replace) - { - ret = ret.replace('$'+i, replace[i]); - } - } - - return ret; -}; - -HTMLArea.hasDisplayedChildren = function(el) -{ - var children = el.childNodes; - for(var i =0; i < children.length;i++) - { - if(children[i].tagName) - { - if(children[i].style.display != 'none') - { - return true; - } - } - } - return false; -}; - - -HTMLArea._loadback = function(src, callback) -{ - var head = document.getElementsByTagName("head")[0]; - var evt = HTMLArea.is_ie ? "onreadystatechange" : "onload"; - - var script = document.createElement("script"); - script.type = "text/javascript"; - script.src = src; - script[evt] = function() - { - if(HTMLArea.is_ie && !/loaded|complete/.test(window.event.srcElement.readyState)) return; - callback(); - } - head.appendChild(script); -}; - -HTMLArea.collectionToArray = function(collection) -{ - var array = [ ]; - for(var i = 0; i < collection.length; i++) - { - array.push(collection.item(i)); - } - return array; -}; - -if(!Array.prototype.append) -{ - Array.prototype.append = function(a) - { - for(var i = 0; i> 2; - enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); - enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); - enc4 = chr3 & 63; - - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - - output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + - keyStr.charAt(enc3) + keyStr.charAt(enc4); - } while (i < input.length); - - return output; -}; - -/** Utility function to base64_decode some arbitrary data, uses the builtin atob() if it exists (Moz) */ - -HTMLArea.base64_decode =function(input) -{ - var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - var output = ""; - var chr1, chr2, chr3; - var enc1, enc2, enc3, enc4; - var i = 0; - - // remove all characters that are not A-Z, a-z, 0-9, +, /, or = - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - - do { - enc1 = keyStr.indexOf(input.charAt(i++)); - enc2 = keyStr.indexOf(input.charAt(i++)); - enc3 = keyStr.indexOf(input.charAt(i++)); - enc4 = keyStr.indexOf(input.charAt(i++)); - - chr1 = (enc1 << 2) | (enc2 >> 4); - chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); - chr3 = ((enc3 & 3) << 6) | enc4; - - output = output + String.fromCharCode(chr1); - - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - } while (i < input.length); - - return output; -}; - -HTMLArea.removeFromParent = function(el) -{ - if(!el.parentNode) return; - var pN = el.parentNode; - pN.removeChild(el); - return el; -}; - -HTMLArea.hasParentNode = function(el) -{ - if(el.parentNode) - { - // When you remove an element from the parent in IE it makes the parent - // of the element a document fragment. Moz doesn't. - if(el.parentNode.nodeType == 11) - { - return false; - } - return true; - } - - return false; -}; - -HTMLArea.getOuterHTML = function(element) -{ - if(HTMLArea.is_ie) - { - return element.outerHTML; - } - else - { - return (new XMLSerializer()).serializeToString(element); - } -}; - -HTMLArea.toFree = [ ]; -HTMLArea.freeLater = function(obj,prop) -{ - HTMLArea.toFree.push({o:obj,p:prop}); -}; - -HTMLArea.free = function(obj, prop) -{ - if(obj && !prop) - { - for(var p in obj) - { - HTMLArea.free(obj, p); - } - } - else if (obj) - { - try{ obj[prop] = null; } catch(e){ } - } -}; - -/** IE's Garbage Collector is broken very badly. We will do our best to - * do it's job for it, but we can't be perfect. - */ - -HTMLArea.collectGarbageForIE = function() -{ - HTMLArea.flushEvents(); - for(var x = 0; x < HTMLArea.toFree.length; x++) - { - if(!HTMLArea.toFree[x].o) alert("What is " + x + ' ' + HTMLArea.toFree[x].o); - HTMLArea.free(HTMLArea.toFree[x].o, HTMLArea.toFree[x].p); - } -}; - -HTMLArea.init(); -HTMLArea.addDom0Event(window,'unload',HTMLArea.collectGarbageForIE); \ No newline at end of file + + /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:-- + -- COMPATABILITY FILE + -- htmlarea.js is now XinhaCore.js + -- + -- $HeadURL: http://svn.xinha.python-hosting.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/xinha/images/de/bold.gif b/xinha/images/de/bold.gif index 298e73705d96b0616fc08e2c3e69be693b89016c..21d286fc435846c595e069eee75ea12d8d5e5e8d 100644 GIT binary patch literal 57 zcmZ?wbhEHb6k-r!=wM{{|Np<2ub1La7DfgJ1_m8g1{MYm22KVBCV`&(f&&XrN|o?? Nb|uE#-o(UU4FI7n4>te+ literal 69 zcmZ?wbhEHb6k-r!XkcXU^7Z=v|G(l-7DfgJMg|>521W(}1_1^JCYhf8m8bVIDCc}+ au$sH_VbaS2xx<-Hr)R!8watT(!5RRXg%-U4 diff --git a/xinha/images/de/italic.gif b/xinha/images/de/italic.gif index d340dbe8c0b7f143a2225596e60df0d5131b6b06..0bf794722ee66fdcaf7a4db33d892aa17ff059f1 100644 GIT binary patch literal 63 zcmZ?wbhEHb6k-r!=wM{{|Npc521W(}1_1^JCb^#em8Z`#EbQd> cxxL|xVDWj@=rYUOGXlh4ZF$G7%*tR50Kr`rE&u=k diff --git a/xinha/images/de/underline.gif b/xinha/images/de/underline.gif index 6ebdd87355c586c7288c7b79125e58d12259b9c3..05454894af7dab768c53ab6b54b9fa5ad6858f5d 100644 GIT binary patch literal 69 zcmZ?wbhEHb6k-r!n90QO|NnnqU*BcRmN76eDE?$&WME)m&|zUtSwZ ZJKGsk6R@qzu-1)XqvmxBtu#gkYXE=v5=p!k!8k%57UL5GonkwJh#fPsNYc}oAv(`y-< kJBkh#N6x$Y?QczNNAF3td5j7SE2S)roUVS>6=$#p0H)m?zW@LL diff --git a/xinha/images/ed_about.gif b/xinha/images/ed_about.gif index f0a338b5a6946e890c79033d07c67427c5244f72..0f28d405d55bda68a5eed33a6c747f04cb94b926 100644 GIT binary patch literal 76 zcmZ?wbhEHb6k-r!=wM{{|NlP&1B2pE7DfgJ1_m8Q21W(}1_1^JCgq;~%mZ)t%}Wtv hi;P}Y{%BopgGbZDcDvN9jmxvD=J0553uIuh1^^bF7s~(u literal 87 zcmZ?wbhEHb6k-r!XkcVuU|{(F|G(l-7DfgJMg|=aA0)%Tq}S8mdEhO-Pe_U1tTjo| o@2WE*p6SX+HcXl|E$w>RnjeckziF$mX{*d{*ZU6uP diff --git a/xinha/images/ed_align.gif b/xinha/images/ed_align.gif index c971e2ab0f6e33ef16608c9d0e7abe8f4f38d8b0..6c60d50ffea9dcf11e2efa5fa05f47a8c59427de 100644 GIT binary patch literal 3388 zcmZ?wbhEHbJjQU0;jS6Oe=uMGfrf^LhI?{yXU?2yXke(Wu4Z6pQFG~KFrL}c(sJOy z0a=?)28RFtUz}xOYH46#xO3;u|NkI?{|pRiX=$rgt(rM=CPM>*v9YnQukW2lZ-4*( zd*j}#{|x_s{QT22dEc%hw-`W1GH~nGU%CA@vS5Xd=Y+$jZl+gkfB5X*y1!uo*Aketr7#vrpkR+MfOA(o3Jc8lszBn=-2#J3@<^+C2L5S_3Ccno>Ktr+iZXZ0Ev|-nvE8TRMxYW`s{$ zzNCFEXF*JHmW#f z$(-31#joz14DLMpUyGrMOV(@4ii?XqCTqo>+OqQU@_@xkrAk{@U0ofqIqUAP%fi>! zCmimQ)t;htb92UJJ>QkjG;U9FxVp-gGqfRKchOz7qtR3J1D*9g^XW1-e26n>?JfGU z``fyNqpiVeZ8kUb3>>E3SK7C_vN(QUtlbnmS$gCl^*S8S7G+@*4HVQukuD4X55=OnP1PSfurE!f!_w-zx{_Ms}vzM>4kLT-OuJ!oN*uF7*s=wWz($l9^k42^Ic4Y4^$=|tbX7q>1 z?GMWC{SGdt6TQ-NfVf({GqgcCEdmXxhLa zDmC?Buf?+!$*DYM?n#{+1)txHWz)JLR=TOSje&t<%?X*tuEOWDB~8Uz=NClxrYDu{ zT-Yw1q$xV{(ZrRNKc-6=RHaWT5Dn{`TDaox^63q2wvyZiZeic!(#7pqp9J0g`dE!2 zS4is0g7A&UW>+zsx|UJpT-tOqmov&EVZPJS%=uH>rCw#m^?p;;%BjmW;cY6dTd}-a zWZS8g%kSH=DWsmAD3vL!`AkcBQB$l$`b@`}OJ8p|^2}3h)p4%qH=EAXEzQ|{!A<(= z=1cF)Q?~M`?R?&RCF%4ODUpDJHQV>@{CJ(QFT(AAgJs5q*UuSQ7HF?ycy!F0VcF?j z9q#cjc1>hu6rRB{VdLf8-w%R>JU*x~e*Y$_zt8h-_6(`l`+jolf4PWzgKMGa>J6bx z2TqF}7LYH^FPXSd$Kj}gf9LTDis^fb4!oDiC|JreUFOR1YkQwh+xvlycgwljgP#;G zF57vrfx-L!)qE+b%WuwYvPoYZf5Krqm&~QlQ?)}5GkPt(dC9xEjA57hTwCMg+hVIW z+_uo3T5xs#TUHasS;uzWKP&wH`hoim?B~8b@SC6e<6+?D-lFxdYOCKSILS}=-V$c| z=j;CFjWOc$>u2|t-O9c`r+8J3{kvI@?Oyxdy8E5cTya{Er%saOtm~rxf86I0zEF9& z_5bOpM~nJTehmmslHIaww%6$|ZyyF-*jbo$KfCgbG<$s2!GiTwRiSz7bV^=}1g*1q zzI)}~PwyA{`({24RP0g{+9S66&)eO`YQLke<`)OuuE~-tkJu1B`5KeN+H(@AOgp_7 zFfHB2Qf@gRLbziAi@Li?3na@z-E&9-0`BC9w8~dRRU(T0!eN5myUgYFD z_k!PnqOO&v3U}?8>t3xYa)7Dq#9_H_0=9NMO8k4jtj(O56tq)n`bG^^7e%Ixopvfp z{r{4-F6!{q;8eH~u&HB>U1}ram7BuB8X>zEKIm<@ZFoT7iUx}r+X03+ri+u=O4I_c z{$Fcfo^@Vq=Zw9VR2uqg_XJEfFtxsS#iNv2Lz&@&+a713lf4sSl4VXmR_xI2s!jFm zIQ#E}=dyxN{R+YdCLQ8X)sD^dUGZefJ(h%quw9>~uFttsloomFOGc)}_9W>*hsw>1 zK5UxqCAsABlnRZjg8EaJtr3(}y6NUQsbi8IcmK>S#m8f!lBc^FaVcy(z94YYr4kXR zXNHqko-tqdaZc`>CoE6TAM~ZhGYSDdAG&)8osuw+J{eY6V2KdCj``CGdR8E2CK_jF)F-DlYz2 ze!1toMo8RnJ$m7jY+ zIOL6u1H<&QI%#hYT;Ct1xWR|RF)4icflHG<=)8F$!SHI;l-*WOP4^iEcTf1hpjhx= zTRpEsg6n~3NtTA~N*@>sTm`N#5O82(cUV_6`ShL3lb%Xer@YNtqrkxSAbSzRg*9cY z42|#D7?^hQuHn2<#Vp-(okdaN|9WPhfIF^rda6PN?;;l5UTtwBb;3TSC#lZ^ZlB>| zWV*k#JI~sndFws}R<4L_j(`o<7<$Skeq?oERpDuP#>fzR>CzIL`j?)3&CBH$r7$qL z^fU;$UrATR8~HZ4a`{wt_gO0bKsx7VS@G^R=u>~DXag?Is5B7BLm;&2IlN!)*}iBIhQpu zg$OjrOPe1Oj=Mg=P)3(G`LgCZ(cV)M6H?g%b~1(W@lIR(CS5Q6`cVV6&oaBTpPj!J z!N}pZxzF~(Gj{gMiQOs=tk*;zT4hf8QKZ(wwMZ^^K#?|<={&vP^+61LnpYL_Nj z^WaT}|L>dr4DX)qvfcT#Ol)0|>8qe_3C&XTuXn$nVr2Ys_kF^T-|4EpKMu*iXq~rB zD`K`%>&A1nAH6jjo~Zl(Jmr7yV^{m0AieWbm=fw%&+_MbYW=^mQM2ZwxW-{tJpqyP z#c^Mjy0Z&?F20<$@zNZ|+}hWw`+wee?X;Dl!=Wt7WYIzn`_3$%I)>k9>plOQFSGCa+Rwi%r#1a=@~3|?Vdtwp z3P1h2+3J5x|BAXF^)H<#Z>+n+uJwt%?qPcU_v6*Qi|f0O)-QivFSAsU zk^i9oh7nJh!h{biI@vl4IA%`xqakqq#Dvc;CJ0ED3RzA({i#LFQit#71W8SC>6;Ue ze441RQd`M#lI)UxwV(YOGbgRsI!VVeUhn6mLt>MSG|Oj(PtG!QKF~h-{L_a16O)ZK z`%W@Uv0T|}?>Qw#QPa9}ikT*_=dmg7%Q&8MOpPvd4av-NJ2^32Q#5Sn)XpTJg+jRy%w1C4&-XPEVgXwWd-u_UH6u z%_;XaW>jfTZOxovFfjaYU|`_Zt!FTvX>4pPYtyOb(yQY+fuWkg zz-KZ;1H*p?247!ah86~^uo?H{gtAuhL)C= zrpfze&YZbw)hdSn|5t3iaNxj!T}N*1I{M`BshelcoVjxQ?VUS!Zrpoy=h55${}~=W z`}p+b=l?IxzI^-j)0dxLzyJR6^Uv?!fB*gaj~^)hWMSlDuxHQ#c?9Gq2DX0(<`;PA zNcEpsQgkxMYW{^4C0=Wz*56oD=DoFY|AP$`K63fT zckTL(GdHZ9ynfA&_}+q5v-WRUu(W^L*5b`a4lX`rwkLnz(YzD84qrafz5V#b%@=mB zxOJxC{H)H?Cnrz6Jp1Y4j#m@sox619?V)cwZ*&`f~Ah zeuZWAZ2VPa;aCH)mW{(_Fo6?d|Q6HxAA9o_;FO+2h?c#mZ%QHx>ml@Cd${UU2WQJJ0JLcJmAT z$Gv2v)ryLZgbz=XwzvBw@iF0GS99T_HR78lTw2!s#&&L`>9cFr(bdy(Q@>_iuQ6j* zJM+^xW8d8u_x8;#H+thfn@J;nUyA-mog?$h?RtNI|8j8O%3$8gzAtxAS9RCt+1V7% zU`Uu^zJHzTui`WJ=4KyXH~Sxd+SHc)Z2rFuKUuw~ZH!}>=ovmc=i<%jvuozw44Ys3 z!*{84*2k%8a@j{CJ#JQ>_;+)IOrz(Q_5&R%(=r}aC>~lKn>X8+{Z{t0RbH62Zh9~8%nG`9JhtxFMv0jd-9)w~S0$}tPnr?olAc!98F*c-+Mi8W zb!toy$K5)g1=|JZJH7eYyd?StoAh*HubC-5?k|j@k~`RD%@Qi-%4k_KW!u!0xohgK z-%5&8<+?Ft@5QeV*DiOH(p-|cS7JrhOuZYKQgx!yEmf^&IdeJ=FG_r~`NE>KWs6)- zu)f`TqbM}c^b@ebbTx(t^({(}T{EXs_-sv8*&jj3Gb?54{#%adKuXV1T zel04wjd8E*-L)St$Vt zx8!tjm*MG4K8K zENS;0i(QwpW>yPN$a+)#L4MM?y<5)BU$*_&#nXLuZx>`miBwG0d|TPraMA1DlTYd_ zkM2ILxoq9la?4z|xYo6zGD!OU4%3Z_OA;y-cogp+Sh`;5kSeQ&&qA(1i`|AZKD548 zQsha`(2>0Kp{;nM;zGUV!x@1Sa<3|d@!$XCeD6NfvBmJjAi7Ych) z?)b1TYgy^0`@F)%LxwFhxmmd8;Dk7b6veAc6hwTxLw8*clDVqR!gxopt9Xx!TK|Nl z{Tn^}TsVZ^GclZySJ9iYNXAEz|KuqbBO%Ye5~iGgOhgTFzM+^8f)KO;kjbY zlo@R^S0813z;eQ8nbB0w)AubtI~o@8S7udCQu<(2;I>1}Z2EDAb^wBz;SOIH@$I@D3=HZ9IKOnmB!bz7=L*W|qIj((mc zCVQ!Lb#}q(*nEzreZRi0FA8vAV)MRnNGy!e=IFz1CMR2BHg(&(Ycp}2U|`}{;KZoC zpfSz-bmZAn3XGk59}3N^IPE>lWOBL9+68m6ly3?!Fs$#@%~3UsJbjOSbH)tDj8O4I z_a<%C6-6my!81W=6_1kGa1C^<=6Js+_tU0aXw(#!3Ewmsll@*F)Qv6pT2i%!j)-- z9M;D+t}C9CeE4a^@!iXebJ}$}*=rs$e%Cdfys)NGUE6^*QU%q80};R+g^c zaOECf&3a~@4hH6`KMBV5)^{F@ZBm+$n-k<+eqMf`1KT{FTN#_9QkPeovZvi$8zsJd zV}G9Cv<+YO@^)A=O+Qw8kbj=Pwe_Bz$Bu2-v@oYR&Hgv{rF-RDomXT;wLb~oeneU0 zXwJcxe||lYy`d}=ur7Nlf8wTu3dY^4|K3R~aA4Km;K&`&z+{jj!_4=?@j|=am)hjt zI*U_%7SH|gUL&W0A>e)k>#}(TivMhEUj=V>n4MVnCRzRW-JPkWj4}@2HqGAq_^()! z>gDWdd=7INWKUFGt$$Fq;`rQGla{W(_ucP4&ujG24Y14G=x7qo>RUg=`{qv*frM5r^SBL}0j`x3G71wi45a&4bUUiY;@_MF2 zf8u_+|JWNI`>;llhryR4>4LyM`C~8FPx^5}p6Q$Y;=dYti+|foF#LQi{BOt6`hUHK z`xO}*{>g8V|J`_@&iPB-A@%wv>N@tNvTPbMzrO$DI96WsFPvrXb8V&@&haXW_qI3a z7MWd3Z1}NUi}ytRU-3qv6IFUj5~3?276mqZdakl#af7Z#?dmP{$IK;}BG}g+ch%I0 zl0V*b;8W9N!RB1Yn$s#x(-zilpV-VeqgqJC{o{45;v`9ViI5P}rdQKrULCJ$+t_Tv zlI*9U6&Rrtbkt{UWA(d>)iD;%aS~DX5^Z&kHEj%yZV7F39@VRPG~M1VQLw4{^mX@U z!Rky7=W5sL#*UiT%bPYIZ!dnq(te`3b47;>L-nK|RcFH4CRB7s> zy?1UHt=H(wTG93FM9ta>eFxn8R-fo=x>2))wg2%7_7Cp;A2rOXJNjdPs69N<|Laf) z!_EF>1^vvD&WpG9utz$b+cDw7r3rkI&bK5c-e8(25-BcLInmN&qLk*upBGwWEvsHC zb1Lr4PzanPS3XJOq;B?(NjfJp^eT0AB_|tkPBwWt@k_yE{+C>bmQR+xDPY$*`HaAn zqmw4OtkjjMoRTteikGCA+s!EvAEpFkvIbdBE&MvsD}5^0wx<6prY0y(m>D-S_ur4c z#Lg+KHz%k56pgz!HB(YN#&cS(( V*?hKA{zQjJWY>#R+uRr#tO0<`7FqxR diff --git a/xinha/images/ed_align_justify.gif b/xinha/images/ed_align_justify.gif index 29cf73185b2a3ff6d00cd81a8e4d500b24970b7a..568c5953050baa69f102176ff3af9f85062dbdaf 100644 GIT binary patch literal 60 zcmZ?wbhEHb6k-r!=wM{{|NlP&1B2pE7DfgJ1_m7_24)6625trhCgGlbj?;HJ`)BL8 QdFdVrR)1IF!N_0@0H&x8-~a#s literal 69 zcmZ?wbhEHb6k-r!XkcVuU|{(F|G(l-7DfgJMg|=aA0)%TB-7Ks^7LEAMRPveb}cQn Ve19!bUO4D+P}uWR+uRu$tO0jZ6~F)h diff --git a/xinha/images/ed_align_left.gif b/xinha/images/ed_align_left.gif index d0356d4c17e1680542b6fff772e2124bc87b91d6..8320a2af4b004e22d882045aa6d2035cdc505da6 100644 GIT binary patch literal 60 zcmZ?wbhEHb6k-r!=wM{{|NlP&1B2pE7DfgJ1_m7_24)6625trhCgGlbj?;H%&Y82J Q&GYTi825h}zKjgk0K)eXFaQ7m literal 69 zcmZ?wbhEHb6k-r!XkcVuU|{(F|G(l-7DfgJMg|=aA0)%TB-7Ks^7LEAMRPvedaZ5S Vk$=tezGzx<5YzKh+dLQ0ixX0w1d#A42{~@5`!KAgX_nd$K|Nj{lrWSQ|^{vOh1Y|TEICiFB z#)mz}?-q1yc>el3;|`Y9`|rAx-E+v;@c+!2xm(|vB&}~|KEQ6dc%wj|7Xtp zZ)}_~^?h!2>xKIttRts76dYK)W&6yTX}6wyfBfiPKtMo1!-dHcJ7z4{V{Dw}V4(27 zwe`V^{{ayj&di*dmX@Yrmn*nOB(-Yo&V6V83kXbDcP$~KA)#Wyh7BKhCUcy>et*J* z4-pX&vIi6jDlSydyqMX1a^u=%XJ#@?Sn(jCI}kf7l>! z;rZotN8f)qQNZRjTOs4alr8To7QFv|;K1?g-#482@8B^(^(eE5b;O4Q1_llb0s~w9J^Vx;;*L7{GSlu;85|uVa0z@*9pdH z{}mz*D9=zfa0r-iqhR&w)p6BF92PjJ^*d$XWm@o{;Xr^wK*#?JGXyq%6+Dw>tYF~4 zeu3@(-Mja%`QO*q!DE9}(zb#F0UJIXn0aQV!Hj^0f`tF8S3g+5;I}bq|Ml|uUZ+*9!oa|w!^FVEaG2o`0|Uo@24)T!j|~eBHggDT#hlo%@Nm0;vez6B0S4D5CL_Bm zJ0>b0?vayj^WhLmIX;oid)l9lPYXPo#q`+(3?@8t>NRt{_NU{b;@LS|jd?Or0U4*} zI!+9mqIpHbX}MmvTZ`7ztn({<^1W(zl_vOf`PO#r^)h+sGdDs%%GUc^#%+dp^)^@S z!rbu9W#{)@Sv76l)tzyh_o-@LPxs!QlmBeX@6Q_|r}boW^+tbx_juEcom^+Sf4qFO zrAB!2k;n-~FU}?#ug*Jtvnc(djq_qZ-3ulz2R0>(%dOq?DfPyFQ|+s<(H}lMX!(69 z?(eqJxH|`P@7wj+yn3*EZR2v5UvsKTkIb3t^?(0ciN&Y(KbL&p`ln{^qc^u~*T+^C z>^bxM$LH7g&&MzP+r_}5@t}c4EaO2VhuVq!$>eMKTIMAiDNy52_<%q`P9wQ-(1HBf{Iu>_oe&cZ9P<-&>5EGxC zL2E;p%*;eaR?Pqh4l9KQ1x9YcgvUjNYI+YsPW+FDz<&M z4()u-C!)QHwbH1AnfdCis|ygMo@2HR^C78Mah4O5C+(2VFP6I}wP4>LE}0LF3bn$=6sL$q z7^sTOIoQa;QaGWJlUI7j0pSdX4@PYw;cwQi%wt=yaW!)(&!OXruPp@(j+O*}I(hu5 z%lo}QzHyhi{d{-({Y4hJ1>bJv2(NHvV6$jo5HV*F@YXSANo?Y@Q1~ygk!_xo#^DDo z;(0q7eEN*MIK5_PbzYWcXE-CRupoNt8eNtR$E5mg9&tE+nzVFNgUYvf&*T7)z;42+cNF05yL+viwzC6Gkg`8xf~RaF!Rq5IKVfV zrIA%^$K|=gY7Q-OYZ6$4E*zRP<-5%>TmGUj?gn+0i@ix5>lN+@pO9Mijb}nHf9h6A zSq7O2f}%PO5nQKEC^9Wsow#Kkqd`j|FH6vVE)NC9ozfRL)eM?sDj3*wBpmqui~X?S z(pblGezM$dCW8*nx^oJWS7bP>JhTN4x#lDr$N%Ch>G<(BtMz|SqxkO!hgfeaGW`23 zFIEt-fb&QKqjSqaCLx73)=7^lPggGxV%(t4ZX&1{=n}rm&SRQ==LL6dg9dJ~mrX1i zCOQa59AIc;Xprhzz-YALvFu!NWtDe@VT=+Cy-6wy!jF2pU(r70u_Z$2%hlBm(SIh0 zd~0itx>gj+xG9BC>A-Q04o7zGCk&cxCp(j#eVoiD$~92tSw{iyB_sM8HJOgstL?#lhPX> zto(nTYwu%Oj|sXE8SPFt&U5H8 za4IZq(#^TZQ7rLj2~TN&z~6-(*%gOm5B+GjYDj41*G*t#bv(de5)jO|@}W?!MF-=) z1?;vn*i_%mVG!#}P*l-L65J-RQgP8j-kOFa(JcoA6dN4)5@QZ?a7<`1`LvKvHCMx% z@5TW(HUn101&q7`tg9R!eQVXNQPf+a$t!m7n3toa2d8but6*NiPB#-Jsoxh^?O#l| z%FXK_bxnZHXhI`z8IOT<$Ab&Z0uB>?y}h!AQR|@Uw}1&d6c4aeXSC+_JUYkMqfj7J z^h$|mA#d*g3y-!vJHRem(zwO`$YH5#1?<*u1X?O3oRg%I91jXCxF)?bl$j^tKtr5i zRMU(ywh0Z*S!WS94#u4oPKI5Iz5je2DQvYob5NA&gj17S%p>9DHyk1rUM5-#-c@Bd$ZYd~u}$azBVUKI+}#=N z|Bod0sHbEwwq`8h-m-y3CYymNBY{E5B;cX<3rB_PN8>fVG<01(l(POiSN_7b@>cB= z4~}vLInF%4CP_m6+y7N2avgU}98$S+7qIQ*XtLNek+-trfn39l#VuPB8g^l4j5)W?u8we3-?6cU!NQ0!;KBhmhD1ee zkpq0D3`|ND2|d*YOdPEmE=(MW3svuEF!F5pC|uFdrY_98lkwJJm)jTGY!gKI`j>5) z{`J*e9U+Y~>_vrcx8^A1F5c;|wc+!MMgaz1dj_Tk1{X`6kTw>MgA7~}2d0#Mcvr#f z=qnV(l)kpRp`c|kt4)IgGaC!L>7GTr0v;8IE;3|hB_!Rt`}C5`Ii5?o<+C4oY}gSr zQ%b?PVUh6SWzFm|1zBu73cF(dZxC1|DA>cMbCA_a!huO)K_ipO0y)vBCIPGL-311V zS^ed9G(0FMXyINUW882^c*Vgl?a{LqzxlmxMzrSw8x96e##0s*yeXw?m>pg-GOcOg z*~s9AuR<(B8EmfA=Z*01lT7N6~X0wk$sH zn^X^kIz`tyyhuOaz}Df#f3~f~c-e$yyfKWQ*4$u`z{27Czr5yKPy<(oBJ++07ADraN{q$}6pRfj z0wyR}PiT}n!T490MOcAJK|_JxtjRE-NmYX-XF^ksfC+OF!v_YwO$#`mEZ{ILRxlJ` z5-DIZEnrie;QwlgSM;Xv!09#49r_!W7zsHrUT|W(+oaGeu6xm_k!=(6lz`T9VeUN# zxNVOy`ZaJXX$bHq2zVN_c|K5K*~E9IfUj9Wz|DX=nSq=A5~F$mV=J4vXaUQi&&_p0 zg^LffcRph4o21ckh&?q#!CFC8(t*)Wfl1kbN%+44qhx|Y^Kob84NQIq7==3+lnfN4 zW;C*WYgEu+ijz?IeJz2-v5jj&msd-hSOVi)2mWsgJZ=dr`4I}T0!(ZL?0XjQoI1cQ z`hYn-!7t22LD+yXD551>Y zE?{A?RA)+JIFrEmtAOXYLF7sUwn+}%mnE3h6Bwp!;GPnYVK;$W^#QY~0!xLdK9do% zd<9$DCRdIH9T5}!-8~fcH8rpWSurfI$`DqVY`_`w|3-%%1B1>5X5j!Pwjd^90oJrf zOtuOf(@!v}DfEA-F#0f!;g)=+Lyr6Z=g_^z_4cn_bCDHeF|JM0t~JR>|7Jr9w&M*Zep;Vz-;?K z^SQBt&IhKGnrdf%>N7F8aV^qU{g^pHg~{~*qoaW?gThRq{|O300W6KKT_Oh!JpX}8JL)h+)h2<=F#Hv zOJETFz`b99Ay7fqk%J*cKrMl7GQ$Gao(DZLS_=9%6^t}>UK=YYSa_>Fn69J1>Keev z7R2b9!1PmvX|oE4B#bn6PBofh9~%d~OOnD+8tlYt7#Bf93+V1B{CVR$2=% z*axiCe!w8lm895KbHbx^&aFvF$#c0rY3M5J+<%~OB!ES+K|wKq<;Vfek4*V?6BsHI z%B>dkhs}lZnt4c zX9Gj%170r^Ha7*%DaK3lKZGVbC^!kQ+Xb*swX&XC#l-P|agSL~yl|-|i;#%4KYsv= z!Gv~>B-Z)>7M&UEWIxQT;L7Vlub+MW^Fn9;lO>(RWc;3Jr#AtpY*q3`TM^Lq4$ks6F^^c}(Wii@( zqcDahV4Z5z+S zZFSaGyg#-#?N)5G-qDt=*c#p75ajnvMIrhJ`vmTtWgo2Bw=liY*l|vT`N=BBW99@l7YCMK>2j-86ofZ0NoQ?jQeqdLpuRpuK`wz+XF)Qb61xk-JeL1X zj2s`C*R5uj71+I5J7nGKUAwgv^c6xrb+Vrk_g^DeXlTGRf3(&=d1%q zMFI26BYypc3PA=lY!5NJ3ouA2u>9YxaCr8d4W4@1#IaH7#ud0 zORQ-&-N3X%f|YFp)0AlT2_Ft#yUNqez;&{KU2V^vLyAse4;UFg)P7&VXd1x$G(*89 z;lQa(1>+P?#Rg_|0aktiuJxOzDsCuuoWQ6az+URWmNA7{G=RM*fLFbM$@0kJh-D0C z8MyxbFF2}KaOnONnE-P}gAYt|UhfpRbd>2Jg8%~yUjU=P0~YNG`%gHrF??XCmE6QA z#KP#nrtH9GlE9QCz))1f=2gX9Hpf8SflYqGapwR=#Q@$_3m95-6rvogqdhrJPT*lK z;L?9^;@%R~D`E<=1@qiJ_FnUDIX;t(c_V|v0#?7@OuP!L7ortX6x5ne?qz0TW-Qn) z>A-9@y ziZ<+@b9z6&6ASCbljaQPjwrCo`6z^4V6HsP5oo}YRG_0Iz_5M|gNXqXV*vw8A%oC{ za)SfLrVea{{|}tk7C5m=fcelJZl+I%_-B_jJYafR#yn-gg{U*J%$sV|H!%b{ED_^9 z$F0EB%-NFzBgZ&-ke~-5gb%EPN<^?_u6!R<(Dm6Zc*c*-)?i#&k?|OD-Rqtr}r`T!zqHUc*>;JkJUHkkS_r2hG#2$NrCF?Rv>;v|ucak+4 zFQNlD=iGZaH9^5Af$j1J-ns|uJ{MTh4zRRKi#~a4_a;|i-Yef|0S1)>#;tL$Lkd_~ zgkIfF5Qr^cSY@|k&AgZ54*GAHjZ=zij_NsWu6w;Lk1>RSZI_-xT>{(QIDw@Gys-&v z)A(M5Uwp+-zrI60bFbsSaPKs@)+Me+V@86 z^uoV-3cu~F&YpXB;oZAS_w;=au*`N8UYa1}^Wl}xZP8zHA4H@VJ(qhYa$c4B{hNz& zZ&euLBpJemZ1#Pp3XtpZ~Sz{ZDpAuf+ry{QrMp+yA*?(g$vTCT01Tn&<1!c+1b0 zQh5CCQ+8Ghi_kaCO{{_ZUjyEMWIFJfMd&4C0N3X{fhlocrX5pA*}pB?UdeC$w;=zo zY)Ndf2E0oX1QzD)nDFPTf&Dj6{STS)UmN&eHN^`ooA;_?y=rCVj>-)`=j{Kv0zs^5}`i;rA;1bEprb_6E4O;B|0Q;EE!($FhwJ1^zt zrKjFAxOi8^NM3&CJI7M|+!Kw4G={m3t$ebU!K%KCJg4gAp17gCk-GLKvQw`1pUdrQYkm3)@1Jv(4%ds_6aV(wncLy7?)BEO8nf0E ze0aF9b+1xd&*c}lw#rNU_nq9T9dc@BBvaVRo0~n)b=&u!+p%3I^NN_SwBKE;wRbPC zOEqsjbhhf-+m@}lkN2&OHhF(@pDOcv+3C6;A9YPs*WY8aBk9b!VCR0lxhAEr*KSOA zUwbV*;obH5$N1LI%zpl9{`voY_LXZwzrB^Lw%42g>G$cwZ_VS@*V{k(x9WHP1_t&g z`Frm2eCf9PAfh5*#m;|Q?+~lvk_}Ez_1l>!tOVBA-H2nc5>-TNGOVcv~oEo2)yivbpMwI^*n~SI(M? Ixi}cC0gBh(=>Px# literal 6664 zcmZ?wbhEHbJjQU0;X4BeC}ezKn90Dx)Z#GX!uQ|*8wwH%7Hn{uFy;FF=MDx67iI_q z7fzqD<^6$UXBt-g&%VoK5V0V)x|M<9|9=LC)yo#lS$!ZNAmD#%>$*MXMO`Ntp8-ky zKXb;R;{X5Et6j?O2^bW}$jEG%5fBiuq4R!|qGLm5^U0Yr&pdzqU3rFb+L^RNpBrY* zoEcDh^!oMd|Ba3JoPTdHBY@L;)7mZD4{T@47%d1A+e zj)I5Jp7KoQU~`)N;Y7jz4;zkO|DKk1CZOYiL&1RuAO5QzWuCe1!Rpnk4ICWy9KZYF z!GwYd7ZNr&ICxCxUi+SL2g{5Fd+uM!UA_Nqbk(_n2@ArnG0i+P)7UtTot=Hv{tpvw z6gW6Es0FS(u;YJ0LcoLx4~&hCd$Khf8Xl;ts~4k~2>($dl@7QEkn z{Q8-hGZO+FdS`D9x@eTpabd!S|Nrmab#QQ4zWMxw6(7#bWUxxwcK-VPGik3#D;~3+Xa-p=6GyebhKN-IO~qb z$2rIQ6`Z?dJU1;lIawokRm{mvOHWT%;5@{_x!{@CZ1ciJYgQVko}Xk>`RtFTQO1S2 zF78~Sn#Ip78RQqv+oE|j{mNXEP^Yz7lU|=)ueeui@2#mhXBz$XcB$?R%e*ly_x`c7 zT;^}DY|r^vm%|mj_S*iEgVSoWw!S;FvxT`ow5IR9_x{#crEAs|Mh};k^SjUEuGEh@ z+tX-wZB|L)qm`lR`MS0eD_^aMll5M9Cu+mnJ#xCU(`Mf)cy`%gW!sdu*5(gxpAdb$ zY_GJ%wfo2Vt5wczGXC;>akKQ?*xQxmchWZc|Nnnyx@E=3JIdkv_ubj__5GFW?&0@k z4X;1F*M0B4j{NR-TR(;#m-2Nh3|o*jW9PHDrWFsT%jbVHd@<9(FEry}t3=w0hu(~Q z$1k=kv}ru*(CW>2)Tyy-MnI?5wil1OB{y%8vMA!q#y1{1`BlD2qz%zl&PZg)o|<&dWuOJxw7`?GJslN4_;PGWsx zbMu0@Zq3K@!X_3IE>8V=WI?*pZk0&~_52mSEcHwjnsRVP>Nm58_Uv*V0gGAXuAEk! zA~(r<>0XU1-o7;^MZS7$vcCfD_;x%}a}HSYncsZRoUDsegMI!_RG&XvrKyLtQOYF4 zvz1RJ%QGcN;$Eilvm#!Ge>R%j4D;1QxEOjlzN}fzBpb!8yTak&xotl_9PaPqTza`l zjE~1r*ERgx#r8Ed^EPwZZkOA#n&Hc(-+}9|wp}@*xwA&(jeSq(SB)h+j$8~*y$l5> z94=^u1aDztELg`XpL?j+T0wPkr{2SD4$Umi86~QAulx?G_w7ExEhG_shVj_mq`Ht+ z)8D_UQ_@Y;_7ofuP(C6ozxM>wDo2s~hxoNWd|?!_dB<|_qocmZfztxE@g_zmU!Pj_ z+*0%PFTvBrJ9suPlwbLwSJ~vY&YPOgyg3EFdHZ`e9O4O&6=1D+zP8-)=bZnaUG(lO zSai(tsK{kLGe;IfFDHfP3tl<4xaj?SGKIe+m6`WJ^VT(A3)X(J)G{z~-<$kf>wslK zgJP>lXv3HM1Kqn;6yN2ty?IE{CN^0>#9x8;y!7pwFD&MUYc}n0l6?y}#CJU4DcK(<7+b7s6qzqvNcjGv(Xyt5zvidaaZQ&SRudNplolsE^muaI zEa~d|Tz2clcLbEU8I-i!`LY|O{~mO16L>7cTe3i-CquwkV|``SMlj4(z}BV|p&Ri4`==;iwX5Gzw8NUEyeYE>%$Xk0*bX zhNFKuEonAju?RbL{)X)qMg0|RKD`2c1v?Vu<4&w}m;dCF zJB5MM*P%uJK|@1&Mx(NRg`>xgiH$Ncr3x!Kj;OkQViB6MkmrbEm;G6VF3*r9Qppm| z78$Qvtt1u*Bpql`(7V)?&U2XGqk`RhO(GYQ!U8WT%Md-82Ms(I9EA2fX!TgCHEI9E z1b&r*o&p;YLz872H)gb)&=>i5bwib-XkLM{teZejg+}sPv6Bs&lOD8}u5spPpRj=E z!v?|F0%jGK9IZIkrhbS25=tudkKF`#9C=@L9G#zg;mBh(rfY^32N~D|T8h30a-^~x z&YC;JO=wa>2eSaPw7G`U38PP}U4_l-otSd?7BH|jB^=zQa5C4LfwAx2t4r2}hvWaZ zL<)F+S;WNj@fho$kNn~qi>7?tn_u_6dV*NTRoa^J#6;Zl>#bSSoVG74K}#I z<9#8|Eh@3mETl*J&ISj*d5TF*JW2u&1mqsvTG$;p<>20_GGWPaA-%~l2c+*=urcgf zFhT0R#c^vp5AmE;H#H`d%bjOv(vB$<0WadDLUY;jy&x1meM!a+v#;vv0`k8SA>4vM-eurkk6 z?vB~_@r7u;d;w) z?!xc$xsCc9@Bfl~9w^5^cJ7prtWZ}h)*yOSSZ!xZ+JtK&pF#E%HHMr$*3 z?7U$rV&o9V8q#vT;=*yUXB)d}QVuXVpE#(ebAYewjI+=N)p`773JnJFH3|=ISR7|O z&{npFY#q9NNx9{8CY^-1u=FQunz2jg~EDtA_ z-SQ5DbA=zBZ5!p@b~s*cUD%!Gry?7$;JEOGhKlkp3**F&8(lNc>rmX_$fPi>LBP%a zo5b|OWBR@x1?|6?^f{Cy4hA%6Z*skNi}~O4T>@-!FA|tze$;X7jz4O{Vm)!&t3%&T zv>y_S32iH2W)e49F_~G?+g4CKfr#n@jufs|GH1%OGKluwaPv- zy!U0jJ^SX~6Wn~VY5mc6+MlX+=(+gz{yYBgf4x9MeSpV%Q=ygS0el~LZmFqq?r6|| z8o(~m$ivzw6w&z4rBQ4~V@6YB=`{h_6^#lKf)WxW9HlOLK4 zIQV&5c+(h|%q#>HrZsbJXtvhiJoBOX%m)*ek1RS5I4d_W9u8n~ZWiE7VE=Q0IsX7x z*@l4oB4T@%xV?O)5pknd_Y(V`3%Y+6=y4`i-g~60Ss`$;fIBO~;^+qk{tqc18klD` zG|MgIRtjXOh+v2e5}2}qxx0W%?jxV}0hX`^f!qtsh7Fl@!pxHyY(xKNh)tiOay>wE z;R4O6PMX&P+}S4b#6IHt)4;5-fOA#?TkQir_QXoBC7gN<%pWE+-CxCRDkDb6^9}K)J1dcW7=x<;%UD&yChwh&S-t+>t4GO$n z4_KCE2)uj1BB;Q7X#uC>fiA-beCZAXt3L>qy%6MEkS1ABx_S}!Ux60(CEU3e`2T+3 zminpA{E@}lf#o6tqd-Db<^hMA0GV6gqbvi$+$_J+)i4;()l*zy%PyI7r>|6k-Y zJ;7C!WPj&F=b{Y(F%|-+KQ*!&TK{jb{_~lCvjKOZM%U^O{P7Do(i-^L8~M{3_=+}h zbqO%8;ox^{n85W?ziu<97{f%)2ZCoF2=2VVR&j!N{|3&C1$++vy2bL7^o*U~0IfBlALT2Z8o~9s*3^6CaqW%x{@iIwN260{`J=uKfnn zODqNE6>v?RFx~yc^u%D+_X?~mfqecS8004K9zDR!$iV;n0n3pMoKFN4CTa-iFW|Va zfMeDFPrXbZSv45uYj)Pa%>&Fz zQVbR!SPT!a#uV_q5Rl(!D6rvzT2Y%o$pMBZI|N)`3V8g~`Q4*s9g#wrV7tGmSnM*oUzFM$=iLsRT*R;Y&ZOI8tnhtCanirniz$iU| zO-|74-Q|TWid@ehFkX>l@GIb}J-}+rz@g<;q<2+mZs%ggl0LUi0X_yMiwOb?P84u4 zvQ7$^eR*4U*#BSr*_C{GoJoZP**^uY`1NO`V)6-|oIsJ2?KLbBwz^ao4 ze8v-2=}q7^S>??jWPUG0WP{a|mu&7l8#S#z>(qP@`2K*UY=S`91D5X%TK}91G7=bH zO{n5)ymGu%I;MuHlgC(f*R(7JQX+i_q|Zh z_^|ZE0p3mqu81Qn?-O_z6))=%2=@sPm=wU5v4MA`l+DUp%y$@AE_`!pG>k9!T*evL zrzP#b>j6vogAUGxtaBf*IQ_q|J~v@@k5?{>wg6i+!{k@$@m_2vK5P*176?<=_&$KO z=Kx1&0oTch4%Urawhe4q3S1gmTv-QrKToKCa#5qwtI2g0oBvUPs-hM4Q?_NDUi0P3 zHr9z-Zb)@BYiwn`7^|MZ{&!M-?uD&v2O9-HE>D`RqN>1}sLXmltM5<&%ZmdHr^7b& zcc?T<@6-#irE9({si#dxL|YS3yXgOW1qUfhXC%a8+30MHO*RV`A1+HQzO%b zZl<3T_$M21Ixw(2ao}?=VBz;r2$z_t_g^91#!)~$fvuIvhl7zN>I19KHv#nmmT!>) ze;kC28TS0Vz;-x#PYCOt1Go1uH!_8^E_lUI$FfvLbvnZ=f!*8}+0-UD3O(eCcVOSc z!18C7z|IYO?{v4-USK{lf#JvjUiS;kUw^awT)?8HBQUqYaL3X82X^xce%P<{k?HIO zp0x}3vNrgOYe?O!m_KW#(mDgq=M$JGF&yLx-21>XhNY16&IRW02Y6>O9I7y2UUPtJ z_6C){>4yS-u<2dsdGUcoFJaeh1`dNcac2$Kk`^#;EjWCaTh4e9t3v_b=j#(JKd|L* z=w~lv5to_AF6gp6g?;e_<`)aN6E9d7WwQ6R^S-;leEa_f-VF`z7X+AZ7ciZ^z-(LK z60j<5_643K2F{E>cE zn)%jSpuB*u>ouSK2j=!g=3%cZjw~=amBX&iz@)Z;S0RD>yun#_mLty%HaT42dzG+f zivxGbhqDhwPObRPZ#dz=y4wc?3Rx5%p8B+h^?L!EevClW0*;>33@`pCaL;kjRVd&) zu!qxr0q1iEMg>R4+6NWo3rzAExSxKwpr>%sYy!jOHH^%RN0d*OKia_ccNyFE3m3EB zh*|%sRr|#BqG73)?Rk9$Cc%KytcIMqhr;y}F8|gMIISS$@K?~mm(k@eyMF=G<_{Mp z6|nR7vd2a71?UPm7+kHH&giV5!qC9~`2%xwu9N}OwMhooPJid0CBSIrDGQri(VSJ_txU@cm#3ezAc|`>mQ_!)~UB$F?2FHA!He&wGnyBLBV}oW;4fR{p;m zzlN7%n*;Mc4i2*k{Bg6Go+jM>f8g9s*}V=6_=OZ084lcIm65w^dFP;0{F4VviVl6c z(E_=?*8+1_h)(3s2;2#S8U_ovCo(EN*vh@o-0>iz-Z@5LfycrM0y^h}_4ytfoiqQk;qjM*TlQ!9`<8S5 zVb~*}_fYuUJ@*E#)d732?@qB);QO_JU%{?X(^24G>k*m2$EJmkjqD!(U+|RSz*Eb4 zcg@zYWnEye`aIup-R^r%C!cfj8q{X2l855Bdt}GCfO@du%e#T=(Cj z*f;^Tnin1a`(7|jwCH5!Xh`sp5_nlIcVSiZ(^=IoWe)C~vF|1K!k2UYy{yfCx!|0@ z(gsF@26KZ3#-$A}_XHNr+ReUE;PoasZgxl3i61!S1Gtttuo?((h7`Qan|NPa`hf=b z4*gB+&o3~#EO>J&k3~E{VB0@NrA9`P53grRzghQ>pZS4V&!&0omm6=}DW5p^=CmJ+ z8w1aIJAtJFoR{Q;?tb8u5a3)L_p(Is%`LfikvHBRoU)0BkPyg@xc;EtKf2i=%2@(t+ID;4&j$Qa5+41S-x=(_KKOH>s z$wmJ2stsR!)^nNUe|~(xKxD$_fW*&c^QG@`Wuq4NSV~PLF zAn=vv^T)JHj8^%t9O4`ARf|~b2pHUdd+goUzkDB3?tf3Ne;1H1uuSh0r@qk2bzfs* zzuP5$d4251@wjhw{ok_k1tvBy&cDE`l=ylU_a(U(Kl&g2)ZN5hcmI21zreOWM#YV< z_wD=nkZ0y3ZKe(Kzc-v0*!J(^u>_uF`+lwI7h3#IU|HWQi48C3-TS@3?$43)FOSv# zS)=#r)crrYOMjeO|EKuA@WuGQ49dxg*?*7r|Gn^k{omX5RX5-NJyb8sqxA0*zx2bz zf5-1jz4HI_=KjCM|NedW|MHXl|Hu2iyAuC@vH$*J+5g@AI~hLuKX7Pb<&|@p5%AEd zjaSyLMI!Lgp<+?pxIGqukKOuYZR=P(1s;2JEBelJnHludags{-z81;gv_sRB)9)Rb zDV*ZlV^#Z)Wz_@~hD8isY_79Ho_j1dn`+m(ODH*bdEnZ(w-#Gf!`8(r#x04u`Z{8h zlCG5Qt<7(uHYKcVOO@WP9kEvQ>AkI9;qNW?)J}c3*5m5?gaxJN530_QP!C>|C2HSx z(pWj=l$NUe+Bud_Qg_d?t$uRm`{#__g`V^KGNis{wdHj$6FnPc_Vn~-AM5kSY$q&# zaA$9M@;lqzYL6ZqiWbs8SM}q`lT-c1`F+1Ezr0wooO!+7uU~K9+-kRa_b;-v;^Ul? z)%$Dq)l_|*b$t8sKXU()k0mCbU%p@5^52mL{^aNR2LCI#H`xDOp}k@KuLIrz2bmdj z0@g7q_DopIxpQ^Ep~z#e*L6u#K59v2 z_jDZ*D6BcP;cvy6*M|?3u?Vf?ey?rhuIT7ubW-lC@&(ToVm(2p_D?%}!Ap5#PSEK? g+dhBtyzRwPymE7b^5!!~V?s9jn%}>pp}=4b07IwW)&Kwi diff --git a/xinha/images/ed_charmap.gif b/xinha/images/ed_charmap.gif index 9fac54d0a4cf5242f003e0204035719443366301..289aa7cda5538e524dd863bb5aba124e30e52409 100644 GIT binary patch literal 134 zcmZ?wbhEHb6k-r!SjEop|NsAnhK2(N4*dWBp8*8^H!w8(XJAnL$-)TY>M$}eG6*p6 zF)%QDbLQ=C*_D7aTjv+ay}kBT%(8RpQ0PeapDHj|K_3IP7O~P*FD)Oq;l1!Vc?i pHG&NS%QGVTF1!dxe|vWltJ3u^y#6VwGk%^C-F*Lpg$*NvH2|||IC}s9 diff --git a/xinha/images/ed_clearfonts.gif b/xinha/images/ed_clearfonts.gif index 0d3343fdfd4ba21f697d8b63f8f1656e7c4d9fc7..38c52a875c0ef27e25ad1647a59bf05ffa0dd9aa 100644 GIT binary patch literal 134 zcmZ?wbhEHblwgoxn90QO|NsAca&in{p!k!8k&A(WL5GonkwJ_>jDdkEyr+L9$6Nl` zt}l`WS$k(>D{#zx;+kYJiLrE1>UKLNi~Sq!EYO_Nxbq(uC!bZUSB4?Sbmiot)*Ov= mHKnbOj|fh_IY-O$@X4y<8Y)*d*BZStee4{0;&~$zgEaugoiD!t literal 149 zcmZ?wbhEHblwgoxSjfb{z`$@%PVPS#DE?$&S_iChL)C={~*A?!0`V+!+($jNR)vAB*_2=ia%Kx zK^z@M21W(}27U$xmPi2)g(G`r1kEnIdpA|^(1B8APL`{hOG6A!IL02nGT{y5qs=Ub zmTd9nsp)8N3z}`2*?j$!iADrF_fe;xNo&`%HiR9V>Nod=-+=>sGWVXIZpf9`!~fCq Kvt>5}gEas-l0iNI literal 181 zcmZ?wbhEHb6k-r!*v!qq(89n_&Ct@)Qe9pBpW#2l|Ns9P7(f`r`p*DjgGdG#Q2fcl z$iTqOpaT*BnZdx4RB+OB^;ECBYd>$B_uV&Y5y!2FS*Ir~y}C=IIe_1yPuH`Fv+cnG z2bqK_m4pBX9f@+GIk{EB0VZ27Cu(yrF!@hfz15ayUxR_B){I^D%q=wzD^_bWSvm!% R-_Z;TF;i}76%k~x1_0BNJ^cUx diff --git a/xinha/images/ed_color_fg.gif b/xinha/images/ed_color_fg.gif index 44af9c4cbe067feeb4f71bcae6d2e308271e62ce..292ab8775fea244f6e21247bcac49caeb4ca2727 100644 GIT binary patch literal 164 zcmZ?wbhEHb6k-r!*v-Z8|NsB$>S_iChL)C=|Nj{n7(m2-hW{YCg@FMi!+;DFf3h%w z_&SUXj0^${{0s~%fdMBx8}~A$@78}I^sG1Dz3-uCo8#+Ua@l7Xlh_Nz&Kyfnw%}DT zkl51W=G|bVV8PziqGZ8k!O57}^h!}_|8j>!8H*V^ryty5U?6|NOTSQ#k--`O%oZ|o literal 171 zcmZ?wbhEHb6k-r!*v!Si(89n_&Ct@)Qe9pBpW#2l|Ns9P7(kfeKLdyXA{mf?;!hSv z1_mw$9grBv3p5qx uk=?WTIgi40$Mzo`%nnP_F7VE3Y$}kRb-eaMS%=_PDQ(YOk)ESm4AubS8zG+n literal 110 zcmZ?wbhEHb6k-r!n8?h)z|g?J!0;ao6o0ZXGB7YR=rAxaFo5J4nC$2DuRJZrf17hr zmpc1alN0wCAFap{OW;gmvU{;oDXrB`>t)P^*~coQngbYw6C2obSQPiMep({q**SC7 K*DehP25SIZza>!s diff --git a/xinha/images/ed_custom.gif b/xinha/images/ed_custom.gif index 9529a52ead4e323ca7e5d171a531928151033ad1..1444030ff711280446d70707b90ef7484a2bb734 100644 GIT binary patch literal 50 zcmZ?wbhEHb6k-r!=wM{{|NlP&1B2pE7DfgJ1_m8=237_Z22KVBCQg^6<<*@3l8RXw FtN|E_3Z?)6 literal 67 zcmZ?wbhEHb6k-r!XkcVuU|{(F|G(l-7DfgJMg|=aA0)%TB-PWu^7LE&$4m}vUaIQ~ TZ~rO0R?#`vbJ?pb5e91jIO`N? diff --git a/xinha/images/ed_cut.gif b/xinha/images/ed_cut.gif index 206603890d3a4195b6f9858db130ca04f9ffdcb4..23fbf80119ee8ec704159701936e398db1a8ba52 100644 GIT binary patch literal 78 zcmZ?wbhEHb6k-r!n90QO|Nnmmh6V;OQ2fcl2x924GB7c4GVn1lFv+u|OwXEePD*IQ dQTOYY)jAF|9=tJ8!C{eBRaffwO)-oN)&S-l7QX-h literal 91 zcmZ?wbhEHb6k-r!n8?Jyz|g?J!0`Y7e+C8y#h)yU3=B*RIt&a93?O+1CY>q$D^E** vmzs0Qr7*Q(_qmwdgcphq3{%{=wuGKu=c{$(tIp*wi`H8|4&rQQWv~VSN(3EL diff --git a/xinha/images/ed_delete.gif b/xinha/images/ed_delete.gif index 3c3df5b757d66fa211c84750db240a04a17949c8..aff568e32264977584c0123440a2dec8b4aa1509 100644 GIT binary patch literal 80 zcmZ?wbhEHb6k-r!n90QO|Nnmm1}LfclZBCifq_AXnSq&skAatgfl1MaWo2g4UWO_B g8--VInfR(Mae;YifMn6r9=A`35D|_ og0J1^+FLUJdcp!_yZN4NH&1#_U$Z2f`(Sd%>X7%`a$F470R1!{m;e9( diff --git a/xinha/images/ed_format_bold.gif b/xinha/images/ed_format_bold.gif index c6291f053ff03729fa3c532bf8fb07f41ae363c0..78686d1f2db5a42689361a3e157717ccbce8c855 100644 GIT binary patch literal 57 zcmZ?wbhEHb6k-r!=wM{{|NlP&1B2pE7DfgJ1_m8g1{MZR22KVBCV`%OhUI5w&vWK% N6MMa9+9oCjYXE$<4u${# literal 74 zcmZ?wbhEHb6k-r!XkcVuU|{(F|G(l-7DfgJMg|=aA0)%Tq}bEH^7PyP4RegH8N?o& b{`PHPEQiE{PrY7IlayGFfATSAWv~VS0~HuT diff --git a/xinha/images/ed_format_italic.gif b/xinha/images/ed_format_italic.gif index 7bb67aa898383bafe932b25ce3910d4438ffe64b..2d3baf2044edf1a793cc4ea90d3581b93857d5ea 100644 GIT binary patch literal 67 zcmZ?wbhEHb6k-r!n90oW|Nnmm28QbD>Xw!k#h)yU3=9kmIxGw<44e#{3=B*nErK)C XEqRVKc{)fca7{~$HS8)9VXy`ONoo+9 literal 77 zcmZ?wbhEHb6k-r!n8?gfU0vPM(!#*N@c;jR#h)yU3=GT+It&a93?O+1Cb>END^I`W g@10@XC#kcdjOnbaoJPd-4~`HV>o# literal 78 zcmZ?wbhEHb6k-r!n8?Jyz|g?J!0`Y7e+C8y#h)yU3=B*RIt&a93?O+1CiyA-D^I_D h?_?mv75R3q)aU7;3=0%fDzjEvO?$_E+?SET8UWqI78U>i diff --git a/xinha/images/ed_format_sup.gif b/xinha/images/ed_format_sup.gif index 1b6f4019c449add7fc73430e821b729f8ac715e3..4ecb9a16c9297d2d517a5e46f3ef0d0ac8846d23 100644 GIT binary patch literal 67 zcmZ?wbhEHb6k-r!n90QO|Nnmm28IR(5K#Qd!U&>uSQwZXxEQz?7??y__?1rF+!i-Q TizRvH+1}TG6R!s{FjxZs{tgk2 literal 77 zcmZ?wbhEHb6k-r!n8?J?zyJdO|Nm!TU{L(Y!pOkD#GnHb0?9Kl$xZ2Bc{-Otrd#OZ buMMp_ERPf8R!n?U(KP?qws+jySsAPW%l{W0 diff --git a/xinha/images/ed_format_underline.gif b/xinha/images/ed_format_underline.gif index ef8c19e4b63cacd586306169f09a375501dd3adb..4bc47a17255670cf344f0bb5c61272fe4be48bc8 100644 GIT binary patch literal 69 zcmZ?wbhEHb6k-r!n90QO|Nnmm28QbDY6b=d#h)yU3=9kmI;;#V44e$y3=B+SJyjsO4v diff --git a/xinha/images/ed_help.gif b/xinha/images/ed_help.gif index 06c225653d24a0ac5df42bda5e66fcbbb1b18684..d5f7d63f34bbb1ddce2c87428a1e22eabbbf491b 100644 GIT binary patch literal 55 zcmZ?wbhEHb6k-r!=wM{{|NlP&1B2pE7DfgJ1_m8A1{MZ31}+8$CO#LrX;ll}MaA%Y Lb-XTNWv~VSSxyZ8 literal 70 zcmZ?wbhEHb6k-r!XkcVuU|{(F|G(l-7DfgJMg|=aA0)%TB-_)!^7LDN<{1ip#qs9? Xubp#T_@nfhVb;@=+uj8+FjxZsf9|1&T!DE?$&WME)o&|zR;U;xQ8Fo{p;UwQg1 Z|Kd4Y8oM{!E&RD^7LDNMuSgRi^Gov b=YFa6yiuuI5u|y_YC6Z!Pd?Y(85yhr_dOTY diff --git a/xinha/images/ed_image.gif b/xinha/images/ed_image.gif index 9d2bff131cfa0741a7eff54a054c272bbdd834bb..1af79c3306501b9968a6317aab68b8f0d349f68c 100644 GIT binary patch literal 125 zcmZ?wbhEHb6k-r!SjEop|NsAnh6V-(h6V-(5Z%B468g`e_>+Z^fq{WRhlzoSfscWY zfq~gcW8D=EFUUBJM`A*0g38nL2};R5SiiH?UenLa0-$+y|gJ;(Rrp@(97 b?{7@hW|(t9ohN8T)Oxe7uuU(kgc+;>$O|kI literal 148 zcmZ?wbhEHb6k-r!Sj5i2(7@2Zz|hdZ(9qEE|33o*2s8Zu|6lPZ3nK#qJA)1b0|Ns{ zEdz68#jZR50%kg{UfR~Hu;YEgHlC)$c^L{?(P1+Bit<{9 literal 87 zcmZ?wbhEHb6k-r!n8?Jyz|g|L!0`Y7e+C8y#h)yU3=B*RIt&a93?O+1CXFfmDTqi-IRv3ur{~tE10^I?o}K;edornUEc#38LR=&d>p(0 diff --git a/xinha/images/ed_indent_more.gif b/xinha/images/ed_indent_more.gif index a67139d60346699347f081d2bcc01c263c8253f8..c34b47e3d5c4f11bed404684e4bb2c70989089df 100644 GIT binary patch literal 84 zcmZ?wbhEHb6k-r!n90QO|Nnmm5NKgwU{L(Y!U$sPFfuSQ2r%$7FfggM@Hd|BWelBj kAyPrE*DYnU>%9uudmDA-J*Hlt($cm2fM{>CA0vY`0A1=BJ^%m! literal 87 zcmZ?wbhEHb6k-r!n8?Jyz|g|L!0`Y7e+C8y#h)yU3=B*RIt&a93?O+1CXFfmDPpsnjBxY1f%d_rTGYk*r;#TtV>2NG%+*h{Vm+B7mN|I#3(e5CLgtIzvAAWcn%sb0czQ7vH-%C#~< z`{xe{MhiPK1!GvYTsg^fAZn@p+^ySJByh!TI#jdw(y5I*Y}hoeXED^s1(g2~y~8u*3gRwRN1 diff --git a/xinha/images/ed_list_bullet.gif b/xinha/images/ed_list_bullet.gif index caedfd233208f2d95405972b25467dd48972c1d9..e37e84b52c5ad566990cd166bbaddf3ddae4d196 100644 GIT binary patch literal 72 zcmZ?wbhEHb6k-r!n90QO|Nnmm5NKgwU{L(Y!U$sPFflMO@Gib0G-1W5&!@I literal 82 zcmZ?wbhEHb6k-r!n8?Jyz|g|L!0`Y7e+C8y#h)yU3=B*RIt&a93?O+1CgmypD^GLm lJz%^rYPMQQQT2^lzS7v486HwytJZ|gS}w6^TLc4xH2^!57zF?T diff --git a/xinha/images/ed_overwrite.gif b/xinha/images/ed_overwrite.gif index 0daf0a8ffafe51332ca85e10e225bb5f55d44863..e7a8914d8d502ddf545c4f3a25de569c6f036289 100644 GIT binary patch literal 100 zcmZ?wbhEHb6k-r!n90EK|Nnmm28QbDY6b=d#h)yU3=9kmIv@fh@4#frQ&X@)m-lLS z->L%zPHo=5W0kHas+u-V-L=UdrX4?mW|~Aj|XTl3A3jox&IytO2(k BA&LM1 literal 888 zcmZ?wbhEHb6k-r!_|Cw<%E~GrAW%?HP+eW!+S)o{!i1$umu}dw;s5{tM~@!8aN)x3 z+qXY_`0)GpZ^ltD8Un*B1Q-|?6o0ZXGB9v3=rAxaFo5!e14k&se?2{Y_!txPU<4@%ifP n21=Z6jlB|o9UHZleV!Q-xZZIE@8+jo@&~`%Jd~#`#9$2on07K4 diff --git a/xinha/images/ed_print.gif b/xinha/images/ed_print.gif index f5bd10206296360743d65cffbab34a2265d781e8..fb2bf802efcb5b4500e6a8b26be0c53e2de5b1df 100644 GIT binary patch literal 117 zcmZ?wbhEHb6k-r!SjENw0S68o_zwaM4Gj$t5yhV@j3AZ{BLfqI00SQb1G5#!s*CTk zTOGA|C-#~b&I^0$dUvy9R0Ss^cY(}lGpF49xqRCMz{a2h;)2vN zFuP{#y7TWsqo*c|>T907l@Z?)W~+I{Pxa%CtYZ<-SCBZq$mflX{{OC71=C-@W%GEX dlcB;f&m}A%!&f)QD}yxvcrY0@ diff --git a/xinha/images/ed_right_to_left.gif b/xinha/images/ed_right_to_left.gif index 231f18344701c9023be40de9eb1bc8d499e47fab..9b255bd2caebef576c390e71c0c197210289c672 100644 GIT binary patch literal 75 zcmZ?wbhEHb6k-r!n90QO|Nnmm1_lfGcs5M0D3nQApigX literal 88 zcmZ?wbhEHb6k-r!n8?Jy!qmdR!0`Y7e+C8y#h)yU3=B*RIt&a93?O+1Ce11RD^I`u s-^5eE)pcOg4TiM^$JyIN+@?J=tvfq&CFh*IIw==^ocmrE#K2$;0200(Z~y=R diff --git a/xinha/images/ed_rmformat.gif b/xinha/images/ed_rmformat.gif index 5d8ce2d9a0a3a33e8581237e1ecea61fb249f029..09f102aa9a94a9c0b7010fe9f875ad1193bb954b 100644 GIT binary patch literal 105 zcmZ?wbhEHb6k-r!SjEb~z`$_k%ozp-hP1S_|NsAk_+YH~lZ6q)&|zX=Vc=unW?*2} z9(x;snr)85O67%P1=I2o(~ Dp9LYB literal 118 zcmZ?wbhEHb6k-r!_{7St=fcIM2P|NsAk_+YH~lZBCift5iA!~>~iV789f zb?2YKDbMK)5*&&L7491_Ok|%Yp3>IhX7zeyuEFoK`oj04^D31D-!by^1-UG~aD7LL O!JMuVuUHiZ25SIUXCycP diff --git a/xinha/images/ed_save.gif b/xinha/images/ed_save.gif index df3aaabdb69f154ed2790320d73123091c65a6e3..82262d03b6d2aa86eaefd2e088cadd8e23b863d6 100644 GIT binary patch literal 128 zcmZ?wbhEHb6k-r!SjEcl|Nnmm1`yfMz|hdpaOch)1~5?k$-)R?=rA!bG4M0+GcYi_ zO6=OhkjUb=nqz`P=4&NalhWxdT`7`tWHdJg3D10(aNolAbXT4>%hAW7#%m2`hYD)= aG&R| z>(0M`iJscIE)x#^R$vu0xcRIwghA(NXO`CLo$`CUHb)=Zk(O#UGr>crD{tY$e4#hK pOu}~pHCB05ddiDTnWMGsw8$m~jv41OK1VQS?7siD!-kQ;8UXxIHDCY$ diff --git a/xinha/images/ed_saveas.gif b/xinha/images/ed_saveas.gif index 89d5a70b0b748baae55f75381f59b4c2d6ab9d3a..4edd9882856879891fddac0dfcdff07fde48213f 100644 GIT binary patch literal 104 zcmZ?wbhEHb6k-r!n90EK|Nnmm28NavhU#ht#h)yU3=9kmI*bgA4EzlI3=T||ErKg& z3#A|8IJa@O+Evb*7yF;57$ViDEw%91qZ^{2$ K%tVBN!5RQSBq2`# literal 905 zcmZ?wbhEHb6k-r!_|Cxa|NsB$YKE2;hEXsY0wXX46o0ZXg1oH*B0zbe569x@V%>v3y2|Egs4mC0}smL6dxcG3lpr+iM4nY;SZYA}sH!lny9&Z4&q` w{0nL&U4ITb8O>f);iMIL=dIC|oBz}fiZIr=afbUuM{d9Tb4#C%4kLp#03yRT^#A|> literal 941 zcmZ?wbhEHb6k-r!_|5~#%E?4{|7tE_>6Jd8RMB}jL)1g{ttGg@qgpA|Hd=_8=v`a{2%OS zV~~^6W`Z1*_Mah*0c1~F8px!yGa$7fFBzwSz|6F?Giho6!9FyenU*#)ZRX6hGc(iv zgFS3~1|&W6Oxl?T=@jGmb`^Gw>z|KPAQo(Zz)|NsAIX3qQ%4oc%QAd6?7nR({S%>Uq!HU1BB z$ISmT&-|bH9~{ueph!3~6BNv6{xh6m0EOI{G*H-_IRo-NC>o4G9s-$l2INLitQdo= zJu?$z@R|SMNHRVH^3u#RAn+d?XU6|QKAidg%$fgZ{)3~?7!=$8XM*DM|9^)644^3b zp9YGA|7SqK42oc5P{@H?c?J|1p!hZh`S1TskPrU<2S>m08Bk!&JOeWNKR7iQ{|ANL z%>N*p{(}<-C@s<*EB<6*WMF7y&;i*D$`cM8T?~vIG9DWi9B^P*w{eq_?=91Ifwd8d zrMwMO9fXXt?q~=ubZQfjx0~W|G0CY>O4my!;^HY!hBZl>nj|MLJ=xFe>Ne+w(ZfU8 z*Ui|TRtm4UxY(mxDVFPt+NmC`Sgtoe1y=-23R%u~Hlpy=*;Y$uufxAYmzk diff --git a/xinha/images/ed_show_border.gif b/xinha/images/ed_show_border.gif index 9e3fdd26d04981962fcde6a071aa223173d46417..42849b71c42467b3cb13d458f05bbed77d240b11 100644 GIT binary patch literal 88 zcmZ?wbhEHb6k-r!n90QO|Nnmm1_lP>nG6gJia%KxK^z@M237_E23`gRCe5Dy%tLSY r%}ZfpX~;jeE$ehGN5#}9jCon<>y)yN<;=cT(2>49MyoD}fx#L86Wtr3 literal 104 zcmZ?wbhEHb6k-r!n8?JyU_6t7f#LuE{|pQaia%Kx85o!tbQl;I7(nt2OqNsnSDt>$ zpFCsBtpuhUd&+e(?(JxlkdS*ZW$9b#S?N~ub=E$c`SRQ9p4CSyv}4zVw%m<4bn6pS Jswe}4H2`I`CN}^8 diff --git a/xinha/images/ed_splitblock.gif b/xinha/images/ed_splitblock.gif index 7a8e352bb0f98927f56a3a97cde0b185ad78deb0..1f1582b9fce824da228b9eec72415916ff4b16d8 100644 GIT binary patch literal 82 zcmZ?wbhEHb6k-r!n8^SI|NsAIU|>-E$-)Q{&|zX=V&G-qV{l+nZt2rJ@K$aL&%|5W g8T%~uoOcOY)Z1~a^yRC{hTCmA+t<#n6l1Uk06VT40RR91 literal 886 zcmZ?wbhEHb6k-r!_|5f#D3uCSwK$V`B#6GzR0D48~^|jQ@iq(~KF?(iqZaGNhehNc#^`JJXn9 zW*WoHnG7?}FwFc9(t5_2;Y=FCnVAe{&M=$-xs>6*F~k2fhW|4e{-0s^{~u&9$mld< zhMC3;XN(#CgX}RjHa1Q(HlAs0e8$-LKgilNW8<_m08KW~QahoS8QBOxn!jtGOZz`F?f;py|Nm!#!p?XmD0F7d1o{6zC~QDpN}CCC z^qHB)|3N_ovN&xf$mlaO)Bb}(4kVp669mr8ocSLVkY|iR)}EO;^URrmy-0R{AbP^g2#E)Ap=6deCSk&tG52IQrgXF!hr z4~mnS#vmWeoOuRh^nXwkoiPS^2*f{g=FI;y{~6BwH$L+}?acp~Xa1i#15RY1a0SOV zND>@{pkM~a3P>$Dph2My4m*%maBzSk0qjGNNnl5V;^a&k$OmAX{)5spNb~>yAnE`A z|117vVPs$sV9)`jXi%PT;0R_=?Q!60a6U HMh0sD;g5a@ diff --git a/xinha/images/ed_splitcel.gif b/xinha/images/ed_splitcel.gif index a619d8aaad304df4d2b2ba97b661f1429a84ee6f..a6e5ab582b3ae4caecf8c810c67dcf23e0fc2611 100644 GIT binary patch literal 111 zcmZ?wbhEHb6lV})SjEEd|Nnmm1_;@}0A@3Qf#OdVMi4`Xk%5&#fPt5Rf!Rc2*BvdT z1Dfe;rrvt}tBFxjpxI-VzX{jjTV0t3XG&~M^7xX|EPu7k$d!04>24^S{WMdJfx#L8 D7)Bz_ literal 143 zcmZ?wbhEHb6lV})Sj57>z|g?(9|RZ}Kr{mkDE?$&WME)n&;bd6)G{!Kcbc6V&mNa*n6H9~wVscsn9{Ef; kd~;3XvPU~&vN%_*y7BGn)wToimTbFs-2YIa%E(|10Pn9lMgRZ+ diff --git a/xinha/images/ed_undo.gif b/xinha/images/ed_undo.gif index f90faada2b3ec918e9200a05b51e2a32fbce92a8..319242fde2107c8fce1ccb6c29f19c9353c47c57 100644 GIT binary patch literal 67 zcmZ?wbhEHb6k-r!n90QO|NnmmhK7cQ1_lNO#h)yU3=9kmIxGyV3_J|%3=B*nE%K5~ XjeRaz%e5lT9xZ!5HB=~ofx#L8ET0hk literal 81 zcmZ?wbhEHb6k-r!n8?J?(9poZ(D48Ne+C8y#h)yU3=B*RIt&a93?O+1CZ#F;D^I`W kPv$mh5an|Xd;6wRTCI=sMCgi(o(Hs!e)75Q!^mI_0B%z>r&CKZ$`M zF)Ql>BO|}Ndl@gUXm0Kr7M2DEhL8&vj+vVm?cMv%+`Q)b^D7Jt(-;_v#Kn_MP0wg* zR*Q&a^YY5&=lA93Z~gyYO<8$wRMe@Yq?w;T|DQMSe{SymgoIuOhE4{CGBdL!moHyt zVCYRxf1s+W)YrF{fuU{2j2;Gt6b=p<1_nV6j%9*^Qy3U37#K2md8JrbW)>D+DJ;Cs z!V<{95XHwQTUfZeqhksS%Z$RpX?}id85o*bSn63==5=%|W??B{VCZ6GFFXIk}S6tNSNSnzDEA?yRhZWo4U-izg-|JT^C+Z^fq{WR zhmnDiL6kv=fr0&H14C1DOKUR|Q(IRn6DwV{ha$%m$$UKji zgPV;5Z03WTw=xLH_?g>T)`c5x zIkU-s0z(0xthI$ojJBl1t%LV2WR$8}iA9^)N0cvm-6~%l?5odb^DASfa;n=tC-x^B z3YFWuq_hJqOL|n)RR)GC7M3mshI|Hw1_gzs zQBjLoSdv&+s#sWxSy;L`IFeXc<_ii=VPL3WV94O$kYQjD6Sqsa`Hm9a;D=eJm=eL%D zp}DYdcSpw*7M2+-EcFZwU5t#pEG!FISmt$fEM{RTU|?9((Q%uFrHFx{gMlG4DypKs zei8#iVpi4%ef^r1D_=4&o6_XEZgdqoPhFCC&W&`G0=?*8l(2l$H0gurx3*gj~3A z%-y|=msd15cg^$XR~Q(kF)$RFn-}ff`_A0FrlFxhO-=3pe}?~Hz`($u_>+Z^fuW8; zhk=2C0Td?;>>nHInwnc$+uA$Ys;fJD>#7+Tdit8WdnRyAn$ll8cgCzK)j3sjYpWJC z2?{VX3GwnVx+Fx`)-0LV%E8UUW}GZpq_eDM>-O5oO-`0ek1v~Bb!6L)X4Wv}^0Z2G zvBK>awyK|Ka%B%Mt?&^Ij!e3D|tc%7BD&VA;FWKiBZO6f?Q_!T0d7o@93)C+iYUhlrLS Y$w^re&JP*e`cwlXB)M2yRG1j70e|fyjsO4v literal 0 HcmV?d00001 diff --git a/xinha/images/fr/strikethrough.gif b/xinha/images/fr/strikethrough.gif new file mode 100644 index 0000000000000000000000000000000000000000..5707aefca484ab93127d0502d7776a76f050ca12 GIT binary patch literal 131 zcmZ?wbhEHb6k-r!*v-%I|Nnmm1_pI?^}P%X)z#Jiot$iKZ9jbYuzL0C>({SGL`0;e zrLnWKUzd^+5D>VlprH7Zg^_`QfkB6vfrWvafs=uO#XvyEaiybzyl{+@V?(NoLW+|^ libEySLq?IK#&^n{C#Nm@vL{^WNEAaoPe_KO!3iY>YXHW+DGdMs literal 0 HcmV?d00001 diff --git a/xinha/images/fr/underline.gif b/xinha/images/fr/underline.gif new file mode 100644 index 0000000000000000000000000000000000000000..4ecaf22126f2e855ded3b733284b0d875a473821 GIT binary patch literal 134 zcmZ?wbhEHb6k-r!*v-rE|Nnmm28Qd`uOB>kP(VOHU0vPQ*0#F3`oo70X=!PzSFdJg zXP-H9W<*2;0~jd&WMKp`bXXWz7`PaC7#LWL1sX&SS+SiIJIB`)QkldN5@wVkWFRv2 iR2xr>WU4nys|1gbvx8#N8zz>d?2|d$0s=x<7_0$7eJCCP literal 0 HcmV?d00001 diff --git a/xinha/images/fullscreen_maximize.gif b/xinha/images/fullscreen_maximize.gif index 07620bc1e51a1375169e7909061dbd78d00556c6..211c1c56ef40ad34090a33873e4e8f01147055ba 100644 GIT binary patch literal 87 zcmZ?wbhEHb6k-r!=wM{{|NlP&1B2pE7DfgJ1_m8Q21W(}1_1^JCcPHHm9yLV?sImS sMi&}iS!-2!UoBPPrlw5mENzR4>CfF}XZ0FAKPV8}#Zt`U&d6X50P|KE?f?J) literal 97 zcmZ?wbhEHb6k-r!XkcVuU|{(F|G(l-7DfgJMg|=aA0)%TWYN>VlI`t%k%;tVoUt1U z($9oUKh}A5bL*=1#+9oo*H1lGRC(!pR(!#i&MPe(u^kap0>XAKDBP*Tz+epk(@`Y1 diff --git a/xinha/images/fullscreen_minimize.gif b/xinha/images/fullscreen_minimize.gif index 09c0383ea37cc1964652915042e651d35dc5e536..f679e5a937350bcbc0c7f77549c6cabd499ca261 100644 GIT binary patch literal 87 zcmZ?wbhEHb6k-r!=wM{{|NlP&1B2pE7DfgJ1_m8Q21W(}1_1^JCcPH3x950U;h4@?#rGU9S24RYXDXhADsXI literal 97 zcmZ?wbhEHb6k-r!XkcVuU|{(F|G(l-7DfgJMg|=aA0)%TWYN>VlH=`urjFvPmzPxb zJ*~=(ST^;B+ce>w%T|??_MF(Y=-X2n-npLH+#fBpSqs!nB72U+KAEY(z+epk%5);{ diff --git a/xinha/images/insert_table.gif b/xinha/images/insert_table.gif index 027f7c8f7a3423780b3916d46476e96c9a2f3b3e..a8f4253bc664924758379b97073d0088463cd402 100644 GIT binary patch literal 104 zcmZ?wbhEHb6k-r!SjEEd|Ns9pXU_cp|DS<@fx&nthy-KBpDc_Zh7KbG6N3N)F9QR! zuEnl9UIt!2m$iDa94vnx^(^y&gofj)b*m%x&Ha7$;emUrd@eoT@Lx^j-7^g%AqHyz D)ukqV literal 121 zcmZ?wbhEHb6k-r!Sj57>U_6t7f#LuE|7Xse`Tzev0}LqsWMO1rU}4Y!34qixFxz?T zy7O;Bi|1-yt%kGJ$0w;5B`EMXb**|CIqxmk>Zb|!E&iRV*>l_>O3i)G-w2QJv|~@M Sb{)BtYSkIB{zeWHgEatYwk|mU diff --git a/xinha/images/insertfilelink.gif b/xinha/images/insertfilelink.gif index d4959ce1332c794e7485a1641f27befa99005e7c..099f04d9cc981c3cff3577cc5253f62f01c14d32 100644 GIT binary patch literal 148 zcmZ?wbhEHb6k-r!SjEop|Nnn>Huk@q+;{HYd~*BN?b}aoJi7m{s6g>23nK#q1A`7D z10#a~g8%~qb0mk<9XTzwx$MGS6H@Z%fMbf)p{0kF0ke zeBH#zBzf53xtEkW>!F7S_WTfIS-HT#)OM=MD=#O7vs$dnTUyl85?`NI)w=GH)X&0T F4FD9-H~Rnp literal 158 zcmZ?wbhEHb6k-r!Sj5iomy?^Fjs3~(TX*i>ynXx0jYs$Y6&3vd|6lPZ3nK#qJA)1b z0|Ns{Edz6M#jZPbil-#wG+cRX-591i^&VpHa#*#>QFGzzTSBaYeODYVJQOOCZdkZj z)3i>ysUTqWSC_em96Y-16ipisI^30z)YWa+FjaP`X5O1yUN4PUUK_IJbFpmusTTQW NL!k(N6AveYH2@;eJ-+|| diff --git a/xinha/images/tidy.gif b/xinha/images/tidy.gif index 2c6dcc489c1df689bea3e804a553c588a31abc3e..a881c640a665683fc6ee1902c3ee1a8b919eae24 100644 GIT binary patch literal 375 zcmZ?wbh9u|6k-r!xO z_u934@3W`uG~e@~$^?@D#^$Cl>jJe&Jd8yR3Nu(^U%i|pBEi7rp|Yu92_v`n zZ`}w5Taj{R(Q1Y=1|Ak>-*5>f2L3$WZZWR-9uE~x0VZB44sQ;2KL%k=jwBu-Zx+cV z49ZOM9s=AVxr@Uma7lVdi%Re^uygJ7R8aL46zAhm6p}sW$?wg^s>UKSBfx+C9WS?s IZjKDr0AD|CumAu6 literal 988 zcmZ?wbhEHb6k-r!cz&7T|Ns9S92^1y0umAunwpx1hK81wmQGGiUS3{7K|xVbQOU{4 z+1c5}#l_Xt)dvn7=;`U1GG)rzwQIL--MV-0-ebp(ojZ5#+O=!%Pon-rj4^ zr))hZ5H+P`?YZJPdy}W^b*f%#S-eytYRbLm@Asa&xAxdQOD8V|ub$`czaP8yeCgh6 zJ!{XkEIn2{=UDcXy+JKoy{gw5W-rxDo+A)6g~O|d!Ko#xWvgZOQpKn_0$x2FUQ-yH zdaCCfOYYh0RJ?Z1)@zDEQy45;7!0c!3|km9tFPUAf9~3ILrbssU?(~`d0AR|F$@l% z_>+Z^i{U?m4#+v6Ji)-RlcAqe#$$tmBLj!9Rt$%O!r^vK);gx(k4{5Z96 zb<3G4iZ!i1GdxpeHNQ1Y4Up7eIGI!VNhCYmi(zBh)|!<%Vuym36$RZ6z+*Di#Q%k)=p8H`7%nQM>LXQ#}q;54DD$v zrzPt<`5xn1Xc%%ji!orTPX3|LgF;nJTe%~(Vi)tM%WM+}(Th9el-T;?gKl~&o3k_z H2ZJ>L6-I}P diff --git a/xinha/images/toggle_borders.gif b/xinha/images/toggle_borders.gif index 7a43c6d2df958b8ab359f54050f33f79198338fa..95bc5be812cbd79f0ca5e29346a1ff15fb0f3125 100644 GIT binary patch literal 73 zcmZ?wbhEHb6k-r!=wM>_|NsA)GiMZkvM@3*FfiyaF)%UkG4L@kFe&u(b4tI?dr&>m ecZSg<@sRtKy;o}=r)IIY&wHNIwknK)!5RQVIvD-{ literal 129 zcmZ?wbhEHb6k-r!IK;%jU_6t7f#LuE|7Xse`Hut?|A{&mr6!i7rYMwWmSiY|WTYy% zd-?`2DE?$&WME)o&|zR;U;r7yz^tpW>(0M`UeD~*rf_+{ZLj%`oW YcfaWg`jGuv`)$ki;1rJ*6$S=t0PL$avH$=8 diff --git a/xinha/images/xinha_logo.gif b/xinha/images/xinha_logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..346e313a44e14f64f6c8db2867c00c3f16a1f632 GIT binary patch literal 3006 zcmZ?wbhEHbJk4Ol@UEWW|Ns9C3?TBO6vIm?hF?E_{Q3Rsu@uAo`}coJF?{**<@@*V zx1<<;{`mItwo|LzJLGz;DP<$q!|AE`Th6r-`~G}{{R2?%9SfBDk^{e|Nr~< zPfSeAzkmPk-@OwQ6!ic9KX-R`K0dy`fByXV{`KGAKf8DDK700TVPWB0DTdFh7X1JJ zr?s{9lK{hy|NsB}`(tQmC?zFzl8a%FIP;(1zcVs2eti4#|KFc0oD2&WE<7U1x{Z%v z1slWrJ2x&y2mJc~f6kmak7i8x_WsSoRf{f9@Bi`R$H$K!fB*dP?AgTn1u3dWahH?k+ScCD+11_CKIR${H6Zv}^aCz5Dhb zICyX;pXk=(Cr+N4=T^exr+rcUviQYo*RNbwxP6=H-km!)uWCQKc~L=I;`Hk`Z?_00 zuyL7vQTg`e$4|3we|Z0~GBC4!Io{8*uZbh~#6)MOxx3p1l!KbKA3bK@_|GVdrQ%5k zE0;-zj-=-#6;>{>K871 zZq*^H`y?2h7^aFlZm*cS<3Iut-w@5l8oO4+$hLMN|k<6OlS!{frXF&Yge+0DkbleFXYmL8ue z@2^p!pnGdJ@cduZYR zc8$La4#^0sOgO+I%#)DHr77TWfKitzgMoKpuNnhq-UowbzKmA}hx^Pp1fKOr`u-3Q zm$`DFQOJ$0A!QOnL4+8qyT#3>DZycxPZ=V!PA=_cl=`3+BO5ZoMK*Qb%4dB}92*>C zA}tlw=f7T4zNGCy@6&~hjjIe+ObL6p_6;L%O8;sOZc*uXP*d&-3nN@@Qym6BVqOq_sh&^YZElO>e7)t$DTC(eA_>~!91Hgbw$HBpTirZIz2?Bdvodoo zaB^GJH>j(Y-1}3k>hoaEY!wfNkB)3gbJU%9_)P>27`VNISh*Dq-kR{pGfdo|9#-&? zk;l;FugUeeaHaU;tTkt{POLvvb>NO_w6)VVRxyb;XJ&{rGF4ak{WY)VR|q^g;kjrg zr+|bPlPgbyyIcc@?}Z7TyBI_+xLlr;Y*C`dx`Cncxx_PpJFL84u583bpzJh=i^BA{YZxPlhU=+M?=)sM{Ej|Y4>wO%WnA{p! zR1Yu|*gMZZ9okM?*UkAAIx`{_nC2OF!)z6rkrQcEMz)ayP$mf z3a2kyjyrovoUZ3Ma75x1JM*i^MIA1OT9`IXXMDJ_p!9vyG;UGW!xFQ29K0*0@ZSBx zw6E|{^K;I|BPs_i{xceOi0w*xV%MOfzUYIHKhFW?cNLvh^Nw>*e{sKZLIo$wl=CdL zk0O3WXdK%yu`tijd@apwqAhj;_O2m?c#NQ!W~`Vp0B`fR^1AL0BQ z(W&0GfNOTZ0U_oGwq70#T$TY$Dy9?n-l++!ojOJQjgh3Y^v{Qr4`e;Qq87*!bWMTX zs^owg%Z(GCcnyW6c^DNKm+$aBFp>HAjf9DPo}N22H}}lE)5w4B!AbwNNy3X&?tZm6 z=<97Usd?@LriaH)&NF<|V=I57MfBK#R<%1iECRhR^n_2HGuXAcc1FrFo|*(Ub4TGR zmsnZ_50%ej&zL-a?U(eQCC4~(rcGHexqGRa$WI0z9R?0X4f&T0?dQ6h&Xnq(Ss`h; zs!{d9*|zU*SUxFTKj`;mv(SGVesA-KL5_z^n3w;5!s4r6*cAD0OR??LCtSK*SG8SRSObigCs&wN+8U-U;s(=&yAVeImsmv4DZY=fWXQ zvC}vHuqv!sF=mIb$r(%!zOCfk?Z>pf>MTpv z-!8?gVM(i}6gd1;n&EuQ&1lp1+}J$Nwy>>H3CxE?eTDX1Y`=f2f5&WtL(B~6RtyIM zr=IoI4Dr1kbnV)vT@72cRQDW^6KrS{{`~b_M3;bw!K1RCCwp`LOX)PUe>ud;BCQZ0 zxk;gcFK5BLyt!$NhmOZGh$z++ooOjnWxRX&*Y*CzTm|v!8?T&Pdr3&>L8eN0fmYhq z&1*j2%2=-xz{q_#m04N9L2{V^E1$A!+T}g(&6OWqJ-#Yp|I$?d5<|ng|Bpqi)@Nf7 zJHMFKS48n3*Efd#>8dN(qm9C*fA!ht63oPUro3Xw!?~DYeCT(hX&qsj;1@${mOSGi!r&kb~Cm)wCwx+_kHbo<`$Kb z&i?`G%Bz{O+nKj4U{O%G)-)@lnp0r|qgloS_8H}k&rJJ&%4aw*XD(onP71NVT=VbC z{P^_@Hj)b!RR4W_7w|Ls&Xv}MB1bjYW_(lEc4(f?aYT9M*Fd3fkE(7+$4gE)cq+!G zX3_!+dkv3+zuh(WPn{6Z@I!ktZ*2ehzrIhNu&I3Dyth2KiR0~4mFklpe%Rk?T;rl~ zIC9~+AcY0&&-3^H{;_-uyH?QD*PH*SD>yPcCe}_0Wb`j=;F!_i-&xk) z4>z(pCo+DYUN3P&-9v#vd_$z%j!5wtjX%O!;sRJp8W=QYG->T<(z(&3_oGSAgIz+v sRVku*<^@(R0cl3Q4b3(;n(clxJ4m!RX|xC?uuM*C_ORe=WMHrc0J2_xU;qFB literal 0 HcmV?d00001 diff --git a/xinha/inline-dialog.js b/xinha/inline-dialog.js deleted file mode 100644 index 0562ed3..0000000 --- a/xinha/inline-dialog.js +++ /dev/null @@ -1,327 +0,0 @@ - -HTMLArea.Dialog = function(editor, html, localizer) -{ - this.id = { }; - this.r_id = { }; // reverse lookup id - this.editor = editor; - this.document = document; - - this.rootElem = document.createElement('div'); - this.rootElem.className = 'dialog'; - this.rootElem.style.position = 'absolute'; - this.rootElem.style.display = 'none'; - this.editor._framework.ed_cell.insertBefore(this.rootElem, this.editor._framework.ed_cell.firstChild); - this.rootElem.style.width = this.width = this.editor._framework.ed_cell.offsetWidth + 'px'; - this.rootElem.style.height = this.height = this.editor._framework.ed_cell.offsetHeight + 'px'; - - var dialog = this; - if(typeof localizer == 'function') - { - this._lc = localizer; - } - else if(localizer) - { - this._lc = function(string) - { - return HTMLArea._lc(string,localizer); - }; - } - else - { - this._lc = function(string) - { - return string; - }; - } - - html = html.replace(/\[([a-z0-9_]+)\]/ig, - function(fullString, id) - { - if(typeof dialog.id[id] == 'undefined') - { - dialog.id[id] = HTMLArea.uniq('Dialog'); - dialog.r_id[dialog.id[id]] = id; - } - return dialog.id[id]; - } - ).replace(/(.*?)<\/l10n>/ig, - function(fullString,translate) - { - return dialog._lc(translate) ; - } - ).replace(/="_\((.*?)\)"/g, - function(fullString, translate) - { - return '="' + dialog._lc(translate) + '"'; - } - ); - - this.rootElem.innerHTML = html; - - - - - this.editor.notifyOn - ('resize', - function(e, args) - { - dialog.rootElem.style.width = dialog.width = dialog.editor._framework.ed_cell.offsetWidth + 'px'; - dialog.rootElem.style.height = dialog.height = dialog.editor._framework.ed_cell.offsetHeight + 'px'; - dialog.onresize(); - } - ); -}; - -HTMLArea.Dialog.prototype.onresize = function() -{ - return true; -}; - -HTMLArea.Dialog.prototype.show = function(values) -{ - // We need to preserve the selection for IE - if(HTMLArea.is_ie) - { - this._lastRange = this.editor._createRange(this.editor._getSelection()); - } - - if(typeof values != 'undefined') - { - this.setValues(values); - } - this._restoreTo = [this.editor._textArea.style.display, this.editor._iframe.style.visibility, this.editor.hidePanels()]; - - this.editor._textArea.style.display = 'none'; - this.editor._iframe.style.visibility = 'hidden'; - this.rootElem.style.display = ''; -}; - -HTMLArea.Dialog.prototype.hide = function() -{ - this.rootElem.style.display = 'none'; - this.editor._textArea.style.display = this._restoreTo[0]; - this.editor._iframe.style.visibility = this._restoreTo[1]; - this.editor.showPanels(this._restoreTo[2]); - - // Restore the selection - if(HTMLArea.is_ie) - { - this._lastRange.select(); - } - this.editor.updateToolbar(); - return this.getValues(); -}; - -HTMLArea.Dialog.prototype.toggle = function() -{ - if(this.rootElem.style.display == 'none') - { - this.show(); - } - else - { - this.hide(); - } -}; - -HTMLArea.Dialog.prototype.setValues = function(values) -{ - for(var i in values) - { - var elems = this.getElementsByName(i); - if(!elems) continue; - for(var x = 0; x < elems.length; x++) - { - var e = elems[x]; - switch(e.tagName.toLowerCase()) - { - case 'select' : - { - for(var j = 0; j < e.options.length; j++) - { - if(typeof values[i] == 'object') - { - for(var k = 0; k < values[i].length; k++) - { - if(values[i][k] == e.options[j].value) - { - e.options[j].selected = true; - } - } - } - else if(values[i] == e.options[j].value) - { - e.options[j].selected = true; - } - } - break; - } - - - case 'textarea': - case 'input' : - { - switch(e.getAttribute('type')) - { - case 'radio' : - { - if(e.value == values[i]) - { - e.checked = true; - } - break; - } - - case 'checkbox': - { - if(typeof values[i] == 'object') - { - for(var j in values[i]) - { - if(values[i][j] == e.value) - { - e.checked = true; - } - } - } - else - { - if(values[i] == e.value) - { - e.checked = true; - } - } - break; - } - - default : - { - e.value = values[i]; - } - } - break; - } - - default : - break; - } - } - } -}; - -HTMLArea.Dialog.prototype.getValues = function() -{ - var values = [ ]; - var inputs = HTMLArea.collectionToArray(this.rootElem.getElementsByTagName('input')) - .append(HTMLArea.collectionToArray(this.rootElem.getElementsByTagName('textarea'))) - .append(HTMLArea.collectionToArray(this.rootElem.getElementsByTagName('select'))); - - for(var x = 0; x < inputs.length; x++) - { - var i = inputs[x]; - if(!(i.name && this.r_id[i.name])) continue; - - if(typeof values[this.r_id[i.name]] == 'undefined') - { - values[this.r_id[i.name]] = null; - } - var v = values[this.r_id[i.name]]; - - switch(i.tagName.toLowerCase()) - { - case 'select': - { - if(i.multiple) - { - if(!v.push) - { - if(v != null) - { - v = [v]; - } - else - { - v = new Array(); - } - } - for(var j = 0; j < i.options.length; j++) - { - if(i.options[j].selected) - { - v.push(i.options[j].value); - } - } - } - else - { - if(i.selectedIndex >= 0) - { - v = i.options[i.selectedIndex]; - } - } - break; - } - - case 'textarea': - case 'input' : - 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 = new Array(); - } - } - - 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; - } - } - } - - } - - values[this.r_id[i.name]] = v; - } - return values; -}; - -HTMLArea.Dialog.prototype.getElementById = function(id) -{ - return this.document.getElementById(this.id[id] ? this.id[id] : id); -}; - -HTMLArea.Dialog.prototype.getElementsByName = function(name) -{ - return this.document.getElementsByName(this.id[name] ? this.id[name] : name); -}; \ No newline at end of file diff --git a/xinha/lang/b5.js b/xinha/lang/b5.js index 86d1e65..f000699 100644 --- a/xinha/lang/b5.js +++ b/xinha/lang/b5.js @@ -1,29 +1,29 @@ -// 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": "關於 HTMLArea", - "Help using editor": "說明", - "Current style": "字體例å­" -} +// 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": "關於 HTMLArea", + "Help using editor": "說明", + "Current style": "字體例å­" +} diff --git a/xinha/lang/ch.js b/xinha/lang/ch.js index a0fe7e5..4227fa4 100644 --- a/xinha/lang/ch.js +++ b/xinha/lang/ch.js @@ -1,56 +1,56 @@ -// 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": "關於 HTMLArea", - "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": "你必須輸入你è¦è¿žç»“的網å€" -} +// 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": "關於 HTMLArea", + "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/xinha/lang/cz.js b/xinha/lang/cz.js index 8cc7424..87faec8 100644 --- a/xinha/lang/cz.js +++ b/xinha/lang/cz.js @@ -1,50 +1,50 @@ -// 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." -} +// 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/xinha/lang/da.js b/xinha/lang/da.js index 7d3d2fc..5a14e2b 100644 --- a/xinha/lang/da.js +++ b/xinha/lang/da.js @@ -1,30 +1,30 @@ -// LANG: "da", ENCODING: UTF-8 -// Author: rene, - -{ - "Bold": "Fed", - "Italic": "Kursiv", - "Underline": "Understregning", - "Strikethrough": "Overstregning ", - "Subscript": "Sænket skrift", - "Superscript": "Hævet skrift", - "Justify Left": "Venstrejuster", - "Justify Center": "Centrer", - "Justify Right": "Højrejuster", - "Justify Full": "Lige margener", - "Ordered List": "Opstilling med tal", - "Bulleted List": "Opstilling med punkttegn", - "Decrease Indent": "Formindsk indrykning", - "Increase Indent": "Forøg indrykning", - "Font Color": "Skriftfarve", - "Background Color": "Baggrundsfarve", - "Horizontal Rule": "Horisontal linie", - "Insert Web Link": "Indsæt hyperlink", - "Insert/Modify Image": "Indsæt billede", - "Insert Table": "Indsæt tabel", - "Toggle HTML Source": "HTML visning", - "Enlarge Editor": "Vis editor i popup", - "About this editor": "Om htmlarea", - "Help using editor": "Hjælp", - "Current style": "Anvendt stil" -} +// LANG: "da", ENCODING: UTF-8 +// Author: rene, + +{ + "Bold": "Fed", + "Italic": "Kursiv", + "Underline": "Understregning", + "Strikethrough": "Overstregning ", + "Subscript": "Sænket skrift", + "Superscript": "Hævet skrift", + "Justify Left": "Venstrejuster", + "Justify Center": "Centrer", + "Justify Right": "Højrejuster", + "Justify Full": "Lige margener", + "Ordered List": "Opstilling med tal", + "Bulleted List": "Opstilling med punkttegn", + "Decrease Indent": "Formindsk indrykning", + "Increase Indent": "Forøg indrykning", + "Font Color": "Skriftfarve", + "Background Color": "Baggrundsfarve", + "Horizontal Rule": "Horisontal linie", + "Insert Web Link": "Indsæt hyperlink", + "Insert/Modify Image": "Indsæt billede", + "Insert Table": "Indsæt tabel", + "Toggle HTML Source": "HTML visning", + "Enlarge Editor": "Vis editor i popup", + "About this editor": "Om htmlarea", + "Help using editor": "Hjælp", + "Current style": "Anvendt stil" +} diff --git a/xinha/lang/de.js b/xinha/lang/de.js index 4bf0eed..ff10313 100644 --- a/xinha/lang/de.js +++ b/xinha/lang/de.js @@ -1,148 +1,169 @@ -// 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. Bitte klicken Sie OK um die technische Erläuterung auf mozilla.org zu öffnen, in der erklärt wird, wie einem Skript Zugriff gewährt werden kann.", - - "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": "Table 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" +// 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/xinha/lang/ee.js b/xinha/lang/ee.js index 2534271..2c961e5 100644 --- a/xinha/lang/ee.js +++ b/xinha/lang/ee.js @@ -1,50 +1,50 @@ -// 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." -} +// 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/xinha/lang/el.js b/xinha/lang/el.js index bc3df96..8476a4d 100644 --- a/xinha/lang/el.js +++ b/xinha/lang/el.js @@ -1,55 +1,55 @@ -// 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 Ο€ΞÎΟ… ΞÎδηγΡί Ξ±Ο…Ο„ΟŒΟ‚ ΞΠΟƒΟÂνδΡσμΞÎΟ‚" -} +// 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/xinha/lang/es.js b/xinha/lang/es.js index 885f0e0..e1ea5c1 100644 --- a/xinha/lang/es.js +++ b/xinha/lang/es.js @@ -1,40 +1,40 @@ -// I18N constants - -// LANG: "es", 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": "Centrar", - "Justify Right": "Alinear a la Derecha", - "Justify Full": "Justificar", - "Ordered List": "Lista Ordenada", - "Bulleted List": "Lista No Ordenada", - "Decrease Indent": "Aumentar Sangr?a", - "Increase Indent": "Disminuir Sangr?a", - "Font Color": "Color del Texto", - "Background Color": "Color del Fondo", - "Horizontal Rule": "L?nea Horizontal", - "Insert Web Link": "Insertar Enlace", - "Insert/Modify Image": "Insertar Imagen", - "Insert Table": "Insertar Tabla", - "Toggle HTML Source": "Ver Documento en HTML", - "Enlarge Editor": "Ampliar Editor", - "About this editor": "Acerca del Editor", - "Help using editor": "Ayuda", - "Current style": "Estilo Actual", - "Undoes your last action": "Deshacer", - "Redoes your last action": "Rehacer", - "Cut selection": "Cortar selecci?n", - "Copy selection": "Copiar selecci?n", - "Paste from clipboard": "Pegar desde el portapapeles", - "OK": "Aceptar", - "Cancel": "Cancelar", - "Path": "Ruta", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Esta en modo TEXTO. Use el boton [<>] para cambiar a WYSIWIG" -} +// I18N constants + +// LANG: "es", 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": "Centrar", + "Justify Right": "Alinear a la Derecha", + "Justify Full": "Justificar", + "Ordered List": "Lista Ordenada", + "Bulleted List": "Lista No Ordenada", + "Decrease Indent": "Aumentar Sangr?a", + "Increase Indent": "Disminuir Sangr?a", + "Font Color": "Color del Texto", + "Background Color": "Color del Fondo", + "Horizontal Rule": "L?nea Horizontal", + "Insert Web Link": "Insertar Enlace", + "Insert/Modify Image": "Insertar Imagen", + "Insert Table": "Insertar Tabla", + "Toggle HTML Source": "Ver Documento en HTML", + "Enlarge Editor": "Ampliar Editor", + "About this editor": "Acerca del Editor", + "Help using editor": "Ayuda", + "Current style": "Estilo Actual", + "Undoes your last action": "Deshacer", + "Redoes your last action": "Rehacer", + "Cut selection": "Cortar selecci?n", + "Copy selection": "Copiar selecci?n", + "Paste from clipboard": "Pegar desde el portapapeles", + "OK": "Aceptar", + "Cancel": "Cancelar", + "Path": "Ruta", + "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Esta en modo TEXTO. Use el boton [<>] para cambiar a WYSIWIG" +} diff --git a/xinha/lang/eu.js b/xinha/lang/eu.js new file mode 100644 index 0000000..ec06ed5 --- /dev/null +++ b/xinha/lang/eu.js @@ -0,0 +1,169 @@ +// 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/xinha/lang/fa.js b/xinha/lang/fa.js new file mode 100644 index 0000000..106e831 --- /dev/null +++ b/xinha/lang/fa.js @@ -0,0 +1,167 @@ +// 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/xinha/lang/fi.js b/xinha/lang/fi.js index e057b9a..0297c78 100644 --- a/xinha/lang/fi.js +++ b/xinha/lang/fi.js @@ -1,38 +1,38 @@ -// 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" -} +// 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/xinha/lang/fr.js b/xinha/lang/fr.js index 5185795..56bf537 100644 --- a/xinha/lang/fr.js +++ b/xinha/lang/fr.js @@ -1,130 +1,169 @@ -// 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": "Numérotation", - "Bulleted List": "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": "Effacer tags MSOffice", - "Clear Inline Font Specifications": "Supprimer paramètres inline de la fonte", - "Split Block": "Séparer les blocks", - "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 simplement 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étail.", - - "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 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 entrez 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:": "Text 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" +// 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/xinha/lang/gb.js b/xinha/lang/gb.js index fdeebcd..d3c8df8 100644 --- a/xinha/lang/gb.js +++ b/xinha/lang/gb.js @@ -1,29 +1,29 @@ -// 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": "关於 HTMLArea", - "Help using editor": "说明", - "Current style": "字体例å­" -} +// 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": "关於 HTMLArea", + "Help using editor": "说明", + "Current style": "字体例å­" +} diff --git a/xinha/lang/he.js b/xinha/lang/he.js index e39d3fc..60dbd76 100644 --- a/xinha/lang/he.js +++ b/xinha/lang/he.js @@ -1,64 +1,64 @@ -// 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 ש×ליו קישור ×–×” מצביע" -} +// 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/xinha/lang/hu.js b/xinha/lang/hu.js index a4b1fa4..75c541c 100644 --- a/xinha/lang/hu.js +++ b/xinha/lang/hu.js @@ -1,64 +1,64 @@ -// 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" -} +// 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/xinha/lang/it.js b/xinha/lang/it.js index 15e346e..426e74c 100644 --- a/xinha/lang/it.js +++ b/xinha/lang/it.js @@ -1,55 +1,55 @@ -// 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 HTMLArea", - "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" -} +// 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 HTMLArea", + "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/xinha/lang/ja.js b/xinha/lang/ja.js index e7f1520..dd8adf0 100644 --- a/xinha/lang/ja.js +++ b/xinha/lang/ja.js @@ -1,5 +1,5 @@ -// I18N constants -- Japanese UTF-8 -// by Manabu Onoue -- tmocsys@tmocsys.com +// I18N constants +// LANG: "ja", ENCODING: UTF-8N { "Bold": "太字", @@ -19,12 +19,157 @@ "Font Color": "文字色", "Background Color": "背景色", "Horizontal Rule": "水平線", - "Insert Web Link": "リンク作æˆ", - "Insert/Modify Image": "ç”»åƒæŒ¿å…¥", - "Insert Table": "テーブル挿入", - "Toggle HTML Source": "HTML表示切替", - "Enlarge Editor": "エディタ拡大", + "Insert Web Link": "ãƒªãƒ³ã‚¯ã®æŒ¿å…¥", + "Insert/Modify Image": "ç”»åƒã®æŒ¿å…¥/修正", + "Insert Table": "テーブルを挿入", + "Toggle HTML Source": "HTML編集モードを切替", + "Enlarge Editor": "エディタを最大化", "About this editor": "ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±", "Help using editor": "ヘルプ", - "Current style": "ç¾åœ¨ã®ã‚¹ã‚¿ã‚¤ãƒ«" -} + "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/xinha/lang/lt.js b/xinha/lang/lt.js index ea34009..1235676 100644 --- a/xinha/lang/lt.js +++ b/xinha/lang/lt.js @@ -1,53 +1,53 @@ -// 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" -} +// 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/xinha/lang/lv.js b/xinha/lang/lv.js index 840b4e7..b24593d 100644 --- a/xinha/lang/lv.js +++ b/xinha/lang/lv.js @@ -1,42 +1,42 @@ -// I18N constants - -// LANG: "lv", ENCODING: UTF-8 -// Author: Mihai Bazon, http://dynarch.com/mishoo -// Translated by: Janis Klavins, - -{ - "Bold": "Trekniem burtiem", - "Italic": "Kursîvâ", - "Underline": "Pasvîtrots", - "Strikethrough": "Pârsvîtrots", - "Subscript": "Novietot zem rindas", - "Superscript": "Novietot virs rindas", - "Justify Left": "Izlîdzinât pa kreisi", - "Justify Center": "Izlîdzinât centrâ", - "Justify Right": "Izlîdzinât pa labi", - "Justify Full": "Izlîdzinât pa visu lapu", - "Ordered List": "Numurçts saraksts", - "Bulleted List": "Saraksts", - "Decrease Indent": "Samazinât atkâpi", - "Increase Indent": "Palielinât atkâpi", - "Font Color": "Burtu krâsa", - "Background Color": "Fona krâsa", - "Horizontal Rule": "Horizontâla atdalîtâjsvîtra", - "Insert Web Link": "Ievietot hipersaiti", - "Insert/Modify Image": "Ievietot attçlu", - "Insert Table": "Ievietot tabulu", - "Toggle HTML Source": "Skatît HTML kodu", - "Enlarge Editor": "Palielinât Rediìçtâju", - "About this editor": "Par ðo rediìçtâju", - "Help using editor": "Rediìçtâja palîgs", - "Current style": "Patreizçjais stils", - "Undoes your last action": "Atcelt pçdçjo darbîbu", - "Redoes your last action": "Atkârtot pçdçjo darbîbu", - "Cut selection": "Izgriezt iezîmçto", - "Copy selection": "Kopçt iezîmçto", - "Paste from clipboard": "Ievietot iezîmçto", - "OK": "Labi", - "Cancel": "Atcelt", - "Path": "Ceïð", - "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." -} +// I18N constants + +// LANG: "lv", ENCODING: UTF-8 +// Author: Mihai Bazon, http://dynarch.com/mishoo +// Translated by: Janis Klavins, + +{ + "Bold": "Trekniem burtiem", + "Italic": "Kursîvâ", + "Underline": "Pasvîtrots", + "Strikethrough": "Pârsvîtrots", + "Subscript": "Novietot zem rindas", + "Superscript": "Novietot virs rindas", + "Justify Left": "Izlîdzinât pa kreisi", + "Justify Center": "Izlîdzinât centrâ", + "Justify Right": "Izlîdzinât pa labi", + "Justify Full": "Izlîdzinât pa visu lapu", + "Ordered List": "Numurçts saraksts", + "Bulleted List": "Saraksts", + "Decrease Indent": "Samazinât atkâpi", + "Increase Indent": "Palielinât atkâpi", + "Font Color": "Burtu krâsa", + "Background Color": "Fona krâsa", + "Horizontal Rule": "Horizontâla atdalîtâjsvîtra", + "Insert Web Link": "Ievietot hipersaiti", + "Insert/Modify Image": "Ievietot attçlu", + "Insert Table": "Ievietot tabulu", + "Toggle HTML Source": "Skatît HTML kodu", + "Enlarge Editor": "Palielinât Rediìçtâju", + "About this editor": "Par ðo rediìçtâju", + "Help using editor": "Rediìçtâja palîgs", + "Current style": "Patreizçjais stils", + "Undoes your last action": "Atcelt pçdçjo darbîbu", + "Redoes your last action": "Atkârtot pçdçjo darbîbu", + "Cut selection": "Izgriezt iezîmçto", + "Copy selection": "Kopçt iezîmçto", + "Paste from clipboard": "Ievietot iezîmçto", + "OK": "Labi", + "Cancel": "Atcelt", + "Path": "Ceïð", + "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." +} diff --git a/xinha/lang/nb.js b/xinha/lang/nb.js index 835b9a8..6ae0451 100644 --- a/xinha/lang/nb.js +++ b/xinha/lang/nb.js @@ -1,31 +1,78 @@ -// I18N constants - -// LANG: "en", ENCODING: UTF-8 - -{ - "Bold": "Fet", - "Italic": "Kursiv", - "Underline": "Understreket", - "Strikethrough": "Gjennomstreket", - "Subscript": "Senket", - "Superscript": "Hevet", - "Justify Left": "Venstrejuster", - "Justify Center": "Midtjuster", - "Justify Right": "Høyrejuster", - "Justify Full": "Blokkjuster", - "Ordered List": "Nummerert liste", - "Bulleted List": "Punktmerket liste", - "Decrease Indent": "Øke innrykk", - "Increase Indent": "Reduser innrykk", - "Font Color": "Skriftfarge", - "Background Color": "Bakgrunnsfarge", - "Horizontal Rule": "Horisontal linje", - "Insert Web Link": "Sett inn lenke", - "Insert/Modify Image": "Sett inn bilde", - "Insert Table": "Sett inn tabell", - "Toggle HTML Source": "Vis HTML kode", - "Enlarge Editor": "Forstørr redigeringsvindu", - "About this editor": "Om..", - "Help using editor": "Hjelp", - "Current style": "Gjeldende stil" -} +// 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/xinha/lang/nl.js b/xinha/lang/nl.js index 4b4f721..3fe6b8c 100644 --- a/xinha/lang/nl.js +++ b/xinha/lang/nl.js @@ -1,64 +1,64 @@ -// 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": "HTMLArea 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" -} +// 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": "HTMLArea 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/xinha/lang/no.js b/xinha/lang/no.js deleted file mode 100644 index fd7df35..0000000 --- a/xinha/lang/no.js +++ /dev/null @@ -1,69 +0,0 @@ -// I18N constants - -// LANG: "no", 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" -}; diff --git a/xinha/lang/pl.js b/xinha/lang/pl.js index 0bb858f..b5bd5ce 100644 --- a/xinha/lang/pl.js +++ b/xinha/lang/pl.js @@ -65,9 +65,9 @@ "Left": "Do lewej", "Right": "Do prawej", "Texttop": "Góra tekstu", - "Absmiddle": "Absolutny Å›rodek", + "Absmiddle": "Abs. Å›rodek", "Baseline": "Linia bazowa", - "Absbottom": "Absolutny dół", + "Absbottom": "Abs. dół", "Bottom": "Dół", "Middle": "Åšrodek", "Top": "Góra", @@ -107,7 +107,7 @@ "Width unit": "Jednostka", "Fixed width columns": "Kolumny o staÅ‚ej szerokoÅ›ci", "Positioning of this table": "Pozycjonowanie tabeli", - "Cell spacing:": "Spacjowanie komórek:", + "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", diff --git a/xinha/lang/ro.js b/xinha/lang/ro.js index e622932..6565bd2 100644 --- a/xinha/lang/ro.js +++ b/xinha/lang/ro.js @@ -1,63 +1,63 @@ -// 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" -} +// 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/xinha/lang/ru.js b/xinha/lang/ru.js index 85ba601..5290b7f 100644 --- a/xinha/lang/ru.js +++ b/xinha/lang/ru.js @@ -1,50 +1,185 @@ -// I18N constants - -// LANG: "ru", ENCODING: UTF-8 -// Author: Yulya Shtyryakova, - -// 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": "OK", - "Cancel": "Отмена", - "Path": "Путь", - "You are in TEXT MODE. Use the [<>] button to switch back to WYSIWYG.": "Ð’Ñ‹ в режиме Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Html-кода. нажмите кнопку [<>], чтобы переключитьÑÑ Ð² визуальный режим." -} +// 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/xinha/lang/se.js b/xinha/lang/se.js deleted file mode 100644 index 88087ee..0000000 --- a/xinha/lang/se.js +++ /dev/null @@ -1,32 +0,0 @@ -// LANG: "se", ENCODING: UTF-8 - -// Swedish version for htmlArea v3.0 - Alpha Release -// - translated by pat - -{ - "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", - "Insert Table": "Infoga tabell", - "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" -} diff --git a/xinha/lang/sh.js b/xinha/lang/sh.js new file mode 100644 index 0000000..2706304 --- /dev/null +++ b/xinha/lang/sh.js @@ -0,0 +1,140 @@ +// 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/xinha/lang/si.js b/xinha/lang/si.js index c34abbe..90a69b5 100644 --- a/xinha/lang/si.js +++ b/xinha/lang/si.js @@ -1,50 +1,50 @@ -// 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." -} +// 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/xinha/lang/sr.js b/xinha/lang/sr.js new file mode 100644 index 0000000..06f78c4 --- /dev/null +++ b/xinha/lang/sr.js @@ -0,0 +1,140 @@ +// 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/xinha/lang/sv.js b/xinha/lang/sv.js new file mode 100644 index 0000000..61af49e --- /dev/null +++ b/xinha/lang/sv.js @@ -0,0 +1,116 @@ +// 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/xinha/lang/vn.js b/xinha/lang/vn.js index 0aa6416..4bdd0d3 100644 --- a/xinha/lang/vn.js +++ b/xinha/lang/vn.js @@ -1,56 +1,56 @@ -// 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" -} +// 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/xinha/modules/ColorPicker/ColorPicker.js b/xinha/modules/ColorPicker/ColorPicker.js new file mode 100644 index 0000000..45535ee --- /dev/null +++ b/xinha/modules/ColorPicker/ColorPicker.js @@ -0,0 +1,590 @@ +ColorPicker._pluginInfo={name:"colorPicker",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/"}; +function ColorPicker(){ +} +if(window.opener&&window.opener.Xinha){ +var openerColorPicker=window.opener.Xinha.colorPicker; +Xinha._addEvent(window,"unload",function(){ +Xinha.colorPicker=openerColorPicker; +}); +} +Xinha.colorPicker=function(_1){ +if(Xinha.colorPicker.savedColors.length===0){ +Xinha.colorPicker.loadColors(); +} +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("\xd7")); +_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("\xa0")); +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{ +top+=e.offsetTop; +_24+=e.offsetLeft; +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"; +} +}; +function pickCell(_26){ +_2.chosenColor.value=_26.colorCode; +_2.backSample.style.backgroundColor=_26.colorCode; +_2.foreSample.style.color=_26.colorCode; +if((_26.hue>=195&&_26.saturation>0.5)||(_26.hue===0&&_26.saturation===0&&_26.value<0.5)||(_26.hue!==0&&_2.value<0.75)){ +_26.style.borderColor="#fff"; +}else{ +_26.style.borderColor="#000"; +} +_5=_26.thisrow; +_6=_26.thiscol; +} +function pickValue(_27){ +if(_2.value<0.5){ +_27.style.borderColor="#fff"; +}else{ +_27.style.borderColor="#000"; +} +_9=_27.thisrow; +_8=_27.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 _2a,cols; +var _2b=this; +var _2c=359/(this.side); +var _2d=1/(this.side-1); +var _2e=1/(this.side-1); +var _2f=this.constrain_cb.checked; +if(this.saved_cells===null){ +this.saved_cells=[]; +for(var row=0;row=195&&_41.saturation>0.5)||(_41.hue===0&&_41.saturation===0&&_41.value<0.5)||(_41.hue!==0&&_2b.value<0.75)){ +_41.style.borderColor="#fff"; +}else{ +_41.style.borderColor="#000"; +} +} +}; +this.close=function(){ +Xinha._removeEvent(document.body,"mousedown",closeOnBodyClick); +this.table.style.display="none"; +}; +}; +Xinha.colorPicker.savedColors=[]; +Xinha.colorPicker.remember=function(_42,_43){ +for(var i=Xinha.colorPicker.savedColors.length;i--;){ +if(Xinha.colorPicker.savedColors[i]==_42){ +return false; +} +} +Xinha.colorPicker.savedColors.splice(0,0,_42); +Xinha.colorPicker.savedColors=Xinha.colorPicker.savedColors.slice(0,_43); +var _45=new Date(); +_45.setMonth(_45.getMonth()+1); +document.cookie="XinhaColorPicker="+escape(Xinha.colorPicker.savedColors.join("-"))+";expires="+_45.toGMTString(); +return true; +}; +Xinha.colorPicker.loadColors=function(){ +var _46=document.cookie.indexOf("XinhaColorPicker"); +if(_46!=-1){ +var _47=(document.cookie.indexOf("=",_46)+1); +var end=document.cookie.indexOf(";",_46); +if(end==-1){ +end=document.cookie.length; +} +Xinha.colorPicker.savedColors=unescape(document.cookie.substring(_47,end)).split("-"); +} +}; +Xinha.colorPicker._lc=function(_49){ +return Xinha._lc(_49); +}; +Xinha.colorPicker.InputBinding=function(_4a,_4b){ +var _4c=document.createElement("span"); +_4c.className="buttonColor"; +var _4d=this.chooser=document.createElement("span"); +_4d.className="chooser"; +if(_4a.value){ +_4d.style.backgroundColor=_4a.value; +} +_4d.onmouseover=function(){ +_4d.className="chooser buttonColor-hilite"; +}; +_4d.onmouseout=function(){ +_4d.className="chooser"; +}; +_4d.appendChild(document.createTextNode("\xa0")); +_4c.appendChild(_4d); +var _4e=document.createElement("span"); +_4e.className="nocolor"; +_4e.onmouseover=function(){ +_4e.className="nocolor buttonColor-hilite"; +_4e.style.color="#f00"; +}; +_4e.onmouseout=function(){ +_4e.className="nocolor"; +_4e.style.color="#000"; +}; +_4e.onclick=function(){ +_4a.value=""; +_4d.style.backgroundColor=""; +}; +_4e.appendChild(document.createTextNode("\xd7")); +_4c.appendChild(_4e); +_4a.parentNode.insertBefore(_4c,_4a.nextSibling); +Xinha._addEvent(_4a,"change",function(){ +_4d.style.backgroundColor=this.value; +}); +_4b=(_4b)?Xinha.cloneObject(_4b):{cellsize:"5px"}; +_4b.callback=(_4b.callback)?_4b.callback:function(_4f){ +_4d.style.backgroundColor=_4f; +_4a.value=_4f; +}; +_4d.onclick=function(){ +var _50=new Xinha.colorPicker(_4b); +_50.open("",_4d,_4a.value); +}; +}; + diff --git a/xinha/popups/link.html b/xinha/modules/CreateLink/link.html similarity index 92% rename from xinha/popups/link.html rename to xinha/modules/CreateLink/link.html index 6cd9340..adad400 100644 --- a/xinha/popups/link.html +++ b/xinha/modules/CreateLink/link.html @@ -2,16 +2,16 @@ Insert/Modify Link - - + + "); +return s; +}; +HTMLArea.getHTML=function(_15,_16,_17){ +var _18=""; +var c=HTMLArea.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(HTMLArea.is_ie){ +_18=_18.replace(/]*)?>/g,"").replace(/(<(ul|ol)[^>]*>)[\s\n]*<\/li>/g,"$1").replace(/<\/li>([\s\n]*<\/li>)+/g,""); +} +if(HTMLArea.is_gecko){ +_18=_18.replace(/
\n$/,""); +} +if(_16){ +_18+=""; +} +_18=HTMLArea.indent(_18); +} +return _18; +}; + diff --git a/xinha/popups/insert_image.html b/xinha/modules/InsertImage/insert_image.html similarity index 63% rename from xinha/popups/insert_image.html rename to xinha/modules/InsertImage/insert_image.html index 3043e43..f4f81af 100644 --- a/xinha/popups/insert_image.html +++ b/xinha/modules/InsertImage/insert_image.html @@ -1,172 +1,174 @@ - - - - Insert Image - - - - - - - - - - -
Insert Image
- - - - - - - - - - - - - - - -
Image URL: - -
Alternate text:
- -

- -

-Layout - -
- -
Alignment:
- - -

- -

Border thickness:
- - -
- -
- -
-Spacing - -
- -
Horizontal:
- - -

- -

Vertical:
- - -
- -
-
- - - - - -
-
Image Preview:
- -
-
- -
- - + + + Insert Image + + + + + + + + + + +
Insert Image
+ +
+ + + + + + + + + + + + + + +
Image URL: + +
Alternate text:
+ +
+ +
+Layout + +
+ +
Alignment:
+ + +
+ +
Border thickness:
+ + +
+ +
+ +
+Spacing + +
+ +
Horizontal:
+ + +
+ +
Vertical:
+ + +
+ +
+
+
+Image Preview:
+ +
+
+ + +
+
+ \ No newline at end of file diff --git a/xinha/modules/InsertImage/insert_image.js b/xinha/modules/InsertImage/insert_image.js new file mode 100644 index 0000000..05da99f --- /dev/null +++ b/xinha/modules/InsertImage/insert_image.js @@ -0,0 +1,107 @@ +InsertImage._pluginInfo={name:"InsertImage",origin:"Xinha Core",version:"$LastChangedRevision: 733 $".replace(/^[^:]*: (.*) \$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.python-hosting.com/trunk/modules/InsertImage/insert_image.js $".replace(/^[^:]*: (.*) \$$/,"$1"),sponsor:"",sponsor_url:"",license:"htmlArea"}; +function InsertImage(_1){ +} +Xinha.prototype._insertImage=function(_2){ +var _3=this; +var _4; +if(typeof _2=="undefined"){ +_2=this.getParentElement(); +if(_2&&_2.tagName.toLowerCase()!="img"){ +_2=null; +} +} +var _5; +if(typeof _3.config.baseHref!="undefined"&&_3.config.baseHref!==null){ +_5=_3.config.baseHref; +}else{ +var _6=window.location.toString().split("/"); +_6.pop(); +_5=_6.join("/"); +} +if(_2){ +_4={f_base:_5,f_url:Xinha.is_ie?_3.stripBaseURL(_2.src):_2.getAttribute("src"),f_alt:_2.alt,f_border:_2.border,f_align:_2.align,f_vert:(_2.vspace!=-1?_2.vspace:""),f_horiz:(_2.hspace!=-1?_2.hspace:""),f_width:_2.width,f_height:_2.height}; +}else{ +_4={f_base:_5,f_url:""}; +} +Dialog(_3.config.URIs.insert_image,function(_7){ +if(!_7){ +return false; +} +var _8=_2; +if(!_8){ +if(Xinha.is_ie){ +var _9=_3.getSelection(); +var _a=_3.createRange(_9); +_3._doc.execCommand("insertimage",false,_7.f_url); +_8=_a.parentElement(); +if(_8.tagName.toLowerCase()!="img"){ +_8=_8.previousSibling; +} +}else{ +_8=document.createElement("img"); +_8.src=_7.f_url; +_3.insertNodeAtSelection(_8); +if(!_8.tagName){ +_8=_a.startContainer.firstChild; +} +} +}else{ +_8.src=_7.f_url; +} +for(var _b in _7){ +var _c=_7[_b]; +switch(_b){ +case "f_alt": +if(_c){ +_8.alt=_c; +}else{ +_8.removeAttribute("alt"); +} +break; +case "f_border": +if(_c){ +_8.border=parseInt(_c||"0"); +}else{ +_8.removeAttribute("border"); +} +break; +case "f_align": +if(_c){ +_8.align=_c; +}else{ +_8.removeAttribute("align"); +} +break; +case "f_vert": +if(_c){ +_8.vspace=parseInt(_c||"0"); +}else{ +_8.removeAttribute("vspace"); +} +break; +case "f_horiz": +if(_c){ +_8.hspace=parseInt(_c||"0"); +}else{ +_8.removeAttribute("hspace"); +} +break; +case "f_width": +if(_c){ +_8.width=parseInt(_c||"0"); +}else{ +_8.removeAttribute("width"); +} +break; +case "f_height": +if(_c){ +_8.height=parseInt(_c||"0"); +}else{ +_8.removeAttribute("height"); +} +break; +} +} +},_4); +}; + diff --git a/xinha/popups/insert_table.html b/xinha/modules/InsertTable/insert_table.html similarity index 88% rename from xinha/popups/insert_table.html rename to xinha/modules/InsertTable/insert_table.html index ef3c2f3..351a0a2 100644 --- a/xinha/popups/insert_table.html +++ b/xinha/modules/InsertTable/insert_table.html @@ -1,157 +1,157 @@ - - - - Insert Table - - - - - - - - - - -
Insert Table
- -
- - - - - - - - - - - - - - - - - -
Rows:Width:
Cols:
- -

- -

-Layout - -
- -
Alignment:
- - -

- -

Border thickness:
- - -
- -
- -
-Spacing - -
- -
Cell spacing:
- - -

- -

Cell padding:
- - -
- -
- -
- - -
- -
- - + + + + Insert Table + + + + + + + + + + +
Insert Table
+ +
+ + + + + + + + + + + + + + + + + +
Rows:Width:
Cols:
+ +

+ +

+Layout + +
+ +
Alignment:
+ + +

+ +

Border thickness:
+ + +
+ +
+ +
+Spacing + +
+ +
Cell spacing:
+ + +

+ +

Cell padding:
+ + +
+ +
+ +
+ + +
+ +
+ + \ No newline at end of file diff --git a/xinha/modules/InsertTable/insert_table.js b/xinha/modules/InsertTable/insert_table.js new file mode 100644 index 0000000..74183b2 --- /dev/null +++ b/xinha/modules/InsertTable/insert_table.js @@ -0,0 +1,63 @@ +InsertTable._pluginInfo={name:"InsertTable",origin:"Xinha Core",version:"$LastChangedRevision: 688 $".replace(/^[^:]*: (.*) \$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.python-hosting.com/trunk/modules/InsertTable/insert_table.js $".replace(/^[^:]*: (.*) \$$/,"$1"),sponsor:"",sponsor_url:"",license:"htmlArea"}; +function InsertTable(_1){ +} +Xinha.prototype._insertTable=function(){ +var _2=this.getSelection(); +var _3=this.createRange(_2); +var _4=this; +Dialog(_4.config.URIs.insert_table,function(_5){ +if(!_5){ +return false; +} +var _6=_4._doc; +var _7=_6.createElement("table"); +for(var _8 in _5){ +var _9=_5[_8]; +if(!_9){ +continue; +} +switch(_8){ +case "f_width": +_7.style.width=_9+_5.f_unit; +break; +case "f_align": +_7.align=_9; +break; +case "f_border": +_7.border=parseInt(_9,10); +break; +case "f_spacing": +_7.cellSpacing=parseInt(_9,10); +break; +case "f_padding": +_7.cellPadding=parseInt(_9,10); +break; +} +} +var _a=0; +if(_5.f_fixed){ +_a=Math.floor(100/parseInt(_5.f_cols,10)); +} +var _b=_6.createElement("tbody"); +_7.appendChild(_b); +for(var i=0;i<_5.f_rows;++i){ +var tr=_6.createElement("tr"); +_b.appendChild(tr); +for(var j=0;j<_5.f_cols;++j){ +var td=_6.createElement("td"); +if(_a){ +td.style.width=_a+"%"; +} +tr.appendChild(td); +td.appendChild(_6.createTextNode("\xa0")); +} +} +if(Xinha.is_ie){ +_3.pasteHTML(_7.outerHTML); +}else{ +_4.insertNodeAtSelection(_7); +} +return true; +},null); +}; + diff --git a/xinha/modules/InternetExplorer/InternetExplorer.js b/xinha/modules/InternetExplorer/InternetExplorer.js new file mode 100644 index 0000000..c7acbef --- /dev/null +++ b/xinha/modules/InternetExplorer/InternetExplorer.js @@ -0,0 +1,217 @@ +InternetExplorer._pluginInfo={name:"Internet Explorer",origin:"Xinha Core",version:"$LastChangedRevision: 816 $".replace(/^[^:]*: (.*) \$$/,"$1"),developer:"The Xinha Core Developer Team",developer_url:"$HeadURL: http://svn.xinha.python-hosting.com/trunk/modules/InternetExplorer/InternetExplorer.js $".replace(/^[^:]*: (.*) \$$/,"$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; +} +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(/( )?([\s\S]*?)(=1){ +return _1d.item(0).outerHTML; +} +} +return ""; +}; +Xinha.prototype.getSelection=function(){ +return this._doc.selection; +}; +Xinha.prototype.createRange=function(sel){ +return sel.createRange(); +}; +Xinha.prototype.isKeyEvent=function(_1f){ +return _1f.type=="keydown"; +}; +Xinha.prototype.getKey=function(_20){ +return String.fromCharCode(_20.keyCode); +}; +Xinha.getOuterHTML=function(_21){ +return _21.outerHTML; +}; +Xinha.prototype.cc=String.fromCharCode(8201); +Xinha.prototype.setCC=function(_22){ +if(_22=="textarea"){ +var ta=this._textArea; +var pos=document.selection.createRange(); +pos.collapse(); +pos.text=this.cc; +var _25=ta.value.indexOf(this.cc); +var _26=ta.value.substring(0,_25); +var _27=ta.value.substring(_25+this.cc.length,ta.value.length); +if(_27.match(/^[^<]*>/)){ +var _28=_27.indexOf(">")+1; +ta.value=_26+_27.substring(0,_28)+this.cc+_27.substring(_28,_27.length); +}else{ +ta.value=_26+this.cc+_27; +} +}else{ +var sel=this.getSelection(); +var r=sel.createRange(); +if(sel.type=="Control"){ +var _2b=r.item(0); +_2b.outerHTML+=this.cc; +}else{ +r.collapse(); +r.text=this.cc; +} +} +}; +Xinha.prototype.findCC=function(_2c){ +var _2d=(_2c=="textarea")?this._textArea:this._doc.body; +range=_2d.createTextRange(); +if(range.findText(escape(this.cc))){ +range.select(); +range.text=""; +} +if(range.findText(this.cc)){ +range.select(); +range.text=""; +} +if(_2c=="textarea"){ +this._textArea.focus(); +} +}; +Xinha.getDoctype=function(doc){ +return (doc.compatMode=="CSS1Compat")?"":""; +}; + diff --git a/xinha/plugins/CSS/css.js b/xinha/plugins/CSS/css.js index 0a48e52..c34442c 100644 --- a/xinha/plugins/CSS/css.js +++ b/xinha/plugins/CSS/css.js @@ -1,149 +1,74 @@ -// Simple CSS (className) plugin for the editor -// Sponsored by http://www.miro.com.au -// 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$ -// @TODO This is the default and won't be very useful to others. -// We should make this better. -HTMLArea.Config.prototype.cssPluginConfig = - { - combos : [ - { label: "Syntax", - // menu text // CSS class - options: { "None" : "", - "Code" : "code", - "String" : "string", - "Comment" : "comment", - "Variable name" : "variable-name", - "Type" : "type", - "Reference" : "reference", - "Preprocessor" : "preprocessor", - "Keyword" : "keyword", - "Function name" : "function-name", - "Html tag" : "html-tag", - "Html italic" : "html-helper-italic", - "Warning" : "warning", - "Html bold" : "html-helper-bold" - }, - context: "pre" - }, - { label: "Info", - options: { "None" : "", - "Quote" : "quote", - "Highlight" : "highlight", - "Deprecated" : "deprecated" - } - } - ] - }; - -function CSS(editor, params) { - this.editor = editor; - var cfg = editor.config; - var self = this; - var plugin_config; - if(params && params.length) - { - plugin_config = params[0]; - } - else - { - plugin_config = editor.config.cssPluginConfig; - } - - var combos = plugin_config.combos; - - for (var i = 0; i < combos.length; i++) { - var combo = combos[i]; - var id = "CSS-class" + i; - var css_class = { - id : id, - options : combo.options, - action : function(editor) { self.onSelect(editor, this, combo.context, combo.updatecontextclass); }, - refresh : function(editor) { self.updateValue(editor, this); }, - context : combo.context - }; - cfg.registerDropdown(css_class); - cfg.addToolbarElement(["T[" + combo.label + "]", id, "separator"] , "formatblock", -1); - } +HTMLArea.Config.prototype.cssPluginConfig={combos:[{label:"Syntax",options:{"None":"","Code":"code","String":"string","Comment":"comment","Variable name":"variable-name","Type":"type","Reference":"reference","Preprocessor":"preprocessor","Keyword":"keyword","Function name":"function-name","Html tag":"html-tag","Html italic":"html-helper-italic","Warning":"warning","Html bold":"html-helper-bold"},context:"pre"},{label:"Info",options:{"None":"","Quote":"quote","Highlight":"highlight","Deprecated":"deprecated"}}]}; +function CSS(_1,_2){ +this.editor=_1; +var _3=_1.config; +var _4=this; +var _5; +if(_2&&_2.length){ +_5=_2[0]; +}else{ +_5=_1.config.cssPluginConfig; +} +var _6=_5.combos; +for(var i=0;i<_6.length;i++){ +var _8=_6[i]; +var id="CSS-class"+i; +var _a={id:id,options:_8.options,action:function(_b){ +_4.onSelect(_b,this,_8.context,_8.updatecontextclass); +},refresh:function(_c){ +_4.updateValue(_c,this); +},context:_8.context}; +_3.registerDropdown(_a); +_3.addToolbarElement(["T["+_8.label+"]",id,"separator"],"formatblock",-1); +} +} +CSS._pluginInfo={name:"CSS",version:"1.0",developer:"Mihai Bazon",developer_url:"http://dynarch.com/mishoo/",c_owner:"Mihai Bazon",sponsor:"Miro International",sponsor_url:"http://www.miro.com.au",license:"htmlArea"}; +CSS.prototype.onSelect=function(_d,_e,_f,_10){ +var _11=_d._toolbarObjects[_e.id]; +var _12=_11.element.selectedIndex; +var _13=_11.element.value; +var _14=_d.getParentElement(); +var _15=true; +var _16=(_14&&_14.tagName.toLowerCase()=="span"); +var _17=(_f&&_10&&_14&&_14.tagName.toLowerCase()==_f); +if(_17){ +_14.className=_13; +_d.updateToolbar(); +return; +} +if(_16&&_12==0&&!/\S/.test(_14.style.cssText)){ +while(_14.firstChild){ +_14.parentNode.insertBefore(_14.firstChild,_14); +} +_14.parentNode.removeChild(_14); +_d.updateToolbar(); +return; +} +if(_16){ +if(_14.childNodes.length==1){ +_14.className=_13; +_15=false; +_d.updateToolbar(); +} +} +if(_15){ +_d.surroundHTML("",""); } - -CSS._pluginInfo = { - name : "CSS", - version : "1.0", - developer : "Mihai Bazon", - developer_url : "http://dynarch.com/mishoo/", - c_owner : "Mihai Bazon", - sponsor : "Miro International", - sponsor_url : "http://www.miro.com.au", - license : "htmlArea" }; - -CSS.prototype.onSelect = function(editor, obj, context, updatecontextclass) { - var tbobj = editor._toolbarObjects[obj.id]; - var index = tbobj.element.selectedIndex; - var className = 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 = className; - 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 = className; - 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. - editor.surroundHTML("", ""); - } +CSS.prototype.updateValue=function(_18,obj){ +var _1a=_18._toolbarObjects[obj.id].element; +var _1b=_18.getParentElement(); +if(typeof _1b.className!="undefined"&&/\S/.test(_1b.className)){ +var _1c=_1a.options; +var _1d=_1b.className; +for(var i=_1c.length;--i>=0;){ +var _1f=_1c[i]; +if(_1d==_1f.value){ +_1a.selectedIndex=i; +return; +} +} +} +_1a.selectedIndex=0; }; - -CSS.prototype.updateValue = function(editor, obj) { - var select = editor._toolbarObjects[obj.id].element; - var parent = editor.getParentElement(); - if (typeof parent.className != "undefined" && /\S/.test(parent.className)) { - var options = select.options; - var value = parent.className; - for (var i = options.length; --i >= 0;) { - var option = options[i]; - if (value == option.value) { - select.selectedIndex = i; - return; - } - } - } - select.selectedIndex = 0; -}; \ No newline at end of file + diff --git a/xinha/plugins/CharCounter/char-counter.js b/xinha/plugins/CharCounter/char-counter.js index 99b0427..5b16445 100644 --- a/xinha/plugins/CharCounter/char-counter.js +++ b/xinha/plugins/CharCounter/char-counter.js @@ -1,89 +1,106 @@ -// Charcounter for HTMLArea-3.0 -// (c) Udo Schmal & L.N.Schaffrath NeueMedien -// Distributed under the same terms as HTMLArea itself. -// This notice MUST stay intact for use (see license.txt). +function CharCounter(_1){ +this.editor=_1; +this._Chars=0; +this._Words=0; +this._HTML=0; +this.onKeyPress=this.__onKeyPress; +} +HTMLArea.Config.prototype.CharCounter={"showChar":true,"showWord":true,"showHtml":true,"separator":" | ","maxHTML":-1}; +CharCounter._pluginInfo={name:"CharCounter",version:"1.31",developer:"Udo Schmal",developer_url:"http://www.schaffrath-neuemedien.de",sponsor:"L.N.Schaffrath NeueMedien",sponsor_url:"http://www.schaffrath-neuemedien.de",c_owner:"Udo Schmal & L.N.Schaffrath NeueMedien",license:"htmlArea"}; +CharCounter.prototype._lc=function(_2){ +return HTMLArea._lc(_2,"CharCounter"); +}; +CharCounter.prototype.onGenerateOnce=function(){ +var _3=this; +if(this.charCount==null){ +var _4=document.createElement("span"); +_4.style.padding="2px 5px"; +if(HTMLArea.is_ie){ +_4.style.styleFloat="right"; +}else{ +_4.style.cssFloat="right"; +} +var _5=document.createElement("div"); +_5.style.height=_5.style.width=_5.style.lineHeight=_5.style.fontSize="1px"; +_5.style.clear="both"; +if(HTMLArea.is_ie){ +this.editor._statusBarTree.style.styleFloat="left"; +}else{ +this.editor._statusBarTree.style.cssFloat="left"; +} +this.editor._statusBar.appendChild(_4); +this.editor._statusBar.appendChild(_5); +this.charCount=_4; +} +}; +CharCounter.prototype.__onKeyPress=function(ev){ +if((ev.keyCode!=8)&&(ev.keyCode!=46)){ +if(this.editor.config.CharCounter.maxHTML!=-1){ +var _7=this.editor.getHTML(); +if(_7.length>=this.editor.config.CharCounter.maxHTML){ +HTMLArea._stopEvent(ev); +return true; +} +} +} +}; +CharCounter.prototype._updateCharCount=function(){ +var _8=this.editor; +var _9=_8.config; +var _a=_8.getHTML(); +var _b=new Array(); +if(_9.CharCounter.showHtml){ +_b[_b.length]=this._lc("HTML")+": "+_a.length; +} +this._HTML=_a.length; +if(_9.CharCounter.showWord||_9.CharCounter.showChar){ +_a=_a.replace(/<\/?\s*!--[^-->]*-->/gi,""); +_a=_a.replace(/<(.+?)>/g,""); +_a=_a.replace(/ /gi," "); +_a=_a.replace(/([\n\r\t])/g," "); +_a=_a.replace(/( +)/g," "); +_a=_a.replace(/&(.*);/g," "); +_a=_a.replace(/^\s*|\s*$/g,""); +} +if(_9.CharCounter.showWord){ +this._Words=0; +for(var x=0;x<_a.length;x++){ +if(_a.charAt(x)==" "){ +this._Words++; +} +} +if(this._Words>=1){ +this._Words++; +} +_b[_b.length]=this._lc("Words")+": "+this._Words; +} +if(_9.CharCounter.showChar){ +_b[_b.length]=this._lc("Chars")+": "+_a.length; +this._Chars=_a.length; +} +this.charCount.innerHTML=_b.join(_9.CharCounter.separator); +}; +CharCounter.prototype.onUpdateToolbar=function(){ +this.charCount.innerHTML=this._lc("... in progress"); +if(this._timeoutID){ +window.clearTimeout(this._timeoutID); +} +var e=this; +this._timeoutID=window.setTimeout(function(){ +e._updateCharCount(); +},1000); +}; +CharCounter.prototype.onMode=function(_e){ +switch(_e){ +case "textmode": +this.charCount.style.display="none"; +break; +case "wysiwyg": +this.charCount.style.display=""; +break; +default: +alert("Mode <"+_e+"> not defined!"); +return false; +} +}; -function CharCounter(editor) { - this.editor = editor; -} - -CharCounter._pluginInfo = { - name : "CharCounter", - version : "1.0", - developer : "Udo Schmal", - developer_url : "http://www.schaffrath-neuemedien.de", - sponsor : "L.N.Schaffrath NeueMedien", - sponsor_url : "http://www.schaffrath-neuemedien.de", - c_owner : "Udo Schmal & L.N.Schaffrath NeueMedien", - license : "htmlArea" -}; - -CharCounter.prototype._lc = function(string) { - return HTMLArea._lc(string, "CharCounter"); -}; - - -CharCounter.prototype.onGenerate = function() { - var self = this; - if (this.charCount==null) { - var charCount = document.createElement("span"); - charCount.style.padding = "2px 5px"; - if(HTMLArea.is_ie) { - charCount.style.styleFloat = "right"; - } else { - charCount.style.cssFloat = "right"; - } - var brk = document.createElement('div'); - brk.style.height = - brk.style.width = - brk.style.lineHeight = - brk.style.fontSize = '1px'; - brk.style.clear = 'both'; - if(HTMLArea.is_ie) { - this.editor._statusBarTree.style.styleFloat = "left"; - } else { - this.editor._statusBarTree.style.cssFloat = "left"; - } - this.editor._statusBar.appendChild(charCount); - this.editor._statusBar.appendChild(brk); - this.charCount = charCount; - } -}; - -CharCounter.prototype.onUpdateToolbar = function() { - this.updateCharCount(); -}; - -CharCounter.prototype.onMode = function (mode) -{ - //Hide Chars in statusbar when switching into textmode - switch (mode) - { - case "textmode": - this.charCount.style.display = "none"; - break; - case "wysiwyg": - this.charCount.style.display = ""; - break; - default: - alert("Mode <" + mode + "> not defined!"); - return false; - } -}; - -CharCounter.prototype.updateCharCount = function(ev) { - editor = this.editor; - var contents = editor.getHTML(); - contents = contents.replace(/<(.+?)>/g, '');//Don't count HTML tags - contents = contents.replace(/([\n\r\t])/g, ' ');//convert newlines and tabs into space - contents = contents.replace(/( +)/g, ' ');//count spaces only once - contents = contents.replace(/&(.*);/g, ' ');//Count htmlentities as one keystroke - contents = contents.replace(/^\s*|\s*$/g, '');//trim -// var words=0; -// for (var x=0;x z1_owtj$H!h0xTWl=Nx(=6(KP-jb+LOPX+g&!xz@(p4`QFk;7H-NN#~eizwf-4}Y6> lI5})DmZ>v+xZx#>S&LQF#DvKlTko9MDk-MFW&#U?H2|giGPM8z literal 143 zcmZ?wbhEHb6k-r!Sj52a|Ns932M#neH2h~^XkchyVEE4f7F7Jn!YabR&Y;7 -// (c) systemconcept.de 2004 -// Distributed under the same terms as HTMLArea itself. -// This notice MUST stay intact for use (see license.txt). -{ - "Insert special character": "Sonderzeichen einfügen", - "Cancel": "Abbrechen" -} +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// Sponsored by http://www.systemconcept.de +// Author: Holger Hees, +// (c) systemconcept.de 2004 +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +{ + "Insert special character": "Sonderzeichen einfügen", + "Cancel": "Abbrechen" +} diff --git a/xinha/plugins/CharacterMap/lang/fr.js b/xinha/plugins/CharacterMap/lang/fr.js index 9ac8940..24851be 100644 --- a/xinha/plugins/CharacterMap/lang/fr.js +++ b/xinha/plugins/CharacterMap/lang/fr.js @@ -1,6 +1,6 @@ // I18N constants // LANG: "fr", ENCODING: UTF-8 { - "Insert special character": "Insérer caractère spécial", + "Insert special character": "Insérer un caractère spécial", "Cancel": "Annuler" }; \ No newline at end of file diff --git a/xinha/plugins/CharacterMap/lang/ja.js b/xinha/plugins/CharacterMap/lang/ja.js new file mode 100644 index 0000000..68ec5fd --- /dev/null +++ b/xinha/plugins/CharacterMap/lang/ja.js @@ -0,0 +1,6 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Insert special character": "特殊文字を挿入", + "Cancel": "中止" +}; \ No newline at end of file diff --git a/xinha/plugins/CharacterMap/lang/no.js b/xinha/plugins/CharacterMap/lang/nb.js similarity index 84% rename from xinha/plugins/CharacterMap/lang/no.js rename to xinha/plugins/CharacterMap/lang/nb.js index dd5da1f..744e6fc 100644 --- a/xinha/plugins/CharacterMap/lang/no.js +++ b/xinha/plugins/CharacterMap/lang/nb.js @@ -1,5 +1,5 @@ // I18N constants -// LANG: "no", ENCODING: UTF-8 +// LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Insert special character": "Sett inn tegn", diff --git a/xinha/plugins/CharacterMap/lang/ru.js b/xinha/plugins/CharacterMap/lang/ru.js new file mode 100644 index 0000000..9111dd5 --- /dev/null +++ b/xinha/plugins/CharacterMap/lang/ru.js @@ -0,0 +1,7 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// Author: Andrei Blagorazumov, a@fnr.ru +{ + "Insert special character": "Ð’Ñтавить Ñпециальный Ñимвол", + "Cancel": "Отменить" +}; \ No newline at end of file diff --git a/xinha/plugins/CharacterMap/lang/sv.js b/xinha/plugins/CharacterMap/lang/sv.js new file mode 100644 index 0000000..4e29804 --- /dev/null +++ b/xinha/plugins/CharacterMap/lang/sv.js @@ -0,0 +1,7 @@ +// I18N constants +// LANG: "sv" (Swedish), ENCODING: UTF-8 +// translated: Erik Dalén +{ + "Insert special character": "Infoga tecken", + "Cancel": "Avbryt" +}; diff --git a/xinha/plugins/CharacterMap/popups/select_character.html b/xinha/plugins/CharacterMap/popups/select_character.html index ae40bf9..7fff2bf 100644 --- a/xinha/plugins/CharacterMap/popups/select_character.html +++ b/xinha/plugins/CharacterMap/popups/select_character.html @@ -1,183 +1,184 @@ - - - -Insert special character - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Ÿš@"¡¢£¤¥¦§¨©ª«¬
¯°±²³´µ·¸¹º»¼½¾
¿×Ø÷øƒˆ˜
ÀÁÂÃÄÅÆ
ÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ
®×ÙÚÛÜÝÞßàáâãäåæ
çèéêëìíîïðñòóôõö
÷øùúûüýþÿŒœŠ 

-

- + + + +Insert special character + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ÿš@"¡¢£¤¥¦§¨©ª«¬
¯°±²³´µ·¸¹º»¼½¾
¿×Ø÷øƒˆ˜
ÀÁÂÃÄÅÆ
ÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ
®×ÙÚÛÜÝÞßàáâãäåæ
çèéêëìíîïðñòóôõö
÷øùúûüýþÿŒœŠ 

+
+ \ No newline at end of file diff --git a/xinha/plugins/ContextMenu/1.pl b/xinha/plugins/ContextMenu/1.pl index fdf6679..88645d9 100755 --- a/xinha/plugins/ContextMenu/1.pl +++ b/xinha/plugins/ContextMenu/1.pl @@ -1,38 +1,38 @@ -#! /usr/bin/perl -w - -use strict; - -my $file = 'context-menu.js'; -my $outfile = $file.'-i18n'; -my $langfile = 'en.js'; - -open FILE, "<$file"; -#open OUTFILE, ">$outfile"; -#open LANGFILE, ">$langfile"; -my %texts = (); -while () { - if (/"(.*?)"/) { - my $inline = $_; - chomp $inline; - my $key = $1; - my $val = $1; - print "Key: [$key]: "; - my $line = ; - if (defined $line) { - chomp $line; - if ($line =~ /(\S+)/) { - $key = $1; - print "-- using $key\n"; - } - $texts{$val} = $key; - } else { - print " -- skipped...\n"; - } - } -} -#close LANGFILE; -#close OUTFILE; -close FILE; - -print "\n\n\n"; -print '"', join("\"\n\"", sort keys %texts), '"', "\n"; +#! /usr/bin/perl -w + +use strict; + +my $file = 'context-menu.js'; +my $outfile = $file.'-i18n'; +my $langfile = 'en.js'; + +open FILE, "<$file"; +#open OUTFILE, ">$outfile"; +#open LANGFILE, ">$langfile"; +my %texts = (); +while () { + if (/"(.*?)"/) { + my $inline = $_; + chomp $inline; + my $key = $1; + my $val = $1; + print "Key: [$key]: "; + my $line = ; + if (defined $line) { + chomp $line; + if ($line =~ /(\S+)/) { + $key = $1; + print "-- using $key\n"; + } + $texts{$val} = $key; + } else { + print " -- skipped...\n"; + } + } +} +#close LANGFILE; +#close OUTFILE; +close FILE; + +print "\n\n\n"; +print '"', join("\"\n\"", sort keys %texts), '"', "\n"; diff --git a/xinha/plugins/ContextMenu/context-menu.js b/xinha/plugins/ContextMenu/context-menu.js index 01a6653..688e5e1 100644 --- a/xinha/plugins/ContextMenu/context-menu.js +++ b/xinha/plugins/ContextMenu/context-menu.js @@ -1,448 +1,383 @@ -// Context Menu 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$ - -HTMLArea.loadStyle("menu.css", "ContextMenu"); - -function ContextMenu(editor) { - this.editor = editor; +HTMLArea.loadStyle("menu.css","ContextMenu"); +function ContextMenu(_1){ +this.editor=_1; } - -ContextMenu._pluginInfo = { - name : "ContextMenu", - version : "1.0", - developer : "Mihai Bazon", - developer_url : "http://dynarch.com/mishoo/", - c_owner : "dynarch.com", - sponsor : "American Bible Society", - sponsor_url : "http://www.americanbible.org", - license : "htmlArea" +ContextMenu._pluginInfo={name:"ContextMenu",version:"1.0",developer:"Mihai Bazon",developer_url:"http://dynarch.com/mishoo/",c_owner:"dynarch.com",sponsor:"American Bible Society",sponsor_url:"http://www.americanbible.org",license:"htmlArea"}; +ContextMenu.prototype.onGenerate=function(){ +var _2=this; +var _3=this.editordoc=this.editor._iframe.contentWindow.document; +HTMLArea._addEvents(_3,["contextmenu"],function(_4){ +return _2.popupMenu(HTMLArea.is_ie?_2.editor._iframe.contentWindow.event:_4); +}); +this.currentMenu=null; }; - -ContextMenu.prototype.onGenerate = function() { - var self = this; - var doc = this.editordoc = this.editor._iframe.contentWindow.document; - HTMLArea._addEvents(doc, ["contextmenu"], - function (event) { - return self.popupMenu(HTMLArea.is_ie ? self.editor._iframe.contentWindow.event : event); - }); - this.currentMenu = null; +ContextMenu.prototype.getContextMenu=function(_5){ +var _6=this; +var _7=this.editor; +var _8=_7.config; +var _9=[]; +var _a=this.editor.plugins.TableOperations; +if(_a){ +_a=_a.instance; +} +var _b=_7.hasSelectedText(); +if(!HTMLArea.is_gecko){ +if(_b){ +_9.push([HTMLArea._lc("Cut","ContextMenu"),function(){ +_7.execCommand("cut"); +},null,_8.btnList["cut"][1]],[HTMLArea._lc("Copy","ContextMenu"),function(){ +_7.execCommand("copy"); +},null,_8.btnList["copy"][1]]); +_9.push([HTMLArea._lc("Paste","ContextMenu"),function(){ +_7.execCommand("paste"); +},null,_8.btnList["paste"][1]]); +} +} +var _c=_5; +var _d=[]; +var _e=null; +var _f=null; +var tr=null; +var td=null; +var img=null; +function tableOperation(_13){ +_a.buttonPress(_7,_13); +} +function insertPara(_14){ +var el=_c; +var par=el.parentNode; +var p=_7._doc.createElement("p"); +p.appendChild(_7._doc.createElement("br")); +par.insertBefore(p,_14?el.nextSibling:el); +var sel=_7._getSelection(); +var _19=_7._createRange(sel); +if(!HTMLArea.is_ie){ +sel.removeAllRanges(); +_19.selectNodeContents(p); +_19.collapse(true); +sel.addRange(_19); +}else{ +_19.moveToElementText(p); +_19.collapse(true); +_19.select(); +} +} +for(;_5;_5=_5.parentNode){ +var tag=_5.tagName; +if(!tag){ +continue; +} +tag=tag.toLowerCase(); +switch(tag){ +case "img": +img=_5; +_d.push(null,[HTMLArea._lc("_Image Properties...","ContextMenu"),function(){ +_7._insertImage(img); +},HTMLArea._lc("Show the image properties dialog","ContextMenu"),_8.btnList["insertimage"][1]]); +break; +case "a": +_e=_5; +_d.push(null,[HTMLArea._lc("_Modify Link...","ContextMenu"),function(){ +_7.config.btnList["createlink"][3](_7); +},HTMLArea._lc("Current URL is","ContextMenu")+": "+_e.href,_8.btnList["createlink"][1]],[HTMLArea._lc("Chec_k Link...","ContextMenu"),function(){ +window.open(_e.href); +},HTMLArea._lc("Opens this link in a new window","ContextMenu")],[HTMLArea._lc("_Remove Link...","ContextMenu"),function(){ +if(confirm(HTMLArea._lc("Please confirm that you want to unlink this element.","ContextMenu")+"\n"+HTMLArea._lc("Link points to:","ContextMenu")+" "+_e.href)){ +while(_e.firstChild){ +_e.parentNode.insertBefore(_e.firstChild,_e); +} +_e.parentNode.removeChild(_e); +} +},HTMLArea._lc("Unlink the current element","ContextMenu")]); +break; +case "td": +td=_5; +if(!_a){ +break; +} +_d.push(null,[HTMLArea._lc("C_ell Properties...","ContextMenu"),function(){ +tableOperation("TO-cell-prop"); +},HTMLArea._lc("Show the Table Cell Properties dialog","ContextMenu"),_8.btnList["TO-cell-prop"][1]],[HTMLArea._lc("Insert Cell After","ContextMenu"),function(){ +tableOperation("TO-cell-insert-after"); +},HTMLArea._lc("Insert Cell After","ContextMenu"),_8.btnList["TO-cell-insert-after"][1]],[HTMLArea._lc("Insert Cell Before","ContextMenu"),function(){ +tableOperation("TO-cell-insert-before"); +},HTMLArea._lc("Insert Cell After","ContextMenu"),_8.btnList["TO-cell-insert-before"][1]],[HTMLArea._lc("Delete Cell","ContextMenu"),function(){ +tableOperation("TO-cell-delete"); +},HTMLArea._lc("Delete Cell","ContextMenu"),_8.btnList["TO-cell-delete"][1]],[HTMLArea._lc("Merge Cells","ContextMenu"),function(){ +tableOperation("TO-cell-merge"); +},HTMLArea._lc("Merge Cells","ContextMenu"),_8.btnList["TO-cell-merge"][1]]); +break; +case "tr": +tr=_5; +if(!_a){ +break; +} +_d.push(null,[HTMLArea._lc("Ro_w Properties...","ContextMenu"),function(){ +tableOperation("TO-row-prop"); +},HTMLArea._lc("Show the Table Row Properties dialog","ContextMenu"),_8.btnList["TO-row-prop"][1]],[HTMLArea._lc("I_nsert Row Before","ContextMenu"),function(){ +tableOperation("TO-row-insert-above"); +},HTMLArea._lc("Insert a new row before the current one","ContextMenu"),_8.btnList["TO-row-insert-above"][1]],[HTMLArea._lc("In_sert Row After","ContextMenu"),function(){ +tableOperation("TO-row-insert-under"); +},HTMLArea._lc("Insert a new row after the current one","ContextMenu"),_8.btnList["TO-row-insert-under"][1]],[HTMLArea._lc("_Delete Row","ContextMenu"),function(){ +tableOperation("TO-row-delete"); +},HTMLArea._lc("Delete the current row","ContextMenu"),_8.btnList["TO-row-delete"][1]]); +break; +case "table": +_f=_5; +if(!_a){ +break; +} +_d.push(null,[HTMLArea._lc("_Table Properties...","ContextMenu"),function(){ +tableOperation("TO-table-prop"); +},HTMLArea._lc("Show the Table Properties dialog","ContextMenu"),_8.btnList["TO-table-prop"][1]],[HTMLArea._lc("Insert _Column Before","ContextMenu"),function(){ +tableOperation("TO-col-insert-before"); +},HTMLArea._lc("Insert a new column before the current one","ContextMenu"),_8.btnList["TO-col-insert-before"][1]],[HTMLArea._lc("Insert C_olumn After","ContextMenu"),function(){ +tableOperation("TO-col-insert-after"); +},HTMLArea._lc("Insert a new column after the current one","ContextMenu"),_8.btnList["TO-col-insert-after"][1]],[HTMLArea._lc("De_lete Column","ContextMenu"),function(){ +tableOperation("TO-col-delete"); +},HTMLArea._lc("Delete the current column","ContextMenu"),_8.btnList["TO-col-delete"][1]]); +break; +case "body": +_d.push(null,[HTMLArea._lc("Justify Left","ContextMenu"),function(){ +_7.execCommand("justifyleft"); +},null,_8.btnList["justifyleft"][1]],[HTMLArea._lc("Justify Center","ContextMenu"),function(){ +_7.execCommand("justifycenter"); +},null,_8.btnList["justifycenter"][1]],[HTMLArea._lc("Justify Right","ContextMenu"),function(){ +_7.execCommand("justifyright"); +},null,_8.btnList["justifyright"][1]],[HTMLArea._lc("Justify Full","ContextMenu"),function(){ +_7.execCommand("justifyfull"); +},null,_8.btnList["justifyfull"][1]]); +break; +} +} +if(_b&&!_e){ +_9.push(null,[HTMLArea._lc("Make lin_k...","ContextMenu"),function(){ +_7.config.btnList["createlink"][3](_7); +},HTMLArea._lc("Create a link","ContextMenu"),_8.btnList["createlink"][1]]); +} +for(var i=0;i<_d.length;++i){ +_9.push(_d[i]); +} +if(!/html|body/i.test(_c.tagName)){ +_9.push(null,[HTMLArea._lc({string:"Remove the $elem Element...",replace:{elem:"<"+_c.tagName+">"}},"ContextMenu"),function(){ +if(confirm(HTMLArea._lc("Please confirm that you want to remove this element:","ContextMenu")+" "+_c.tagName)){ +var el=_c; +var p=el.parentNode; +p.removeChild(el); +if(HTMLArea.is_gecko){ +if(p.tagName.toLowerCase()=="td"&&!p.hasChildNodes()){ +p.appendChild(_7._doc.createElement("br")); +} +_7.forceRedraw(); +_7.focusEditor(); +_7.updateToolbar(); +if(_f){ +var _1e=_f.style.borderCollapse; +_f.style.borderCollapse="collapse"; +_f.style.borderCollapse="separate"; +_f.style.borderCollapse=_1e; +} +} +} +},HTMLArea._lc("Remove this node from the document","ContextMenu")],[HTMLArea._lc("Insert paragraph before","ContextMenu"),function(){ +insertPara(false); +},HTMLArea._lc("Insert a paragraph before the current node","ContextMenu")],[HTMLArea._lc("Insert paragraph after","ContextMenu"),function(){ +insertPara(true); +},HTMLArea._lc("Insert a paragraph after the current node","ContextMenu")]); +} +if(!_9[0]){ +_9.shift(); +} +return _9; }; - -ContextMenu.prototype.getContextMenu = function(target) { - var self = this; - var editor = this.editor; - var config = editor.config; - var menu = []; - var tbo = this.editor.plugins.TableOperations; - if (tbo) tbo = tbo.instance; - - var selection = editor.hasSelectedText(); - if (selection) - menu.push([ HTMLArea._lc("Cut", "ContextMenu"), function() { editor.execCommand("cut"); }, null, config.btnList["cut"][1] ], - [ HTMLArea._lc("Copy", "ContextMenu"), function() { editor.execCommand("copy"); }, null, config.btnList["copy"][1] ]); - menu.push([ HTMLArea._lc("Paste", "ContextMenu"), function() { editor.execCommand("paste"); }, null, config.btnList["paste"][1] ]); - - var currentTarget = target; - var elmenus = []; - - var link = null; - var table = null; - var tr = null; - var td = null; - var img = null; - - function tableOperation(opcode) { - tbo.buttonPress(editor, opcode); - } - - function insertPara(after) { - var el = currentTarget; - var par = el.parentNode; - var p = editor._doc.createElement("p"); - p.appendChild(editor._doc.createElement("br")); - par.insertBefore(p, after ? el.nextSibling : el); - var sel = editor._getSelection(); - var range = editor._createRange(sel); - if (!HTMLArea.is_ie) { - sel.removeAllRanges(); - range.selectNodeContents(p); - range.collapse(true); - sel.addRange(range); - } else { - range.moveToElementText(p); - range.collapse(true); - range.select(); - } - } - - for (; target; target = target.parentNode) { - var tag = target.tagName; - if (!tag) - continue; - tag = tag.toLowerCase(); - switch (tag) { - case "img": - img = target; - elmenus.push(null, - [ HTMLArea._lc("_Image Properties...", "ContextMenu"), - function() { - editor._insertImage(img); - }, - HTMLArea._lc("Show the image properties dialog", "ContextMenu"), - config.btnList["insertimage"][1] ] - ); - break; - case "a": - link = target; - elmenus.push(null, - [ HTMLArea._lc("_Modify Link...", "ContextMenu"), - function() { editor.config.btnList['createlink'][3](editor); }, - HTMLArea._lc("Current URL is", "ContextMenu") + ': ' + link.href, - config.btnList["createlink"][1] ], - - [ HTMLArea._lc("Chec_k Link...", "ContextMenu"), - function() { window.open(link.href); }, - HTMLArea._lc("Opens this link in a new window", "ContextMenu") ], - - [ HTMLArea._lc("_Remove Link...", "ContextMenu"), - function() { - if (confirm(HTMLArea._lc("Please confirm that you want to unlink this element.", "ContextMenu") + "\n" + - HTMLArea._lc("Link points to:", "ContextMenu") + " " + link.href)) { - while (link.firstChild) - link.parentNode.insertBefore(link.firstChild, link); - link.parentNode.removeChild(link); - } - }, - HTMLArea._lc("Unlink the current element", "ContextMenu") ] - ); - break; - case "td": - td = target; - if (!tbo) break; - elmenus.push(null, - [ HTMLArea._lc("C_ell Properties...", "ContextMenu"), - function() { tableOperation("TO-cell-prop"); }, - HTMLArea._lc("Show the Table Cell Properties dialog", "ContextMenu"), - config.btnList["TO-cell-prop"][1] ] - ); - break; - case "tr": - tr = target; - if (!tbo) break; - elmenus.push(null, - [ HTMLArea._lc("Ro_w Properties...", "ContextMenu"), - function() { tableOperation("TO-row-prop"); }, - HTMLArea._lc("Show the Table Row Properties dialog", "ContextMenu"), - config.btnList["TO-row-prop"][1] ], - - [ HTMLArea._lc("I_nsert Row Before", "ContextMenu"), - function() { tableOperation("TO-row-insert-above"); }, - HTMLArea._lc("Insert a new row before the current one", "ContextMenu"), - config.btnList["TO-row-insert-above"][1] ], - - [ HTMLArea._lc("In_sert Row After", "ContextMenu"), - function() { tableOperation("TO-row-insert-under"); }, - HTMLArea._lc("Insert a new row after the current one", "ContextMenu"), - config.btnList["TO-row-insert-under"][1] ], - - [ HTMLArea._lc("_Delete Row", "ContextMenu"), - function() { tableOperation("TO-row-delete"); }, - HTMLArea._lc("Delete the current row", "ContextMenu"), - config.btnList["TO-row-delete"][1] ] - ); - break; - case "table": - table = target; - if (!tbo) break; - elmenus.push(null, - [ HTMLArea._lc("_Table Properties...", "ContextMenu"), - function() { tableOperation("TO-table-prop"); }, - HTMLArea._lc("Show the Table Properties dialog", "ContextMenu"), - config.btnList["TO-table-prop"][1] ], - - [ HTMLArea._lc("Insert _Column Before", "ContextMenu"), - function() { tableOperation("TO-col-insert-before"); }, - HTMLArea._lc("Insert a new column before the current one", "ContextMenu"), - config.btnList["TO-col-insert-before"][1] ], - - [ HTMLArea._lc("Insert C_olumn After", "ContextMenu"), - function() { tableOperation("TO-col-insert-after"); }, - HTMLArea._lc("Insert a new column after the current one", "ContextMenu"), - config.btnList["TO-col-insert-after"][1] ], - - [ HTMLArea._lc("De_lete Column", "ContextMenu"), - function() { tableOperation("TO-col-delete"); }, - HTMLArea._lc("Delete the current column", "ContextMenu"), - config.btnList["TO-col-delete"][1] ] - ); - break; - case "body": - elmenus.push(null, - [ HTMLArea._lc("Justify Left", "ContextMenu"), - function() { editor.execCommand("justifyleft"); }, null, - config.btnList["justifyleft"][1] ], - [ HTMLArea._lc("Justify Center", "ContextMenu"), - function() { editor.execCommand("justifycenter"); }, null, - config.btnList["justifycenter"][1] ], - [ HTMLArea._lc("Justify Right", "ContextMenu"), - function() { editor.execCommand("justifyright"); }, null, - config.btnList["justifyright"][1] ], - [ HTMLArea._lc("Justify Full", "ContextMenu"), - function() { editor.execCommand("justifyfull"); }, null, - config.btnList["justifyfull"][1] ] - ); - break; - } - } - - if (selection && !link) - menu.push(null, [ HTMLArea._lc("Make lin_k...", "ContextMenu"), - function() { editor.config.btnList['createlink'][3](editor); }, - HTMLArea._lc("Create a link", "ContextMenu"), - config.btnList["createlink"][1] ]); - - for (var i = 0; i < elmenus.length; ++i) - menu.push(elmenus[i]); - - if (!/html|body/i.test(currentTarget.tagName)) - menu.push(null, - [ HTMLArea._lc({string: "Remove the $elem Element...", replace: {elem: "<" + currentTarget.tagName + ">"}}, "ContextMenu"), - function() { - if (confirm(HTMLArea._lc("Please confirm that you want to remove this element:", "ContextMenu") + " " + - currentTarget.tagName)) { - var el = currentTarget; - var p = el.parentNode; - p.removeChild(el); - if (HTMLArea.is_gecko) { - if (p.tagName.toLowerCase() == "td" && !p.hasChildNodes()) - p.appendChild(editor._doc.createElement("br")); - editor.forceRedraw(); - editor.focusEditor(); - editor.updateToolbar(); - if (table) { - var save_collapse = table.style.borderCollapse; - table.style.borderCollapse = "collapse"; - table.style.borderCollapse = "separate"; - table.style.borderCollapse = save_collapse; - } - } - } - }, - HTMLArea._lc("Remove this node from the document", "ContextMenu") ], - [ HTMLArea._lc("Insert paragraph before", "ContextMenu"), - function() { insertPara(false); }, - HTMLArea._lc("Insert a paragraph before the current node", "ContextMenu") ], - [ HTMLArea._lc("Insert paragraph after", "ContextMenu"), - function() { insertPara(true); }, - HTMLArea._lc("Insert a paragraph after the current node", "ContextMenu") ] - ); - return menu; +ContextMenu.prototype.popupMenu=function(ev){ +var _20=this; +if(this.currentMenu){ +this.closeMenu(); +} +function getPos(el){ +var r={x:el.offsetLeft,y:el.offsetTop}; +if(el.offsetParent){ +var tmp=getPos(el.offsetParent); +r.x+=tmp.x; +r.y+=tmp.y; +} +return r; +} +function documentClick(ev){ +ev||(ev=window.event); +if(!_20.currentMenu){ +alert(HTMLArea._lc("How did you get here? (Please report!)","ContextMenu")); +return false; +} +var el=HTMLArea.is_ie?ev.srcElement:ev.target; +for(;el!=null&&el!=_20.currentMenu;el=el.parentNode){ +} +if(el==null){ +_20.closeMenu(); +} +} +var _26=[]; +function keyPress(ev){ +ev||(ev=window.event); +HTMLArea._stopEvent(ev); +if(ev.keyCode==27){ +_20.closeMenu(); +return false; +} +var key=String.fromCharCode(HTMLArea.is_ie?ev.keyCode:ev.charCode).toLowerCase(); +for(var i=_26.length;--i>=0;){ +var k=_26[i]; +if(k[0].toLowerCase()==key){ +k[1].__msh.activate(); +} +} +} +_20.closeMenu=function(){ +_20.currentMenu.parentNode.removeChild(_20.currentMenu); +_20.currentMenu=null; +HTMLArea._removeEvent(document,"mousedown",documentClick); +HTMLArea._removeEvent(_20.editordoc,"mousedown",documentClick); +if(_26.length>0){ +HTMLArea._removeEvent(_20.editordoc,"keypress",keyPress); +} +if(HTMLArea.is_ie){ +_20.iePopup.hide(); +} }; - -ContextMenu.prototype.popupMenu = function(ev) { - var self = this; - if (this.currentMenu) - this.currentMenu.parentNode.removeChild(this.currentMenu); - function getPos(el) { - var r = { x: el.offsetLeft, y: el.offsetTop }; - if (el.offsetParent) { - var tmp = getPos(el.offsetParent); - r.x += tmp.x; - r.y += tmp.y; - } - return r; - } - function documentClick(ev) { - ev || (ev = window.event); - if (!self.currentMenu) { - alert(HTMLArea._lc("How did you get here? (Please report!)", "ContextMenu")); - return false; - } - var el = HTMLArea.is_ie ? ev.srcElement : ev.target; - for (; el != null && el != self.currentMenu; el = el.parentNode); - if (el == null) - self.closeMenu(); - //HTMLArea._stopEvent(ev); - //return false; - } - var keys = []; - function keyPress(ev) { - ev || (ev = window.event); - HTMLArea._stopEvent(ev); - if (ev.keyCode == 27) { - self.closeMenu(); - return false; - } - var key = String.fromCharCode(HTMLArea.is_ie ? ev.keyCode : ev.charCode).toLowerCase(); - for (var i = keys.length; --i >= 0;) { - var k = keys[i]; - if (k[0].toLowerCase() == key) - k[1].__msh.activate(); - } - } - self.closeMenu = function() { - self.currentMenu.parentNode.removeChild(self.currentMenu); - self.currentMenu = null; - HTMLArea._removeEvent(document, "mousedown", documentClick); - HTMLArea._removeEvent(self.editordoc, "mousedown", documentClick); - if (keys.length > 0) - HTMLArea._removeEvent(self.editordoc, "keypress", keyPress); - if (HTMLArea.is_ie) - self.iePopup.hide(); - } - var target = HTMLArea.is_ie ? ev.srcElement : ev.target; - var ifpos = getPos(self.editor._htmlArea);//_iframe); - var x = ev.clientX + ifpos.x; - var y = ev.clientY + ifpos.y; - - var div; - var doc; - if (!HTMLArea.is_ie) { - doc = document; - } else { - // IE stinks - var popup = this.iePopup = window.createPopup(); - doc = popup.document; - doc.open(); - doc.write(""); - doc.close(); - } - div = doc.createElement("div"); - if (HTMLArea.is_ie) - div.unselectable = "on"; - div.oncontextmenu = function() { return false; }; - div.className = "htmlarea-context-menu"; - if (!HTMLArea.is_ie) - div.style.left = div.style.top = "0px"; - doc.body.appendChild(div); - - var table = doc.createElement("table"); - div.appendChild(table); - table.cellSpacing = 0; - table.cellPadding = 0; - var parent = doc.createElement("tbody"); - table.appendChild(parent); - - var options = this.getContextMenu(target); - for (var i = 0; i < options.length; ++i) { - var option = options[i]; - var item = doc.createElement("tr"); - parent.appendChild(item); - if (HTMLArea.is_ie) - item.unselectable = "on"; - else item.onmousedown = function(ev) { - HTMLArea._stopEvent(ev); - return false; - }; - if (!option) { - item.className = "separator"; - var td = doc.createElement("td"); - td.className = "icon"; - var IE_IS_A_FUCKING_SHIT = '>'; - if (HTMLArea.is_ie) { - td.unselectable = "on"; - IE_IS_A_FUCKING_SHIT = " unselectable='on' style='height=1px'> "; - } - td.innerHTML = ""; - var td1 = td.cloneNode(true); - td1.className = "label"; - item.appendChild(td); - item.appendChild(td1); - } else { - var label = option[0]; - item.className = "item"; - item.__msh = { - item: item, - label: label, - action: option[1], - tooltip: option[2] || null, - icon: option[3] || null, - activate: function() { - self.closeMenu(); - self.editor.focusEditor(); - this.action(); - } - }; - label = label.replace(/_([a-zA-Z0-9])/, "$1"); - if (label != option[0]) - keys.push([ RegExp.$1, item ]); - label = label.replace(/__/, "_"); - var td1 = doc.createElement("td"); - if (HTMLArea.is_ie) - td1.unselectable = "on"; - item.appendChild(td1); - td1.className = "icon"; - if (item.__msh.icon) - { - var t = HTMLArea.makeBtnImg(item.__msh.icon, doc); - td1.appendChild(t); - // td1.innerHTML = ""; - } - var td2 = doc.createElement("td"); - if (HTMLArea.is_ie) - td2.unselectable = "on"; - item.appendChild(td2); - td2.className = "label"; - td2.innerHTML = label; - item.onmouseover = function() { - this.className += " hover"; - self.editor._statusBarTree.innerHTML = this.__msh.tooltip || ' '; - }; - item.onmouseout = function() { this.className = "item"; }; - item.oncontextmenu = function(ev) { - this.__msh.activate(); - if (!HTMLArea.is_ie) - HTMLArea._stopEvent(ev); - return false; - }; - item.onmouseup = function(ev) { - var timeStamp = (new Date()).getTime(); - if (timeStamp - self.timeStamp > 500) - this.__msh.activate(); - if (!HTMLArea.is_ie) - HTMLArea._stopEvent(ev); - return false; - }; - //if (typeof option[2] == "string") - //item.title = option[2]; - } - } - - if (!HTMLArea.is_ie) { - /* FIXME: I think this is to stop the popup from running off the bottom of the screen? - var dx = x + div.offsetWidth - window.innerWidth + 4; - var dy = y + div.offsetHeight - window.innerHeight + 4; - // alert('dy= (' + y + '+' + div.offsetHeight + '-' + window.innerHeight + ' + 4 ) = ' + dy); - if (dx > 0) x -= dx; - if (dy > 0) y -= dy; - */ - div.style.left = x + "px"; - div.style.top = y + "px"; - } else { - // To get the size we need to display the popup with some width/height - // then we can get the actual size of the div and redisplay the popup at the - // correct dimensions. - this.iePopup.show(ev.screenX, ev.screenY, 300,50); - var w = div.offsetWidth; - var h = div.offsetHeight; - this.iePopup.show(ev.screenX, ev.screenY, w, h); - } - - this.currentMenu = div; - this.timeStamp = (new Date()).getTime(); - - HTMLArea._addEvent(document, "mousedown", documentClick); - HTMLArea._addEvent(this.editordoc, "mousedown", documentClick); - if (keys.length > 0) - HTMLArea._addEvent(this.editordoc, "keypress", keyPress); - - HTMLArea._stopEvent(ev); - return false; -}; \ No newline at end of file +var _2b=HTMLArea.is_ie?ev.srcElement:ev.target; +var _2c=getPos(_20.editor._htmlArea); +var x=ev.clientX+_2c.x; +var y=ev.clientY+_2c.y; +var div; +var doc; +if(!HTMLArea.is_ie){ +doc=document; +}else{ +var _31=this.iePopup=window.createPopup(); +doc=_31.document; +doc.open(); +doc.write(""); +doc.close(); +} +div=doc.createElement("div"); +if(HTMLArea.is_ie){ +div.unselectable="on"; +} +div.oncontextmenu=function(){ +return false; +}; +div.className="htmlarea-context-menu"; +if(!HTMLArea.is_ie){ +div.style.left=div.style.top="0px"; +} +doc.body.appendChild(div); +var _32=doc.createElement("table"); +div.appendChild(_32); +_32.cellSpacing=0; +_32.cellPadding=0; +var _33=doc.createElement("tbody"); +_32.appendChild(_33); +var _34=this.getContextMenu(_2b); +for(var i=0;i<_34.length;++i){ +var _36=_34[i]; +var _37=doc.createElement("tr"); +_33.appendChild(_37); +if(HTMLArea.is_ie){ +_37.unselectable="on"; +}else{ +_37.onmousedown=function(ev){ +HTMLArea._stopEvent(ev); +return false; +}; +} +if(!_36){ +_37.className="separator"; +var td=doc.createElement("td"); +td.className="icon"; +var _3a=">"; +if(HTMLArea.is_ie){ +td.unselectable="on"; +_3a=" unselectable='on' style='height=1px'> "; +} +td.innerHTML=""; +var td1=td.cloneNode(true); +td1.className="label"; +_37.appendChild(td); +_37.appendChild(td1); +}else{ +var _3c=_36[0]; +_37.className="item"; +_37.__msh={item:_37,label:_3c,action:_36[1],tooltip:_36[2]||null,icon:_36[3]||null,activate:function(){ +_20.closeMenu(); +_20.editor.focusEditor(); +this.action(); +}}; +_3c=_3c.replace(/_([a-zA-Z0-9])/,"$1"); +if(_3c!=_36[0]){ +_26.push([RegExp.$1,_37]); +} +_3c=_3c.replace(/__/,"_"); +var td1=doc.createElement("td"); +if(HTMLArea.is_ie){ +td1.unselectable="on"; +} +_37.appendChild(td1); +td1.className="icon"; +if(_37.__msh.icon){ +var t=HTMLArea.makeBtnImg(_37.__msh.icon,doc); +td1.appendChild(t); +} +var td2=doc.createElement("td"); +if(HTMLArea.is_ie){ +td2.unselectable="on"; +} +_37.appendChild(td2); +td2.className="label"; +td2.innerHTML=_3c; +_37.onmouseover=function(){ +this.className+=" hover"; +_20.editor._statusBarTree.innerHTML=this.__msh.tooltip||" "; +}; +_37.onmouseout=function(){ +this.className="item"; +}; +_37.oncontextmenu=function(ev){ +this.__msh.activate(); +if(!HTMLArea.is_ie){ +HTMLArea._stopEvent(ev); +} +return false; +}; +_37.onmouseup=function(ev){ +var _41=(new Date()).getTime(); +if(_41-_20.timeStamp>500){ +this.__msh.activate(); +} +if(!HTMLArea.is_ie){ +HTMLArea._stopEvent(ev); +} +return false; +}; +} +} +if(!HTMLArea.is_ie){ +div.style.left=x+"px"; +div.style.top=y+"px"; +}else{ +this.iePopup.show(ev.screenX,ev.screenY,300,50); +var w=div.offsetWidth; +var h=div.offsetHeight; +this.iePopup.show(ev.screenX,ev.screenY,w,h); +} +this.currentMenu=div; +this.timeStamp=(new Date()).getTime(); +HTMLArea._addEvent(document,"mousedown",documentClick); +HTMLArea._addEvent(this.editordoc,"mousedown",documentClick); +if(_26.length>0){ +HTMLArea._addEvent(this.editordoc,"keypress",keyPress); +} +HTMLArea._stopEvent(ev); +return false; +}; + diff --git a/xinha/plugins/ContextMenu/lang/de.js b/xinha/plugins/ContextMenu/lang/de.js index 065d1d4..d29eed8 100644 --- a/xinha/plugins/ContextMenu/lang/de.js +++ b/xinha/plugins/ContextMenu/lang/de.js @@ -1,50 +1,50 @@ -// I18N constants -// LANG: "de", ENCODING: UTF-8 -// translated: Raimund Meyer xinha@ray-of-light.org -{ - "Cut": "Ausschneiden", - "Copy": "Kopieren", - "Paste": "Einfügen", - "_Image Properties...": "Eigenschaften", - "Show the image properties dialog": "Fenster für die Bildoptionen anzeigen", - "_Modify Link...": "Link ändern", - "Current URL is": "Aktuelle URL ist", - "Chec_k Link...": "Link testen", - "Opens this link in a new window": "Diesen Link in neuem Fenster öffnen", - "_Remove Link...": "Link entfernen", - "Please confirm that you want to unlink this element.": "Wollen sie diesen Link wirklich entfernen?", - "Link points to:": "Link zeigt auf:", - "Unlink the current element": "Link auf Element entfernen", - "C_ell Properties...": "Zellenoptionen", - "Show the Table Cell Properties dialog": "Zellenoptionen anzeigen", - "Ro_w Properties...": "Zeilenoptionen", - "Show the Table Row Properties dialog": "Zeilenoptionen anzeigen", - "I_nsert Row Before": "Zeile einfügen vor Position", - "Insert a new row before the current one": "Zeile einfügen vor der aktuellen Position", - "In_sert Row After": "Zeile einügen nach Position", - "Insert a new row after the current one": "Zeile einfügen nach der aktuellen Position", - "_Delete Row": "Zeile löschen", - "Delete the current row": "Zeile löschen", - "_Table Properties...": "Tabellenoptionen", - "Show the Table Properties dialog": "Tabellenoptionen anzeigen", - "Insert _Column Before": "Spalte einfügen vor Position", - "Insert a new column before the current one": "Spalte einfügen vor der aktuellen Position", - "Insert C_olumn After": "Spalte einfügen nach Position", - "Insert a new column after the current one": "Spalte einfügen nach der aktuellen Position", - "De_lete Column": "Spalte löschen", - "Delete the current column": "Spalte löschen", - "Justify Left": "Linksbündig", - "Justify Center": "Zentriert", - "Justify Right": "Rechtsbündig", - "Justify Full": "Blocksatz", - "Make lin_k...": "Link erstellen", - "Create a link": "Link erstellen", - "Remove the $elem Element...": "Element $elem entfernen...", - "Please confirm that you want to remove this element:": "Wollen sie dieses Element wirklich entfernen?", - "Remove this node from the document": "Dieses Element aus dem Dokument entfernen", - "Insert paragraph before": "Absatz einfügen vor Position", - "Insert a paragraph before the current node": "Absatz einfügen vor der aktuellen Position", - "Insert paragraph after": "Absatz einfügen hinter Position", - "Insert a paragraph after the current node": "Absatz einfügen hinter der aktuellen Position", - "How did you get here? (Please report!)": "Wie sind Sie denn hier hin gekommen? (Please report!)" -}; +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// translated: Raimund Meyer xinha@ray-of-light.org +{ + "Cut": "Ausschneiden", + "Copy": "Kopieren", + "Paste": "Einfügen", + "_Image Properties...": "Eigenschaften", + "Show the image properties dialog": "Fenster für die Bildoptionen anzeigen", + "_Modify Link...": "Link ändern", + "Current URL is": "Aktuelle URL ist", + "Chec_k Link...": "Link testen", + "Opens this link in a new window": "Diesen Link in neuem Fenster öffnen", + "_Remove Link...": "Link entfernen", + "Please confirm that you want to unlink this element.": "Wollen sie diesen Link wirklich entfernen?", + "Link points to:": "Link zeigt auf:", + "Unlink the current element": "Link auf Element entfernen", + "C_ell Properties...": "Zellenoptionen", + "Show the Table Cell Properties dialog": "Zellenoptionen anzeigen", + "Ro_w Properties...": "Zeilenoptionen", + "Show the Table Row Properties dialog": "Zeilenoptionen anzeigen", + "I_nsert Row Before": "Zeile einfügen vor Position", + "Insert a new row before the current one": "Zeile einfügen vor der aktuellen Position", + "In_sert Row After": "Zeile einügen nach Position", + "Insert a new row after the current one": "Zeile einfügen nach der aktuellen Position", + "_Delete Row": "Zeile löschen", + "Delete the current row": "Zeile löschen", + "_Table Properties...": "Tabellenoptionen", + "Show the Table Properties dialog": "Tabellenoptionen anzeigen", + "Insert _Column Before": "Spalte einfügen vor Position", + "Insert a new column before the current one": "Spalte einfügen vor der aktuellen Position", + "Insert C_olumn After": "Spalte einfügen nach Position", + "Insert a new column after the current one": "Spalte einfügen nach der aktuellen Position", + "De_lete Column": "Spalte löschen", + "Delete the current column": "Spalte löschen", + "Justify Left": "Linksbündig", + "Justify Center": "Zentriert", + "Justify Right": "Rechtsbündig", + "Justify Full": "Blocksatz", + "Make lin_k...": "Link erstellen", + "Create a link": "Link erstellen", + "Remove the $elem Element...": "Element $elem entfernen...", + "Please confirm that you want to remove this element:": "Wollen sie dieses Element wirklich entfernen?", + "Remove this node from the document": "Dieses Element aus dem Dokument entfernen", + "Insert paragraph before": "Absatz einfügen vor Position", + "Insert a paragraph before the current node": "Absatz einfügen vor der aktuellen Position", + "Insert paragraph after": "Absatz einfügen hinter Position", + "Insert a paragraph after the current node": "Absatz einfügen hinter der aktuellen Position", + "How did you get here? (Please report!)": "Wie sind Sie denn hier hin gekommen? (Please report!)" +}; diff --git a/xinha/plugins/ContextMenu/lang/el.js b/xinha/plugins/ContextMenu/lang/el.js index 905b3a6..611bd8b 100644 --- a/xinha/plugins/ContextMenu/lang/el.js +++ b/xinha/plugins/ContextMenu/lang/el.js @@ -1,47 +1,47 @@ -// I18N constants -// LANG: "el", ENCODING: UTF-8 -// Author: Dimitris Glezos, dimitris@glezos.com -{ - "Cut": "ΑπΞÎΞΊΞÎπ�", - "Copy": "ΑντιγΟÂαφ�", - "Paste": "Ξ•Ο€ΞΉΞΊΟŒΞ»Ξ»Ξ·ΟƒΞ·", - "_Image Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ•ΞΉΞΊΟŒΞ½Ξ±Ο‚...", - "_Modify Link...": "Ξ�ΟÂΞÎΟ€ΞÎΟ€ΞÎίηση συνδέσμΞÎΟ…...", - "Chec_k Link...": "ΞˆΞ»Ξ΅Ξ³Ο‡ΞÎΟ‚ συνδέσμων...", - "_Remove Link...": "ΔιαγΟÂαφ� συνδέσμΞÎΟ…...", - "C_ell Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ κΡλιΞÎΟÂ...", - "Ro_w Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ³ΟÂαμμ�ς...", - "I_nsert Row Before": "ΕισαγωγΞ� Ξ³ΟÂαμμ�ς Ο€ΟÂΞΉΞ½", - "In_sert Row After": "ΕισαγωγΞ� Ξ³ΟÂαμμ�ς μΡτά", - "_Delete Row": "ΔιαγΟÂαφ� Ξ³ΟÂαμμ�ς", - "_Table Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ πίνακα...", - "Insert _Column Before": "ΕισαγωγΞ� στΞ�λης Ο€ΟÂΞΉΞ½", - "Insert C_olumn After": "ΕισαγωγΞ� στΞ�λης μΡτά", - "De_lete Column": "ΔιαγΟÂαφ� στΞ�λης", - "Justify Left": "ΣτΞÎίχηση Ξ‘ΟÂιστΡΟÂΞ¬", - "Justify Center": "ΣτΞÎίχηση ΞšΞ­Ξ½Ο„ΟÂΞÎ", - "Justify Right": "ΣτΞÎίχηση ΔΡξιά", - "Justify Full": "Ξ Ξ»Ξ�ΟÂΞ·Ο‚ ΣτΞÎίχηση", - "Make lin_k...": "ΔημιΞÎΟ…ΟÂΞ³Ξ―Ξ± συνδέσμΞÎΟ…...", - "Remove the $elem Element...": "ΑφαίΟÂΡση $elem στΞÎιχΡίΞÎΟ…...", - "Please confirm that you want to remove this element:": "ΕίστΡ Ξ²Ξ­Ξ²Ξ±ΞΉΞÎΟ‚ πως θέλΡτΡ Ξ½Ξ± αφαιΟÂέσΡτΡ Ο„ΞΠστΞÎιχΡίΞΠ", - "Remove this node from the document": "ΑφαίΟÂΡση Ξ±Ο…Ο„ΞÎΟ Ο„ΞÎΟ… κόμβΞÎΟ… Ξ±Ο€ΟŒ Ο„ΞΠΞ­Ξ³Ξ³ΟÂΞ±Ο†ΞÎ", - "How did you get here? (Please report!)": "Ξ ΟŽΟ‚ Ξ�ΟÂθατΡ ΞΌΞ­Ο‡ΟÂΞΉ Ρδώ; (Ξ Ξ±ΟÂΞ±ΞΊΞ±Ξ»ΞÎΟÂΞΌΞ΅ αναφέΟÂΡτΡ Ο„ΞÎ!)", - "Show the image properties dialog": "Εμφάνιση διαλόγΞÎΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ΅ΞΉΞΊΟŒΞ½Ξ±Ο‚", - "Modify URL": "Ξ�ΟÂΞÎΟ€ΞÎΟ€ΞÎίηση URL", - "Current URL is": "Ξ�ΞΠΟ„ΟÂέχων URL Ρίναι", - "Opens this link in a new window": "ΑνΞÎίγΡι Ξ±Ο…Ο„ΟŒ Ο„ΞÎΞ½ ΟƒΟÂνδΡσμΞΠσΡ Ξ­Ξ½Ξ± Ξ½Ξ­ΞΠπαΟÂάθυΟÂΞÎ", - "Please confirm that you want to unlink this element.": "ΕίστΡ Ξ²Ξ­Ξ²Ξ±ΞΉΞÎΟ‚ πως θέλΡτΡ Ξ½Ξ± αφαιΟÂέσΡτΡ Ο„ΞÎΞ½ ΟƒΟÂνδΡσμΞΠΞ±Ο€ΟŒ Ξ±Ο…Ο„ΟŒ Ο„ΞΠστΞÎιχΡίΞÎ:", - "Link points to:": "Ο ΟƒΟÂνδΡμΞÎΟ‚ ΞÎδηγΡί Ρδώ:", - "Unlink the current element": "ΑφαίΟÂΡση συνδέσμΞÎΟ… Ξ±Ο€ΟŒ Ο„ΞΠπαΟÂών στΞÎιχΡίΞÎ", - "Show the Table Cell Properties dialog": "Εμφάνιση διαλόγΞÎΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ κΡλιΞÎΟ Ξ Ξ―Ξ½Ξ±ΞΊΞ±", - "Show the Table Row Properties dialog": "Εμφάνιση διαλόγΞÎΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ³ΟÂαμμ�ς Ξ Ξ―Ξ½Ξ±ΞΊΞ±", - "Insert a new row before the current one": "ΕισαγωγΞ� ΞΌΞΉΞ±Ο‚ Ξ½Ξ­Ξ±Ο‚ Ξ³ΟÂαμμ�ς Ο€ΟÂΞΉΞ½ την ΡπιλΡγμένη", - "Insert a new row after the current one": "ΕισαγωγΞ� ΞΌΞΉΞ±Ο‚ Ξ½Ξ­Ξ±Ο‚ Ξ³ΟÂαμμ�ς μΡτά την ΡπιλΡγμένη", - "Delete the current row": "ΔιαγΟÂαφ� ΡπιλΡγμένης Ξ³ΟÂαμμ�ς", - "Show the Table Properties dialog": "Εμφάνιση διαλόγΞÎΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ Ξ―Ξ½Ξ±ΞΊΞ±", - "Insert a new column before the current one": "ΕισαγωγΞ� Ξ½Ξ­Ξ±Ο‚ στΞ�λης Ο€ΟÂΞΉΞ½ την ΡπιλΡγμένη", - "Insert a new column after the current one": "ΕισαγωγΞ� Ξ½Ξ­Ξ±Ο‚ στΞ�λης μΡτά την ΡπιλΡγμένη", - "Delete the current column": "ΔιαγΟÂαφ� ΡπιλΡγμένης στΞ�λης", - "Create a link": "ΔημιΞÎΟ…ΟÂΞ³Ξ―Ξ± συνδέσμΞÎΟ…" -}; +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// Author: Dimitris Glezos, dimitris@glezos.com +{ + "Cut": "ΑπΞÎΞΊΞÎπ�", + "Copy": "ΑντιγΟÂαφ�", + "Paste": "Ξ•Ο€ΞΉΞΊΟŒΞ»Ξ»Ξ·ΟƒΞ·", + "_Image Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ•ΞΉΞΊΟŒΞ½Ξ±Ο‚...", + "_Modify Link...": "Ξ�ΟÂΞÎΟ€ΞÎΟ€ΞÎίηση συνδέσμΞÎΟ…...", + "Chec_k Link...": "ΞˆΞ»Ξ΅Ξ³Ο‡ΞÎΟ‚ συνδέσμων...", + "_Remove Link...": "ΔιαγΟÂαφ� συνδέσμΞÎΟ…...", + "C_ell Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ κΡλιΞÎΟÂ...", + "Ro_w Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ³ΟÂαμμ�ς...", + "I_nsert Row Before": "ΕισαγωγΞ� Ξ³ΟÂαμμ�ς Ο€ΟÂΞΉΞ½", + "In_sert Row After": "ΕισαγωγΞ� Ξ³ΟÂαμμ�ς μΡτά", + "_Delete Row": "ΔιαγΟÂαφ� Ξ³ΟÂαμμ�ς", + "_Table Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ πίνακα...", + "Insert _Column Before": "ΕισαγωγΞ� στΞ�λης Ο€ΟÂΞΉΞ½", + "Insert C_olumn After": "ΕισαγωγΞ� στΞ�λης μΡτά", + "De_lete Column": "ΔιαγΟÂαφ� στΞ�λης", + "Justify Left": "ΣτΞÎίχηση Ξ‘ΟÂιστΡΟÂΞ¬", + "Justify Center": "ΣτΞÎίχηση ΞšΞ­Ξ½Ο„ΟÂΞÎ", + "Justify Right": "ΣτΞÎίχηση ΔΡξιά", + "Justify Full": "Ξ Ξ»Ξ�ΟÂΞ·Ο‚ ΣτΞÎίχηση", + "Make lin_k...": "ΔημιΞÎΟ…ΟÂΞ³Ξ―Ξ± συνδέσμΞÎΟ…...", + "Remove the $elem Element...": "ΑφαίΟÂΡση $elem στΞÎιχΡίΞÎΟ…...", + "Please confirm that you want to remove this element:": "ΕίστΡ Ξ²Ξ­Ξ²Ξ±ΞΉΞÎΟ‚ πως θέλΡτΡ Ξ½Ξ± αφαιΟÂέσΡτΡ Ο„ΞΠστΞÎιχΡίΞΠ", + "Remove this node from the document": "ΑφαίΟÂΡση Ξ±Ο…Ο„ΞÎΟ Ο„ΞÎΟ… κόμβΞÎΟ… Ξ±Ο€ΟŒ Ο„ΞΠΞ­Ξ³Ξ³ΟÂΞ±Ο†ΞÎ", + "How did you get here? (Please report!)": "Ξ ΟŽΟ‚ Ξ�ΟÂθατΡ ΞΌΞ­Ο‡ΟÂΞΉ Ρδώ; (Ξ Ξ±ΟÂΞ±ΞΊΞ±Ξ»ΞÎΟÂΞΌΞ΅ αναφέΟÂΡτΡ Ο„ΞÎ!)", + "Show the image properties dialog": "Εμφάνιση διαλόγΞÎΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ΅ΞΉΞΊΟŒΞ½Ξ±Ο‚", + "Modify URL": "Ξ�ΟÂΞÎΟ€ΞÎΟ€ΞÎίηση URL", + "Current URL is": "Ξ�ΞΠΟ„ΟÂέχων URL Ρίναι", + "Opens this link in a new window": "ΑνΞÎίγΡι Ξ±Ο…Ο„ΟŒ Ο„ΞÎΞ½ ΟƒΟÂνδΡσμΞΠσΡ Ξ­Ξ½Ξ± Ξ½Ξ­ΞΠπαΟÂάθυΟÂΞÎ", + "Please confirm that you want to unlink this element.": "ΕίστΡ Ξ²Ξ­Ξ²Ξ±ΞΉΞÎΟ‚ πως θέλΡτΡ Ξ½Ξ± αφαιΟÂέσΡτΡ Ο„ΞÎΞ½ ΟƒΟÂνδΡσμΞΠΞ±Ο€ΟŒ Ξ±Ο…Ο„ΟŒ Ο„ΞΠστΞÎιχΡίΞÎ:", + "Link points to:": "Ο ΟƒΟÂνδΡμΞÎΟ‚ ΞÎδηγΡί Ρδώ:", + "Unlink the current element": "ΑφαίΟÂΡση συνδέσμΞÎΟ… Ξ±Ο€ΟŒ Ο„ΞΠπαΟÂών στΞÎιχΡίΞÎ", + "Show the Table Cell Properties dialog": "Εμφάνιση διαλόγΞÎΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ κΡλιΞÎΟ Ξ Ξ―Ξ½Ξ±ΞΊΞ±", + "Show the Table Row Properties dialog": "Εμφάνιση διαλόγΞÎΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ³ΟÂαμμ�ς Ξ Ξ―Ξ½Ξ±ΞΊΞ±", + "Insert a new row before the current one": "ΕισαγωγΞ� ΞΌΞΉΞ±Ο‚ Ξ½Ξ­Ξ±Ο‚ Ξ³ΟÂαμμ�ς Ο€ΟÂΞΉΞ½ την ΡπιλΡγμένη", + "Insert a new row after the current one": "ΕισαγωγΞ� ΞΌΞΉΞ±Ο‚ Ξ½Ξ­Ξ±Ο‚ Ξ³ΟÂαμμ�ς μΡτά την ΡπιλΡγμένη", + "Delete the current row": "ΔιαγΟÂαφ� ΡπιλΡγμένης Ξ³ΟÂαμμ�ς", + "Show the Table Properties dialog": "Εμφάνιση διαλόγΞÎΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ Ξ―Ξ½Ξ±ΞΊΞ±", + "Insert a new column before the current one": "ΕισαγωγΞ� Ξ½Ξ­Ξ±Ο‚ στΞ�λης Ο€ΟÂΞΉΞ½ την ΡπιλΡγμένη", + "Insert a new column after the current one": "ΕισαγωγΞ� Ξ½Ξ­Ξ±Ο‚ στΞ�λης μΡτά την ΡπιλΡγμένη", + "Delete the current column": "ΔιαγΟÂαφ� ΡπιλΡγμένης στΞ�λης", + "Create a link": "ΔημιΞÎΟ…ΟÂΞ³Ξ―Ξ± συνδέσμΞÎΟ…" +}; diff --git a/xinha/plugins/ContextMenu/lang/fr.js b/xinha/plugins/ContextMenu/lang/fr.js index 10b4fc2..baef2dc 100644 --- a/xinha/plugins/ContextMenu/lang/fr.js +++ b/xinha/plugins/ContextMenu/lang/fr.js @@ -1,50 +1,50 @@ -// I18N constants -// LANG: "fr", ENCODING: UTF-8 -{ - "Cut": "Couper", - "Copy": "Copier", - "Paste": "Coller", - "_Image Properties...": "_Propriétés de l'image...", - "_Modify Link...": "_Modifier le lien...", - "Chec_k Link...": "_Vérifier le lien...", - "_Remove Link...": "_Supprimer le lien...", - "C_ell Properties...": "P_ropriétés de la cellule...", - "Ro_w Properties...": "Pr_opriétés de la rangée...", - "I_nsert Row Before": "Insérer une rangée a_vant", - "In_sert Row After": "Insér_er une rangée après", - "_Delete Row": "Suppr_imer une rangée", - "_Table Properties...": "Proprié_tés de la table...", - "Insert _Column Before": "I_nsérer une colonne avant", - "Insert C_olumn After": "Insérer une colonne après", - "De_lete Column": "_Supprimer la colonne", - "Justify Left": "Aligner à gauche", - "Justify Center": "Aligner au centre", - "Justify Right": "Aligner à droite", - "Justify Full": "Justifier", - "Make lin_k...": "Convertir en lien...", - "Remove the $elem Element...": "Supprimer Élément $elem...", - "Insert paragraph before": "Insérer un paragraphe avant", - "Insert paragraph after": "Insérer un paragraphe après", - "Please confirm that you want to remove this element:": "Confirmer la suppression de cet élément:", - "Remove this node from the document": "Supprimer ce noeud du document", - "How did you get here? (Please report!)": "Comment êtes-vous arrivé ici ? (Reportez le bug SVP !)", - "Show the image properties dialog": "Afficher le dialogue des propriétés d'image", - "Modify URL": "Modifier l'URL", - "Current URL is": "L'URL courante est", - "Opens this link in a new window": "Ouvrir ce lien dans une nouvelle fenêtre", - "Please confirm that you want to unlink this element.": "Voulez-vous vraiment enlever le lien présent sur cet élément.", - "Link points to:": "Le lien pointe sur:", - "Unlink the current element": "Enlever le lien sur cet élément", - "Show the Table Cell Properties dialog": "Afficher la boite de propriété des cellules", - "Show the Table Row Properties dialog": "Afficher la boite de propriété des rangées", - "Insert a new row 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", - "Delete the current row": "Supprimer la rangée courante", - "Show the Table Properties dialog": "Afficher la boite de propriété de tableau", - "Insert a new column before the current one": "Insérer une nouvelle rangée avant celle-ci", - "Insert a new column after the current one": "Insérer une nouvelle colonne après celle-ci", - "Delete the current column": "Supprimer cette colonne", - "Create a link": "Créer un lien", - "Insert a paragraph before the current node": "Insérer un paragraphe avant le noeud courant", - "Insert a paragraph after the current node": "Insérer un paragraphe après le noeud courant" +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +{ + "Cut": "Couper", + "Copy": "Copier", + "Paste": "Coller", + "_Image Properties...": "_Propriétés de l'image...", + "_Modify Link...": "_Modifier le lien...", + "Chec_k Link...": "_Vérifier le lien...", + "_Remove Link...": "_Supprimer le lien...", + "C_ell Properties...": "P_ropriétés de la cellule...", + "Ro_w Properties...": "Pr_opriétés de la rangée...", + "I_nsert Row Before": "Insérer une rangée a_vant", + "In_sert Row After": "Insér_er une rangée après", + "_Delete Row": "Suppr_imer une rangée", + "_Table Properties...": "Proprié_tés de la table...", + "Insert _Column Before": "I_nsérer une colonne avant", + "Insert C_olumn After": "Insérer une colonne après", + "De_lete Column": "_Supprimer la colonne", + "Justify Left": "Aligner à gauche", + "Justify Center": "Aligner au centre", + "Justify Right": "Aligner à droite", + "Justify Full": "Justifier", + "Make lin_k...": "Convertir en lien...", + "Remove the $elem Element...": "Supprimer Élément $elem...", + "Insert paragraph before": "Insérer un paragraphe avant", + "Insert paragraph after": "Insérer un paragraphe après", + "Please confirm that you want to remove this element:": "Confirmer la suppression de cet élément:", + "Remove this node from the document": "Supprimer ce noeud du document", + "How did you get here? (Please report!)": "Comment êtes-vous arrivé ici ? (Reportez le bug SVP !)", + "Show the image properties dialog": "Afficher le dialogue des propriétés d'image", + "Modify URL": "Modifier l'URL", + "Current URL is": "L'URL courante est", + "Opens this link in a new window": "Ouvrir ce lien dans une nouvelle fenêtre", + "Please confirm that you want to unlink this element.": "Voulez-vous vraiment enlever le lien présent sur cet élément.", + "Link points to:": "Le lien pointe sur:", + "Unlink the current element": "Enlever le lien sur cet élément", + "Show the Table Cell Properties dialog": "Afficher la boite de propriété des cellules", + "Show the Table Row Properties dialog": "Afficher la boite de propriété des rangées", + "Insert a new row 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", + "Delete the current row": "Supprimer la rangée courante", + "Show the Table Properties dialog": "Afficher la boite de propriété de tableau", + "Insert a new column before the current one": "Insérer une nouvelle rangée avant celle-ci", + "Insert a new column after the current one": "Insérer une nouvelle colonne après celle-ci", + "Delete the current column": "Supprimer cette colonne", + "Create a link": "Créer un lien", + "Insert a paragraph before the current node": "Insérer un paragraphe avant le noeud courant", + "Insert a paragraph after the current node": "Insérer un paragraphe après le noeud courant" }; \ No newline at end of file diff --git a/xinha/plugins/ContextMenu/lang/he.js b/xinha/plugins/ContextMenu/lang/he.js index 4e3b05a..b95a5ac 100644 --- a/xinha/plugins/ContextMenu/lang/he.js +++ b/xinha/plugins/ContextMenu/lang/he.js @@ -1,47 +1,47 @@ -// I18N constants -// LANG: "he", ENCODING: UTF-8 -// Author: Liron Newman, http://www.eesh.net, -{ - "Cut": "גזור", - "Copy": "העתק", - "Paste": "הדבק", - "_Image Properties...": "_מ×פייני תמונה...", - "_Modify Link...": "_שנה קישור...", - "Chec_k Link...": "בדו_×§ קישור...", - "_Remove Link...": "_הסר קישור...", - "C_ell Properties...": "מ×פייני ת_×...", - "Ro_w Properties...": "מ×פייני _טור...", - "I_nsert Row Before": "×”_כנס שורה לפני", - "In_sert Row After": "×”×›× _ס שורה ×חרי", - "_Delete Row": "_מחק שורה", - "_Table Properties...": "מ×פייני ט_בלה...", - "Insert _Column Before": "הכנס _טור לפני", - "Insert C_olumn After": "הכנס ט_ור ×חרי", - "De_lete Column": "מח_×§ טור", - "Justify Left": "ישור לשמ×ל", - "Justify Center": "ישור למרכז", - "Justify Right": "ישור לימין", - "Justify Full": "ישור לשורה מל××”", - "Make lin_k...": "צור ×§×™_שור...", - "Remove the $elem Element...": "הסר ×ת ×למנט ×”- $elem...", - "Please confirm that you want to remove this element:": "×× × ×שר שברצונך להסיר ×ת ×”×למנט ×”×–×”:", - "Remove this node from the document": "הסרה של node ×–×” מהמסמך", - "How did you get here? (Please report!)": "×יך הגעת ×”× ×”? (×× × ×“×•×•×—!)", - "Show the image properties dialog": "מציג ×ת חלון הדו-שיח של מ×פייני תמונה", - "Modify URL": "שינוי URL", - "Current URL is": "URL נוכחי הו×", - "Opens this link in a new window": "פתיחת קישור ×–×” בחלון חדש", - "Please confirm that you want to unlink this element.": "×× × ×שר ש×תה רוצה לנתק ×ת ×למנט ×–×”.", - "Link points to:": "הקישור מצביע ×ל:", - "Unlink the current element": "ניתוק ×ת ×”×למנט הנוכחי", - "Show the Table Cell Properties dialog": "מציג ×ת חלון הדו-שיח של מ×פייני ×ª× ×‘×˜×‘×œ×”", - "Show the Table Row Properties dialog": "מציג ×ת חלון הדו-שיח של מ×פייני שורה בטבלה", - "Insert a new row before the current one": "הוספת שורה חדשה לפני הנוכחית", - "Insert a new row after the current one": "הוספת שורה חדשה ×חרי הנוכחית", - "Delete the current row": "מחיקת ×ת השורה הנוכחית", - "Show the Table Properties dialog": "מציג ×ת חלון הדו-שיח של מ×פייני טבלה", - "Insert a new column before the current one": "הוספת טור חדש לפני הנוכחי", - "Insert a new column after the current one": "הוספת טור חדש ×חרי הנוכחי", - "Delete the current column": "מחיקת ×ת הטור הנוכחי", - "Create a link": "יצירת קישור" -}; +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// Author: Liron Newman, http://www.eesh.net, +{ + "Cut": "גזור", + "Copy": "העתק", + "Paste": "הדבק", + "_Image Properties...": "_מ×פייני תמונה...", + "_Modify Link...": "_שנה קישור...", + "Chec_k Link...": "בדו_×§ קישור...", + "_Remove Link...": "_הסר קישור...", + "C_ell Properties...": "מ×פייני ת_×...", + "Ro_w Properties...": "מ×פייני _טור...", + "I_nsert Row Before": "×”_כנס שורה לפני", + "In_sert Row After": "×”×›× _ס שורה ×חרי", + "_Delete Row": "_מחק שורה", + "_Table Properties...": "מ×פייני ט_בלה...", + "Insert _Column Before": "הכנס _טור לפני", + "Insert C_olumn After": "הכנס ט_ור ×חרי", + "De_lete Column": "מח_×§ טור", + "Justify Left": "ישור לשמ×ל", + "Justify Center": "ישור למרכז", + "Justify Right": "ישור לימין", + "Justify Full": "ישור לשורה מל××”", + "Make lin_k...": "צור ×§×™_שור...", + "Remove the $elem Element...": "הסר ×ת ×למנט ×”- $elem...", + "Please confirm that you want to remove this element:": "×× × ×שר שברצונך להסיר ×ת ×”×למנט ×”×–×”:", + "Remove this node from the document": "הסרה של node ×–×” מהמסמך", + "How did you get here? (Please report!)": "×יך הגעת ×”× ×”? (×× × ×“×•×•×—!)", + "Show the image properties dialog": "מציג ×ת חלון הדו-שיח של מ×פייני תמונה", + "Modify URL": "שינוי URL", + "Current URL is": "URL נוכחי הו×", + "Opens this link in a new window": "פתיחת קישור ×–×” בחלון חדש", + "Please confirm that you want to unlink this element.": "×× × ×שר ש×תה רוצה לנתק ×ת ×למנט ×–×”.", + "Link points to:": "הקישור מצביע ×ל:", + "Unlink the current element": "ניתוק ×ת ×”×למנט הנוכחי", + "Show the Table Cell Properties dialog": "מציג ×ת חלון הדו-שיח של מ×פייני ×ª× ×‘×˜×‘×œ×”", + "Show the Table Row Properties dialog": "מציג ×ת חלון הדו-שיח של מ×פייני שורה בטבלה", + "Insert a new row before the current one": "הוספת שורה חדשה לפני הנוכחית", + "Insert a new row after the current one": "הוספת שורה חדשה ×חרי הנוכחית", + "Delete the current row": "מחיקת ×ת השורה הנוכחית", + "Show the Table Properties dialog": "מציג ×ת חלון הדו-שיח של מ×פייני טבלה", + "Insert a new column before the current one": "הוספת טור חדש לפני הנוכחי", + "Insert a new column after the current one": "הוספת טור חדש ×חרי הנוכחי", + "Delete the current column": "מחיקת ×ת הטור הנוכחי", + "Create a link": "יצירת קישור" +}; diff --git a/xinha/plugins/ContextMenu/lang/ja.js b/xinha/plugins/ContextMenu/lang/ja.js new file mode 100644 index 0000000..be591f3 --- /dev/null +++ b/xinha/plugins/ContextMenu/lang/ja.js @@ -0,0 +1,53 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Cut": "切りå–り", + "Copy": "コピー", + "Paste": "貼り付ã‘", + "_Image Properties...": "ç”»åƒã®ãƒ—ロパティ(_I)...", + "Show the image properties dialog": "ã“ã®ç”»åƒã®ãƒ—ロパティダイアログを表示ã—ã¾ã™", + "_Modify Link...": "リンクã®ä¿®æ­£(_M)...", + "Current URL is": "ç¾åœ¨ã®URL", + "Chec_k Link...": "リンクを確èª(_K)...", + "Opens this link in a new window": "ã“ã®ãƒªãƒ³ã‚¯ã‚’æ–°ã—ã„ウィンドウã§é–‹ãã¾ã™", + "_Remove Link...": "リンクã®å‰Šé™¤(_R)", + "Please confirm that you want to unlink this element.": "ã“ã®è¦ç´ ã®ãƒªãƒ³ã‚¯ã‚’削除ã—ã¾ã™ã€‚よã‚ã—ã„ã§ã™ã‹ã€‚", + "Link points to:": "リンク先:", + "Unlink the current element": "ã“ã®è¦ç´ ã®ãƒªãƒ³ã‚¯ã‚’解除", + "C_ell Properties...": "セルã®ãƒ—ロパティ(_E)...", + "Ro_w Properties...": "行ã®ãƒ—ロパティ(_W)...", + "Show the Table Row Properties dialog": "テーブル行ã®ãƒ—ロパティダイアログを表示ã—ã¾ã™", + "I_nsert Row Before": "上ã«è¡Œã‚’挿入(_N)", + "Insert a new row before the current one": "é¸æŠžä¸­ã®è¡Œã®ä¸Šã«ä¸€è¡ŒæŒ¿å…¥ã—ã¾ã™", + "In_sert Row After": "下ã«è¡Œã‚’挿入(_S)", + "Insert a new row after the current one": "é¸æŠžä¸­ã®è¡Œã®ä¸‹ã«ä¸€è¡ŒæŒ¿å…¥ã—ã¾ã™", + "_Delete Row": "行ã®å‰Šé™¤(_D)", + "Delete the current row": "é¸æŠžä¸­ã®è¡Œã‚’削除ã—ã¾ã™", + "_Table Properties...": "テーブルã®ãƒ—ロパティ(_T)...", + "Show the Table Properties dialog": "テーブルã®ãƒ—ロパティダイアログを表示ã—ã¾ã™", + "Insert _Column Before": "å·¦ã«åˆ—を挿入(_C)", + "Insert a new column before the current one": "é¸æŠžä¸­ã®åˆ—ã®å·¦ã«ä¸€åˆ—挿入ã—ã¾ã™", + "Insert C_olumn After": "å³ã«åˆ—を挿入(_O)", + "Insert a new column after the current one": "é¸æŠžä¸­ã®åˆ—ã®å³ã«ä¸€åˆ—挿入ã—ã¾ã™", + "De_lete Column": "列ã®å‰Šé™¤(_L)", + "Delete the current column": "é¸æŠžä¸­ã®åˆ—を削除ã—ã¾ã™", + "Justify Left": "左寄ã›", + "Justify Center": "中央寄ã›", + "Justify Right": "å³å¯„ã›", + "Justify Full": "å‡ç­‰å‰²ä»˜", + "Make lin_k...": "リンクã®ä½œæˆ(_K)...", + "Create a link": "æ–°ãŸãªãƒªãƒ³ã‚¯ã‚’作æˆã—ã¾ã™", + "Remove the $elem Element...": "$elem è¦ç´ ã‚’削除 ...", + "Please confirm that you want to remove this element:": "ã“ã®è¦ç´ ã‚’削除ã—ã¾ã™ã€‚よã‚ã—ã„ã§ã™ã‹ã€‚:", + "Remove this node from the document": "ドキュメントã‹ã‚‰ã“ã®ãƒŽãƒ¼ãƒ‰ã‚’削除ã—ã¾ã™", + "Insert paragraph before": "å‰ã«æ®µè½ã‚’挿入", + "Insert a paragraph before the current node": "é¸æŠžä¸­ã®ãƒŽãƒ¼ãƒ‰ã®æ‰‹å‰ã«æ®µè½ã‚’挿入ã—ã¾ã™", + "Insert paragraph after": "å¾Œã«æ®µè½ã‚’挿入", + "Insert a paragraph after the current node": "é¸æŠžä¸­ã®ãƒŽãƒ¼ãƒ‰ã®å¾Œã«æ®µè½ã‚’挿入ã—ã¾ã™", + "How did you get here? (Please report!)": "ã©ã†ã‚„ã£ã¦ã“ã“ã«æ¥ã¾ã—ãŸã‹?(ã©ã†ã‹å ±å‘Šã‚’!)", + "Show the Table Cell Properties dialog": "テーブルセルã®ãƒ—ロパティダイアログを表示ã—ã¾ã™", + "Insert Cell Before": "å‰ã«ã‚»ãƒ«ã‚’挿入", + "Insert Cell After": "後ã«ã‚»ãƒ«ã‚’挿入", + "Delete Cell": "セルã®å‰Šé™¤", + "Merge Cells": "セルã®çµåˆ" +}; \ No newline at end of file diff --git a/xinha/plugins/ContextMenu/lang/no.js b/xinha/plugins/ContextMenu/lang/nb.js similarity index 94% rename from xinha/plugins/ContextMenu/lang/no.js rename to xinha/plugins/ContextMenu/lang/nb.js index 21cded5..cbe4451 100644 --- a/xinha/plugins/ContextMenu/lang/no.js +++ b/xinha/plugins/ContextMenu/lang/nb.js @@ -8,7 +8,7 @@ "Cut": "Klipp ut", "Copy": "Kopier", "Paste": "Lim inn", - "_Image Properties...": "_Bilde Egenskaper...", + "_Image Properties...": "_Bildeegenskaper...", "Show the image properties dialog": "Vis bildeegenskaper", "_Modify Link...": "_Rediger Link...", "Current URL is": "Gjeldende URL er", @@ -18,7 +18,7 @@ "Please confirm that you want to unlink this element.": "Vennligst bekreft at du ønsker Ã¥ fjerne link pÃ¥ elementet", "Link points to:": "Link peker til:", "Unlink the current element": "Fjerne link pÃ¥ gjeldende element", - "C_ell Properties...": "C_elle Egenskaper...", + "C_ell Properties...": "C_elleegenskaper...", "Show the Table Cell Properties dialog": "Vis egenskaper for celle", "Ro_w Properties...": "Rad Egenskaper... (_w)", "Show the Table Row Properties dialog": "Vis egenskaper for rad", @@ -28,7 +28,7 @@ "Insert a new row after the current one": "Sett inn ny rad etter gjeldende", "_Delete Row": "Slett rad (_d)", "Delete the current row": "Slett gjeldende rad", - "_Table Properties...": "_Tabell Egenskaper...", + "_Table Properties...": "_Tabellegenskaper...", "Show the Table Properties dialog": "Vis egenskaper for tabellen", "Insert _Column Before": "Sett inn kolonne etter (_c)", "Insert a new column before the current one": "Sett inn kolonne før gjeldende", diff --git a/xinha/plugins/ContextMenu/lang/nl.js b/xinha/plugins/ContextMenu/lang/nl.js index 78ebf97..8697b36 100644 --- a/xinha/plugins/ContextMenu/lang/nl.js +++ b/xinha/plugins/ContextMenu/lang/nl.js @@ -1,47 +1,47 @@ -// I18N constants -// LANG: "nl", ENCODING: UTF-8 -// Author: Michel Weegeerink (info@mmc-shop.nl), http://mmc-shop.nl -{ - "Cut": "Knippen", - "Copy": "Kopiëren", - "Paste": "Plakken", - "_Image Properties...": "Eigenschappen afbeelding...", - "_Modify Link...": "Hyperlin_k aanpassen...", - "Chec_k Link...": "Controleer hyperlin_k...", - "_Remove Link...": "Ve_rwijder hyperlink...", - "C_ell Properties...": "C_eleigenschappen...", - "Ro_w Properties...": "Rijeigenscha_ppen...", - "I_nsert Row Before": "Rij invoegen boven", - "In_sert Row After": "Rij invoegen onder", - "_Delete Row": "Rij _verwijderen", - "_Table Properties...": "_Tabeleigenschappen...", - "Insert _Column Before": "Kolom invoegen voor", - "Insert C_olumn After": "Kolom invoegen na", - "De_lete Column": "Kolom verwijderen", - "Justify Left": "Links uitlijnen", - "Justify Center": "Centreren", - "Justify Right": "Rechts uitlijnen", - "Justify Full": "Uitvullen", - "Make lin_k...": "Maak hyperlin_k...", - "Remove the $elem Element...": "Verwijder het $elem element...", - "Please confirm that you want to remove this element:": "Is het werkelijk de bedoeling dit element te verwijderen:", - "Remove this node from the document": "Verwijder dit punt van het document", - "How did you get here? (Please report!)": "Hoe kwam je hier? (A.U.B. doorgeven!)", - "Show the image properties dialog": "Laat het afbeeldingseigenschappen dialog zien", - "Modify URL": "Aanpassen URL", - "Current URL is": "Huidig URL is", - "Opens this link in a new window": "Opend deze hyperlink in een nieuw venster", - "Please confirm that you want to unlink this element.": "Is het werkelijk de bedoeling dit element te unlinken.", - "Link points to:": "Hyperlink verwijst naar:", - "Unlink the current element": "Unlink het huidige element", - "Show the Table Cell Properties dialog": "Laat de tabel celeigenschappen dialog zien", - "Show the Table Row Properties dialog": "Laat de tabel rijeigenschappen dialog zien", - "Insert a new row before the current one": "Voeg een nieuwe rij in boven de huidige", - "Insert a new row after the current one": "Voeg een nieuwe rij in onder de huidige", - "Delete the current row": "Verwijder de huidige rij", - "Show the Table Properties dialog": "Laat de tabel eigenschappen dialog zien", - "Insert a new column before the current one": "Voeg een nieuwe kolom in voor de huidige", - "Insert a new column after the current one": "Voeg een nieuwe kolom in na de huidige", - "Delete the current column": "Verwijder de huidige kolom", - "Create a link": "Maak een hyperlink" -}; +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// Author: Michel Weegeerink (info@mmc-shop.nl), http://mmc-shop.nl +{ + "Cut": "Knippen", + "Copy": "Kopiëren", + "Paste": "Plakken", + "_Image Properties...": "Eigenschappen afbeelding...", + "_Modify Link...": "Hyperlin_k aanpassen...", + "Chec_k Link...": "Controleer hyperlin_k...", + "_Remove Link...": "Ve_rwijder hyperlink...", + "C_ell Properties...": "C_eleigenschappen...", + "Ro_w Properties...": "Rijeigenscha_ppen...", + "I_nsert Row Before": "Rij invoegen boven", + "In_sert Row After": "Rij invoegen onder", + "_Delete Row": "Rij _verwijderen", + "_Table Properties...": "_Tabeleigenschappen...", + "Insert _Column Before": "Kolom invoegen voor", + "Insert C_olumn After": "Kolom invoegen na", + "De_lete Column": "Kolom verwijderen", + "Justify Left": "Links uitlijnen", + "Justify Center": "Centreren", + "Justify Right": "Rechts uitlijnen", + "Justify Full": "Uitvullen", + "Make lin_k...": "Maak hyperlin_k...", + "Remove the $elem Element...": "Verwijder het $elem element...", + "Please confirm that you want to remove this element:": "Is het werkelijk de bedoeling dit element te verwijderen:", + "Remove this node from the document": "Verwijder dit punt van het document", + "How did you get here? (Please report!)": "Hoe kwam je hier? (A.U.B. doorgeven!)", + "Show the image properties dialog": "Laat het afbeeldingseigenschappen dialog zien", + "Modify URL": "Aanpassen URL", + "Current URL is": "Huidig URL is", + "Opens this link in a new window": "Opend deze hyperlink in een nieuw venster", + "Please confirm that you want to unlink this element.": "Is het werkelijk de bedoeling dit element te unlinken.", + "Link points to:": "Hyperlink verwijst naar:", + "Unlink the current element": "Unlink het huidige element", + "Show the Table Cell Properties dialog": "Laat de tabel celeigenschappen dialog zien", + "Show the Table Row Properties dialog": "Laat de tabel rijeigenschappen dialog zien", + "Insert a new row before the current one": "Voeg een nieuwe rij in boven de huidige", + "Insert a new row after the current one": "Voeg een nieuwe rij in onder de huidige", + "Delete the current row": "Verwijder de huidige rij", + "Show the Table Properties dialog": "Laat de tabel eigenschappen dialog zien", + "Insert a new column before the current one": "Voeg een nieuwe kolom in voor de huidige", + "Insert a new column after the current one": "Voeg een nieuwe kolom in na de huidige", + "Delete the current column": "Verwijder de huidige kolom", + "Create a link": "Maak een hyperlink" +}; diff --git a/xinha/plugins/ContextMenu/lang/sv.js b/xinha/plugins/ContextMenu/lang/sv.js new file mode 100644 index 0000000..139c262 --- /dev/null +++ b/xinha/plugins/ContextMenu/lang/sv.js @@ -0,0 +1,54 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// Swedish version for rev. 477 (Mar 2006) by Thomas Loo + +// TODO: Proper keybindings +// C,D,e, ,I, ,k,k,l,M, ,n,o,R, ,s,T, ,w : English +// H B j R m F v : Swedish +{ + "Cut": "Klipp ut", + "Copy": "Kopiera", + "Paste": "Klistra in", + "_Image Properties...": "_Bildegenskaper...", + "Show the image properties dialog": "Visa bildegenskaper", + "_Modify Link...": "_Redigera Länk...", + "Current URL is": "Aktuellt URL är", + "Chec_k Link...": "Kontrollera länk...", + "Opens this link in a new window": "Öppna länk i nytt fönster", + "_Remove Link...": "_Ta bort länk...", + "Please confirm that you want to unlink this element.": "Bekräfta borttagning av länk", + "Link points to:": "Länken pekar mot:", + "Unlink the current element": "Ta bort länk kopplad till elementet", + "C_ell Properties...": "C_ellegenskaper...", + "Show the Table Cell Properties dialog": "Visa egenskaper for cellen", + "Ro_w Properties...": "Radegenskaper... (_w)", + "Show the Table Row Properties dialog": "Visa egenskaper för rad", + "I_nsert Row Before": "I_nfoga rad före", + "Insert a new row before the current one": "Infoga ny rad före aktuell", + "In_sert Row After": "Infoga rad efter aktuell rad", + "Insert a new row after the current one": "Infoga ny rad efter aktuell", + "_Delete Row": "Radera rad (_d)", + "Delete the current row": "T bort aktuell rad", + "_Table Properties...": "_Tabellegenskaper...", + "Show the Table Properties dialog": "Visa tabellegenskaper", + "Insert _Column Before": "Infoga kolumn efter (_c)", + "Insert a new column before the current one": "Infoga kolumn före aktuell", + "Insert C_olumn After": "Infoga k_olumn efter", + "Insert a new column after the current one": "Infoga kolumn efter aktuell", + "De_lete Column": "_Radera kolumn", + "Delete the current column": "Radera aktuell kolumn", + "Justify Left": "_Vänsterjustera", + "Justify Center": "_Centerjustera", + "Justify Right": "_Högerjustera", + "Justify Full": "Block_justera", + "Make lin_k...": "Skapa län_k...", + "Create a link": "SKapa ny länk", + "Remove the $elem Element...": "Radera elementet $elem...", + "Please confirm that you want to remove this element:": "Bekräfta borttagning av element:", + "Remove this node from the document": "Radera nod frÃ¥n dokumentet", + "Insert paragraph before": "Infoga paragraf före", + "Insert a paragraph before the current node": "Infoga paragraf före aktuell nod", + "Insert paragraph after": "Infoga paragraf efter", + "Insert a paragraph after the current node": "Infoga paragraf efter aktuell nod", + "How did you get here? (Please report!)": "Hur hamnade du här? (Beskriv förloppet)" +}; \ No newline at end of file diff --git a/xinha/plugins/DoubleClick/double-click.js b/xinha/plugins/DoubleClick/double-click.js index e7e2a01..cf59b43 100644 --- a/xinha/plugins/DoubleClick/double-click.js +++ b/xinha/plugins/DoubleClick/double-click.js @@ -36,12 +36,8 @@ function DoubleClick(editor) { // - editor is the HTMLArea object that triggered the call // - target is the selected object this.editor.dblClickList = { - u: [ function(e) {e.execCommand("underline");} ], - strike: [ function(e) {e.execCommand("strikethrough");} ], - sub: [ function(e) {e.execCommand("subscript");} ], - sup: [ function(e) {e.execCommand("superscript");} ], // Edit Link dialog - a: [ function(e) {e.execCommand("createlink");} ], + a: [ function(e) {e.config.btnList['createlink'][3](e); } ], // Follow link //a: [ function(editor, target) { window.location = target.href; properties(target); } ], diff --git a/xinha/plugins/DynamicCSS/dynamiccss.js b/xinha/plugins/DynamicCSS/dynamiccss.js index 4f9ab36..366e313 100644 --- a/xinha/plugins/DynamicCSS/dynamiccss.js +++ b/xinha/plugins/DynamicCSS/dynamiccss.js @@ -1,237 +1,199 @@ -// Dynamic CSS (className) plugin for HTMLArea -// Sponsored by http://www.systemconcept.de -// Implementation by Holger Hees -// -// (c) systemconcept.de 2004 -// Distributed under the same terms as HTMLArea itself. -// This notice MUST stay intact for use (see license.txt). - -function DynamicCSS(editor, args) { - this.editor = editor; - var cfg = editor.config; - var self = this; - -/*var cssArray=null; - var cssLength=0;*/ - var lastTag=null; - var lastClass=null; - - var css_class = { - id : "DynamicCSS-class", - tooltip : this._lc("Choose stylesheet"), - options : {"":""}, - action : function(editor) { self.onSelect(editor, this); }, - refresh : function(editor) { self.updateValue(editor, this); } - }; - cfg.registerDropdown(css_class); - cfg.addToolbarElement(["T[CSS]", "DynamicCSS-class", "separator"] , "formatblock", -1); +function DynamicCSS(_1,_2){ +this.editor=_1; +var _3=_1.config; +var _4=this; +var _5=null; +var _6=null; +var _7={id:"DynamicCSS-class",tooltip:this._lc("Choose stylesheet"),options:{"":""},action:function(_8){ +_4.onSelect(_8,this); +},refresh:function(_9){ +_4.updateValue(_9,this); +}}; +_3.registerDropdown(_7); +_3.addToolbarElement(["T[CSS]","DynamicCSS-class","separator"],"formatblock",-1); } - -DynamicCSS.parseStyleSheet=function(editor){ - iframe = editor._iframe.contentWindow.document; - - cssArray=DynamicCSS.cssArray; - if(!cssArray) cssArray=new Array(); - - for(i=0;i'; - } - else{ - className='none'; - if(tagName=='all') cssName=HTMLArea._lc("Default", 'DynamicCSS'); - else cssName='<'+HTMLArea._lc("Default", 'DynamicCSS')+'>'; - } - cssArray[tagName][className]=cssName; - DynamicCSS.cssLength++; - } - } - } - // ImportRule (Mozilla) - else if(cssRules[rule].styleSheet){ - cssArray=DynamicCSS.applyCSSRule(cssRules[rule].styleSheet.cssRules,cssArray); - } - } - return cssArray; +DynamicCSS.applyCSSRule=function(_b,_c){ +for(rule in _b){ +if(typeof _b[rule]=="function"){ +continue; +} +if(_b[rule].selectorText){ +if(_b[rule].selectorText.search(/:+/)==-1){ +cssElements=_b[rule].selectorText.split(","); +for(k=0;k"; +} +}else{ +className="none"; +if(tagName=="all"){ +cssName=HTMLArea._lc("Default","DynamicCSS"); +}else{ +cssName="<"+HTMLArea._lc("Default","DynamicCSS")+">"; +} +} +_c[tagName][className]=cssName; +DynamicCSS.cssLength++; +} +} +}else{ +if(_b[rule].styleSheet){ +_c=DynamicCSS.applyCSSRule(_b[rule].styleSheet.cssRules,_c); +} +} +} +return _c; }; - -DynamicCSS._pluginInfo = { - name : "DynamicCSS", - version : "1.5.2", - developer : "Holger Hees", - developer_url : "http://www.systemconcept.de/", - c_owner : "Holger Hees", - sponsor : "System Concept GmbH", - sponsor_url : "http://www.systemconcept.de/", - license : "htmlArea" +DynamicCSS._pluginInfo={name:"DynamicCSS",version:"1.5.2",developer:"Holger Hees",developer_url:"http://www.systemconcept.de/",c_owner:"Holger Hees",sponsor:"System Concept GmbH",sponsor_url:"http://www.systemconcept.de/",license:"htmlArea"}; +DynamicCSS.prototype._lc=function(_d){ +return HTMLArea._lc(_d,"DynamicCSS"); }; - -DynamicCSS.prototype._lc = function(string) { - return HTMLArea._lc(string, 'DynamicCSS'); +DynamicCSS.prototype.onSelect=function(_e,_f){ +var _10=_e._toolbarObjects[_f.id]; +var _11=_10.element.selectedIndex; +var _12=_10.element.value; +var _13=_e.getParentElement(); +if(_12!="none"){ +_13.className=_12; +DynamicCSS.lastClass=_12; +}else{ +if(HTMLArea.is_gecko){ +_13.removeAttribute("class"); +}else{ +_13.removeAttribute("className"); +} +} +_e.updateToolbar(); }; - -DynamicCSS.prototype.onSelect = function(editor, obj) { - var tbobj = editor._toolbarObjects[obj.id]; - var index = tbobj.element.selectedIndex; - var className = tbobj.element.value; - - var parent = editor.getParentElement(); - - if(className!='none'){ - parent.className=className; - DynamicCSS.lastClass=className; - } - else{ - if(HTMLArea.is_gecko) parent.removeAttribute('class'); - else parent.removeAttribute('className'); - } - editor.updateToolbar(); +DynamicCSS.prototype.reparseTimer=function(_14,obj,_16){ +if(DynamicCSS.parseCount<9){ +setTimeout(function(){ +DynamicCSS.cssLength=0; +DynamicCSS.parseStyleSheet(_14); +if(DynamicCSS.cssOldLength!=DynamicCSS.cssLength){ +DynamicCSS.cssOldLength=DynamicCSS.cssLength; +DynamicCSS.lastClass=null; +_16.updateValue(_14,obj); +} +_16.reparseTimer(_14,obj,_16); +},DynamicCSS.parseCount*1000); +DynamicCSS.parseCount=DynamicCSS.parseCount*2; +} }; - -/*DynamicCSS.prototype.onMode = function(mode) { - if(mode=='wysiwyg'){ - // reparse possible changed css files - DynamicCSS.cssArray=null; - this.updateValue(this.editor,this.editor.config.customSelects["DynamicCSS-class"]); - } -}*/ - -DynamicCSS.prototype.reparseTimer = function(editor, obj, instance) { - // new attempt of rescan stylesheets in 1,2,4 and 8 second (e.g. for external css-files with longer initialisation) - if(DynamicCSS.parseCount<9){ - setTimeout(function () { - DynamicCSS.cssLength=0; - DynamicCSS.parseStyleSheet(editor); - if(DynamicCSS.cssOldLength!=DynamicCSS.cssLength){ - DynamicCSS.cssOldLength=DynamicCSS.cssLength; - DynamicCSS.lastClass=null; - instance.updateValue(editor, obj); - } - instance.reparseTimer(editor, obj, instance); - },DynamicCSS.parseCount*1000); - DynamicCSS.parseCount=DynamicCSS.parseCount*2; - } +DynamicCSS.prototype.updateValue=function(_17,obj){ +cssArray=DynamicCSS.cssArray; +if(!cssArray){ +DynamicCSS.cssLength=0; +DynamicCSS.parseStyleSheet(_17); +cssArray=DynamicCSS.cssArray; +DynamicCSS.cssOldLength=DynamicCSS.cssLength; +DynamicCSS.parseCount=1; +this.reparseTimer(_17,obj,this); +} +var _19=_17.getParentElement(); +var _1a=_19.tagName.toLowerCase(); +var _1b=_19.className; +if(this.lastTag!=_1a||this.lastClass!=_1b){ +this.lastTag=_1a; +this.lastClass=_1b; +var _1c=_17._toolbarObjects[obj.id].element; +while(_1c.length>0){ +_1c.options[_1c.length-1]=null; +} +_1c.options[0]=new Option(this._lc("Default"),"none"); +if(cssArray){ +if(_1a!="body"||_17.config.fullPage){ +if(cssArray[_1a]){ +for(cssClass in cssArray[_1a]){ +if(typeof cssArray[_1a][cssClass]!="string"){ +continue; +} +if(cssClass=="none"){ +_1c.options[0]=new Option(cssArray[_1a][cssClass],cssClass); +}else{ +_1c.options[_1c.length]=new Option(cssArray[_1a][cssClass],cssClass); +} +} +} +if(cssArray["all"]){ +for(cssClass in cssArray["all"]){ +if(typeof cssArray["all"][cssClass]!="string"){ +continue; +} +_1c.options[_1c.length]=new Option(cssArray["all"][cssClass],cssClass); +} +} +}else{ +if(cssArray[_1a]&&cssArray[_1a]["none"]){ +_1c.options[0]=new Option(cssArray[_1a]["none"],"none"); +} +} +} +_1c.selectedIndex=0; +if(typeof _1b!="undefined"&&/\S/.test(_1b)){ +var _1d=_1c.options; +for(var i=_1d.length;--i>=0;){ +var _1f=_1d[i]; +if(_1b==_1f.value){ +_1c.selectedIndex=i; +break; +} +} +if(_1c.selectedIndex==0){ +_1c.options[_1c.length]=new Option(this._lc("Undefined"),_1b); +_1c.selectedIndex=_1c.length-1; +} +} +if(_1c.length>1){ +_1c.disabled=false; +}else{ +_1c.disabled=true; +} +} }; - -DynamicCSS.prototype.updateValue = function(editor, obj) { - cssArray=DynamicCSS.cssArray; - // initial style init - if(!cssArray){ - DynamicCSS.cssLength=0; - DynamicCSS.parseStyleSheet(editor); - cssArray=DynamicCSS.cssArray; - DynamicCSS.cssOldLength=DynamicCSS.cssLength; - DynamicCSS.parseCount=1; - this.reparseTimer(editor,obj,this); - } - - var parent = editor.getParentElement(); - var tagName = parent.tagName.toLowerCase(); - var className = parent.className; - - if(this.lastTag!=tagName || this.lastClass!=className){ - this.lastTag=tagName; - this.lastClass=className; - - var select = editor._toolbarObjects[obj.id].element; - - while(select.length>0){ - select.options[select.length-1] = null; - } - - select.options[0]=new Option(this._lc("Default"),'none'); - if(cssArray){ - // style class only allowed if parent tag is not body or editor is in fullpage mode - if(tagName!='body' || editor.config.fullPage){ - if(cssArray[tagName]){ - for(cssClass in cssArray[tagName]){ - if(typeof cssArray[tagName][cssClass] != 'string') continue; - if(cssClass=='none') select.options[0]=new Option(cssArray[tagName][cssClass],cssClass); - else select.options[select.length]=new Option(cssArray[tagName][cssClass],cssClass); - } - } - - if(cssArray['all']){ - for(cssClass in cssArray['all']){ - if(typeof cssArray['all'][cssClass] != 'string') continue; - select.options[select.length]=new Option(cssArray['all'][cssClass],cssClass); - } - } - } - else if(cssArray[tagName] && cssArray[tagName]['none']) select.options[0]=new Option(cssArray[tagName]['none'],'none'); - } - - select.selectedIndex = 0; - - if (typeof className != "undefined" && /\S/.test(className)) { - var options = select.options; - for (var i = options.length; --i >= 0;) { - var option = options[i]; - if (className == option.value) { - select.selectedIndex = i; - break; - } - } - if(select.selectedIndex == 0){ - select.options[select.length]=new Option(this._lc("Undefined"),className); - select.selectedIndex=select.length-1; - } - } - - if(select.length>1) select.disabled=false; - else select.disabled=true; - } -}; \ No newline at end of file + diff --git a/xinha/plugins/DynamicCSS/lang/de.js b/xinha/plugins/DynamicCSS/lang/de.js index 5419e8d..3cead02 100644 --- a/xinha/plugins/DynamicCSS/lang/de.js +++ b/xinha/plugins/DynamicCSS/lang/de.js @@ -1,12 +1,12 @@ -// I18N constants -// LANG: "de", ENCODING: UTF-8 -// Sponsored by http://www.systemconcept.de -// Author: Holger Hees, -// (c) systemconcept.de 2004 -// Distributed under the same terms as HTMLArea itself. -// This notice MUST stay intact for use (see license.txt). -{ - "Default": "Standard", - "Undefined": "Nicht definiert", - "Choose stylesheet": "Wählen Sie einen StyleSheet aus" -}; +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// Sponsored by http://www.systemconcept.de +// Author: Holger Hees, +// (c) systemconcept.de 2004 +// Distributed under the same terms as HTMLArea itself. +// This notice MUST stay intact for use (see license.txt). +{ + "Default": "Standard", + "Undefined": "Nicht definiert", + "Choose stylesheet": "Wählen Sie einen StyleSheet aus" +}; diff --git a/xinha/plugins/DynamicCSS/lang/fr.js b/xinha/plugins/DynamicCSS/lang/fr.js index a82ca2a..72a813d 100644 --- a/xinha/plugins/DynamicCSS/lang/fr.js +++ b/xinha/plugins/DynamicCSS/lang/fr.js @@ -1,7 +1,7 @@ -// I18N constants -// LANG: "fr", ENCODING: UTF-8 -{ - "Default": "Défaut", - "Undefined": "Non défini", - "Choose stylesheet": "Choisir feuille de style" +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +{ + "Default": "Défaut", + "Undefined": "Non défini", + "Choose stylesheet": "Choisir feuille de style" }; \ No newline at end of file diff --git a/xinha/plugins/DynamicCSS/lang/ja.js b/xinha/plugins/DynamicCSS/lang/ja.js new file mode 100644 index 0000000..005d204 --- /dev/null +++ b/xinha/plugins/DynamicCSS/lang/ja.js @@ -0,0 +1,7 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Default": "ãªã—", + "Undefined": "未定義", + "Choose stylesheet": "スタイルシートã®é¸æŠž" +}; \ No newline at end of file diff --git a/xinha/plugins/DynamicCSS/lang/no.js b/xinha/plugins/DynamicCSS/lang/nb.js similarity index 85% rename from xinha/plugins/DynamicCSS/lang/no.js rename to xinha/plugins/DynamicCSS/lang/nb.js index 3ea3665..24e8e8a 100644 --- a/xinha/plugins/DynamicCSS/lang/no.js +++ b/xinha/plugins/DynamicCSS/lang/nb.js @@ -1,5 +1,5 @@ // I18N constants -// LANG: "no", ENCODING: UTF-8 +// LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Default": "Standard", diff --git a/xinha/plugins/EnterParagraphs/enter-paragraphs.js b/xinha/plugins/EnterParagraphs/enter-paragraphs.js deleted file mode 100644 index 4d0f9ba..0000000 --- a/xinha/plugins/EnterParagraphs/enter-paragraphs.js +++ /dev/null @@ -1,1087 +0,0 @@ -// tabs 2 - -/** -* @fileoverview 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). -* -* Heavily modified by Yermo Lamers of DTLink, LLC, College Park, Md., USA. -* For more info see http://www.areaedit.com -*/ - -/** -* plugin Info -*/ - -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" - }; - -// ------------------------------------------------------------------ - -// "constants" - -/** -* Whitespace Regex -*/ - -EnterParagraphs.prototype._whiteSpace = /^\s*$/; - -/** -* The pragmatic list of which elements a paragraph may not contain -*/ - -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; - -/** -* elements which may contain a paragraph -*/ - -EnterParagraphs.prototype._pContainers = /^(body|del|div|fieldset|form|ins|map|noscript|object|td|th)$/i; - -/** -* Elements which may not contain paragraphs, and would prefer a break to being split -*/ - -EnterParagraphs.prototype._pBreak = /^(address|pre|blockquote)$/i; - -/** -* Elements which may not contain children -*/ - -EnterParagraphs.prototype._permEmpty = /^(area|base|basefont|br|col|frame|hr|img|input|isindex|link|meta|param)$/i; - -/** -* Elements which count as content, as distinct from whitespace or containers -*/ - -EnterParagraphs.prototype._elemSolid = /^(applet|br|button|hr|img|input|table)$/i; - -/** -* Elements which should get a new P, before or after, when enter is pressed at either end -*/ - -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; - -/** -* Elements which should get a new P, before or after a close parent, when enter is pressed at either end -*/ - -EnterParagraphs.prototype._pifyParent = /^(dd|dt|li|td|th|tr)$/i; - -// --------------------------------------------------------------------- - -/** -* EnterParagraphs Constructor -*/ - -function EnterParagraphs(editor) - { - - this.editor = editor; - - // [STRIP - // create a ddt debug trace object. There may be multiple editors on - // the page each EnterParagraphs .. to distinguish which instance - // is generating the message we tack on the name of the textarea. - - //this.ddt = new DDT( editor._textArea + ":EnterParagraphs Plugin" ); - - // uncomment to turn on debugging messages. - - //this.ddt._ddtOn(); - - //this.ddt._ddt( "enter-paragraphs.js","23", "EnterParagraphs(): constructor" ); - - // STRIP] - - // hook into the event handler to intercept key presses if we are using - // gecko (Mozilla/FireFox) - - if (HTMLArea.is_gecko) - { - //this.ddt._ddt( "enter-paragraphs.js","23", "EnterParagraphs(): we are gecko. Setting event handler." ); - this.onKeyPress = this.__onKeyPress; - } - - } // end of constructor. - -// ------------------------------------------------------------------ - -/** -* name member for debugging -* -* This member is used to identify objects of this class in debugging -* messages. -*/ - -EnterParagraphs.prototype.name = "EnterParagraphs"; - -/** -* Gecko's a bit lacking in some odd ways... -*/ - -EnterParagraphs.prototype.insertAdjacentElement = function(ref,pos,el) - { - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "122", "insertAdjacentElement(): top with pos '" + pos + "' ref:", ref ); - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "122", "insertAdjacentElement(): top with el:", el ); - - if ( pos == 'BeforeBegin' ) - { - ref.parentNode.insertBefore(el,ref); - } - else if ( pos == 'AfterEnd' ) - { - ref.nextSibling ? ref.parentNode.insertBefore(el,ref.nextSibling) : ref.parentNode.appendChild(el); - } - else if ( pos == 'AfterBegin' && ref.firstChild ) - { - ref.insertBefore(el,ref.firstChild); - } - else if ( pos == 'BeforeEnd' || pos == 'AfterBegin' ) - { - ref.appendChild(el); - } - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "122", "insertAdjacentElement(): bottom with ref:", ref ); - - }; // end of insertAdjacentElement() - -// ---------------------------------------------------------------- - -/** -* Passes a global parent node or document fragment to forEachNode -* -* @param root node root node to start search from. -* @param mode string function to apply to each node. -* @param direction string traversal direction "ltr" (left to right) or "rtl" (right_to_left) -* @param init boolean -*/ - -EnterParagraphs.prototype.forEachNodeUnder = function ( root, mode, direction, init ) - { - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "144", "forEachNodeUnder(): top mode is '" + mode + "' direction is '" + direction + "' starting with root node:", root ); - - // Identify the first and last nodes to deal with - - var start, end; - - // nodeType 11 is DOCUMENT_FRAGMENT_NODE which is a container. - - if ( root.nodeType == 11 && root.firstChild ) - { - start = root.firstChild; - end = root.lastChild; - } - else - { - start = end = root; - } - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "144", "forEachNodeUnder(): start node is:", start ); - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "144", "forEachNodeUnder(): initial end node is:", end ); - - // traverse down the right hand side of the tree getting the last child of the last - // child in each level until we reach bottom. - while ( end.lastChild ) - end = end.lastChild; - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "144", "forEachNodeUnder(): end node after descent is:", end ); - - return this.forEachNode( start, end, mode, direction, init); - - }; // end of forEachNodeUnder() - -// ----------------------------------------------------------------------- - -/** -* perform a depth first descent in the direction requested. -* -* @param left_node node "start node" -* @param right_node node "end node" -* @param mode string function to apply to each node. cullids or emptyset. -* @param direction string traversal direction "ltr" (left to right) or "rtl" (right_to_left) -* @param init boolean or object. -*/ - -EnterParagraphs.prototype.forEachNode = function (left_node, right_node, mode, direction, init) - { - - //this.ddt._ddt( "enter-paragraphs.js", "175", "forEachNode(): top - mode is:" + mode + "' direction '" + direction + "'" ); - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "175", "forEachNode(): top - left node is:", left_node ); - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "175", "forEachNode(): top - right node is:", right_node ); - - // returns "Brother" node either left or right. - - var getSibling = function(elem, direction) - { - return ( direction == "ltr" ? elem.nextSibling : elem.previousSibling ); - }; - - var getChild = function(elem, direction) - { - return ( direction == "ltr" ? elem.firstChild : elem.lastChild ); - }; - - var walk, lookup, fnReturnVal; - - // FIXME: init is a boolean in the emptyset case and an object in - // the cullids case. Used inconsistently. - - var next_node = init; - - // used to flag having reached the last node. - - var done_flag = false; - - // loop ntil we've hit the last node in the given direction. - // if we're going left to right that's the right_node and visa-versa. - - while ( walk != direction == "ltr" ? right_node : left_node ) - { - - // on first entry, walk here is null. So this is how - // we prime the loop with the first node. - - if ( !walk ) - { - walk = direction == "ltr" ? left_node : right_node; - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "175", "forEachNode(): !walk - current node is:", walk ); - } - else - { - - // is there a child node? - - if ( getChild(walk,direction) ) - { - - // descend down into the child. - - walk = getChild(walk,direction); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "175", "forEachNode():descending to child node:", walk ); - - } - else - { - - // is there a sibling node on this level? - - if ( getSibling(walk,direction) ) - { - - // move to the sibling. - - walk = getSibling(walk,direction); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "175", "forEachNode(): moving to sibling node:", walk ); - - } - else - { - lookup = walk; - - // climb back up the tree until we find a level where we are not the end - // node on the level (i.e. that we have a sibling in the direction - // we are searching) or until we reach the end. - - while ( !getSibling(lookup,direction) && lookup != (direction == "ltr" ? right_node : left_node) ) - { - lookup = lookup.parentNode; - } - - // did we find a level with a sibling? - - // walk = ( lookup.nextSibling ? lookup.nextSibling : lookup ) ; - - walk = ( getSibling(lookup,direction) ? getSibling(lookup,direction) : lookup ) ; - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "175", "forEachNode(): climbed back up (or found right node):", walk ); - - } - } - - } // end of else walk. - - // have we reached the end? either as a result of the top while loop or climbing - // back out above. - - done_flag = (walk==( direction == "ltr" ? right_node : left_node)); - - // call the requested function on the current node. Functions - // return an array. - // - // Possible functions are _fenCullIds, _fenEmptySet - // - // The situation is complicated by the fact that sometimes we want to - // return the base node and sometimes we do not. - // - // next_node can be an object (this.takenIds), a node (text, el, etc) or false. - - //this.ddt._ddt( "enter-paragraphs.js", "175", "forEachNode(): calling function" ); - - switch( mode ) - { - - case "cullids": - - fnReturnVal = this._fenCullIds(walk, next_node ); - break; - - case "find_fill": - - fnReturnVal = this._fenEmptySet(walk, next_node, mode, done_flag); - break; - - case "find_cursorpoint": - - fnReturnVal = this._fenEmptySet(walk, next_node, mode, done_flag); - break; - - } - - // If this node wants us to return, return next_node - - if ( fnReturnVal[0] ) - { - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "175", "forEachNode(): returning node:", fnReturnVal[1] ); - - return fnReturnVal[1]; - } - - // are we done with the loop? - - if ( done_flag ) - { - break; - } - - // Otherwise, pass to the next node - - if ( fnReturnVal[1] ) - { - next_node = fnReturnVal[1]; - } - - } // end of while loop - - //this.ddt._ddt( "enter-paragraphs.js", "175", "forEachNode(): returning false." ); - - return false; - - }; // end of forEachNode() - -// ------------------------------------------------------------------- - -/** -* Find a post-insertion node, only if all nodes are empty, or the first content -* -* @param node node current node beinge examined. -* @param next_node node next node to be examined. -* @param node string "find_fill" or "find_cursorpoint" -* @param last_flag boolean is this the last node? -*/ - -EnterParagraphs.prototype._fenEmptySet = function( node, next_node, mode, last_flag) - { - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "263", "_fenEmptySet() : top with mode '" + mode + "' and last_flag '" + last_flag + "' and node:", node ); - - // Mark this if it's the first base - - if ( !next_node && !node.firstChild ) - { - next_node = node; - } - - // Is it an element node and is it considered content? (br, hr, etc) - // or is it a text node that is not just whitespace? - // or is it not an element node and not a text node? - - if ( (node.nodeType == 1 && this._elemSolid.test(node.nodeName)) || - (node.nodeType == 3 && !this._whiteSpace.test(node.nodeValue)) || - (node.nodeType != 1 && node.nodeType != 3) ) - { - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "263", "_fenEmptySet() : found content in node:", node ); - - switch( mode ) - { - - case "find_fill": - - // does not return content. - - return new Array(true, false ); - breal; - - case "find_cursorpoint": - - // returns content - - return new Array(true, node ); - break; - - } - - } - - // In either case (fill or findcursor) we return the base node. The avoids - // problems in terminal cases (beginning or end of document or container tags) - - if ( last_flag ) - { - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "263", "_fenEmptySet() : return 'base' node:", next_node ); - - return new Array( true, next_node ); - } - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "263", "_fenEmptySet() : bottom returning false and :", next_node ); - - return new Array( false, next_node ); - - }; // end of _fenEmptySet() - -// ------------------------------------------------------------------------------ - -/** -* remove duplicate Id's. -* -* @param ep_ref enterparagraphs reference to enterparagraphs object -*/ - -EnterParagraphs.prototype._fenCullIds = function ( ep_ref, node, pong ) - { - - //this.ddt._ddt( "enter-paragraphs.js", "299", "_fenCullIds(): top" ); - - // Check for an id, blast it if it's in the store, otherwise add it - - if ( node.id ) - { - - //this.ddt._ddt( "enter-paragraphs.js", "299", "_fenCullIds(): node '" + node.nodeName + "' has an id '" + node.id + "'" ); - - pong[node.id] ? node.id = '' : pong[node.id] = true; - } - - return new Array(false,pong); - - }; - -// --------------------------------------------------------------------------------- - -/** -* Grabs a range suitable for paragraph stuffing -* -* @param rng Range -* @param search_direction string "left" or "right" -* -* @todo check blank node issue in roaming loop. -*/ - -EnterParagraphs.prototype.processSide = function( rng, search_direction) - { - - //this.ddt._ddt( "enter-paragraphs.js", "329", "processSide(): top search_direction == '" + search_direction + "'" ); - - var next = function(element, search_direction) - { - return ( search_direction == "left" ? element.previousSibling : element.nextSibling ); - }; - - var node = search_direction == "left" ? rng.startContainer : rng.endContainer; - var offset = search_direction == "left" ? rng.startOffset : rng.endOffset; - var roam, start = node; - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "337", "processSide(): starting with node:", node ); - - // Never start with an element, because then the first roaming node might - // be on the exclusion list and we wouldn't know until it was too late - - while ( start.nodeType == 1 && !this._permEmpty.test(start.nodeName) ) - { - start = ( offset ? start.lastChild : start.firstChild ); - } - - // Climb the tree, left or right, until our course of action presents itself - // - // if roam is NULL try start. - // if roam is NOT NULL, try next node in our search_direction - // If that node is NULL, get our parent node. - // - // If all the above turns out NULL end the loop. - // - // FIXME: gecko (firefox 1.0.3) - enter "test" into an empty document and press enter. - // sometimes this loop finds a blank text node, sometimes it doesn't. - - while ( roam = roam ? ( next(roam,search_direction) ? next(roam,search_direction) : roam.parentNode ) : start ) - { - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "357", "processSide(): roaming loop, search_direction is '" + search_direction + "' current node is: ", roam ); - - // next() is an inline function defined above that returns the next node depending - // on the direction we're searching. - - if ( next(roam,search_direction) ) - { - - //this.ddt._ddt( "enter-paragraphs.js", "371", "processSide(): Checking next node '" + next(roam,search_direction).NodeName + "' for _pExclusions list." ); - - // If the next sibling's on the exclusion list, stop before it - - if ( this._pExclusions.test(next(roam,search_direction).nodeName) ) - { - - //this.ddt._ddt( "enter-paragraphs.js", "371", "processSide(): Node '" + next(roam,search_direction).NodeName + "' is on the _pExclusions list. Stopping before it." ); - - return this.processRng(rng, search_direction, roam, next(roam,search_direction), (search_direction == "left"?'AfterEnd':'BeforeBegin'), true, false); - } - } - else - { - - //this.ddt._ddt( "enter-paragraphs.js", "371", "processSide(): No next node, examing parent node '" + roam.parentNode.nodeName + "' for containers or exclusions." ); - - // If our parent's on the container list, stop inside it - - if (this._pContainers.test(roam.parentNode.nodeName)) - { - - //this.ddt._ddt( "enter-paragraphs.js", "371", "processSide(): Parent Node '" + roam.parentNode.nodeName + "' is on the _pContainer list. Stopping inside it." ); - - return this.processRng(rng, search_direction, roam, roam.parentNode, (search_direction == "left"?'AfterBegin':'BeforeEnd'), true, false); - } - else if (this._pExclusions.test(roam.parentNode.nodeName)) - { - - //this.ddt._ddt( "enter-paragraphs.js", "371", "processSide(): Parent Node '" + roam.parentNode.nodeName + "' is on the _pExclusion list." ); - - // chop without wrapping - - if (this._pBreak.test(roam.parentNode.nodeName)) - { - - //this.ddt._ddt( "enter-paragraphs.js", "371", "processSide(): Parent Node '" + roam.parentNode.nodeName + "' is on the _pBreak list." ); - - return this.processRng(rng, search_direction, roam, roam.parentNode, - (search_direction == "left"?'AfterBegin':'BeforeEnd'), false, (search_direction == "left" ?true:false)); - } - else - { - - //this.ddt._ddt( "enter-paragraphs.js", "371", "processSide(): Parent Node '" + roam.parentNode.nodeName + "' is not on the _pBreak list." ); - - // the next(roam,search_direction) in this call is redundant since we know it's false - // because of the "if next(roam,search_direction)" above. - // - // the final false prevents this range from being wrapped in

's most likely - // because it's already wrapped. - - return this.processRng(rng, - search_direction, - (roam = roam.parentNode), - (next(roam,search_direction) ? next(roam,search_direction) : roam.parentNode), - (next(roam,search_direction) ? (search_direction == "left"?'AfterEnd':'BeforeBegin') : (search_direction == "left"?'AfterBegin':'BeforeEnd')), - false, - false); - } - } - } - } - - //this.ddt._ddt( "enter-paragraphs.js", "424", "processSide(): bottom" ); - - }; // end of processSide() - -// ------------------------------------------------------------------------------ - -/** -* processRng - process Range. -* -* Neighbour and insertion identify where the new node, roam, needs to enter -* the document; landmarks in our selection will be deleted before insertion -* -* @param rn Range original selected range -* @param search_direction string Direction to search in. -* @param roam node -* @param insertion string may be AfterBegin of BeforeEnd -* @return array -*/ - -EnterParagraphs.prototype.processRng = function(rng, search_direction, roam, neighbour, insertion, pWrap, preBr) - { - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "398", "processRng(): top - roam arg is:", roam ); - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "398", "processRng(): top - neighbor arg is:", neighbour ); - - //this.ddt._ddt( "enter-paragraphs.js", "398", "processRng(): top - insertion arg is: '" + insertion + "'" ); - - var node = search_direction == "left" ? rng.startContainer : rng.endContainer; - var offset = search_direction == "left" ? rng.startOffset : rng.endOffset; - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "447", "processRng(): range start (or end) is at offset '" + offset + "' is node :", node ); - - // Define the range to cut, and extend the selection range to the same boundary - - var editor = this.editor; - var newRng = editor._doc.createRange(); - - newRng.selectNode(roam); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "522", "processRng(): selecting newRng is:", newRng ); - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "522", "processRng(): selecting original rng is:", rng ); - - // extend the range in the given direction. - - if ( search_direction == "left") - { - newRng.setEnd(node, offset); - rng.setStart(newRng.startContainer, newRng.startOffset); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "522", "processRng(): extending direction left - newRng is:", newRng ); - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "522", "processRng(): extending direction left - rng is:", rng ); - - } - else if ( search_direction == "right" ) - { - - newRng.setStart(node, offset); - rng.setEnd(newRng.endContainer, newRng.endOffset); - - //this.ddt._ddt( "enter-paragraphs.js", "522", "processRng(): right - new range start is '" + offset + "' end offset is '" + newRng.endOffset + "'" ); - } - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "522", "processRng(): rng is:", rng ); - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "522", "processRng(): newRng is:", newRng ); - - // Clone the range and remove duplicate ids it would otherwise produce - - var cnt = newRng.cloneContents(); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "509", "processRng(): culling duplicate ids from:", cnt ); - - // in this case "init" is an object not a boolen. - - this.forEachNodeUnder( cnt, "cullids", "ltr", this.takenIds, false, false); - - // Special case, for inserting paragraphs before some blocks when caret is at - // their zero offset. - // - // Used to "open up space" in front of a list, table. Usefull if the list is at - // the top of the document. (otherwise you'd have no way of "moving it down"). - - var pify, pifyOffset, fill; - pify = search_direction == "left" ? (newRng.endContainer.nodeType == 3 ? true:false) : (newRng.startContainer.nodeType == 3 ? false:true); - pifyOffset = pify ? newRng.startOffset : newRng.endOffset; - pify = pify ? newRng.startContainer : newRng.endContainer; - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "521", "processRng(): pify is '" + pify.nodeName + "' pifyOffset is '" + pifyOffset + "':", pify ); - - if ( this._pifyParent.test(pify.nodeName) && pify.parentNode.childNodes.item(0) == pify ) - { - while ( !this._pifySibling.test(pify.nodeName) ) - { - pify = pify.parentNode; - } - } - - // NODE TYPE 11 is DOCUMENT_FRAGMENT NODE - - if ( cnt.nodeType == 11 && !cnt.firstChild ) - { - cnt.appendChild(editor._doc.createElement(pify.nodeName)); - } - - // YmL: Added additional last parameter for fill case to work around logic - // error in forEachNode() - - //this.ddt._ddt( "enter-paragraphs.js", "612", "processRng(): find_fill in cnt." ); - - fill = this.forEachNodeUnder(cnt, "find_fill", "ltr", false ); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "612", "processRng(): fill node:" , fill ); - - if ( fill && - this._pifySibling.test(pify.nodeName) && - ( (pifyOffset == 0) || ( pifyOffset == 1 && this._pifyForced.test(pify.nodeName) ) ) ) - { - - //this.ddt._ddt( "enter-paragraphs.js", "544", "processRng(): pify handling. Creating p tag followed by nbsp tag" ); - - roam = editor._doc.createElement( 'p' ); - roam.innerHTML = " "; - - // roam = editor._doc.createElement('p'); - // roam.appendChild(editor._doc.createElement('br')); - - // for these cases, if we are processing the left hand side we want it to halt - // processing instead of doing the right hand side. (Avoids adding another

 

- // after the list etc. - - if ((search_direction == "left" ) && pify.previousSibling) - { - - //this.ddt._ddt( "enter-paragraphs.js", "682", "processRng(): returning created roam AfterEnd" ); - - return new Array(pify.previousSibling, 'AfterEnd', roam); - } - else if (( search_direction == "right") && pify.nextSibling) - { - - //this.ddt._ddt( "enter-paragraphs.js", "682", "processRng(): returning created roam BeforeBegin" ); - - return new Array(pify.nextSibling, 'BeforeBegin', roam); - } - else - { - - //this.ddt._ddt( "enter-paragraphs.js", "682", "processRng(): returning created roam for direction '" + search_direction + "'" ); - - return new Array(pify.parentNode, (search_direction == "left"?'AfterBegin':'BeforeEnd'), roam); - } - - } - - // If our cloned contents are 'content'-less, shove a break in them - - if ( fill ) - { - - // Ill-concieved? - // - // 3 is a TEXT node and it should be empty. - // - - if ( fill.nodeType == 3 ) - { - // fill = fill.parentNode; - - fill = editor._doc.createDocumentFragment(); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "575", "processRng(): fill.nodeType is 3. Moving up to parent:", fill ); - } - - if ( (fill.nodeType == 1 && !this._elemSolid.test()) || fill.nodeType == 11 ) - { - - // FIXME:/CHECKME: When Xinha is switched from WYSIWYG to text mode - // HTMLArea.getHTMLWrapper() will strip out the trailing br. Not sure why. - - // fill.appendChild(editor._doc.createElement('br')); - - var pterminator = editor._doc.createElement( 'p' ); - pterminator.innerHTML = " "; - - fill.appendChild( pterminator ); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "583", "processRng(): fill type is 1 and !elemsolid or it's type 11. Appending an nbsp tag:", fill ); - - } - else - { - - //this.ddt._ddt( "enter-paragraphs.js", "583", "processRng(): inserting a br tag before." ); - - // fill.parentNode.insertBefore(editor._doc.createElement('br'),fill); - - var pterminator = editor._doc.createElement( 'p' ); - pterminator.innerHTML = " "; - - fill.parentNode.insertBefore(parentNode,fill); - - } - } - - // YmL: If there was no content replace with fill - // (previous code did not use fill and we ended up with the - //

test

because Gecko was finding two empty text nodes - // when traversing on the right hand side of an empty document. - - if ( fill ) - { - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "606", "processRng(): no content. Using fill.", fill ); - - roam = fill; - } - else - { - // And stuff a shiny new object with whatever contents we have - - //this.ddt._ddt( "enter-paragraphs.js", "606", "processRng(): creating p tag or document fragment - pWrap is '" + pWrap + "' " ); - - roam = (pWrap || (cnt.nodeType == 11 && !cnt.firstChild)) ? editor._doc.createElement('p') : editor._doc.createDocumentFragment(); - roam.appendChild(cnt); - } - - if (preBr) - { - //this.ddt._ddt( "enter-paragraphs.js", "767", "processRng(): appending a br based on preBr flag" ); - - roam.appendChild(editor._doc.createElement('br')); - } - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "606", "processRng(): bottom with roam:", roam ); - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "606", "processRng(): bottom with neighbour:", neighbour ); - - // Return the nearest relative, relative insertion point and fragment to insert - - return new Array(neighbour, insertion, roam); - - }; // end of processRng() - -// ---------------------------------------------------------------------------------- - -/** -* are we an
  • that should be handled by the browser? -* -* there is no good way to "get out of" ordered or unordered lists from Javascript. -* We have to pass the onKeyPress 13 event to the browser so it can take care of -* getting us "out of" the list. -* -* The Gecko engine does a good job of handling all the normal
  • cases except the "press -* enter at the first position" where we want a

     

    inserted before the list. The -* built-in behavior is to open up a
  • before the current entry (not good). -* -* @param rng Range range. -*/ - -EnterParagraphs.prototype.isNormalListItem = function(rng) - { - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "863", "isNormaListItem(): checking rng for list end:", rng ); - - var node, listNode; - - node = rng.startContainer; - - if (( typeof node.nodeName != 'undefined') && - ( node.nodeName.toLowerCase() == 'li' )) - { - - //this.ddt._ddt( "enter-paragraphs.js", "863", "isNormaListItem(): node is a list item"); - - // are we a list item? - - listNode = node; - } - else if (( typeof node.parentNode != 'undefined' ) && - ( typeof node.parentNode.nodeName != 'undefined' ) && - ( node.parentNode.nodeName.toLowerCase() == 'li' )) - { - - //this.ddt._ddt( "enter-paragraphs.js", "863", "isNormaListItem(): parent is a list item"); - - // our parent is a list item. - - listNode = node.parentNode; - - } - else - { - //this.ddt._ddt( "enter-paragraphs.js", "863", "isNormaListItem(): not list item"); - - // neither we nor our parent are a list item. this is not a normal - // li case. - - return false; - } - - // at this point we have a listNode. Is it the first list item? - - if ( ! listNode.previousSibling ) - { - //this.ddt._ddt( "enter-paragraphs.js", "839", "isNormaListItem(): we are the first li." ); - - // are we on the first character of the first li? - - if ( rng.startOffset == 0 ) - { - //this.ddt._ddt( "enter-paragraphs.js", "839", "isNormaListItem(): we are on the first character." ); - - return false; - } - } - - //this.ddt._ddt( "enter-paragraphs.js", "839", "isNormaListItem(): this is a normal list item case." ); - return true; - - }; // end of isNormalListItem() - -// ---------------------------------------------------------------------------------- -/** -* Called when a key is pressed in the editor -*/ - -EnterParagraphs.prototype.__onKeyPress = function(ev) - { - - //this.ddt._ddt( "enter-paragraphs.js", "517", "__onKeyPress(): top with keyCode '" + ev.keyCode + "'" ); - - // If they've hit enter and shift is not pressed, handle it - - if (ev.keyCode == 13 && !ev.shiftKey && this.editor._iframe.contentWindow.getSelection) - { - //this.ddt._ddt( "enter-paragraphs.js", "517", "__onKeyPress(): calling handleEnter" ); - - return this.handleEnter(ev); - } - - //this.ddt._ddt( "enter-paragraphs.js", "517", "__onKeyPress(): bottom" ); - - }; // end of _onKeyPress() - -// ----------------------------------------------------------------------------------- - -/** -* Handles the pressing of an unshifted enter for Gecko -*/ - -EnterParagraphs.prototype.handleEnter = function(ev) - { - - //this.ddt._ddt( "enter-paragraphs.js", "537", "handleEnter(): top" ); - - var cursorNode; - - // Grab the selection and associated range - - var sel = this.editor._getSelection(); - var rng = this.editor._createRange(sel); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "757", "handleEnter(): initial range is: ", rng ); - - // if we are at the end of a list and the node is empty let the browser handle - // it to get us out of the list. - - if ( this.isNormalListItem(rng) ) - { - //this.ddt._ddt( "enter-paragraphs.js", "757", "handleEnter(): we are at the end of a list with a blank item. Letting the browser handle it." ); - return true; - } - - // as far as I can tell this isn't actually used. - - this.takenIds = new Object(); - - // Grab ranges for document re-stuffing, if appropriate - // - // pStart and pEnd are arrays consisting of - // [0] neighbor node - // [1] insertion type - // [2] roam - - //this.ddt._ddt( "enter-paragraphs.js", "537", "handleEnter(): calling processSide on left side." ); - - var pStart = this.processSide(rng, "left"); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "757", "handleEnter(): after processing left side range is: ", rng ); - - //this.ddt._ddt( "enter-paragraphs.js", "537", "handleEnter(): calling processSide on right side." ); - - var pEnd = this.processSide(rng, "right"); - - // used to position the cursor after insertion. - - cursorNode = pEnd[2]; - - // Get rid of everything local to the selection - - sel.removeAllRanges(); - rng.deleteContents(); - - // Grab a node we'll have after insertion, since fragments will be lost - // - // we'll use this to position the cursor. - - //this.ddt._ddt( "enter-paragraphs.js", "712", "handleEnter(): looking for cursor position" ); - - var holdEnd = this.forEachNodeUnder( cursorNode, "find_cursorpoint", "ltr", false, true); - - if ( ! holdEnd ) - { - alert( "INTERNAL ERROR - could not find place to put cursor after ENTER" ); - } - - // Insert our carefully chosen document fragments - - if ( pStart ) - { - - //this.ddt._ddt( "enter-paragraphs.js", "712", "handleEnter(): inserting pEnd" ); - - this.insertAdjacentElement(pStart[0], pStart[1], pStart[2]); - } - - if ( pEnd && pEnd.nodeType != 1) - { - - //this.ddt._ddt( "enter-paragraphs.js", "712", "handleEnter(): inserting pEnd" ); - - this.insertAdjacentElement(pEnd[0], pEnd[1], pEnd[2]); - } - - // Move the caret in front of the first good text element - - if ((holdEnd) && (this._permEmpty.test(holdEnd.nodeName) )) - { - - //this.ddt._ddt( "enter-paragraphs.js", "712", "handleEnter(): looping to find cursor element." ); - - var prodigal = 0; - while ( holdEnd.parentNode.childNodes.item(prodigal) != holdEnd ) - { - prodigal++; - } - - sel.collapse( holdEnd.parentNode, prodigal); - } - else - { - - // holdEnd might be false. - - try - { - sel.collapse(holdEnd, 0); - - //this.ddt._ddtDumpNode( "enter-paragraphs.js", "1057", "handleEnter(): scrolling to element:", holdEnd ); - - // interestingly, scrollToElement() scroll so the top if holdEnd is a text node. - - if ( holdEnd.nodeType == 3 ) - { - holdEnd = holdEnd.parentNode; - } - - this.editor.scrollToElement(holdEnd); - } - catch (e) - { - // we could try to place the cursor at the end of the document. - } - } - - this.editor.updateToolbar(); - - HTMLArea._stopEvent(ev); - - return true; - - }; // end of handleEnter() - -// END \ No newline at end of file diff --git a/xinha/plugins/FindReplace/fr_engine.js b/xinha/plugins/FindReplace/fr_engine.js index 4d9c9e7..d2e5caf 100644 --- a/xinha/plugins/FindReplace/fr_engine.js +++ b/xinha/plugins/FindReplace/fr_engine.js @@ -1,149 +1,144 @@ -/*---------------------------------------*\ - Find and Replace Plugin for HTMLArea-3.0 - ----------------------------------------- - author: Cau guanabara - e-mail: caugb@ibest.com.br -\*---------------------------------------*/ +var FindReplace=window.opener.FindReplace; +var editor=FindReplace.editor; +var is_mo=window.opener.HTMLArea.is_gecko; +var tosearch=""; +var pater=null; +var buffer=null; +var matches=0; +var replaces=0; +var fr_spans=new Array(); +function _lc(_1){ +return (window.opener.HTMLArea._lc(_1,"FindReplace")); +} +function execSearch(_2){ +var _3=editor._doc.body.innerHTML; +if(buffer==null){ +buffer=_3; +} +if(_2["fr_pattern"]!=tosearch){ +if(tosearch!=""){ +clearDoc(); +} +tosearch=_2["fr_pattern"]; +} +if(matches==0){ +er=_2["fr_words"]?"/(?!<[^>]*)(\\b"+_2["fr_pattern"]+"\\b)(?![^<]*>)/g":"/(?!<[^>]*)("+_2["fr_pattern"]+")(?![^<]*>)/g"; +if(!_2["fr_matchcase"]){ +er+="i"; +} +pater=eval(er); +var _4=""; +var _5=""; +var _6=_3.replace(pater,_4+"$1"+_5); +editor.setHTML(_6); +var _7=editor._doc.body.getElementsByTagName("span"); +for(var i=0;i<_7.length;i++){ +if(/^frmark/.test(_7[i].id)){ +fr_spans.push(_7[i]); +} +} +} +spanWalker(_2["fr_pattern"],_2["fr_replacement"],_2["fr_replaceall"]); +} +function spanWalker(_9,_a,_b){ +var _c=false; +clearMarks(); +for(var i=matches;i=fr_spans.length-1); +if(_f||!_c){ +var _10=_lc("Done")+":\n\n"; +if(matches>0){ +if(matches==1){ +_10+=matches+" "+_lc("found item"); +}else{ +_10+=matches+" "+_lc("found items"); +} +if(replaces>0){ +if(replaces==1){ +_10+=",\n"+replaces+" "+_lc("replaced item"); +}else{ +_10+=",\n"+replaces+" "+_lc("replaced items"); +} +} +hiliteAll(); +disab("fr_hiliteall",false); +}else{ +_10+="\""+_9+"\" "+_lc("not found"); +} +alert(_10+"."); +} +} +function clearDoc(){ +var doc=editor._doc.body.innerHTML; +var er=/(]*id=.?frmark[^>]*>)([^<>]*)(<\/span>)/gi; +editor._doc.body.innerHTML=doc.replace(er,"$2"); +pater=null; +tosearch=""; +fr_spans=new Array(); +matches=0; +replaces=0; +disab("fr_hiliteall,fr_clear",true); +} +function clearMarks(){ +var _13=editor._doc.body.getElementsByTagName("span"); +for(var i=0;i<_13.length;i++){ +var elm=_13[i]; +if(/^frmark/.test(elm.id)){ +var _16=editor._doc.getElementById(elm.id).style; +_16.backgroundColor=""; +_16.color=""; +_16.fontWeight=""; +} +} +} +function hiliteAll(){ +var _17=editor._doc.body.getElementsByTagName("span"); +for(var i=0;i<_17.length;i++){ +var elm=_17[i]; +if(/^frmark/.test(elm.id)){ +var _1a=editor._doc.getElementById(elm.id).style; +_1a.backgroundColor="highlight"; +_1a.color="white"; +_1a.fontWeight="bold"; +} +} +} +function resetContents(){ +if(buffer==null){ +return; +} +var _1b=editor._doc.body.innerHTML; +editor._doc.body.innerHTML=buffer; +buffer=_1b; +} +function disab(_1c,_1d){ +var _1e=_1c.split(/[,; ]+/); +for(var i=0;i<_1e.length;i++){ +document.getElementById(_1e[i]).disabled=_1d; +} +} -var FindReplace = window.opener.FindReplace; -var editor = FindReplace.editor; -var is_mo = window.opener.HTMLArea.is_gecko; -var tosearch = ''; -var pater = null; -var buffer = null; -var matches = 0; -var replaces = 0; -var fr_spans = new Array(); -function _lc(string) { - return(window.opener.HTMLArea._lc(string, 'FindReplace')); -} -function execSearch(params) { -var ihtml = editor._doc.body.innerHTML; - if(buffer == null) - buffer = ihtml; - - if(params['fr_pattern'] != tosearch) { - if(tosearch != '') - clearDoc(); - tosearch = params['fr_pattern']; - } - - if(matches == 0) { - er = params['fr_words'] ? "/(?!<[^>]*)(\\b"+params['fr_pattern']+"\\b)(?![^<]*>)/g" : - "/(?!<[^>]*)("+params['fr_pattern']+")(?![^<]*>)/g"; - if(!params['fr_matchcase']) - er += "i"; - - pater = eval(er); - - var tago = ''; - var tagc = ''; - var newHtml = ihtml.replace(pater,tago+"$1"+tagc); - - editor.setHTML(newHtml); - - var getallspans = editor._doc.body.getElementsByTagName("span"); - for (var i = 0; i < getallspans.length; i++) - if(/^frmark/.test(getallspans[i].id)) - fr_spans.push(getallspans[i]); - } - -spanWalker(params['fr_pattern'],params['fr_replacement'],params['fr_replaceall']); -} - -function spanWalker(pattern,replacement,replaceall) { -var foundtrue = false; -clearMarks(); - - for (var i = matches; i < fr_spans.length; i++) { - var elm = fr_spans[i]; - foundtrue = true; - if(!(/[0-9]$/.test(elm.id))) { - matches++; - disab('fr_clear',false); - elm.id = 'frmark_'+matches; - elm.style.color = 'white'; - elm.style.backgroundColor = 'highlight'; - elm.style.fontWeight = 'bold'; - elm.scrollIntoView(false); - if(/\w/.test(replacement)) { - if(replaceall || confirm(_lc("Substitute this occurrence?"))) { - elm.firstChild.replaceData(0,elm.firstChild.data.length,replacement); - replaces++; - disab('fr_undo',false); - } - if(replaceall) { - clearMarks(); - continue; - } - } - break; - } - } - var last = (i >= fr_spans.length - 1); - if(last || !foundtrue) { // EOF - var message = _lc("Done")+':\n\n'; - if(matches > 0) { - if(matches == 1) message += matches+' '+_lc("found item"); - else message += matches+' '+_lc("found items"); - if(replaces > 0) { - if(replaces == 1) message += ',\n'+replaces+' '+_lc("replaced item"); - else message += ',\n'+replaces+' '+_lc("replaced items"); - } - hiliteAll(); - disab('fr_hiliteall',false); - } else { message += '"'+pattern+'" '+_lc("not found"); } - alert(message+'.'); - } -} - -function clearDoc() { -var doc = editor._doc.body.innerHTML; -var er = /(]*id=.?frmark[^>]*>)([^<>]*)(<\/span>)/gi; -editor._doc.body.innerHTML = doc.replace(er,"$2"); -pater = null; -tosearch = ''; -fr_spans = new Array(); -matches = 0; -replaces = 0; -disab("fr_hiliteall,fr_clear",true); -} - -function clearMarks() { -var getall = editor._doc.body.getElementsByTagName("span"); - for (var i = 0; i < getall.length; i++) { - var elm = getall[i]; - if(/^frmark/.test(elm.id)) { - var objStyle = editor._doc.getElementById(elm.id).style; - objStyle.backgroundColor = ""; - objStyle.color = ""; - objStyle.fontWeight = ""; - } - } -} - -function hiliteAll() { -var getall = editor._doc.body.getElementsByTagName("span"); - for (var i = 0; i < getall.length; i++) { - var elm = getall[i]; - if(/^frmark/.test(elm.id)) { - var objStyle = editor._doc.getElementById(elm.id).style; - objStyle.backgroundColor = "highlight"; - objStyle.color = "white"; - objStyle.fontWeight = "bold"; - } - } -} - -function resetContents() { - if(buffer == null) return; -var transp = editor._doc.body.innerHTML; -editor._doc.body.innerHTML = buffer; -buffer = transp; -} - -function disab(elms,toset) { -var names = elms.split(/[,; ]+/); - for(var i = 0; i < names.length; i++) - document.getElementById(names[i]).disabled = toset; -} \ No newline at end of file diff --git a/xinha/plugins/FindReplace/img/ed_find.gif b/xinha/plugins/FindReplace/img/ed_find.gif index 60b5ec8be0282fdb2a3fac6469e06f9724687254..11877d4c39609c4825abc09e8eb28a8fbe5517c6 100644 GIT binary patch literal 98 zcmZ?wbhEHb6k!lySjEEd|Nnmm28II%4m310Fo4+%V4(Pug%QNiVP#-t;9=llU|?3~ u5Rmz$#iQ8PJZVDK#v4-#ToWzyE}NG`Wbp=EiAdjLVAl4$NY!5RQKIUGp< literal 111 zcmZ?wbhEHb6k!lySj57>@c(~9L&Jds2N*!i{|qpo_>+Z^fq{iV2P6Pe%fM{nvFpx1 zgHxWXLzVljn* +{ + // messages + "Substitute this occurrence?": "Ersätt denna?", + "Enter the text you want to find": "Skriv in text du vill söka", + "Inform a replacement word": "Skriv in ett ersättningsord", + "found items": "förekomster funna i sökningen", + "replaced items": "förekomster erstatta", + "found item": "Träff", + "replaced item": "erstatt träff", + "not found": "inte funnet", + // window + "Find and Replace": "Sök och ersätt", + "Search for:": "Sök efter:", + "Replace with:": "Ersätt med:", + "Options": "Välj", + "Whole words only": "Bara hela ord", + "Case sensitive search": "Skilj mellan stora och smÃ¥ bokstäver", + "Substitute all occurrences": "Erstatt alla träffar", + "Clear": "Töm", + "Highlight": "Markera", + "Undo": "Tillbaka", + "Next": "Nästa", + "Done": "Färdig" +}; diff --git a/xinha/plugins/FindReplace/popups/find_replace.html b/xinha/plugins/FindReplace/popups/find_replace.html index 3903521..0759c25 100644 --- a/xinha/plugins/FindReplace/popups/find_replace.html +++ b/xinha/plugins/FindReplace/popups/find_replace.html @@ -102,8 +102,8 @@ letter-spacing: 2px; -
    -
    Find and Replace
    +
    Find and Replace
    + diff --git a/xinha/plugins/Forms/forms.js b/xinha/plugins/Forms/forms.js index 977abab..436b0e1 100644 --- a/xinha/plugins/Forms/forms.js +++ b/xinha/plugins/Forms/forms.js @@ -1,354 +1,354 @@ -// Form plugin for HTMLArea -// Distributed under the same terms as HTMLArea itself. -// This notice MUST stay intact for use (see license.txt). - - -function Forms(editor) { - this.editor = editor; - var cfg = editor.config; - var bl = Forms.btnList; - var self = this; - // register the toolbar buttons provided by this plugin - var toolbar = ["linebreak"]; - for (var i = 0; i < bl.length; ++i) { - var btn = bl[i]; - if (!btn) { - toolbar.push("separator"); - } else { - var id = btn[0]; - cfg.registerButton(id, HTMLArea._lc(btn[1]), editor.imgURL("ed_" + btn[0] + ".gif", "Forms"), false, - function(editor, id) { - // dispatch button press event - self.buttonPress(editor, id); - }); - toolbar.push(id); - } - } - // add a new line in the toolbar - cfg.toolbar.push(toolbar); +function Forms(_1){ +this.editor=_1; +var _2=_1.config; +var bl=Forms.btnList; +var _4=this; +var _5=["linebreak"]; +for(var i=0;i"); +} +} +},_15); +}else{ +var _1c=""; +if(typeof _12=="undefined"){ +_12=_10.getParentElement(); +var tag=_12.tagName.toLowerCase(); +if(_12&&(tag=="legend")){ +_12=_12.parentElement; +tag=_12.tagName.toLowerCase(); +} +if(_12&&!(tag=="textarea"||tag=="select"||tag=="input"||tag=="label"||tag=="fieldset")){ +_12=null; +} +} +if(_12){ +_16=_12.tagName.toLowerCase(); +_15.f_name=_12.name; +_1c=_12.tagName; +if(_16=="input"){ +_15.f_type=_12.type; +_16=_12.type; +} +switch(_16){ +case "textarea": +_15.f_cols=_12.cols; +_15.f_rows=_12.rows; +_15.f_text=_12.innerHTML; +_15.f_wrap=_12.getAttribute("wrap"); +_15.f_readOnly=_12.getAttribute("readOnly"); +_15.f_disabled=_12.getAttribute("disabled"); +_15.f_tabindex=_12.getAttribute("tabindex"); +_15.f_accesskey=_12.getAttribute("accesskey"); +break; +case "select": +_15.f_size=parseInt(_12.size); +_15.f_multiple=_12.getAttribute("multiple"); +_15.f_disabled=_12.getAttribute("disabled"); +_15.f_tabindex=_12.getAttribute("tabindex"); +var _1e=new Array(); +for(var i=0;i<=_12.options.length-1;i++){ +_1e[i]=new optionValues(_12.options[i].text,_12.options[i].value); +} +_15.f_options=_1e; +break; +case "text": +case "password": +_15.f_value=_12.value; +_15.f_size=_12.size; +_15.f_maxLength=_12.maxLength; +_15.f_readOnly=_12.getAttribute("readOnly"); +_15.f_disabled=_12.getAttribute("disabled"); +_15.f_tabindex=_12.getAttribute("tabindex"); +_15.f_accesskey=_12.getAttribute("accesskey"); +break; +case "hidden": +_15.f_value=_12.value; +break; +case "submit": +case "reset": +_15.f_value=_12.value; +_15.f_disabled=_12.getAttribute("disabled"); +_15.f_tabindex=_12.getAttribute("tabindex"); +_15.f_accesskey=_12.getAttribute("accesskey"); +break; +case "checkbox": +case "radio": +_15.f_value=_12.value; +_15.f_checked=_12.checked; +_15.f_disabled=_12.getAttribute("disabled"); +_15.f_tabindex=_12.getAttribute("tabindex"); +_15.f_accesskey=_12.getAttribute("accesskey"); +break; +case "button": +_15.f_value=_12.value; +_15.f_onclick=_12.getAttribute("onclick"); +_15.f_disabled=_12.getAttribute("disabled"); +_15.f_tabindex=_12.getAttribute("tabindex"); +_15.f_accesskey=_12.getAttribute("accesskey"); +break; +case "image": +_15.f_value=_12.value; +_15.f_src=_12.src; +_15.f_disabled=_12.getAttribute("disabled"); +_15.f_tabindex=_12.getAttribute("tabindex"); +_15.f_accesskey=_12.getAttribute("accesskey"); +break; +case "file": +_15.f_disabled=_12.getAttribute("disabled"); +_15.f_tabindex=_12.getAttribute("tabindex"); +_15.f_accesskey=_12.getAttribute("accesskey"); +break; +case "label": +_15.f_text=_12.innerHTML; +_15.f_for=_12.getAttribute("for"); +_15.f_accesskey=_12.getAttribute("accesskey"); +break; +case "fieldset": +if(_12.firstChild.tagName.toLowerCase()=="legend"){ +_15.f_text=_12.firstChild.innerHTML; +}else{ +_15.f_text=""; +} +break; +} +}else{ +_15.f_name=""; +switch(_11){ +case "textarea": +case "select": +case "label": +case "fieldset": +_1c=_11; +break; +default: +_1c="input"; +_15.f_type=_11; +break; +} +_15.f_options=""; +_15.f_cols="20"; +_15.f_rows="4"; +_15.f_multiple="false"; +_15.f_value=""; +_15.f_size=""; +_15.f_maxLength=""; +_15.f_checked=""; +_15.f_src=""; +_15.f_onclick=""; +_15.f_wrap=""; +_15.f_readOnly="false"; +_15.f_disabled="false"; +_15.f_tabindex=""; +_15.f_accesskey=""; +_15.f_for=""; +_15.f_text=""; +_15.f_legend=""; +} +_10._popupDialog("plugin://Forms/"+_1c+".html",function(_20){ +if(_20){ +if(_20["f_cols"]){ +if(isNaN(parseInt(_20["f_cols"],10))||parseInt(_20["f_cols"],10)<=0){ +_20["f_cols"]=""; +} +} +if(_20["f_rows"]){ +if(isNaN(parseInt(_20["f_rows"],10))||parseInt(_20["f_rows"],10)<=0){ +_20["f_rows"]=""; +} +} +if(_20["f_size"]){ +if(isNaN(parseInt(_20["f_size"],10))||parseInt(_20["f_size"],10)<=0){ +_20["f_size"]=""; +} +} +if(_20["f_maxlength"]){ +if(isNaN(parseInt(_20["f_maxLength"],10))||parseInt(_20["f_maxLength"],10)<=0){ +_20["f_maxLength"]=""; +} +} +if(_12){ +for(field in _20){ +if((field=="f_text")||(field=="f_options")||(field=="f_onclick")||(field=="f_checked")){ +continue; +} +if(_20[field]!=""){ +_12.setAttribute(field.substring(2,20),_20[field]); +}else{ +_12.removeAttribute(field.substring(2,20)); +} +} +if(_16=="textarea"){ +_12.innerHTML=_20["f_text"]; +}else{ +if(_16=="select"){ +_12.options.length=0; +var _21=_20["f_options"]; +for(i=0;i<=_21.length-1;i++){ +_12.options[i]=new Option(_21[i].text,_21[i].value); +} +}else{ +if(_16=="label"){ +_12.innerHTML=_20["f_text"]; +}else{ +if(_16=="fieldset"){ +if(_15.f_text!=""){ +if(_12.firstChild.tagName.toLowerCase()=="legend"){ +_12.firstChild.innerHTML=_20["f_text"]; +} +}else{ +} +}else{ +if((_16=="checkbox")||(_16=="radio")){ +if(_20["f_checked"]!=""){ +_12.checked=true; +}else{ +_12.checked=false; +} +}else{ +if(_20["f_onclick"]){ +_12.onclick=""; +if(_20["f_onclick"]!=""){ +_12.onclick=_20["f_onclick"]; +} +} +} +} +} +} +} +}else{ +var _22=""; +for(field in _20){ +if(!_20[field]){ +continue; +} +if((_20[field]=="")||(field=="f_text")||(field=="f_options")){ +continue; +} +_22+=" "+field.substring(2,20)+"=\""+_20[field]+"\""; +} +if(_16=="textarea"){ +_22=""+_20["f_text"]+""; +}else{ +if(_16=="select"){ +_22=""; +var _21=_20["f_options"]; +for(i=0;i<=_21.length-1;i++){ +_22+=""; +} +_22+=""; +}else{ +if(_16=="label"){ +_22=""+_20["f_text"]+""; +}else{ +if(_16=="fieldset"){ +_22=""; +if(_20["f_legend"]!=""){ +_22+=""+_20["f_text"]+""; +} +_22+=""; +}else{ +_22=""; +} +} +} +} +_10.insertHTML(_22); +} +} +},_15); +} }; - -Forms.prototype.buttonPress = function(editor,button_id, node) { - function optionValues(text,value) { - this.text = text; - this.value = value; - } - var outparam = new Object(); - var type = button_id; - var sel = editor._getSelection(); - var range = editor._createRange(sel); - if (button_id=="form") { //Form - // see if selection is inside an existing 'form' tag - var pe = editor.getParentElement(); - var frm = null; - while (pe && (pe.nodeType == 1) && (pe.tagName.toLowerCase() != 'body')) { - if(pe.tagName.toLowerCase() == "form") { - frm = pe; - break; - } else - pe = pe.parentNode; - } - if (frm) { - outparam.f_name = frm.name; - outparam.f_action = frm.action; - outparam.f_method = frm.method; - outparam.f_enctype = frm.enctype; - outparam.f_target = frm.target; - } else {; - outparam.f_name = ""; - outparam.f_action = ""; - outparam.f_method = ""; - outparam.f_enctype = ""; - outparam.f_target = ""; - } - editor._popupDialog("plugin://Forms/form", function(param) { - if (param) { - if(frm) { - frm.name = param["f_name"]; - setAttr(frm, "action", param["f_action"]); - setAttr(frm, "method", param["f_method"]); - setAttr(frm, "enctype",param["f_enctype"]); - setAttr(frm, "target", param["f_target"]); - } else { - frm = ''); - } - } - }, outparam); - - } else { // form element (checkbox, radio, text, password, textarea, select, button, submit, reset, image, hidden) - var tagName = ""; - // see if selection is an form element - if (typeof node == "undefined") { - node = editor.getParentElement(); - var tag = node.tagName.toLowerCase() - if (node && (tag == "legend")) { - node = node.parentElement; - tag = node.tagName.toLowerCase(); - } - if (node && !(tag == "textarea" || tag == "select" || tag == "input" || tag == "label" || tag == "fieldset")) - node = null; - } - - if(node) { - type = node.tagName.toLowerCase(); - outparam.f_name = node.name; - tagName = node.tagName; - if (type == "input") { - outparam.f_type = node.type; - type = node.type; - } - switch (type) { - case "textarea": - outparam.f_cols = node.cols; - outparam.f_rows = node.rows; - outparam.f_text = node.innerHTML; - outparam.f_wrap = node.getAttribute("wrap"); - outparam.f_readOnly = node.getAttribute("readOnly"); - outparam.f_disabled = node.getAttribute("disabled"); - outparam.f_tabindex = node.getAttribute("tabindex"); - outparam.f_accesskey = node.getAttribute("accesskey"); - break; - case "select": - outparam.f_size = parseInt(node.size); - outparam.f_multiple = node.getAttribute("multiple"); - outparam.f_disabled = node.getAttribute("disabled"); - outparam.f_tabindex = node.getAttribute("tabindex"); - var a_options = new Array(); - for (var i=0; i<=node.options.length-1; i++) { - a_options[i] = new optionValues(node.options[i].text, node.options[i].value); - } - outparam.f_options = a_options; - break; - case "text": - case "password": - outparam.f_value = node.value; - outparam.f_size = node.size; - outparam.f_maxLength = node.maxLength; - outparam.f_readOnly = node.getAttribute("readOnly"); - outparam.f_disabled = node.getAttribute("disabled"); - outparam.f_tabindex = node.getAttribute("tabindex"); - outparam.f_accesskey = node.getAttribute("accesskey"); - break; - case "hidden": - outparam.f_value = node.value; - break; - case "submit": - case "reset": - outparam.f_value = node.value; - outparam.f_disabled = node.getAttribute("disabled"); - outparam.f_tabindex = node.getAttribute("tabindex"); - outparam.f_accesskey = node.getAttribute("accesskey"); - break; - case "checkbox": - case "radio": - outparam.f_value = node.value; - outparam.f_checked = node.checked; - outparam.f_disabled = node.getAttribute("disabled"); - outparam.f_tabindex = node.getAttribute("tabindex"); - outparam.f_accesskey = node.getAttribute("accesskey"); - break; - case "button": - outparam.f_value = node.value; - outparam.f_onclick = node.getAttribute("onclick"); - outparam.f_disabled = node.getAttribute("disabled"); - outparam.f_tabindex = node.getAttribute("tabindex"); - outparam.f_accesskey = node.getAttribute("accesskey"); - break; - case "image": - outparam.f_value = node.value; - outparam.f_src = node.src; - outparam.f_disabled = node.getAttribute("disabled"); - outparam.f_tabindex = node.getAttribute("tabindex"); - outparam.f_accesskey = node.getAttribute("accesskey"); - break; - case "file": - outparam.f_disabled = node.getAttribute("disabled"); - outparam.f_tabindex = node.getAttribute("tabindex"); - outparam.f_accesskey = node.getAttribute("accesskey"); - break; - case "label": - outparam.f_text = node.innerHTML; - outparam.f_for = node.getAttribute("for"); - outparam.f_accesskey = node.getAttribute("accesskey"); - break; - case "fieldset": - if(node.firstChild.tagName.toLowerCase()=="legend") - outparam.f_text = node.firstChild.innerHTML; - else - outparam.f_text = ""; - break; - } - } else { - outparam.f_name = ""; - switch (button_id) { - case "textarea": - case "select": - case "label": - case "fieldset": - tagName = button_id; - break; - default: - tagName = "input"; - outparam.f_type = button_id; - break; - } - outparam.f_options = ""; - outparam.f_cols = "20"; - outparam.f_rows = "4"; - outparam.f_multiple = "false"; - outparam.f_value = ""; - outparam.f_size = ""; - outparam.f_maxLength = ""; - outparam.f_checked = ""; - outparam.f_src = ""; - outparam.f_onclick = ""; - outparam.f_wrap = ""; - outparam.f_readOnly = "false"; - outparam.f_disabled = "false"; - outparam.f_tabindex = ""; - outparam.f_accesskey = ""; - outparam.f_for = ""; - outparam.f_text = ""; - outparam.f_legend = ""; - } - editor._popupDialog("plugin://Forms/" + tagName + ".html", function(param) { - if (param) { - if(param["f_cols"]) - if (isNaN(parseInt(param["f_cols"],10)) || parseInt(param["f_cols"],10) <= 0) - param["f_cols"] = ""; - if(param["f_rows"]) - if(isNaN(parseInt(param["f_rows"],10)) || parseInt(param["f_rows"],10) <= 0) - param["f_rows"] = ""; - if(param["f_size"]) - if(isNaN(parseInt(param["f_size"],10)) || parseInt(param["f_size"],10) <= 0) - param["f_size"] = ""; - if(param["f_maxlength"]) - if(isNaN(parseInt(param["f_maxLength"],10)) || parseInt(param["f_maxLength"],10) <= 0) - param["f_maxLength"] = ""; - if(node) { - //prepare existing Element - for (field in param) { - alert(field.substring(2,20) + '=' + param[field]); - if ((field=="f_text") || (field=="f_options") || (field=="f_onclick") || (field=="f_checked"))continue; - if (param[field] != "") - node.setAttribute(field.substring(2,20), param[field]); - else - node.removeAttribute(field.substring(2,20)); - } - if (type == "textarea") { - node.innerHTML = param["f_text"]; - } else if(type == "select") { - node.options.length = 0; - var optionsList = param["f_options"]; - for (i=0; i<= optionsList.length-1; i++) { - node.options[i] = new Option(optionsList[i].text, optionsList[i].value) - } - } else if(type == "label") { - node.innerHTML = param["f_text"]; - } else if(type == "fieldset") { - if(outparam.f_text != "") { - if(node.firstChild.tagName.toLowerCase()=="legend") - node.firstChild.innerHTML = param["f_text"]; - } else {}// not implemented jet - } else if((type == "checkbox") || (type == "radio")) { //input - if(param["f_checked"]!="") - node.checked = true; - else - node.checked = false; - } else { - if(param["f_onclick"]){ - node.onclick = ""; - if(param["f_onclick"]!="") - node.onclick = param["f_onclick"]; - } - } - } else { - //create Element - var text = ""; - for (field in param) { - if (!param[field]) continue; - if ((param[field]=="") || (field=="f_text")|| (field=="f_options"))continue; - text += " " + field.substring(2,20) + '="' + param[field] + '"'; - } - - if(type == "textarea") { - text = '' + param["f_text"] + ''; - } else if(type == "select") { - text = ''; - var optionsList = param["f_options"]; - for (i=0; i<= optionsList.length-1; i++) { - text += ''; - } - text += ''; - } else if(type == "label") { - text = '' + param["f_text"] + ''; - } else if(type == "fieldset") { - text = ''; - if (param["f_legend"] != "") text += '' + param["f_text"] + ''; - text += ''; - } else { - text = ''; - } - editor.insertHTML(text); - } - } - }, outparam); - } -}; \ No newline at end of file + diff --git a/xinha/plugins/Forms/img/ed_button.gif b/xinha/plugins/Forms/img/ed_button.gif index 02e00cab55649d41c97ba4e3ce1a9bc95f9d0b63..cfa4e7d715f630909005e41d3cc8d8c59b1e7172 100644 GIT binary patch literal 89 zcmZ?wbhEHb6k-r!SjE8b|Ns932M#cR84V2$3^1VhlZ6q))?s8|We{NCWN=`Xv)Fa# jlffzTroBIe0ypzVe@}ckW9qVFOJ6zcDUjjjWUvMR>Z~2y literal 882 zcmZ?wbhEHb6k-r!_|Cxa|Ns932M#neG%$eK3^2gL$iUF^ONb$rA%!8HA&H@sp@gA? zA)g_SL60GwA(J5urVx#GU|?W4^FxS%fkA}9h<#Fx3IhX!2d@a2-yko_u;hmj!-bzh z3@?5OF-W|dSYyFHspkLx|NlX1SF=s3dCfMd24>`rVh@n}{{H}*$G~ucbyCfOr(z68 zehM)JvQDb0U>9M?Wt~)W;;9(Jil<@>JXI15JAQ-gW?)G9Da63Xz`#($#K__ZF;40a3*V6$r&7#Ua@7#KKy3NdgpFfe@h3GsIUE5zR* z_a{kCs+lY~sixt;jG6*Th<_{?7{LBv`0%&>2GkuU&@iizgy;pS1%)${vc1tC8frlLK^{o|&``7F#>H|Fn-N5O_*)O6K$wS-fdS;t zcm^jBmm%Pn5Q83rJHv+mLJXg0HrEt&tUQ!5@sLRApQoW z5&l^aw{tLvFeuDIxE*9341YP~!mwLjltJa57{h*fQHJl(^aQdm?l447@h2#yKVZ-S zX#(X52M&LRgPbxR8x$NF7=^TARsfvx`INB{?Xg5bgQ1Ng-qYT#twtP6d0@laLNd| diff --git a/xinha/plugins/Forms/img/ed_checkbox.gif b/xinha/plugins/Forms/img/ed_checkbox.gif index 64dc609a4b7d68acc0f42c6a5a0de3c42f2e8e5e..ea7affae5f035d73e38f33b9683780158b19d39f 100644 GIT binary patch literal 102 zcmZ?wbhEHb6k-r!SjE8b9}E~67#bQH4jeeZ00W9YSr|cV9cBh*23`hU1_x$si(P9B vl~^2?s^~{We*7oR5;Y?tFluG5)~ldb5=XVAF6hmSeEn76zyg8E3=Gx)Dt92X literal 905 zcmZ?wbhEHb6k-r!_|Cxa|Ns932M#neG%$eK3@}i@@c%!Iz2vhH13v=;g93vnObC;H zECd!y_$tJ(QF)%RP`6FXG=SxJz6vqCcKlKfQ+Fj- z63hgtXJG_0!S;!K6=GOzKB?xo`J@^SHW7vnhO011hJdd^41XCKYgic@Ye4!P7$A0l z)OdV_*s1VUhyf&*@LP!C^UUTN4#q~XTS0m<*ca9GFkEGTSyu|>gWSN#!oa}9z`*e5 zs5`@}G}qX(t9RW2S$yWJ5Sahts}O@&$Hj7n4}a@H?5K{5X>nKvFJf+#Rv@lA*UgcI+%foX|f zLJTYn3}7~hetRBO92DOmji7JKKCZ*XWbK;}&;dVjJq9Z#596Tm5CY_q|vq;62(W3a( sk(rZHyeI2bhyAG(dU~vdPg-w{=Yl6k`+dBbc%urm0%i*{Gci~L0LWAN$N&HU diff --git a/xinha/plugins/Forms/img/ed_fieldset.gif b/xinha/plugins/Forms/img/ed_fieldset.gif index 07e97acd6c9134d6ece7f0ddc8c78a74dd42d432..af358e53a6ed377e3df3f428795335ceea8e8021 100644 GIT binary patch literal 76 zcmZ?wbhEHb6k-r!=wM*@|NlP&1B2pE7DfgJ1_m8Q24)5U20jJ{Cgqm=#^tYXG_g!P h_idA}@TS{_w_aq1ss?qQT9@)`+eX!^-$ED|tN}`P8tDK4 literal 872 zcmZ?wbhEHb6k-r!_|Cxa|Ns932M#neG%$eK3@}i@@c%!Iz2vhH13v=;g93vnObC;H zECd!y_$tJ(QF)%RP`6FXG=SxJz6vqCcKlKfQ#Z$2 z63hgtXJG_0!S;!K6=GOzKB?xo`J@^SHW7vm3|C>23;|z-82&Oe*03@*)`0ZeGeGPB zsqy#ki1`Ghc6`t>qwDN%sl2$-zgnt$&Er>91Fo-ZH%xb6snGdoD8GkwC!mvkP zltJa57{dX1Q3jb`LZI~iA7o$LVThdKPf&_UW6%L<1my__4p)Y=95Nmo6b>>n3C?m{ z5wP$eqkytkPsWA?hucMsv+h(FJap<8vrH24-1Ou?x0Iqo403Jl}V*mgE diff --git a/xinha/plugins/Forms/img/ed_file.gif b/xinha/plugins/Forms/img/ed_file.gif index 8b55633af1597818860e7a41a8b054e1e070d9d0..7f61ce1373ce62f6fe8853e48f63da88f694ee47 100644 GIT binary patch literal 130 zcmZ?wbhEHb6k-r!SjE8b9}Es0IKTh`4Gj$qAewXf}VBO(P)_|*9A1pg5EGtqIU#8)j9}#gNY5(aL8jD}# aY@Zs;Df+-pa)pa2>xQsUUx5h>4AuY|xGn|& literal 925 zcmZ?wbhEHb6k-r!_|Cxa|Ns932M#neG%$eK3@}i@@c%!Iz2vhH13v=;g93vnObC;H zECd!y_$tJ(QF)%RP`6FXG=SxJz6vqCcKlKfQ#Z$2 z63hgtXJG_0!S;!K6=GOzKB?xo`J@^SHW7vm3|C>23;|z-82&Oe*03@*)`0ZeGeGPB zsqy#ki1`Ghc6`t>qwDN%sl2$-zgnt$&Er>91Fo-ZH%xb6snGdoD8GkwC!mvkP zltJa57{dX1Q3jb`LZI~iA7o$LVThdKPf&_UW6%L<1my__jw*(;95Nmo6dW0tg_s;9 z4)8QE2q;U!eQ}S2P#B(U=@}cFxjWO$${I3f}8Ec8J$#LuX*-p`Uer I@k|WX0Ncn+a literal 906 zcmZ?wbhEHb6k-r!_|Cxa9|UIpKf`clCPQ+v69dD42C!fO!+#Kq0R)zO7GmIMU|>*S z5Cw6u2fhh0NW7a^ zW5GVD2IK^g+SP26YF@KVssS6sz`$_lrx3$~Um&v>7%XQs)Er;X0G8wVD#Y;G@k=>O z-5U!@FcYMng%QjI+b8l>h+(z)q?+UAlWI8FL>Md>uEHc40=^0{{AFmYVP$Nr0qM74 zfYkUM0USQ$X(gWSf=z`)@0LkNt&Y@Jlowha>QApe8n3Zw>P{)%rx3?Q6% z&kanA{1RedVPF8WLG;`6sN$gb2I&KZ11Nkz7{mv;6C}3qmJLumhzFkUG8e z%rpf?28Mkc4CNpvpB zuv1=?LFJwp!(Mq&2FYJS;Pei%FYYizPVpxw#iTLlfHZ>ggab!9!&wd)j|~cr%nU*d z5hn~38C%(SyykQmG`hBO3o;o96fQW{reIvfGjrnNgI(gmad#|)ls#Gn+$XWzyvTEW xwuSG!Ih_H^&rGn)4pZTry!60AMPVD0EaQbXDe7+4q?7Z;;@JZ_82A_%7!EKB zFt|Ytbmg2>>36}237_J29BRX44e!M3?F_% z{9V8b@i)l*Ns^OlCQDALX*e*Wra%(n9}5NsuzwgX{H?zMb%zNw%qk=ydO>PI;mjmC zsRr3C6TXTuoH)S9z|O$H&;Zrj0M(0ZZ}f+T8jyaF2hu+@)GWDiu^hw(CxQ!q>p^S~ z=3!)D0QobX!2`r)2>2z$pvU0Ou;ITD!{?dJH3c6Uz;OsN0~FsNwJ@_37#J92kKQQn zh&jrbmCIVq6nm7B;h%IZEUkeI1f>gbT1$z~P+(+W$kSuU1i9nM!(R@$Fzl8WWl*^%#;{*rl;JxxJ%Q|tI}DLi{0U0w z4;XYnnm~ENfg_&bAg7GSh6G1O1_l<62?dIWTNrq}=5X*S9_g0gj4D}C@X)nOfjw%^ zj}MDaw8_a&Q#r9=>7nU*&TT9W8`RFu=3o{$a$@sCzj>;)d^sK=O9L8R64kC+Zc%qz MX0*7Chl9Zy0QpQ1IsgCw diff --git a/xinha/plugins/Forms/img/ed_image.gif b/xinha/plugins/Forms/img/ed_image.gif index b13ec07aa04cf0d39eeea36f5f5cff3917b7faa6..3c8c88ecec708da3bbb39b49c002af369f381052 100644 GIT binary patch literal 562 zcmZ?wbhEHb6k-r!c*nr-|NnmmFxk-1aNxj!|Nqlr1PIaB&HUiHTXgy66A@Y8MyJj*j-ZbFJpijcjdgIe9YX z|NmAiEBF8Z54NsVcE$hyg%J@E3_}Vi{$ybUIar60fsuiqL4d)5y}yB}skxqJcD(|RMq!C(ylmyx8- literal 987 zcmZ?wbhEHb6k-r!_|Cxa|9{*6|DFH;*Z=?D^8bJH|Nrg(|9AiY-}L`~gPNL}kdTnR zzL>PMw4$Qo|Nj;L|2H}~Ff3ZM$kI|HE-vo>|0;QT24`ny4GoRpUn4MjruP-%su9cUU zDk`5m8T0>twS|R+f`Xv9xRithUt*%{|Npg3O+EJZ@;W-^o}OAUF)>zFnyXj$7#b=X z8A%ot6u7tq=|9>zcA;HklP+nf%%F0SXL9VQ!otFij*dk|eyy#YQ>WH? zdFeViIX!w5vTIj_q@?8k|CKE*E$;5Ywzi5TCB=8{tWi}}(ACwgsHj@I*8jkP0}Txg z|NsAI00k_FWFQ27d=+Ad>bO|G#G1MivH!14>B@SCo<%L>L$t7?BJRfU%H;R9qzXVc~P)Bz4Xj91x5yjeH;wsAUAFJ z0&)oh1J8FM28nkQYd)||ssZ`yHQS^b{#gw*AT=BeA`A+%8frl1gX}@ZUkImMqWj0_CL3_2i@*a1J9g69dDCL(Q`_MRd8oL>zV#Fpk+2(eXev^|-l3 z@v9?|AD1~Xi3ns&WL)SXK3iK@>Sxii<~d3Rmn0mljz2!uYa4#-=BcgP;Zs9}RtasWgsgUckx5!e9*mM36sm diff --git a/xinha/plugins/Forms/img/ed_label.gif b/xinha/plugins/Forms/img/ed_label.gif index 11bd44a99f47d2e065e5c02dd83e89ed5ae6e603..f93fce7dfeb4d965c35026cdc77edc5e473e08c1 100644 GIT binary patch literal 58 zcmZ?wbhEHb6k-r!=wM*@|NlP&1B2pE7DfgJ1_m7#1~vw626hGqCczfj@`Drh$xUA8 OyY!yZhRg8`4AuacFb}~1 literal 857 zcmZ?wbhEHb6k-r!_|Cxa|Ns932M#neG%$eK3@}i@@c%!Iz2vhH13v=;g93vnObC;H zECd!y_$tJ(QF)%RP`6FXG=SxJz6vqCcKlKfQ#Z$2 z63hgtXJG_0!S;!K6=GOzKB?xo`J@^SHW7vm3|C>23;|z-82&Oe*03@*)`0ZeGeGPB zsqy#ki1`Ghc6`t>qwDN%sl2$-zgnt$&Er>91Fo-ZH%xb6snGdoD8GkwC!mvkP zltJa57{dX1Q3jb`LZI~iA7o$LVThdKPf&_UW6%L<1my__4l{QF)%RP`6FXG=SxJz6vqCcKlKfQ#Z$2 z63hgtXJG_0!S;!K6=GOzKB?xo`J@^SHW7vm3|C>23;|z-82&Oe*03@*)`0ZeGeGPB zsqy#ki1`Ghc`qi{(4M3NdJPTr3Ca zJ)o4ta78JJ0TgO5^FjIrKm-E=gU>gJ`#@Zf{F<*q3<2MS7*u`RU8!GAdR4K0EG_-gZLnKg2Waca{=qU@zfn2cA#_tQm2=m znWn(Vz_5>lp&aCv4bZg0^Bs~_KCnU33Mh^6&jO_d5e5zh5e9`>4K*P1LG~cyFNa(h z_Q;DesN54{I3O>|AoEKIl-~b??29`LkyHE$N-;GIIv|apJmJ8R&hV2%#$$tmBO|kr z7R!QwL+A8<;VnPt16bx4T)aU<^8!h95yfW yovp6=%7s%{?er8a-D7utOj;PQ*f~(i_SdK9m%3ah7xB#cs1iEWx|EHD!5RSfmi-w3 diff --git a/xinha/plugins/Forms/img/ed_radio.gif b/xinha/plugins/Forms/img/ed_radio.gif index d9b546d87b84efeb1ffcebb54a94a09da3e9dd5b..5b72ef6e86183a5e5cb3fa92546e83fe7c5be6b8 100644 GIT binary patch literal 104 zcmZ?wbhEHb6k-r!SjE8b9}E~67#bQH4jeeZ00W9YSr|cV9cBh*1|9|;1_x$c4zA0a xvpO8KIdg&*9zGj;Ao0?%OnC>vH?6v7HBAb3Oqx|QeVOYfQU5H#78M2tYXFRjA#?x$ literal 891 zcmZ?wbhEHb6k-r!_|Cxa|Ns932M#neG%$eK3@}i@@c%!Iz2vhH13v=;g93vnObC;H zECd!y_$tJ(QF)%RP`6FXG=SxJz6vqCcKlKfQ>Rle z0cL{KvoM00VEaVA3NfrUpHy?)d{PYun+QV(!&R6hL%>%dhQADrHLQ${H6Z=Y3=lg& zYCOI|>{R$F!~l{@_$|cnd1iAB2V*1Htsp%a?2Br87_KtFtSg1`L2h7VVPIflU|{%j z)Scl~nrrOY)w}M1EI#v92+aTSRfs{X<6=3(g}?P6c2vj3@*Q7=7_>SrmV@*jP)cIB zqLjn{3N@JdApHU$f`Ng-=NrU*ATCIL%~v6YfNw$!D!+sn(pj#Q8+2SO2ZbrfyxBW0 zg2Rb}fq}u~hY%Ql**dAFZ5t$%iH1HvFa$ekdug~wdLdT%^+hld>~U4Yc-rDvuo zFfuUg<6tNUxoHD5t?+z@q?HeBkhB6yBmA>KX+ea6gF%ErVOB#8$b67J$oR`47ls4! zq6{kc#2Ajqi!vzu5(1_7{~-I~4nyP=e}YmB3xf_wBPdTea6~Y0a>#gWSm4OW%)lUV zz(BEqfq}oS*h?{`mNV6X-N%C{jO literal 895 zcmZ?wbhEHb6k-r!_|Cxa|Ns932M#neG%$eK3^2gL$iUF^ONb$rA%!8HA&H@sp@gA? zA)g_SL60GwA(J5urVx#GU|?W4^FxS%fkA}9h<#Fx3IhX!2d@a2-yko_u;hmj!-bzh z3@?5OF-W|dSYyFHspkLx|NlX1SF=s3dCfMd24>`rVh@n}{{H}*$G~ucbyCfOr(z68 zehM)JvQDb0U>9M?Wt~)W;;9(Jil<@>JXI15JAQ-gW?)G9Da63Xz`#($#K__ZF;40a3*V6$r&7#Ua@7#KKy3NdgpFfe@h3GsIUE5zR* z_a{kCs+lY~sixt;jG6*Th<_{?7{LBv`0%&>2GkuU&@iizgy;pS1%)${vc1tC8frlLK^{o|&``7F#>H|Fn-N5O_*)O6K$wS-fdS;t zcm^jBmm%Pn5Q83rJHv+mLJXg0HrEt&tUQ!5@sLRApQoW z5&l^aw{tLvFeuDIxE*9341YP~!mwLjltJa57{h*fQHJl(^aQdm?l447@h2#yKVZ-S zX#(X52aXtqgPbxR8x$NF7=_p*CQMj(h=GYsVvff~C07O}qpUkS0v8?a;t=JN_-T;n z(x@n{r^9*i@$u;f$#N_Xo0s{{mJ42|^7Dg=#aw0CZ)bj9SQs!_u30N~Rmig7W=2K^ FYXIdK4R!zk diff --git a/xinha/plugins/Forms/img/ed_select.gif b/xinha/plugins/Forms/img/ed_select.gif index 5cbb75ef4bb930b3cf72276b4e766716f6c4fbd2..3ea59f5c95c79c35f5cc6aa910f02f9faf271ffe 100644 GIT binary patch literal 111 zcmZ?wbhEHb6k-r!Sj7MW|G}W4q2bDf6CgeqEB<6*WME)q&|zd?WZ-AuXK-LP;n;OY z!GOykt8~W69~=tJn;g5h_e_2uc-eSY%(R7EiSzZ{@|EW4Ep%V}RAE<(?TnTrPE`g5 FYXFO2fhh0NW7a^W5GVD z=Kufy|3PY3vrVdb%{Hk9Y!Cwj!=0Z(3=e*R%wk}$oYhcsd_e%iNIeT9mwoa;P+Xe}1ke@;E^Alts6ocFkVy^fm!~nvH_uRm=`j1|5(_P@Zt$$YS8+knz}{aFCISO+(~>z`{d} zjBFBfJOmXFcXP_y$-MZGc({kpGHK5WfdlE85;^5NfTpo1C%0Pj^8UW<|_I3aO diff --git a/xinha/plugins/Forms/img/ed_submit.gif b/xinha/plugins/Forms/img/ed_submit.gif index a8f1ccb7a36908a230d7c34621781f8ef1681cca..0b12a19a0b589cd91dfe77d89dc20d261efdf572 100644 GIT binary patch literal 94 zcmZ?wbhEHb6k-r!SjE8b|Ns932M#cR84V2$3^1VhlZ6q))?s8|We{NCWN=_sw%B#& nlffzTroE5il(eo%J&)wi=uF^T6p^-RmUNj*?)~i(7#OSpXG$KW literal 889 zcmZ?wbhEHb6k-r!_|Cxa|Ns932M#neG%$eK3^2gL$iUF^ONb$rA%!8HA&H@sp@gA? zA)g_SL60GwA(J5urVx#GU|?W4^FxS%fkA}9h<#Fx3IhX!2d@a2-yko_u;hmj!-bzh z3@?5OF-W|dSYyFHspkLx|NlX1SF=s3dCfMd24>`rVh@n}{{H}*$G~ucbyCfOr(z68 zehM)JvQDb0U>9M?Wt~)W;;9(Jil<@>JXI15JAQ-gW?)G9Da63Xz`#($#K__ZF;40a3*V6$r&7#Ua@7#KKy3NdgpFfe@h3GsIUE5zR* z_a{kCs+lY~sixt;jG6*Th<_{?7{LBv`0%&>2GkuU&@iizgy;pS1%)${vc1tC8frlLK^{o|&``7F#>H|Fn-N5O_*)O6K$wS-fdS;t zcm^jBmm%Pn5Q83rJHv+mLJXg0HrEt&tUQ!5@sLRApQoW z5&l^aw{tLvFeuDIxE*9341YP~!mwLjltJa57{h*fQHJl(^aQdm?l447@h2#yKVZ-S zX#(X52aYg?gPbxR8x$NF7=_p*3>+3ZGcxmd&G9HyVqlao&blJ8QOUK1PtwYVBT(VQ z1ZCzaUruaVdb)`r>C_z0&5uvEYI@%Cxmob!)NG~TbtxWORs^=`PnP20V6X-NQA-Ng diff --git a/xinha/plugins/Forms/img/ed_text.gif b/xinha/plugins/Forms/img/ed_text.gif index 922f3041a9429888c78809fd95e22d583bef5550..fb8159c01b5a7f8975576d484d94292f730c67a5 100644 GIT binary patch literal 112 zcmZ?wbhEHb6k-r!SjE8b9}E~67#bQH4jeeZ00W9YSr{1@7#VaJ8JHLZ82A_*m`yEq z-7#Qda9rNgv`52w|1F1}l*qi;Rc$e*J0*W58F=6QaduS=&sRQF)%RP`6FXG=SxJz6vqCcKlKfQ#Z$2 z63hgtXJG_0!S;!K6=GOzKB?xo`J@^SHW7vm3|C>23;|z-82&Oe*03@*)`0ZeGeGPB zsqy#Q28aqkj`?Y+@RxPIVem)=FQ%5 z5gbk+cL*_YGO#f)FxdPM0^=`RC)KoVgM>H8-=H`GnOTsR1fsxr#Wx`a5Kg@32ByV- z2{EuRFo4-0`t5mCaZr4NG=jnb6h0sf;)C1?5?gr81+4eRQ+IgSfzky?onCrongSyO z!#)m%a*$g#K+_7(cSu_Kzy?Vxpftii3zQZ_7&sV27!+nT)PT$f*@KL~9CBgUBQMIJ za!-umfV?P!%r7BOdjAiyFYYizPVpxw#jr5wfHZ>ggab!511E=!#|8yQMrH;Ei3tUY z&aKQ$3S`ylQ(##GgGKSH xE1sJcou8rD%(eApkn*vKvfWNOo+S^1W_cuAm2z!e8Q5#EKI`qz%Lxt))&PBw{$Bt9 diff --git a/xinha/plugins/Forms/img/ed_textarea.gif b/xinha/plugins/Forms/img/ed_textarea.gif index 530951715be695e5e16e609eed93f97a04d7d0fa..c2c874a1cc88ad586506171589d7a1ab18f01deb 100644 GIT binary patch literal 115 zcmZ?wbhEHb6k-r!SjE8b9}E~67@C@z_U+rp00W9YSr|cV9YzL527U&91_x#fi(Pk= z6+1Lns_5V1%zqapk&vJ=Q*dRVtjdb1nZ3-3_bvVv)bKA}dR_g>ryU(fQF)%RP`6FXG=SxJz6vqCcKlKfQ#Z$2 z63hgtXJG_0!S;!K6=GOzKB?xo`J@^SHW7vfhO011hJdd^41XCKYgic@Ye4!P7$A0l z)OdV_*s1VUhyf&*@LP!C^UUTN4#q~XTS0m<*ca8bFkEGTSyu|>gWSN#!oa}9z`*e5 zs5`@}G}qX(t9RW2S$yWJ5Sahts}O@&$Hj7n3xDfD?5K{5{~TO_tF4r0(_&bWJO>gprwnVFdwtN~Or B{vH4T diff --git a/xinha/plugins/Forms/lang/ja.js b/xinha/plugins/Forms/lang/ja.js new file mode 100644 index 0000000..05409f3 --- /dev/null +++ b/xinha/plugins/Forms/lang/ja.js @@ -0,0 +1,86 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Form": "フォーム", + "Textarea": "テキストエリア", + "Selection Field": "é¸æŠžè‚¢ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰", + "Checkbox": "ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹", + "Radio Button": "ラジオボタン", + "Text Field": "テキストフィールド", + "Password Field": "パスワードフィールド", + "File Field": "ファイルフィールド", + "Submit Button": "é€ä¿¡ãƒœã‚¿ãƒ³", + "Reset Button": "リセットボタン", + "Image Button": "ç”»åƒãƒœã‚¿ãƒ³", + "Button": "ボタン", + "Hidden Field": "éžè¡¨ç¤ºãƒ•ィールド", + "Label": "ラベル", + "Field Set": "フィールドセット", + "Form Element: INPUT": "フォームè¦ç´ : INPUT", + "Form Element: SELECT": "フォームè¦ç´ : SELECT", + "Form Element: TEXTAREA": "フォームè¦ç´ : TEXTAREA", + "Form Element: LABEL": "フォームè¦ç´ : LABEL", + "Form Element: FIELDSET": "フォームè¦ç´ : FIELDSET", + "Form Name:": "フォームå:", + "Form handler script": "フォーム処ç†ã‚¹ã‚¯ãƒªãƒ—ト", + "Action URL:": "アクションURL:", + "Method:": "メソッド:", + "Post": "POST", + "Get": "GET", + "Encoding:": "エンコード:", + "HTML-Form to CGI (default)": "HTMLフォームã‹ã‚‰CGIã¸(デフォルト)", + "multipart Form Data (File-Upload)": "マルãƒãƒ‘ート(ファイルアップロード用)", + "Target Frame:": "ターゲット:", + "Name/ID:": "åå‰/ID:", + "Value:": "値:", + "Disabled": "無効", + "Checked": "ãƒã‚§ãƒƒã‚¯æ¸ˆã¿", + "Tab Index:": "タブ順åº:", + "Access Key:": "アクセスキー:", + "Read Only": "読ã¿å–り専用", + "Dimensions": "大ãã•", + "Size:": "サイズ:", + "Max length:": "最大長:", + "Button Script": "ボタンスクリプト", + "'onClick'=": "'onClick'=", + "Image source": "ç”»åƒã‚½ãƒ¼ã‚¹", + "Image URL:": "ç”»åƒURL:", + "Multiple Select": "è¤‡æ•°é¸æŠž", + "Options": "é¸æŠžè‚¢", + "Lable:": "ラベル:", + "Move Up": "上ã¸", + "Move Down": "下ã¸", + "Delete": "削除", + "Add": "追加", + "Columns:": "列数:", + "Rows:": "行数:", + "Wrap Mode:": "折り返ã—:", + "Off": "オフ", + "Soft": "ソフト", + "Hard": "ãƒãƒ¼ãƒ‰", + "Physical": "物ç†çš„", + "Virtual": "仮想", + "normal": "標準", + "nowrap": "折り返ã—ãªã—", + "pre": "フォーマット済ã¿", + "Initial Text:": "åˆæœŸãƒ†ã‚­ã‚¹ãƒˆ:", + "Text:": "テキスト:", + "For Control:": "制御対象:", + "Legend:": "グループå:", + "Cancel": "中止", + "Name": "åå‰", + "Name of the form input": "フォーム入力ã®åå‰", + "Value of the form input": "フォーム入力ã®å€¤", + "Size of text box in characters": "文字数ã«ã‚ˆã‚‹ãƒ†ã‚­ã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã®å¤§ãã•", + "Maximum number of characters accepted": "入力å¯èƒ½ãªæœ€å¤§æ–‡å­—æ•°", + "Javascript for button click": "ボタンクリック時ã®JavaScritp", + "URL of image": "ç”»åƒã®URL", + "Name of the form select": "", + "name of the textarea": "テキストエリアã®åå‰", + "Width in number of characters": "文字数ã«ã‚ˆã‚‹å¹…", + "Height in number of rows": "行数ã«ã‚ˆã‚‹é«˜ã•", + "Default text (optional)": "ãƒ†ã‚­ã‚¹ãƒˆåˆæœŸå€¤(オプション)", + "You must enter the form name": "フォームåãŒå¿…è¦ã§ã™", + "You must enter a Name": "åå‰ãŒå¿…è¦ã§ã™", + "Please enter a Label": "ラベルを入力ã—ã¦ãã ã•ã„" +}; diff --git a/xinha/plugins/Forms/popups/form.html b/xinha/plugins/Forms/popups/form.html index 4609f5b..894f811 100644 --- a/xinha/plugins/Forms/popups/form.html +++ b/xinha/plugins/Forms/popups/form.html @@ -27,7 +27,7 @@ function onOK() { for (var i in required) { var el = document.getElementById(i); if (!el.value) { - alert(required[i]); + alert(HTMLArea._lc(required[i],"Forms")); el.focus(); return false; } diff --git a/xinha/plugins/Forms/popups/input.html b/xinha/plugins/Forms/popups/input.html index 3221f78..2fd7048 100644 --- a/xinha/plugins/Forms/popups/input.html +++ b/xinha/plugins/Forms/popups/input.html @@ -13,7 +13,7 @@ function Init() { __dlg_init(); var param = window.dialogArguments; type = param.f_type; - document.getElementById("f_type").innerHTML = 'Form Element: INPUT (' + type + ')'; + document.getElementById("f_type").innerHTML = HTMLArea._lc('Form Element: INPUT', "Forms") + '(' + type + ')'; document.getElementById("txt").style.display = "none"; document.getElementById("chk").style.display = "none"; document.getElementById("btn").style.display = "none"; @@ -76,8 +76,8 @@ function Init() { function onOK() { var el = document.getElementById("f_name"); - if (!el.value) { - alert("You must enter a Name"); + if (!el.value) { + alert(HTMLArea._lc("You must enter a Name","Forms")); el.focus(); return false; } diff --git a/xinha/plugins/Forms/popups/select.html b/xinha/plugins/Forms/popups/select.html index c5a8fc9..fcfee43 100644 --- a/xinha/plugins/Forms/popups/select.html +++ b/xinha/plugins/Forms/popups/select.html @@ -32,8 +32,8 @@ function Init() { function onOK() { var el = document.getElementById("f_name"); - if (!el.value) { - alert("You must enter a Name"); + if (!el.value) { + alert(HTMLArea._lc("You must enter a Name","Forms")); el.focus(); return false; } @@ -84,7 +84,7 @@ function getValues(){ //Add or update options to the select box function addItem(item) { var d = document; - if (item.f_optiontext.value =="") {alert("Please enter a Label");} + if (item.f_optiontext.value =="") {alert(HTMLArea._lc("Please enter a Label","Forms"));} else { if (d.getElementById("f_select").options.selectedIndex != -1) { //update item var indx = d.getElementById("f_select").options.selectedIndex; @@ -182,7 +182,7 @@ function swapOptions(obj,i,j) { - "}}; +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\""}}; +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=\""}; +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: "}}; +for(var i in tagLib){ +i=i.replace(/^h[1-6]$/,"h"); +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+"\"];"); +} +} -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 -var subTagLib = {'table': {'op': ''} -}; - -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="' -}; -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/xinha/plugins/SpellChecker/aspell_setup.php b/xinha/plugins/SpellChecker/aspell_setup.php index 0c0cd81..6a4e286 100644 --- a/xinha/plugins/SpellChecker/aspell_setup.php +++ b/xinha/plugins/SpellChecker/aspell_setup.php @@ -1,123 +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(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"; - - -?> + (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/xinha/plugins/SpellChecker/img/he-spell-check.gif b/xinha/plugins/SpellChecker/img/he-spell-check.gif index a9ddac986789ce5458f1019f6a609a2a27075a38..8015d2ff22cfcf746d7f50b299b833720d7999bc 100644 GIT binary patch literal 100 zcmZ?wbhEHb6k-r!n90EK9}E~6ni&`v6o0ZXGB7YO=rA!bG4M0+F)%Qhw)6`xJYjqw zh*xj1#AL^3Yg^AV7heCSd-o~h#4e5^b;Y(E?w$KSGu%7Om}`D>LWO}+r(F^wgEas@ CQX*ae literal 899 zcmZ?wbhEHb6k-r!_|5su=3``#xG>@2;Z`1Ijx!k(A35~$Nn0&B5xDq3mzb)bNam*} zM|yNLx0P5Xq&hb-71h~f20V9UWUc)tqO~R6Z?3DLobRd+D-O-`U+fhsA;4e_0Ci3; ArT_o{ diff --git a/xinha/plugins/SpellChecker/img/spell-check.gif b/xinha/plugins/SpellChecker/img/spell-check.gif index 151bb2ba34237056298fa31794ff836dc50a49c2..fce009a55253f8c48a3369062b7526410dd08876 100644 GIT binary patch literal 337 zcmZ?wbhEHb6k-r!xXZxs|Nnmm28M0Cvu;Rn7A72t$_Bv!7n6Tne+l)gEa~>K5EVz32sYAwwXD?ozyZ$tw;lk~E4;JkB z(6{QLb;jnY>)+=z@4b5G&Hw-ZLCzu$EB<6*6=5)B&;cn2`H6w8^uUY)4;`s~4FM25`Z(E1i2*bwr>DU3_V+^9oZh?}L{ z%|KhvNt#bem)TuiRzgBqRZ)VI-$O%~Q&K`oN~khQ`|oQY$L KGjEO~gEasLOo-nA diff --git a/xinha/plugins/SpellChecker/lang/cz.js b/xinha/plugins/SpellChecker/lang/cz.js index 0b34511..483289c 100644 --- a/xinha/plugins/SpellChecker/lang/cz.js +++ b/xinha/plugins/SpellChecker/lang/cz.js @@ -1,26 +1,26 @@ -// I18N constants -// LANG: "cz", ENCODING: UTF-8 -// Author: Jiri Löw, -{ - "Please confirm that you want to open this link": "Prosím potvrÄte otevÅ™ení tohoto odkazu", - "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 all": "Ignorovat vÅ¡e", - "Ignore": "Ignorovat", - "No mispelled words found with the selected dictionary.": "Podle zvoleného slovníku nebyla nalezena žádná chybná slova.", - "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í ...", - "OK": "OK", - "Original word": "Původní slovo", - "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", - "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.", - "Re-check": "PÅ™ekontrolovat", - "Replace all": "ZamÄ›nit vÅ¡echno", - "Replace with": "ZamÄ›nit za", - "Replace": "ZamÄ›nit", - "Spell-check": "Kontrola správnosti slov", - "Suggestions": "DoporuÄení", - "One moment...": "strpení prosím ;-)" -}; +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// Author: Jiri Löw, +{ + "Please confirm that you want to open this link": "Prosím potvrÄte otevÅ™ení tohoto odkazu", + "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 all": "Ignorovat vÅ¡e", + "Ignore": "Ignorovat", + "No mispelled words found with the selected dictionary.": "Podle zvoleného slovníku nebyla nalezena žádná chybná slova.", + "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í ...", + "OK": "OK", + "Original word": "Původní slovo", + "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", + "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.", + "Re-check": "PÅ™ekontrolovat", + "Replace all": "ZamÄ›nit vÅ¡echno", + "Replace with": "ZamÄ›nit za", + "Replace": "ZamÄ›nit", + "Spell-check": "Kontrola správnosti slov", + "Suggestions": "DoporuÄení", + "One moment...": "strpení prosím ;-)" +}; diff --git a/xinha/plugins/SpellChecker/lang/da.js b/xinha/plugins/SpellChecker/lang/da.js index d6f1aad..60697f4 100644 --- a/xinha/plugins/SpellChecker/lang/da.js +++ b/xinha/plugins/SpellChecker/lang/da.js @@ -1,26 +1,26 @@ -// I18N constants -// LANG: "da", ENCODING: UTF-8 -// Author: Steen SÞnderup, -{ - "Please confirm that you want to open this link": "Vil du fÞlge dette link?", - "Cancel": "Anuler", - "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 all": "Ignorer alle", - "Ignore": "Ignorer", - "No mispelled words found with the selected dictionary.": "Der blev ikke fundet nogle stavefejl med den valgte ordbog.", - "Spell check complete, didn't find any mispelled words. Closing now...": "Stavekontrollen er gennemfÞrt, der blev ikke fundet nogle stavefejl. Lukker...", - "OK": "OK", - "Original word": "Oprindeligt ord", - "Please wait. Calling spell checker.": "Vent venligst. Henter stavekontrol.", - "Please wait: changing dictionary to": "Vent venligst: skifter ordbog til", - "This will drop changes and quit spell checker. Please confirm.": "Alle dine Êndringer vil gÃ¥ tabt, vil du fortsÊtte?", - "Re-check": "Tjek igen", - "Replace all": "Erstat alle", - "Replace with": "Erstat med", - "Replace": "Erstat", - "Spell-check": "Stavekontrol", - "Suggestions": "Forslag", - "One moment...": "Vent venligst" -}; +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// Author: Steen SÞnderup, +{ + "Please confirm that you want to open this link": "Vil du fÞlge dette link?", + "Cancel": "Anuler", + "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 all": "Ignorer alle", + "Ignore": "Ignorer", + "No mispelled words found with the selected dictionary.": "Der blev ikke fundet nogle stavefejl med den valgte ordbog.", + "Spell check complete, didn't find any mispelled words. Closing now...": "Stavekontrollen er gennemfÞrt, der blev ikke fundet nogle stavefejl. Lukker...", + "OK": "OK", + "Original word": "Oprindeligt ord", + "Please wait. Calling spell checker.": "Vent venligst. Henter stavekontrol.", + "Please wait: changing dictionary to": "Vent venligst: skifter ordbog til", + "This will drop changes and quit spell checker. Please confirm.": "Alle dine Êndringer vil gÃ¥ tabt, vil du fortsÊtte?", + "Re-check": "Tjek igen", + "Replace all": "Erstat alle", + "Replace with": "Erstat med", + "Replace": "Erstat", + "Spell-check": "Stavekontrol", + "Suggestions": "Forslag", + "One moment...": "Vent venligst" +}; diff --git a/xinha/plugins/SpellChecker/lang/de.js b/xinha/plugins/SpellChecker/lang/de.js index 138dc64..e1bd992 100644 --- a/xinha/plugins/SpellChecker/lang/de.js +++ b/xinha/plugins/SpellChecker/lang/de.js @@ -1,26 +1,26 @@ -// I18N constants -// LANG: "en", ENCODING: UTF-8 -// Author: Broxx, -{ - "Please confirm that you want to open this link": "Wollen Sie diesen Link oeffnen", - "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 all": "Alle ignorieren", - "Ignore": "Ignorieren", - "No mispelled words found with the selected dictionary.": "Keine falschen Woerter mit gewaehlten Woerterbuch gefunden", - "Spell check complete, didn't find any mispelled words. Closing now...": "Rechtsschreibpruefung wurde ohne Fehler fertiggestellt. Wird nun geschlossen...", - "OK": "OK", - "Original word": "Original Wort", - "Please wait. Calling spell checker.": "Bitte warten. Woerterbuch wird durchsucht.", - "Please wait: changing dictionary to": "Bitte warten: Woerterbuch wechseln zu", - "This will drop changes and quit spell checker. Please confirm.": "Aenderungen werden nicht uebernommen. Bitte bestaettigen.", - "Re-check": "Neuueberpruefung", - "Replace all": "Alle ersetzen", - "Replace with": "Ersetzen mit", - "Replace": "Ersetzen", - "Spell-check": "Ueberpruefung", - "Suggestions": "Vorschlag", - "One moment...": "Bitte warten..." -}; +// I18N constants +// LANG: "en", ENCODING: UTF-8 +// Author: Broxx, +{ + "Please confirm that you want to open this link": "Wollen Sie diesen Link oeffnen", + "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 all": "Alle ignorieren", + "Ignore": "Ignorieren", + "No mispelled words found with the selected dictionary.": "Keine falschen Woerter mit gewaehlten Woerterbuch gefunden", + "Spell check complete, didn't find any mispelled words. Closing now...": "Rechtsschreibpruefung wurde ohne Fehler fertiggestellt. Wird nun geschlossen...", + "OK": "OK", + "Original word": "Original Wort", + "Please wait. Calling spell checker.": "Bitte warten. Woerterbuch wird durchsucht.", + "Please wait: changing dictionary to": "Bitte warten: Woerterbuch wechseln zu", + "This will drop changes and quit spell checker. Please confirm.": "Aenderungen werden nicht uebernommen. Bitte bestaettigen.", + "Re-check": "Neuueberpruefung", + "Replace all": "Alle ersetzen", + "Replace with": "Ersetzen mit", + "Replace": "Ersetzen", + "Spell-check": "Ueberpruefung", + "Suggestions": "Vorschlag", + "One moment...": "Bitte warten..." +}; diff --git a/xinha/plugins/SpellChecker/lang/he.js b/xinha/plugins/SpellChecker/lang/he.js index df0ddd9..aac7e1a 100644 --- a/xinha/plugins/SpellChecker/lang/he.js +++ b/xinha/plugins/SpellChecker/lang/he.js @@ -1,27 +1,27 @@ -// I18N constants -// LANG: "en", ENCODING: UTF-8 -// Author: Mihai Bazon, http://dynarch.com/mishoo -{ - "Please confirm that you want to open this link": "×× × ×שר שברצונך לפתוח קישור ×–×”", - "Cancel": "ביטול", - "Dictionary": "מילון", - "Finished list of mispelled words": "הסתיימה רשימת ×”×ž×™×œ×™× ×”×ž×ויתות ב×ופן שגוי", - "I will open it in a new page.": "×× ×™ ×פתח ×ת ×–×” בחלון חדש.", - "Ignore all": "×”×ª×¢×œ× ×ž×”×›×œ", - "Ignore": "התעל×", - "No mispelled words found with the selected dictionary.": "×œ× × ×ž×¦×ו ×ž×™×œ×™× ×ž×ויתות ב×ופן שגוי ×¢× ×”×ž×™×œ×•×Ÿ הנבחר.", - "Spell check complete, didn't find any mispelled words. Closing now...": "בדיקת ×”×יות נסתיימה, ×œ× × ×ž×¦×ו ×ž×™×œ×™× ×ž×ויתות ב×ופן שגוי. נסגר כעת...", - "OK": "×ישור", - "Original word": "המילה המקורית", - "Please wait. Calling spell checker.": "×× × ×”×ž×ª×Ÿ. ×§×•×¨× ×œ×‘×•×“×§ ×יות.", - "Please wait: changing dictionary to": "×× × ×”×ž×ª×Ÿ: מחליף מילון ל-", - "This will drop changes and quit spell checker. Please confirm.": "×–×” יבטל ×ת ×”×©×™× ×•×™×™× ×•×™×¦× ×ž×‘×•×“×§ ×”×יות. ×× × ×שר.", - "Re-check": "בדוק מחדש", - "Replace all": "החלף הכל", - "Replace with": "החלף ב-", - "Replace": "החלף", - "Revert": "החזר שינויי×", - "Spell-check": "בדיקת ×יות", - "Suggestions": "הצעות", - "One moment...": "×¢× × ×”×ž×˜×Ÿ ;-)" -}; +// I18N constants +// LANG: "en", ENCODING: UTF-8 +// Author: Mihai Bazon, http://dynarch.com/mishoo +{ + "Please confirm that you want to open this link": "×× × ×שר שברצונך לפתוח קישור ×–×”", + "Cancel": "ביטול", + "Dictionary": "מילון", + "Finished list of mispelled words": "הסתיימה רשימת ×”×ž×™×œ×™× ×”×ž×ויתות ב×ופן שגוי", + "I will open it in a new page.": "×× ×™ ×פתח ×ת ×–×” בחלון חדש.", + "Ignore all": "×”×ª×¢×œ× ×ž×”×›×œ", + "Ignore": "התעל×", + "No mispelled words found with the selected dictionary.": "×œ× × ×ž×¦×ו ×ž×™×œ×™× ×ž×ויתות ב×ופן שגוי ×¢× ×”×ž×™×œ×•×Ÿ הנבחר.", + "Spell check complete, didn't find any mispelled words. Closing now...": "בדיקת ×”×יות נסתיימה, ×œ× × ×ž×¦×ו ×ž×™×œ×™× ×ž×ויתות ב×ופן שגוי. נסגר כעת...", + "OK": "×ישור", + "Original word": "המילה המקורית", + "Please wait. Calling spell checker.": "×× × ×”×ž×ª×Ÿ. ×§×•×¨× ×œ×‘×•×“×§ ×יות.", + "Please wait: changing dictionary to": "×× × ×”×ž×ª×Ÿ: מחליף מילון ל-", + "This will drop changes and quit spell checker. Please confirm.": "×–×” יבטל ×ת ×”×©×™× ×•×™×™× ×•×™×¦× ×ž×‘×•×“×§ ×”×יות. ×× × ×שר.", + "Re-check": "בדוק מחדש", + "Replace all": "החלף הכל", + "Replace with": "החלף ב-", + "Replace": "החלף", + "Revert": "החזר שינויי×", + "Spell-check": "בדיקת ×יות", + "Suggestions": "הצעות", + "One moment...": "×¢× × ×”×ž×˜×Ÿ ;-)" +}; diff --git a/xinha/plugins/SpellChecker/lang/hu.js b/xinha/plugins/SpellChecker/lang/hu.js index e7e26d5..82db4ea 100644 --- a/xinha/plugins/SpellChecker/lang/hu.js +++ b/xinha/plugins/SpellChecker/lang/hu.js @@ -1,26 +1,26 @@ -// I18N constants -// LANG: "hu", ENCODING: UTF-8 -// Author: Miklós Somogyi, -{ - "Please confirm that you want to open this link": "MegerÅ‘sítés", - "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 all": "Minden elvetése", - "Ignore": "Elvetés", - "No mispelled words found with the selected dictionary.": "A választott szótár szerint nincs tévesztett szó.", - "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...", - "OK": "Rendben", - "Original word": "Eredeti szó", - "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", - "This will drop changes and quit spell checker. Please confirm.": "Kilépés a változások eldobásával. Jóváhagyja?", - "Re-check": "ÚjraellenÅ‘rzés", - "Replace all": "Mind cseréje", - "Replace with": "Csere a következÅ‘re:", - "Replace": "Csere", - "Spell-check": "HelyesírásellenÅ‘rzés", - "Suggestions": "Tippek", - "One moment...": "Kis türelmet ;-)" -}; +// I18N constants +// LANG: "hu", ENCODING: UTF-8 +// Author: Miklós Somogyi, +{ + "Please confirm that you want to open this link": "MegerÅ‘sítés", + "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 all": "Minden elvetése", + "Ignore": "Elvetés", + "No mispelled words found with the selected dictionary.": "A választott szótár szerint nincs tévesztett szó.", + "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...", + "OK": "Rendben", + "Original word": "Eredeti szó", + "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", + "This will drop changes and quit spell checker. Please confirm.": "Kilépés a változások eldobásával. Jóváhagyja?", + "Re-check": "ÚjraellenÅ‘rzés", + "Replace all": "Mind cseréje", + "Replace with": "Csere a következÅ‘re:", + "Replace": "Csere", + "Spell-check": "HelyesírásellenÅ‘rzés", + "Suggestions": "Tippek", + "One moment...": "Kis türelmet ;-)" +}; diff --git a/xinha/plugins/SpellChecker/lang/ja.js b/xinha/plugins/SpellChecker/lang/ja.js new file mode 100644 index 0000000..5571693 --- /dev/null +++ b/xinha/plugins/SpellChecker/lang/ja.js @@ -0,0 +1,28 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Please confirm that you want to open this link": "本当ã«ã“ã®ãƒªãƒ³ã‚¯ã‚’é–‹ãã¾ã™ã‹", + "Cancel": "中止", + "Dictionary": "辞書", + "Finished list of mispelled words": "ã¤ã¥ã‚Šé–“é•å˜èªžã®ä¸€è¦§", + "I will open it in a new page.": "æ–°ã—ã„ページã§é–‹ãã¾ã™ã€‚", + "Ignore all": "ã™ã¹ã¦ç„¡è¦–", + "Ignore": "無視", + "No mispelled words found with the selected dictionary.": "é¸æŠžã•れãŸè¾žæ›¸ã«ã¯ã¤ã¥ã‚Šé–“é•ã„å˜èªžãŒã‚りã¾ã›ã‚“。", + "Spell check complete, didn't find any mispelled words. Closing now...": "スペルãƒã‚§ãƒƒã‚¯ãŒå®Œäº†ã—ã¾ã—ãŸãŒã€ã¤ã¥ã‚Šé–“é•ã„å˜èªžã¯ã‚りã¾ã›ã‚“ã§ã—ãŸã€‚ã™ãã«é–‰ã˜ã¾ã™...", + "OK": "OK", + "Original word": "å…ƒã®å˜èªž", + "Please wait. Calling spell checker.": "ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。スペルãƒã‚§ãƒƒã‚«ãƒ¼ã‚’呼ã³å‡ºã—ã¦ã„ã¾ã™ã€‚", + "Please wait: changing dictionary to": "ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„: 辞書を切り替ãˆã¦ã„ã¾ã™", + "This will drop changes and quit spell checker. Please confirm.": "変更を破棄ã—ã¦ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚«ãƒ¼ã‚’終了ã—ã¾ã™ã€‚よã‚ã—ã„ã„ã§ã™ã‹ã€‚", + "Re-check": "å†ãƒã‚§ãƒƒã‚¯", + "Replace all": "ã™ã¹ã¦ç½®æ›", + "Replace with": "ã“れã«ç½®æ›", + "Replace": "ç½®æ›", + "Revert": "戻ã™", + "Spell-check": "スペルãƒã‚§ãƒƒã‚¯", + "Suggestions": "候補", + "One moment...": "ã‚ã¨ã‚‚ã†å°‘ã—...", + "Info": "情報", + "Learn": "学習" +}; \ No newline at end of file diff --git a/xinha/plugins/SpellChecker/lang/no.js b/xinha/plugins/SpellChecker/lang/nb.js similarity index 84% rename from xinha/plugins/SpellChecker/lang/no.js rename to xinha/plugins/SpellChecker/lang/nb.js index 1346170..2a07646 100644 --- a/xinha/plugins/SpellChecker/lang/no.js +++ b/xinha/plugins/SpellChecker/lang/nb.js @@ -1,5 +1,5 @@ // I18N constants -// LANG: "no", ENCODING: UTF-8 +// LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Please confirm that you want to open this link": "Ønsker du Ã¥ Ã¥pne denne lenken", @@ -13,8 +13,8 @@ "Spell check complete, didn't find any mispelled words. Closing now...": "Stavekontroll fullført, ingen feilstavede ord ble funnet, stavekontroll avsluttes.", "OK": "OK", "Original word": "Opprinnelig ord", - "Please wait. Calling spell checker.": "Vennligst vennt, kaller opp stavekontrollprogrammet", - "Please wait: changing dictionary to": "Vennligst vennt, endrer ordliste til", + "Please wait. Calling spell checker.": "Vennligst vent, kaller opp stavekontrollprogrammet", + "Please wait: changing dictionary to": "Vennligst vent, endrer ordliste til", "This will drop changes and quit spell checker. Please confirm.": "Dette vil droppe endringene og avbryte stavekontrollen, vennligst bekreft.", "Re-check": "Kjør stavekontroll pÃ¥ nytt", "Replace all": "Erstatt alle", diff --git a/xinha/plugins/SpellChecker/lang/nl.js b/xinha/plugins/SpellChecker/lang/nl.js index 8b1ee92..42ae94f 100644 --- a/xinha/plugins/SpellChecker/lang/nl.js +++ b/xinha/plugins/SpellChecker/lang/nl.js @@ -1,27 +1,27 @@ -// I18N constants -// LANG: "nl", ENCODING: UTF-8 -// Author: A.H van den Broek http://www.kontaktfm.nl, tonbroek@kontaktfm.nl -{ - "Please confirm that you want to open this link": "Weet u zeker dat u deze link wilt openen?", - "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 all": "alles overslaan", - "Ignore": "Overslaan", - "No mispelled words found with the selected dictionary.": "Geen fouten gevonden met dit woordenboek.", - "Spell check complete, didn't find any mispelled words. Closing now...": "Spell checking is klaar, geen fouten gevonden. spell checking word gesloten...", - "OK": "OK", - "Original word": "Originele woord", - "Please wait. Calling spell checker.": "Even wachten. spell checker wordt geladen.", - "Please wait: changing dictionary to": "even wachten: woordenboek wordt veranderd naar", - "This will drop changes and quit spell checker. Please confirm.": "Dit zal alle veranderingen annuleren en de spell checker sluiten. Weet u het zeker?", - "Re-check": "Opnieuw", - "Replace all": "Alles vervangen", - "Replace with": "Vervangen met", - "Replace": "Vervangen", - "Revert": "Omkeren", - "Spell-check": "Spell-check", - "Suggestions": "Suggestie", - "One moment...": "Even wachten ;-)" -}; +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// Author: A.H van den Broek http://www.kontaktfm.nl, tonbroek@kontaktfm.nl +{ + "Please confirm that you want to open this link": "Weet u zeker dat u deze link wilt openen?", + "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 all": "alles overslaan", + "Ignore": "Overslaan", + "No mispelled words found with the selected dictionary.": "Geen fouten gevonden met dit woordenboek.", + "Spell check complete, didn't find any mispelled words. Closing now...": "Spell checking is klaar, geen fouten gevonden. spell checking word gesloten...", + "OK": "OK", + "Original word": "Originele woord", + "Please wait. Calling spell checker.": "Even wachten. spell checker wordt geladen.", + "Please wait: changing dictionary to": "even wachten: woordenboek wordt veranderd naar", + "This will drop changes and quit spell checker. Please confirm.": "Dit zal alle veranderingen annuleren en de spell checker sluiten. Weet u het zeker?", + "Re-check": "Opnieuw", + "Replace all": "Alles vervangen", + "Replace with": "Vervangen met", + "Replace": "Vervangen", + "Revert": "Omkeren", + "Spell-check": "Spell-check", + "Suggestions": "Suggestie", + "One moment...": "Even wachten ;-)" +}; diff --git a/xinha/plugins/SpellChecker/lang/ro.js b/xinha/plugins/SpellChecker/lang/ro.js index 9a823a7..9fe5f8a 100644 --- a/xinha/plugins/SpellChecker/lang/ro.js +++ b/xinha/plugins/SpellChecker/lang/ro.js @@ -1,26 +1,26 @@ -// I18N constants -// LANG: "ro", ENCODING: UTF-8 -// Author: Mihai Bazon, http://dynarch.com/mishoo -{ - "Please confirm that you want to open this link": "Vă rog confirmaÅ£i că vreÅ£i să deschideÅ£i acest link", - "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 all": "Ignoră toate", - "Ignore": "Ignoră", - "No mispelled words found with the selected dictionary.": "Nu am găsit nici un cuvânt greÅŸit cu acest dicÅ£ionar.", - "Spell check complete, didn't find any mispelled words. Closing now...": "Am terminat, nu am detectat nici o greÅŸeală. Acum închid fereastra...", - "OK": "OK", - "Original word": "Cuvântul original", - "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", - "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?", - "Re-check": "Scanează", - "Replace all": "ÃŽnlocuieÅŸte toate", - "Replace with": "ÃŽnlocuieÅŸte cu", - "Replace": "ÃŽnlocuieÅŸte", - "Spell-check": "Detectează greÅŸeli", - "Suggestions": "Sugestii", - "One moment...": "va rog ashteptatzi ;-)" -}; +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// Author: Mihai Bazon, http://dynarch.com/mishoo +{ + "Please confirm that you want to open this link": "Vă rog confirmaÅ£i că vreÅ£i să deschideÅ£i acest link", + "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 all": "Ignoră toate", + "Ignore": "Ignoră", + "No mispelled words found with the selected dictionary.": "Nu am găsit nici un cuvânt greÅŸit cu acest dicÅ£ionar.", + "Spell check complete, didn't find any mispelled words. Closing now...": "Am terminat, nu am detectat nici o greÅŸeală. Acum închid fereastra...", + "OK": "OK", + "Original word": "Cuvântul original", + "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", + "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?", + "Re-check": "Scanează", + "Replace all": "ÃŽnlocuieÅŸte toate", + "Replace with": "ÃŽnlocuieÅŸte cu", + "Replace": "ÃŽnlocuieÅŸte", + "Spell-check": "Detectează greÅŸeli", + "Suggestions": "Sugestii", + "One moment...": "va rog ashteptatzi ;-)" +}; diff --git a/xinha/plugins/SpellChecker/readme-tech.html b/xinha/plugins/SpellChecker/readme-tech.html index 1afdf6d..c1703ec 100644 --- a/xinha/plugins/SpellChecker/readme-tech.html +++ b/xinha/plugins/SpellChecker/readme-tech.html @@ -1,114 +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 - - - + + + + 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/xinha/plugins/SpellChecker/spell-check-logic.cgi b/xinha/plugins/SpellChecker/spell-check-logic.cgi index 0c749c0..6c68f24 100755 --- a/xinha/plugins/SpellChecker/spell-check-logic.cgi +++ b/xinha/plugins/SpellChecker/spell-check-logic.cgi @@ -1,210 +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$ - -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; -}; +#! /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$ + +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/xinha/plugins/SpellChecker/spell-check-logic.php b/xinha/plugins/SpellChecker/spell-check-logic.php index 19bcd72..ff59463 100644 --- a/xinha/plugins/SpellChecker/spell-check-logic.php +++ b/xinha/plugins/SpellChecker/spell-check-logic.php @@ -1,166 +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 ''; + + + + +'; + +// 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/xinha/plugins/SpellChecker/spell-check-savedicts.php b/xinha/plugins/SpellChecker/spell-check-savedicts.php index cb2d281..0086165 100644 --- a/xinha/plugins/SpellChecker/spell-check-savedicts.php +++ b/xinha/plugins/SpellChecker/spell-check-savedicts.php @@ -1,38 +1,38 @@ -&1'); - unlink($temptext); - } +&1'); + unlink($temptext); + } ?> \ No newline at end of file diff --git a/xinha/plugins/SpellChecker/spell-check-ui.html b/xinha/plugins/SpellChecker/spell-check-ui.html index 901c9e4..58980df 100644 --- a/xinha/plugins/SpellChecker/spell-check-ui.html +++ b/xinha/plugins/SpellChecker/spell-check-ui.html @@ -1,124 +1,125 @@ - - - - - Spell Checker - - - - - - - - - - - -
    +

    diff --git a/xinha/plugins/Forms/popups/textarea.html b/xinha/plugins/Forms/popups/textarea.html index ad12555..802826b 100644 --- a/xinha/plugins/Forms/popups/textarea.html +++ b/xinha/plugins/Forms/popups/textarea.html @@ -29,7 +29,7 @@ function Init() { function onOK() { var el = document.getElementById("f_name"); if (!el.value) { - alert("You must enter a Name"); + alert(HTMLArea._lc("You must enter a Name","Forms")); el.focus(); return false; } diff --git a/xinha/plugins/FullPage/full-page.js b/xinha/plugins/FullPage/full-page.js index 2e4392a..6e344f8 100644 --- a/xinha/plugins/FullPage/full-page.js +++ b/xinha/plugins/FullPage/full-page.js @@ -1,209 +1,200 @@ -// FullPage Plugin for HTMLArea-3.0 -// Implementation by Mihai Bazon. Sponsored by http://thycotic.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 - -
    -
    Mihai Bazon
    - - -Last modified on Sat Oct 25 01:06:59 2003 - - - - diff --git a/xinha/plugins/HtmlTidy/html-tidy-logic.php b/xinha/plugins/HtmlTidy/html-tidy-logic.php index c457e0f..f572c94 100755 --- a/xinha/plugins/HtmlTidy/html-tidy-logic.php +++ b/xinha/plugins/HtmlTidy/html-tidy-logic.php @@ -1,79 +1,79 @@ - array("pipe", "r"), - 1 => array("pipe", "w") - ); - $process = @proc_open("tidy -utf8 -config {$cwd}html-tidy-config.cfg", $descriptorspec, $pipes); - - - // Make sure the program started and we got the hooks... - // Either way, get some source code into $source - if (is_resource($process)) { - - // Feed untidy source into the stdin - fwrite($pipes[0], $source); - fclose($pipes[0]); - - // Read clean source out to the browser - while (!feof($pipes[1])) { - //echo fgets($pipes[1], 1024); - $newsrc .= fgets($pipes[1], 1024); - } - fclose($pipes[1]); - - // Clean up after ourselves - proc_close($process); - - } else { - /* Use tidy if it's available from PECL */ - if( function_exists('tidy_parse_string') ) - { - $tempsrc = tidy_parse_string($source); - tidy_clean_repair(); - $newsrc = tidy_get_output(); - } - else - { - // Better give them back what they came with, so they don't lose it all... - $newsrc = "\n" .$source. "\n"; - } - } - - // Split our source into an array by lines - $srcLines = preg_split("/\n/",$newsrc,-1,PREG_SPLIT_NO_EMPTY); - - // Get only the lines between the body tags - $startLn = 0; - while ( strpos( $srcLines[$startLn++], ' -var ns=""; - -editor.setHTML(ns); + array("pipe", "r"), + 1 => array("pipe", "w") + ); + $process = @proc_open("tidy -utf8 -config {$cwd}html-tidy-config.cfg", $descriptorspec, $pipes); + + + // Make sure the program started and we got the hooks... + // Either way, get some source code into $source + if (is_resource($process)) { + + // Feed untidy source into the stdin + fwrite($pipes[0], $source); + fclose($pipes[0]); + + // Read clean source out to the browser + while (!feof($pipes[1])) { + //echo fgets($pipes[1], 1024); + $newsrc .= fgets($pipes[1], 1024); + } + fclose($pipes[1]); + + // Clean up after ourselves + proc_close($process); + + } else { + /* Use tidy if it's available from PECL */ + if( function_exists('tidy_parse_string') ) + { + $tempsrc = tidy_parse_string($source); + tidy_clean_repair(); + $newsrc = tidy_get_output(); + } + else + { + // Better give them back what they came with, so they don't lose it all... + $newsrc = "\n" .$source. "\n"; + } + } + + // Split our source into an array by lines + $srcLines = preg_split("/\n/",$newsrc,-1,PREG_SPLIT_NO_EMPTY); + + // Get only the lines between the body tags + $startLn = 0; + while ( strpos( $srcLines[$startLn++], ' +var ns=""; + +editor.setHTML(ns); \ No newline at end of file diff --git a/xinha/plugins/HtmlTidy/html-tidy.js b/xinha/plugins/HtmlTidy/html-tidy.js index 2558b2b..5362c9b 100644 --- a/xinha/plugins/HtmlTidy/html-tidy.js +++ b/xinha/plugins/HtmlTidy/html-tidy.js @@ -1,105 +1,105 @@ -// Plugin for htmlArea to run code through the server's HTML Tidy -// 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 HtmlTidy(editor) { - this.editor = editor; - - var cfg = editor.config; - var bl = HtmlTidy.btnList; - var self = this; - - this.onMode = this.__onMode; - - // register the toolbar buttons provided by this plugin - var toolbar = []; - for (var i = 0; i < bl.length; ++i) { - var btn = bl[i]; - if (btn == "html-tidy") { - var id = "HT-html-tidy"; - cfg.registerButton(id, this._lc("HTML Tidy"), editor.imgURL(btn[0] + ".gif", "HtmlTidy"), true, - function(editor, id) { - // dispatch button press event - self.buttonPress(editor, id); - }, btn[1]); - toolbar.push(id); - } else if (btn == "html-auto-tidy") { - var btnTxt = [this._lc("Auto-Tidy"), this._lc("Don't Tidy")]; - var optionItems = new Object(); - optionItems[btnTxt[0]] = "auto"; - optionItems[btnTxt[1]] = "noauto"; - var ht_class = { - id : "HT-auto-tidy", - options : optionItems, - action : function (editor) { self.__onSelect(editor, this); }, - refresh : function (editor) { }, - context : "body" - }; - cfg.registerDropdown(ht_class); - } - } - - for (var i in toolbar) { - cfg.toolbar[0].push(toolbar[i]); - } -} - -HtmlTidy._pluginInfo = { - name : "HtmlTidy", - 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" -}; - -HtmlTidy.prototype._lc = function(string) { - return HTMLArea._lc(string, 'HtmlTidy'); -}; - -HtmlTidy.prototype.__onSelect = function(editor, obj) { - // Get the toolbar element object - var elem = editor._toolbarObjects[obj.id].element; - - // Set our onMode event appropriately - if (elem.value == "auto") - this.onMode = this.__onMode; - else - this.onMode = null; -}; - -HtmlTidy.prototype.__onMode = function(mode) { - if ( mode == "textmode" ) { - this.buttonPress(this.editor, "HT-html-tidy"); - } -}; - -HtmlTidy.btnList = [ - null, // separator - ["html-tidy"], - ["html-auto-tidy"] -]; - -HtmlTidy.prototype.buttonPress = function(editor, id) { - - switch (id) - { - case "HT-html-tidy": - { - var oldhtml = editor.getHTML(); - if(oldhtml=="") break; //don't clean empty text - // Ask the server for some nice new html, based on the old... - HTMLArea._postback(_editor_url + 'plugins/HtmlTidy/html-tidy-logic.php', {'htisource_name' : oldhtml}, - function(javascriptResponse) { eval(javascriptResponse) }); - } - break; - } -}; - -HtmlTidy.prototype.processTidied = function(newSrc) { - editor = this.editor; - editor.setHTML(newSrc); +// Plugin for htmlArea to run code through the server's HTML Tidy +// 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 HtmlTidy(editor) { + this.editor = editor; + + var cfg = editor.config; + var bl = HtmlTidy.btnList; + var self = this; + + this.onMode = this.__onMode; + + // register the toolbar buttons provided by this plugin + var toolbar = []; + for (var i = 0; i < bl.length; ++i) { + var btn = bl[i]; + if (btn == "html-tidy") { + var id = "HT-html-tidy"; + cfg.registerButton(id, this._lc("HTML Tidy"), editor.imgURL(btn[0] + ".gif", "HtmlTidy"), true, + function(editor, id) { + // dispatch button press event + self.buttonPress(editor, id); + }, btn[1]); + toolbar.push(id); + } else if (btn == "html-auto-tidy") { + var btnTxt = [this._lc("Auto-Tidy"), this._lc("Don't Tidy")]; + var optionItems = new Object(); + optionItems[btnTxt[0]] = "auto"; + optionItems[btnTxt[1]] = "noauto"; + var ht_class = { + id : "HT-auto-tidy", + options : optionItems, + action : function (editor) { self.__onSelect(editor, this); }, + refresh : function (editor) { }, + context : "body" + }; + cfg.registerDropdown(ht_class); + } + } + + for (var i in toolbar) { + cfg.toolbar[0].push(toolbar[i]); + } +} + +HtmlTidy._pluginInfo = { + name : "HtmlTidy", + 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" +}; + +HtmlTidy.prototype._lc = function(string) { + return HTMLArea._lc(string, 'HtmlTidy'); +}; + +HtmlTidy.prototype.__onSelect = function(editor, obj) { + // Get the toolbar element object + var elem = editor._toolbarObjects[obj.id].element; + + // Set our onMode event appropriately + if (elem.value == "auto") + this.onMode = this.__onMode; + else + this.onMode = null; +}; + +HtmlTidy.prototype.__onMode = function(mode) { + if ( mode == "textmode" ) { + this.buttonPress(this.editor, "HT-html-tidy"); + } +}; + +HtmlTidy.btnList = [ + null, // separator + ["html-tidy"], + ["html-auto-tidy"] +]; + +HtmlTidy.prototype.buttonPress = function(editor, id) { + + switch (id) + { + case "HT-html-tidy": + { + var oldhtml = editor.getHTML(); + if(oldhtml=="") break; //don't clean empty text + // Ask the server for some nice new html, based on the old... + HTMLArea._postback(_editor_url + 'plugins/HtmlTidy/html-tidy-logic.php', {'htisource_name' : oldhtml}, + function(javascriptResponse) { eval(javascriptResponse) }); + } + break; + } +}; + +HtmlTidy.prototype.processTidied = function(newSrc) { + editor = this.editor; + editor.setHTML(newSrc); }; \ No newline at end of file diff --git a/xinha/plugins/HtmlTidy/img/html-tidy.gif b/xinha/plugins/HtmlTidy/img/html-tidy.gif index f82d1400f80a2051ceb2e2b027de1f7c392a50c9..50cc6a7f2fa10af7d2926bd0db0f57c8a178c26d 100644 GIT binary patch literal 599 zcmZ?wbhEHb6k-r!c*nr-|Nnn`d;7GswEg?{pE+~p{rmUE#>VT{ufKN9=>Px!Z{IzC za9{uBOUwKB?|=XP^~{->=cYt|{Al^&+`hT(j`H&IhmVGR_-1|O%ECK4rk*<&eB(g0 zg@LAty5!ljT2dl>H|}KLx;^vhGt)0$46ICzzJD}){`|)Crx%YLQGfCH*32}9DlgVE zXN->@kN)%j?)B3*UcJ`#a&!9f^+SDq{e%?mV=WO6t{m_0?>ANz+p$o6UNgtpL-`C0 z414#g6x%c0xuZUF=FGcycbq@JaQAMPhYv5^zHQIX&wqZ0+Jgt@b}gUq=6TSvO7H*w z&s@JDe0+A%`SY?ncKEGY70oc1fZ|UURuKjU1|3EQMg{=}0R{&4Ee#ATEDTI73{6a& z5&|8pY-UZY46MxTjHX^fymLgD7#Nuu*q9g@edRcr*cU8X$jr#VtSn%_BGR#NEejh1 zyNrZA)BM)GyO`Ld&G}fZ*K}N9(Dl|Z5!&Z^@q(VPwx`r&qxOq@R+_e!-11zvE+`19 zxEX5+zq!Tf;G)DMCT8LBmSM(;4@rznY>HY(GRj>zgqt~(=2Qr5IKnC>JICO|$0KnE Yn8dXd9yl5*Y+>PRa*z}<5MZzd0L~D`EdT%j literal 609 zcmZ?wbhEHb6k-r!c*Xz%`}gnPyH{miGe=rl+Sx<-GiT1cdv`~%J;R+l>Jw79kF`X6 z`TC*0zTV#6{_xQ-V^y&o3)LT7Io{vje`m+k^XC`7efRw1N6Ry3W?sJ`{Qv)dd3pJ{ z?T*K17cHywK6B>G{rmU-|39;8RrLDx>(8H;-Lb>Z*x2~Z^Ptwo|L^}{#oCUjFt;t%^k=yFH&dnw}85?!;nY=x1o~+Is z%pN9UkD83dO%1plWWL;#Vh?aQxzNS4MeJ+W5rZZdS3XI8iH_opO3u!r;&llt++9ux isjC#JXgpkhPf(FRgyTj;{)9FaQI{ndo|^*{7_0&C)6>uZ diff --git a/xinha/plugins/HtmlTidy/lang/ja.js b/xinha/plugins/HtmlTidy/lang/ja.js new file mode 100644 index 0000000..539e0dd --- /dev/null +++ b/xinha/plugins/HtmlTidy/lang/ja.js @@ -0,0 +1,8 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "HTML Tidy": "HTML Tidy", + "Auto-Tidy": "è‡ªå‹•é©æ­£åŒ–", + "Don't Tidy": "驿­£åŒ–ã—ãªã„", + "Tidy failed. Check your HTML for syntax errors.":"驿­£åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚HTMLã®æ–‡æ³•エラーを確èªã—ã¦ãã ã•ã„。" +}; \ No newline at end of file diff --git a/xinha/plugins/HtmlTidy/lang/no.js b/xinha/plugins/HtmlTidy/lang/nb.js similarity index 72% rename from xinha/plugins/HtmlTidy/lang/no.js rename to xinha/plugins/HtmlTidy/lang/nb.js index 93a552a..d94d44f 100644 --- a/xinha/plugins/HtmlTidy/lang/no.js +++ b/xinha/plugins/HtmlTidy/lang/nb.js @@ -1,7 +1,7 @@ // I18N constants -// LANG: "no", ENCODING: UTF-8 +// LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "HTML Tidy": "HTML Tidy", - "Tidy failed. Check your HTML for syntax errors.": "Tidy feilet. Sjekk HTML koden for syntax feil." + "Tidy failed. Check your HTML for syntax errors.": "Tidy feilet. Sjekk HTML koden for syntaksfeil." }; \ No newline at end of file diff --git a/xinha/plugins/InsertAnchor/img/insert-anchor.gif b/xinha/plugins/InsertAnchor/img/insert-anchor.gif index b6c38e06df45bd7daea444b83b3ca90f6be2e0a4..9da891b3910326363a3a344e0331b8c969ec6f29 100755 GIT binary patch literal 370 zcmZ?wbhEHb6k-r!xXZxs|Ns9p%N-aP80OUJJ2*JZoH_I7m**!J+dg>kKvIO`?Y(UY zLE6tR&wp^D?Zh&#Z|`oWrKNp*cH-h%uPd9v8X6jI?aezf-?||~eaj@Xu&}W7VELsz zh8NZaUEUCMV`u8|6(OAkS}VG2c2Boh+hZyuBy?^|Zd;kx=E?R44jc$`le&3oageWr zu_pigR=X|plAX*%_s_O^|7ic>7Q=HJ6OE0H83+NzpDe5*3=9l9j0_A60t|u-3~c=l z4Fwq;Hf<+TT!c8LOuFFrz`@jU;@RsO3|cX*XPk|vHfm}0&seG{yhF>=ZGq`;7MJAR4%zYaf)ft)U7Ls<7L!hU=#M` wThgPw!dEJegIi)9qf(yD;|~Jb3UREiFw*NNDEFncv>s-aOgOX> zc_jpCZ<&`oztwL4Y^&#&=R28+UfC3OX1T+yy?H;sJP!*CySCO#QiLNtSbjy9O=p4D z+8)#0(=Cp#2stv}`og-Pr9Fl>cBWq55cL25e~=S#W5u5=tRf7i3_2hsAU`p%O*t^D zAi`Ky?MTX}28D?dr!;y+RzxlGT)x6J$#cWuv;&?NiP}p&*`DoTuvwbX@#W$k4}*hQ zZbcf;jr^KaL{u2+RoJ8%RG1hTnA!qa8MsV)>rDCDUDP6(X1aPR8;Uy5aFtMDc2-mN zlUdfwxynx~-icq9dxMHz6R#!%tEbTJ=7S6Z{1L}g6b_wEa28?^JahS`lOuyQ07VIl AJOBUy diff --git a/xinha/plugins/InsertAnchor/insert-anchor.js b/xinha/plugins/InsertAnchor/insert-anchor.js index b9899cb..70679f4 100755 --- a/xinha/plugins/InsertAnchor/insert-anchor.js +++ b/xinha/plugins/InsertAnchor/insert-anchor.js @@ -1,97 +1,76 @@ -function InsertAnchor(editor) { - this.editor = editor; - var cfg = editor.config; - var self = this; +function InsertAnchor(_1){ +this.editor=_1; +var _2=_1.config; +var _3=this; +_2.registerButton({id:"insert-anchor",tooltip:this._lc("Insert Anchor"),image:_1.imgURL("insert-anchor.gif","InsertAnchor"),textMode:false,action:function(_4){ +_3.buttonPress(_4); +}}); +_2.addToolbarElement("insert-anchor","createlink",1); +} +InsertAnchor._pluginInfo={name:"InsertAnchor",origin:"version: 1.0, by Andre Rabold, MR Printware GmbH, http://www.mr-printware.de",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"}; +InsertAnchor.prototype._lc=function(_5){ +return HTMLArea._lc(_5,"InsertAnchor"); +}; +InsertAnchor.prototype.onGenerate=function(){ +var _6="IA-style"; +var _7=this.editor._doc.getElementById(_6); +if(_7==null){ +_7=this.editor._doc.createElement("link"); +_7.id=_6; +_7.rel="stylesheet"; +_7.href=_editor_url+"plugins/InsertAnchor/insert-anchor.css"; +this.editor._doc.getElementsByTagName("HEAD")[0].appendChild(_7); +} +}; +InsertAnchor.prototype.buttonPress=function(_8){ +var _9=null; +var _a=_8.getSelectedHTML(); +var _b=_8._getSelection(); +var _c=_8._createRange(_b); +var a=_8._activeElement(_b); +if(!(a!=null&&a.tagName.toLowerCase()=="a")){ +a=_8._getFirstAncestor(_b,"a"); +} +if(a!=null&&a.tagName.toLowerCase()=="a"){ +_9={name:a.id}; +}else{ +_9={name:""}; +} +_8._popupDialog("plugin://InsertAnchor/insert_anchor",function(_e){ +if(_e){ +var _f=_e["name"]; +if(_f==""||_f==null){ +if(a){ +var _10=a.innerHTML; +a.parentNode.removeChild(a); +_8.insertHTML(_10); +} +return; +} +try{ +var doc=_8._doc; +if(!a){ +a=doc.createElement("a"); +a.id=_f; +a.name=_f; +a.title=_f; +a.className="anchor"; +a.innerHTML=_a; +if(HTMLArea.is_ie){ +_c.pasteHTML(a.outerHTML); +}else{ +_8.insertNodeAtSelection(a); +} +}else{ +a.id=_f; +a.name=_f; +a.title=_f; +a.className="anchor"; +} +} +catch(e){ +} +} +},_9); +}; - // register the toolbar buttons provided by this plugin - cfg.registerButton({ - id : "insert-anchor", - tooltip : this._lc("Insert Anchor"), - image : editor.imgURL("insert-anchor.gif", "InsertAnchor"), - textMode : false, - action : function(editor) { - self.buttonPress(editor); - } - }); - cfg.addToolbarElement("insert-anchor", "createlink", 1); -} - -InsertAnchor._pluginInfo = { - name : "InsertAnchor", - origin : "version: 1.0, by Andre Rabold, MR Printware GmbH, http://www.mr-printware.de", - 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" -}; - -InsertAnchor.prototype._lc = function(string) { - return HTMLArea._lc(string, 'InsertAnchor'); -}; - -InsertAnchor.prototype.onGenerate = function() { - var style_id = "IA-style"; - var style = this.editor._doc.getElementById(style_id); - if (style == null) { - style = this.editor._doc.createElement("link"); - style.id = style_id; - style.rel = 'stylesheet'; - style.href = _editor_url + 'plugins/InsertAnchor/insert-anchor.css'; - this.editor._doc.getElementsByTagName("HEAD")[0].appendChild(style); - } -}; - -InsertAnchor.prototype.buttonPress = function(editor) { - var outparam = null; - var html = editor.getSelectedHTML(); - var sel = editor._getSelection(); - var range = editor._createRange(sel); - var a = editor._activeElement(sel); - if(!(a != null && a.tagName.toLowerCase() == 'a')) { - a = editor._getFirstAncestor(sel, 'a'); - } - if (a != null && a.tagName.toLowerCase() == 'a') - outparam = { name : a.id }; - else - outparam = { name : '' }; - - editor._popupDialog( "plugin://InsertAnchor/insert_anchor", function( param ) { - if ( param ) { - var anchor = param["name"]; - if (anchor == "" || anchor == null) { - if (a) { - var child = a.innerHTML; - a.parentNode.removeChild(a); - editor.insertHTML(child); - } - return; - } - try { - var doc = editor._doc; - if (!a) { -// editor.surroundHTML('', ''); - a = doc.createElement("a"); - a.id = anchor; - a.name = anchor; - a.title = anchor; - a.className = "anchor"; - a.innerHTML = html; - if (HTMLArea.is_ie) { - range.pasteHTML(a.outerHTML); - } else { - editor.insertNodeAtSelection(a); - } - } else { - a.id = anchor; - a.name = anchor; - a.title = anchor; - a.className = "anchor"; - } - } - catch (e) { } - } - }, outparam); -}; diff --git a/xinha/plugins/InsertAnchor/lang/ja.js b/xinha/plugins/InsertAnchor/lang/ja.js new file mode 100644 index 0000000..347fb00 --- /dev/null +++ b/xinha/plugins/InsertAnchor/lang/ja.js @@ -0,0 +1,7 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Insert Anchor": "ã‚¢ãƒ³ã‚«ãƒ¼ã®æŒ¿å…¥", + "Anchor name": "アンカーã®åå‰", + "Delete": "削除" +}; \ No newline at end of file diff --git a/xinha/plugins/InsertAnchor/lang/no.js b/xinha/plugins/InsertAnchor/lang/nb.js similarity index 67% rename from xinha/plugins/InsertAnchor/lang/no.js rename to xinha/plugins/InsertAnchor/lang/nb.js index c5249c2..25ca29a 100644 --- a/xinha/plugins/InsertAnchor/lang/no.js +++ b/xinha/plugins/InsertAnchor/lang/nb.js @@ -1,7 +1,7 @@ // I18N constants -// LANG: "no", ENCODING: UTF-8 +// LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Insert Anchor": "Sett inn anker", - "Anchor name": "Anker navn (ID)" + "Anchor name": "Ankernavn (ID)" }; \ No newline at end of file diff --git a/xinha/plugins/InsertAnchor/lang/nl.js b/xinha/plugins/InsertAnchor/lang/nl.js new file mode 100644 index 0000000..7751dea --- /dev/null +++ b/xinha/plugins/InsertAnchor/lang/nl.js @@ -0,0 +1,8 @@ +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// translated: Raimund Meyer xinha@ray-of-light.org +{ + "Insert Anchor": "Anker invoegen", + "Anchor name": "Naam (ID)", + "Delete": "Verwijderen" +}; diff --git a/xinha/plugins/InsertAnchor/popups/insert_anchor.html b/xinha/plugins/InsertAnchor/popups/insert_anchor.html index dcc8d28..33e5f47 100644 --- a/xinha/plugins/InsertAnchor/popups/insert_anchor.html +++ b/xinha/plugins/InsertAnchor/popups/insert_anchor.html @@ -4,11 +4,11 @@ - - -
    Insert Image
    -
    Images on the Server:
    -
    Images on the Server:
    + -'; - } else { - echo ''; - } -?> + + + +
    -
    +
    @@ -201,13 +208,15 @@ function openFile() {
    + + @@ -228,7 +237,7 @@ function openFile() {
    -
    Alignment:
    +
    Alignment:
    +
    Border thickness:
    + +
    + + +
    +Size + +
    + +
    Width:
    + +

    + +

    Height:
    +
    @@ -258,15 +280,12 @@ title="Leave empty for no border" />
    -
    Horizontal:
    - - +
    Horizontal:
    +

    -

    Vertical:
    - +
    Vertical:
    +
    diff --git a/xinha/plugins/InsertPicture/img/btn_open.gif b/xinha/plugins/InsertPicture/img/btn_open.gif index 3495a7b6ce606ef9845d36c3c15344e031cfa8d3..2056f2c1ef0ab04f10f6040ec867b2f77ef9d74d 100644 GIT binary patch literal 173 zcmZ?wbhEHb6k-r!*v-bkz`)Sf))pEX%D}+jgcx`j7+9hN8XS&lL~v-S{uMRjnI%@DArYZmS+?3i=D5R}wFa3i z7yH@|rG?%&S+oB^KtRM-ore298U_-pS*H0;vp&kiHZTA1t%@)X)*Au=DqeF$n5Hru P51d@N{9K(Y1A{dH(PK3q literal 185 zcmZ?wbhEHb6k-r!*v!Vjz`$_#?%ne8^3c#wV`Jk@n>H~pFo=nXwY9Z5IXRs<<4usdbCNlfZG?p|c6aHdP)aN%+pjyWohP0uc~CR(;U$ke&$HK~8m0x<;U=09sO*>Tp diff --git a/xinha/plugins/InsertPicture/img/nopic.gif b/xinha/plugins/InsertPicture/img/nopic.gif index 3e552f250a978ceff036917be90a89e2ee85c8ff..d4e8a786b4d56d0b838e77abba501a8bd43f86b5 100644 GIT binary patch delta 1030 zcmeC=Y2>MQ_jI!`Ppn`_VYth{@c;k+ii!#b28RC(3`Z~B-hSlb#rsb(n&&u2I?vy8 zX8ZY@iRBXypWVK7@6P1flw~`YpT4x)Kg+*)TAfFdhmDU-dVBhw!~3(lmlaK3*|B2p z+FjedQ+=neopJH%{;M|+>^r@+Yt6xujs}xmx?#nkGnLcpe*FA3ZPBcQm#-c_e`Ck#(^WG!?>csQ z#qQ&C)=pn{a6{X|NjuM6-*f(EbV-^H0|NsC$TJLV{~a0&JanY`Pb?`qnPWAdsbS(r z&3b0$hL-BOrlyvxtEPvcZ^HD2izd&UIlE%6vNFq>wd>Yz z*tm4r@{*OSH}2fEX7jAA+cHD-^w`*JZ8j_ZPUU46ryFPLZRj+P2v}h2eQ0Oo5ufF<)>;{B9~@}pl{U%9xDcS@ z-dF4?E@N?E%JR$olO>oG>sdM_47cRnXkc=^e$q?)59=Pobqp_p7efve4@6` zx|+)7OK0aO>s=ETInXJr6H(&YpwRT5Ls;$455xSmAGa!+i0R~R{r2|G?&|-1elfQ` zK0cYsU(y%7o%!DWMt_aEyA@?`3$1Lw^VM1X{B&aK>Xor=cBgJ>$=h_Cv;I-PMzXfV%Y0;|V^1~#P|*P1?GUG_hoTbITCV28*VWhQow zq65tQY}+~x@|rJrcqK%3rUz+w^^uL!ewDs_I(^>B&>88%b8kKr4P-lh z+eTzf8&kg3iw_6cc~n-dNM80(a#pmjW<~PcYNyDi`3-DdHy3b-RIOOlJ!!*5xx{N6 zX?>RSx)O4Y&wN;JB6!SdQNGrS2M5>gD7(N|^>X8@S2i0@c`>ft_NZ$0x;?utdNT8# zQ9ii&f)jUA+**MU?#6Yy!e+l&6>g&KyXAqG!CJ0saouaT-CpGR|EP`rmf44PYs&o6 zT){IXI(N~_Robk(-|l0`-}C8G^!mL&o>jLge(qUnu$jmF%m!8gcb-CCQ;8Y_M^0^< zX@_OZCo8g~D2p7ponI_yemhcv>HD3i2fSPErQE39euq)zta)I E0H+83`~Uy| delta 964 zcmZqV>Ex+*_jI$cOsrr?VYte`kXSx3x+Lx5{U;tt9$WYB%xIo-`0Vz>7mqI6x%}v* z+v)A;9V_-uoj1cd()skI-9?jECfBB1y?J2A>C}`h zA763kOxK!&dr$7l?p|i&V{`H9{ym5H?>ct*`TLL4wjTfg|9?eAMLh!p!+!>b?ME)o z-*aaB`I{vj3#w*r-gRQroVC*{r`PQ~bA8YGo9hm4=v~m+ws6w%^EZC{{I&Jy2Jci~ z|1AHw>bSEvuO7U7b=sm?4_?2WzIKMR7r`6$-qEU)6j5oETecm zle9GVbMB|g%1@uaUbAY|rRE1$!ydnV@#@Vp?)RJ@pPl7&TN}JFg+o{?W`*P7J)&O^ z3C<}hSm@fuub3xk)Vg@8iHz+e0n1B#o`!SF-ejy;wDk0JgV=M-4wJc0m|LvABXct_ z{oMb#!uyxRtW;cfak_CP(}qsth=2vQ-iLNZ9`TV-moyT|2xVYwV&Sx@2v`uHRnVU&1fw^5=f6Jo-3!UAspY&qY&M0TbKt6=_(84CjBlqNBY z*Yg+%#7?;MWWoHfU#Xo3SYr4xFZamZ?ND}1Xe+!iIn>4Ssm;FFl?~H=mA-sBecs8? z8R^1vZ$1hta$ZIN5W8lcCZ8Pn#jPPVh gmK3ItLzC-SM0r$I&YCCZ{r5e3w{i031uTh-07N#@NB{r; diff --git a/xinha/plugins/InsertPicture/insert-picture.js b/xinha/plugins/InsertPicture/insert-picture.js index 2325a3f..02f6c12 100644 --- a/xinha/plugins/InsertPicture/insert-picture.js +++ b/xinha/plugins/InsertPicture/insert-picture.js @@ -1,93 +1,25 @@ -// Insert Image plugin for HTMLArea +// Insert Image plugin for Xinha // Original Author - Udo Schmal // // (c) www.Schaffrath-NeueMedien.de 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). -//Usage: -// if(typeof InsertPicture != 'undefined') -// { InsertPicture.PicturePath = [webpath to imagefolder]; -// InsertPicture.LocalPicturePath = [local server path to imagefolder]; -// } -// for Example: -// if(typeof InsertPicture != 'undefined') -// { InsertPicture.PicturePath = _editor_url + "plugins/insertPicture/demo_pictures/"; -// InsertPicture.LocalPicturePath = "d:\\inetpub\\wwwroot\\xinha\\trunk\\plugins\\insertPicture\\demo_pictures"; -// } - - function InsertPicture(editor) { -// nothing to do + if ( typeof _editor_picturePath !== "string" ) + _editor_picturePath = _editor_url + "plugins/InsertPicture/demo_pictures/"; + InsertPicture.Scripting = "php"; //else "asp" + editor.config.URIs.insert_image = '../plugins/InsertPicture/InsertPicture.' + InsertPicture.Scripting + '?picturepath=' + _editor_picturePath; } InsertPicture._pluginInfo = { - name : "InsertPicture", - version : "1.0.1", - developer : "Udo Schmal", - developer_url : "http://www.Schaffrath-NeueMedien.de/", - sponsor : "L.N.Schaffrath NeueMedien", - sponsor_url : "http://www.schaffrath-neuemedien.de/", - c_owner : "Udo Schmal", - license : "htmlArea" + name : "InsertPicture", + version : "1.0.2", + developer : "Udo Schmal", + developer_url : "http://www.Schaffrath-NeueMedien.de/", + sponsor : "L.N.Schaffrath NeueMedien", + sponsor_url : "http://www.schaffrath-neuemedien.de/", + c_owner : "Udo Schmal", + license : "htmlArea" }; -HTMLArea.prototype._insertImage = function(image) { - var editor = this; - var outparam = null; - if (typeof image == "undefined") { - image = this.getParentElement(); - if (image && !/^img$/i.test(image.tagName)) - image = null; - } - if (image) outparam = { - f_url : HTMLArea.is_ie ? image.src : image.getAttribute("src"), - f_alt : image.alt, - f_border : image.border, - f_align : image.align, - f_vert : image.vspace, - f_horiz : image.hspace, - f_width : image.width, - f_height : image.height - }; - - var manager = _editor_url + 'plugins/InsertPicture/InsertPicture.php' - + '?picturepath=' + InsertPicture.PicturePath; - - Dialog(manager, function(param) { - if (!param) { // user must have pressed Cancel - return false; - } - if (!image) { - var sel = editor._getSelection(); - var range = editor._createRange(sel); - editor._doc.execCommand("insertimage", false, param.f_url); - if (HTMLArea.is_ie) { - image = range.parentElement(); - // wonder if this works... - if (image.tagName.toLowerCase() != "img") { - image = image.previousSibling; - } - } else { - image = range.startContainer.previousSibling; - } - } else { - image.src = param.f_url; - } - - for (field in param) { - var value = param[field]; - switch (field) { - case "f_alt" : image.alt = value; break; - case "f_border" : image.border = parseInt(value || "0"); break; - case "f_align" : image.align = value; break; - case "f_vert" : image.vspace = parseInt(value || "0"); break; - case "f_horiz" : image.hspace = parseInt(value || "0"); break; - case "f_width" : image.width = parseInt(value || "0"); break; - case "f_height" : image.height = parseInt(value || "0"); break; - } - } - - - }, outparam); -}; \ No newline at end of file diff --git a/xinha/plugins/InsertPicture/lang/de.js b/xinha/plugins/InsertPicture/lang/de.js index 71cfdf3..83bc5e5 100644 --- a/xinha/plugins/InsertPicture/lang/de.js +++ b/xinha/plugins/InsertPicture/lang/de.js @@ -1,6 +1,6 @@ // LANG: "de", ENCODING: UTF-8 | ISO-8859-1 // Sponsored by http://www.schaffrath-neuemedien.de -// Author: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.deUdo Schmal (gocher), +// Author: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { "The file you are uploading doesn't have the correct extension.": "Die hochgeladene Datei ist im falschen Format.", "The file you are uploading already exists.": "Eine Datei mit diesem Namen existiert schon.", @@ -8,5 +8,8 @@ "Images on the Server:": "Bilder auf dem Server:", "Please select a file to upload.": "Wählen Sie eine Datei zum hochladen aus.", "Upload file": "Datei hochladen", - "Open file in new window": "Datei in neuen Fenster anzeigen" + "Open file in new window": "Datei in neuen Fenster anzeigen", + "Size": "Größe", + "Width:": "Breite", + "Height:": "Höhe" }; \ No newline at end of file diff --git a/xinha/plugins/InsertPicture/lang/ja.js b/xinha/plugins/InsertPicture/lang/ja.js new file mode 100644 index 0000000..4093743 --- /dev/null +++ b/xinha/plugins/InsertPicture/lang/ja.js @@ -0,0 +1,25 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Insert Image": "ç”»åƒã®æŒ¿å…¥", + "Image Preview:": "ç”»åƒãƒ—レビュー:", + "Image URL:": "ç”»åƒURL:", + "Preview": "表示", + "Alternate text:": "代替テキスト:", + "Layout": "レイアウト", + "Alignment:": "行æƒãˆ:", + "Border thickness:": "境界線ã®å¹…:", + "Spacing": "é–“éš”", + "Horizontal:": "æ°´å¹³:", + "Vertical:": "垂直:", + "The file you are uploading doesn't have the correct extension.": "ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰å¯¾è±¡ãƒ•ã‚¡ã‚¤ãƒ«ã«æ­£ã—ã„æ‹¡å¼µå­ãŒã‚りã¾ã›ã‚“。", + "The file you are uploading already exists.": "アップロード対象ファイルã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™ã€‚", + "The file you are uploading is to big. The max Filesize is": "アップロード対象ファイルã¯å¤§ãã™ãŽã¾ã™ã€‚ファイルサイズã®ä¸Šé™:", + "Images on the Server:": "サーãƒä¸Šã®ç”»åƒ:", + "Please select a file to upload.": "アップロードã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžã—ã¦ãã ã•ã„。", + "Upload file": "UPLOAD FILE", + "Open file in new window": "æ–°ã—ã„ウィンドウã§ãƒ•ァイルを開ã", + "Size": "サイズ", + "Width:": "å¹…:", + "Height:": "高ã•:" +}; \ No newline at end of file diff --git a/xinha/plugins/InsertPicture/lang/no.js b/xinha/plugins/InsertPicture/lang/nb.js similarity index 81% rename from xinha/plugins/InsertPicture/lang/no.js rename to xinha/plugins/InsertPicture/lang/nb.js index 75e4589..e4598aa 100644 --- a/xinha/plugins/InsertPicture/lang/no.js +++ b/xinha/plugins/InsertPicture/lang/nb.js @@ -1,5 +1,4 @@ -// LANG: "de", ENCODING: UTF-8 | ISO-8859-1 -// Sponsored by http://www.schaffrath-neuemedien.de +// LANG: "nb", ENCODING: UTF-8 | ISO-8859-1 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Insert Image": "Sett inn bilde", @@ -9,7 +8,7 @@ "Alternate text:": "Alternativ tekst", "Layout": "Oppsett", "Alignment:": "Plassering", - "Border thickness:": "Ramme tykkelse:", + "Border thickness:": "Rammetykkelse:", "Spacing": "Luft rundt bildet", "Horizontal:": "Horisontal:", "Vertical:": "Vertikal:", @@ -17,7 +16,7 @@ "The file you are uploading already exists.": "Bildet du prøver Ã¥ laste opp eksisterer allerede pÃ¥ serveren", "The file you are uploading is to big. The max Filesize is": "Bildet du laster opp er for stort, maks tillatt størrelse er", "Images on the Server:": "Bilder pÃ¥ serveren:", - "Please select a file to upload.": "Velg bilde for opplastning til server", + "Please select a file to upload.": "Velg bilde du skal laste opp", "Upload file": "Last opp bilde", "Open file in new window": "Ã…pne bilde i nytt vindu" }; \ No newline at end of file diff --git a/xinha/plugins/InsertPicture/lang/sv.js b/xinha/plugins/InsertPicture/lang/sv.js new file mode 100644 index 0000000..6218489 --- /dev/null +++ b/xinha/plugins/InsertPicture/lang/sv.js @@ -0,0 +1,35 @@ +// I18N constants +// LANG: "sv", ENCODING: UTF-8 +// Swedish version for rev. 477 (Mar 2006) by Thomas Loo + +{ + "Insert Image": "Infoga bild", + "Image Preview:": "Förhandsgranskning:", + "Image URL:": "Bildens URL:", + "Preview": "Förhandsgranska", + "Alternate text:": "Alternativ text:", + "Layout": "Layout", + "Alignment:": "Placering:", + "Border thickness:": "Ramtjocklek:", + "Spacing": "Marginal", + "Horizontal:": "Horisontell:", + "Vertical:": "Vertikal:", + "The file you are uploading doesn't have the correct extension.": "Uppladdat bild har en ogiltig filändelse, uppladdning avbruten", + "The file you are uploading already exists.": "En fil med detta namn finns redan", + "The file you are uploading is to big. The max Filesize is": "Filen är för stor, maximal filstorlek är", + "Images on the Server:": "Bilder pÃ¥ servern:", + "Please select a file to upload.": "Välj bild att ladda upp", + "Upload file": "Ladda upp bild", + "Size": "Storlek", + "Width:": "Bredd:", + "Height:": "Höjd:", + // tooltips + "Enter the image URL here":"Bildens sökväg (URL)", + "Preview the image in a new window": "Öppna bild i nytt fönster", + "For browsers that don't support images":"Beskrivande text för webläsare som inte stödjer inbäddade bilder", + "Positioning of this image": "Bildens positionering", + "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", + "Horizontal padding": "Horizontellt indrag pÃ¥ bild", + "Vertical padding": "Vertikalt indrag pÃ¥ bild" +}; diff --git a/xinha/plugins/Linker/dTree/api.html b/xinha/plugins/Linker/dTree/api.html index 3686a80..465861b 100644 --- a/xinha/plugins/Linker/dTree/api.html +++ b/xinha/plugins/Linker/dTree/api.html @@ -1,252 +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

    -
    Image URL: + title="Enter the image URL here" value=""/>
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    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";

    - -
    - - - -
    - - - - - - - - - - - + + + + + + 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/xinha/plugins/Linker/dTree/dtree.css b/xinha/plugins/Linker/dTree/dtree.css index e8e5448..44c14fd 100644 --- a/xinha/plugins/Linker/dTree/dtree.css +++ b/xinha/plugins/Linker/dTree/dtree.css @@ -14,7 +14,7 @@ border: 0px; vertical-align: middle; } -.dtree a { +.dtree a,.dtree a:visited { color: #333; text-decoration: none; } diff --git a/xinha/plugins/Linker/dTree/dtree.js b/xinha/plugins/Linker/dTree/dtree.js index 4b9d5ea..52932e2 100644 --- a/xinha/plugins/Linker/dTree/dtree.js +++ b/xinha/plugins/Linker/dTree/dtree.js @@ -1,722 +1,354 @@ -/*--------------------------------------------------| - -| 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 Node(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; - +function Node(id,_2,_3,_4,_5,_6,_7,_8,_9){ +this.id=id; +this.pid=_2; +this.name=_3; +this.url=_4; +this.title=_5; +this.target=_6; +this.icon=_7; +this.iconOpen=_8; +this._io=_9||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 Node(-1); - - this.selectedNode = null; - - this.selectedFound = false; - - this.completed = false; - +function dTree(_a,_b){ +this.config={target:null,folderLinks:true,useSelection:true,useCookies:true,useLines:true,useIcons:true,useStatusText:false,closeSameLevel:false,inOrder:false}; +this.icon={root:_b+"img/base.gif",folder:_b+"img/folder.gif",folderOpen:_b+"img/folderopen.gif",node:_b+"img/page.gif",empty:_b+"img/empty.gif",line:_b+"img/line.gif",join:_b+"img/join.gif",joinBottom:_b+"img/joinbottom.gif",plus:_b+"img/plus.gif",plusBottom:_b+"img/plusbottom.gif",minus:_b+"img/minus.gif",minusBottom:_b+"img/minusbottom.gif",nlPlus:_b+"img/nolines_plus.gif",nlMinus:_b+"img/nolines_minus.gif"}; +this.obj=_a; +this.aNodes=[]; +this.aIndent=[]; +this.root=new Node(-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 Node(id, pid, name, url, title, target, icon, iconOpen, open); - +dTree.prototype.add=function(id,_d,_e,_f,_10,_11,_12,_13,_14){ +this.aNodes[this.aNodes.length]=new Node(id,_d,_e,_f,_10,_11,_12,_13,_14); }; - - - -// Open/close all nodes - -dTree.prototype.openAll = function() { - - this.oAll(true); - +dTree.prototype.openAll=function(){ +this.oAll(true); }; - -dTree.prototype.closeAll = function() { - - this.oAll(false); - +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; - 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\n"; +if(document.getElementById){ +if(this.config.useCookies){ +this.selectedNode=this.getSelected(); } - - - -// Closes all children of a node - -dTree.prototype.closeAllChildren = function(node) { - - for (var n=0; n"+this.indent(_1a,_1b); +if(this.config.useIcons){ +if(!_1a.icon){ +_1a.icon=(this.root.id==_1a.pid)?this.icon.root:((_1a._hc)?this.icon.folder:this.icon.node); +} +if(!_1a.iconOpen){ +_1a.iconOpen=(_1a._hc)?this.icon.folderOpen:this.icon.node; +} +if(this.root.id==_1a.pid){ +_1a.icon=this.icon.root; +_1a.iconOpen=this.icon.root; +} +str+="\"\""; +} +if(_1a.url){ +str+=""; +} +} +str+=_1a.name; +if(_1a.url||((!this.config.folderLinks||!_1a.url)&&_1a._hc)){ +str+=""; +} +str+=""; +if(_1a._hc){ +str+="
    "; +str+=this.addNode(_1a); +str+="
    "; +} +this.aIndent.pop(); +return str; +}; +dTree.prototype.indent=function(_1d,_1e){ +var str=""; +if(this.root.id!=_1d.pid){ +for(var n=0;n"; +} +(_1d._ls)?this.aIndent.push(0):this.aIndent.push(1); +if(_1d._hc){ +str+="\"\""; +}else{ +str+="\"\""; +} +} +return str; +}; +dTree.prototype.setCS=function(_21){ +var _22; +for(var n=0;n - - - - - Destroydrop » Javascripts » Tree - - - - - - - - -

    Destroydrop » Javascripts » Tree

    - -

    Example

    - -
    - -

    open all | close all

    - - - -
    - -

    ©2002-2003 Geir Landrö

    - - - + + + + + + Destroydrop » Javascripts » Tree + + + + + + + + +

    Destroydrop » Javascripts » Tree

    + +

    Example

    + +
    + +

    open all | close all

    + + + +
    + +

    ©2002-2003 Geir Landrö

    + + + \ No newline at end of file diff --git a/xinha/plugins/Linker/dTree/img/base.gif b/xinha/plugins/Linker/dTree/img/base.gif index 9ac0b117b078b91521d56fce710e987ff5c5bdf5..5aa538c1df535085d5878aafa1d25938180736e8 100644 GIT binary patch literal 1018 zcmZ?wbhEHb6lM@&_|L%b|NsBrzyAFE@$1v4PhUQNb90;Nz3=~<*Y5)l{@=Ibc+dU+ znP>lJpZh=K>Ho%?|3AF{ymaZs-sZWJ`?qiT{6GB2|E25hrAGC2wQngbSUPd%h4dxQ z9zJ}(apj)nXI|X8_4M7lcTb)?@1Jpg?T7yd_MU(9=FR2Hm+#$s-QT|}FK_p{5C0!N ze01p7|J2l_^@qNlIDBFDq?M`RRngHiS1sDMWy{H=lmGAEdD6dN_&<;ufD zhpvYl{(ofuS&NPT8XLE+U3;i=#e>x7rXz>%6z=)rzy0UAbJzCmyL{*NT=luCg_wK%&zxnjqwZ}JZI5O+p z>oaFAU%7Jq^QUk3??1>*=`G5c+gQCgJE8r`m8UOXzMOmL&a@~0>#DY&I(fIXaYg0T z|H-HR#|4ze2bL|Hw`pSgf~<4@A3b_h(6WERu6yTBUitgy@6VsVvO90oUH`ve!TyRX z{};Uc|LyCK!-vl_l})*G`^lCqR}UY)c<1r)FAarCRcUzOwnZ|&n4vZ>E z91I2@6Av?p&W|YhsJM`=L8h5)0>{$FErQZa@R7~Ifx#L8)FZft literal 1040 zcmZ?wbhEHb6lM@&_|Cxa``4eJKYnGN{oix{|Gpi^v(Nqi@cwh-&Hpo={&#bm`Q`Js zPoF*o9{m62^?UDq|F>+p)7-rE-rbky&tEFf>RSKdfAj7CQ@R#^{`B?pr*BuTT+dDE zy?_6~nKPHyu01|~^XXaVUT@rR1DEw}!^c;Qy>ga0}4jnjLUg{^;g^6&oz3-;Gt|G(hn|B5UBvpa8`J9%Zo zu6sX!{`&jp@4b8X4#DZDeEG7mdT~+C+$&d}W+${yY+tZ!-lj*79%Y^TA0Jp&dG&v5ZB#qHVJ$txQc_dg#~x z6NfLTtXcavAAcOb{KfR? zC*9l@&6%+=z3qhcw*QMRJnp*pKW6IVki-8E9lCC@@!ygCXRlm&*uP-o{X0+geg3&_ z-5LMwKMVJK*|+cVxpUW!9KN%5?V-lTt*OyXohu&v|Noz16kvpa;!hSv28P89Iv^QP zo?zg3%izu_vV+-Q(b_X$4Fglcg2RD{MjRhMYEEERv6|76@uOf0i+8n5;;e~mXC|t# zFqOz0eRz1WeC)G;4TcAJ=PPQ*J~1?8ILN`GpC!?`C_#0ib8w!_ih>1RjBa8)Ygi_5 zPLOA0Wl3mc_B^s+>SC`G1qT#_nAv9)_+&6#6IK$_mC6-b+Tts?P5b|gnOm0iin%Ua zu;Ss3iznx@7YV6)ICQvNoErD)OXLAnj#(lLUc@j(XP#s-v{lKKWPaEy$)l}YGHKI8 y7Ii7DO&J!-Tb29uyB(&yOgM2$*irK!+X+EtwyD}Fj{c#aXe<^EZpUyXWqrzr*=O10*B?i_T)1Y98`pQ4mu_7_{i5}puAdC zf~Wi7jK&x5_`1uICRW@y%Q554hmtK!JpAe5Zp?=4&JJukOzuI9>=xP~BE4-BCMxEt iGdM7D&fsR{N(*7pS`sUk-fb$(%B!|ULPJQ9!5RQ3N?N@D literal 239 zcmZ?wbhEHb6lM@)*v!w6kdU}()6pN_e&4?Nf8N|Bjg4(5Po8@E1&*= z3X_f-D70P^T=#g&r!!ajIu#dOo|w|{B-2pQM1VUmsmkLNLt~o40S65phM4yO8a`Y- z>$Wp6Xb5DoFB5W6uRYjp8Q6>G>$WM!OD&NMIAMSHDSajvPBHn(~%gM_B+zWw_I8LR=$2V#u? diff --git a/xinha/plugins/Linker/dTree/img/copy.gif b/xinha/plugins/Linker/dTree/img/copy.gif index 35ef160536437cba82af58dc261b0c8b227fa46c..330771cc1cc294984f008614da67d2dad17f88a9 100644 GIT binary patch literal 641 zcmZ?wbhEHb6lM@+c$dcT|Nnmm28Q(X^#A|=XJutwy?XWi`}d`#rDx8ZIdtgID{|`Z{NQC^y$;jpFcNj*zoGrt7p%iZQi{3z<~oNPo6w@@ZgRe zJ5HQ9v3>jY(?(|zWngv!}sssKY#vw8O+Jw1JWeFFo72M->^#KhdYckllF`#wHCMn*>A;o*LM ze!qVG5)u;n@#Dwu-@m!Jxdj9S{`~nPDk`d>p`od%siUK#rl$7o+qbV@zkdAq@$TKb z%aA7>~E?BT&`t<2}d3h}@Ev>Ds3{(P&KUo;L z7#J9I7#SED1Q`Sv7})PMxalypv@%)RGjw(9D6sWU;5T;a?q-tJ(-h~8#&G{Nita_JRr@4edjLrR0}3v?+Cd-X94EpCz!1hm^8R!P5F%Eh5cj{ zeHDVaSeV4plf*S$lw$@_CMF>vp{Ay$p`oFvsi~u*qo=2* zudi=lU|?iqX>(;GXzkdCO4I4IY+_-u3 z=B-<|ZriqP`}XZScI?=-YuCPg`wkp9aPZ*4Lx&C>K79D-(WA$YA3t&8#L1HeXx4uHCqCC>mrpFe;7`t{qlZ{NRv|MBC;&!0bk{rdI$_wPS{{`{vZQ2ZzAT$GwvlA5AW zo>`Ki5R#Fq;O^-gz@Ye(g^`P)o&d67JjyF{+b#ZOv_Ca+|o z?PEe6KCpx)TvGO!B+I?-KtQAGQC@w6nj_T?i`!l0cn-N#D!Fk@Gm6}DC8U8aEe+$#_s!#!EB-{ZomK9eLy7O$NvUKStbcaw)T!rMiC}G zM)nC4CozgK$uY9boHd(Kn@N5Gd zMSgXq@QJAg2YNM*9XqzJMr>9F(~2^IHB}=2ujK##G5PiD*Z=>|`G33g|C9Rv?>o0` z+x8y>W-^ck6o0ZXGBD^d=zw&C{KUXE(P4UlhmKVLi6xgzC4402GB{W!L~2f9POOq~ zU`a4ovhaqB%+vz~Nx8dkFFrrvqSej!Kd!MF9@+A*p|PG#+gVIkwX>^RSE$vAT~}-J zl&QL${d#h`nsevP*X5qctE;hW`3hadnOwRm>o;uF<*#vKOczy ZVbwl)>NG2h3j?FtrOQ`>yuBP5tO0@?i&Ovr diff --git a/xinha/plugins/Linker/dTree/img/folderopen.gif b/xinha/plugins/Linker/dTree/img/folderopen.gif index c5c31102d525076f68a946b1c942687b3ce0da4c..074649b8b3d386a1f0d3d27dfd639596c45443bf 100644 GIT binary patch literal 365 zcmZ?wbhEHb6k-r!xXS` z{`c?SON)8W%rrT8@ZggtPfkuVJUzpBRtD38JdSxeY}>bQ|NnpKoGg}KzyJKd-mF?EoB}F{PjvZT5C9=4X`@~d(lM56dZFb&JC$Xr2>rlVe@>2c}PpXd1k~+UgZEu(A z=0@r7A3A5IGd?;Pux#0~|F2uNx5#g8lD)M*=lTu@kP~rZ#h)yUAXyy-24)5U20jJ` zwl0T;3lAr_IB~ZX>?{$PH?xOxQ3}(X#++>%ZkLPlLC8BrGQ2KK4briv>mOR(@XFmf(j#3^p7CCtJw vnTuoXy0sdbdSVRoc(-qtRTUAH5H{d<65wY!dh9sAfHybW*>mST9T}_vdq6oUN3z&7>3 ztO5@mss0m7f-EEygfto)EEhyd@^~j!tvR(XKI+JllL;CPicM^J(Q8*-F>q|Y`M%=j z62+dM{~PKQW!3d-jdOF2Weio>+e{5RD$0%I4VAejFig^&H-8?Vk|_5Crb$NHt5$3C zNei(}Fr8zpvu*n}0e-m}r{#`k4+yDLl&)9V0!Oz#0 zT_-QS_{NdWFOqDdGWTozu7f>u*CgjRRBgQ(zxkEG^gWCPR~bvJyk?%6fAN#1^Awg? zzp2+ZL>~Rw_h6gI!bN6b+xj2;ci#M;CF9J8FW=OrKW>`5c=w45hfZE(%wlv(ILc_Z zSZUe+g#G^~tlS|Gux<0p^)ZM21Z)=v#}=Hs_hQP4mps-B8V|g>c=fhxP=0CG9L9Ra z$qUy%dH0nuaGPP$0mkTqaV6c1GyXC5e%X2ZW6X?01+{&Q!8;N*y^LP-sQcauUANBM zgFCzK?k>9$ZW4c}X8$YKnfLF1`X!&1bmqrh!TE)=&%6_IYYRWv%$Ryga?$_Dqq~ee zDkiPj#hAeq-MPvxxuN-?^A~y~@4tNOerdf~IPxXyl7(K1alc$4+E<&4w*y#M%_Ywo`XkDu|_P5SoZ7pLWX&9u&=w_h{* zY-BZ`!slr)Vyu14Xt$*9>;*>KMT};%51qKcn0&(6yDqb&HKnNG z^OtY2{p(puZ%U>c`9$Pv`gStru`#-@V4eMc=dtrv6&v2Y|JZ)=J!6i5O5N4y)UvkY zkF{0=@Xon#=>BK-wco@#j|s%)F;-_cp7_mJr>)*~meG8U|K>&J>ABu1^B8m0%crf; zj%=*GP-hz4$JD%W!NpHTkrQvf{ju!M|F)YItKOZ>UA;$s#!UJ2Z7Q9yUi(y4eKs;? z?fL!h4`b3n#{Nl#8=e#$`qg~+I%8Qy;jUMVtqx0{EMWAQwBy;)-1ByfJ&9q5A4VP3 zWuP%o{K>)yvO)($2rvjRFmU{5VC0bT2j5Lq`-A>xdvu!%rO=xl*R-Znkv_Q+e0 z7M?WY6P43p5IElIU>d=uxsZwXn0Z7|nriY9_XX?H?ric5Y*=%+oiTsLPb*dh=B42W zZpjo2DKRX}OZCvTVoaFDntCj0#z(OO7X)&|gM2nJE1cqpW?yy2P?aU9Np`Q-QhVB1T51<&4d*Y_|Vrv|Utp_5!2b62{~chfZ8zG@H#> z`?Se#Y&?4VwPsr9gU8RTw=LHU-c->tjce||_a8qqPW$uj{YO=w zjb8gyRXSrClMep=_lGfSk9_*Jwwo2p?)<;~_J{n8nYpX?ta^8rv42wTdAl9Yjxu^o ziaM$rcK9J0s9FJd&G zquzCvF<0F?WuAF@E@R^hr-Y-7S&WBHUQF2kUuoHYM!UtkPh4QhIODwefB%F3O_LX^ zO@I91%eM(DcU-)ByYav)9_s~+^^B!mb6kV+r<`~hbJ%b5%k=^Q+s@s45gc0}V7pjl z?pKjy8;*4T4aUd$3K@c?x5}Re|Yy;y1sVfAN#o%rlH7R(8of(VeRpGniZwj@^0vwR6sz zNo#g7rk)Bv*evAMX5>*3d32ZLqW{lcyq>Xg`@!cwJwl864n9@OIKbGb)i!elV;f`O z!C=N3r*$_z$7fYH99bAM+|z;K^I2V@T@PcU%&XV}jvX=ovC1TSwre-6ySsZ&m z9!X_BD5|@pB4F~9OASI{Olw{_D6t%LF57b;Yr|3TnF<^eY`cOTB@QM>u;^5OQ$8Rr zYWQJJqp|i)2d`=uj*Q|2CKWYSksUu&x&&JqBi~sFFUk<$iR6>|IK%jm0J{`(_tmbF zLx=S8G$I@~FVuBzVX5)Dv`Fv z@()j{mMvShxRCqr)q>@v{5y8-TT;aH|9VS*chmpZE$0`hZElqQ{-N{HX6NR*qOR83 z8B_aj?ax_Mz;$M($>a&0b7oE3P$zM6n&G2^0Z;F@%uHuoTq<>Pf#T^I#vtzvZmjr| zg%RXJ9R>zQ1_1^E1_t(h4Gav1lF~{NDzc6?4%|)sl1!5(PcjkfZ<1!>=a-S0!(=To zgF%T&lx-!OD3dnx40{PCHf25mWi}=&cXOvcPnFGld_qDy6*c&@raQ}S77!59JnqV3 zAi{X_*6o`vrh3ebJSNL+kmbqx=n#~h7`M>&-jbC})O5!l8rAa64z!_e_UD<^Z%su;_MhZeK4CY_qI KQ^84r!5RR}VaRF# literal 622 zcmZ?wbhEHb6k-r!c*el+{{8!<#k_3u{{L^wI(YEl_U+q$|Ni~|@MghDua+)ZG%JH? z-TL((7IrU~Kj+DlCo5O3lwA7%*s)`qHgDa!eb@j0OBdvEG*;)$$zqw8!`56^^k}p5 z_Ya-7_UFu)+TYb$+uz;v|9Z=kBA(5S(&rbc{eRsuGoA72{gy`u15VE{KDj_~ajDeg z37uzVnk*{dIyud7L!HE&S<`mx+V>;JX-$>L)2C0b?{GLaORBB0{O{F*<)!?K3%Nf$ zsam#d+5aDt|39h!f4lVm`_9*|U#E2~`~QE=wr$&f|N3)mmgIjBn8`2{fZ|UUMg|5? z1|5)NL2<&se!9W4skx=K)lgW7o1c@{KvtWf%~RNQ+VpAif|G?@nV2{@=DW(VPUdzM za9Zso;A-yDro->*#N*D+IV1gO z@j_>Lk*uD81ih2?D)vTMXLcNRa$tCI39M1!eiVTiL RukLUjIIv`XD-$DwH2~IF)06-J diff --git a/xinha/plugins/Linker/dTree/img/join.gif b/xinha/plugins/Linker/dTree/img/join.gif index 34dd47610a5d7c3580dedc342683559bf77abce2..e5e2f6a490d8a91f8931325db97d42035a9556f3 100644 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!=wM{{|NnnOLxbW^7DfgJ1_m8=1_lOh20;b}CQ+WgmD#WF&9f=A SYj#|B!S9`Ff`>0FgEasfD-tjO literal 69 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=Q1_lO@35-S=4;tO0GP9vuJx diff --git a/xinha/plugins/Linker/dTree/img/minusbottom.gif b/xinha/plugins/Linker/dTree/img/minusbottom.gif index dc3198be275d3da71011a6cb4fa59b8b94656c8d..1380d72cf39f1a72c3c1c10b9b570b79aaae1be3 100644 GIT binary patch literal 76 zcmZ?wbhEHb6k-r!n90QO|NsAnh6V;OQ2fcl2x90kGcYjlGw?DnFv+$EE z!-fs7UcGwz_U)lVhb~>Z^zh-sQ>RX?TeoiW=FKNgoVar3%7qITZrr$W`}XZKXU@!= zIrGt@N3UPM{{H>@%a<>A?AY<)!-vnGKOa1J@W6ospFVwh^5n_!C;D#9zA*TckkZ4fB*iUKYxDy{CV%*y~BqOw<;@lC@cH;_!t-%q)AB`85#Nc z`JFT|xoBpVnwlCO9=_ASASNb8k%L1(KtNPfl$V)Vn3a{An_EmwOh-pYPghq@Pftxv zO+!ONQ&V&K^5rX6u3WWh)#AmAmn>PbY}vBat5&OZM$~uIz4~>`t|EKZrqrc zmv_g*qot+glDT@6*1%&SLNk=n{O{AVB~S(5d%vzD^JW7hJ_0n zCJO4@IFUKAm5qnbF-(UcNx_AYfq4aohS7p928&Xwnw1HM54HApvFxaHa%pI=wvco9 v@WF}Qhrz7*)}D!r9Q#E1>h!vl5;&!}ITk6cSnx!YLCu3Lb{o literal 688 zcmZ?wbhEHb6lM@+I9A5Mz`(%E%q+~x%FWHK$iX2XARsC#DkdhTrlzK$p`od%siUK# zr>m={r)OYbkR~N%WMtH;tlXij?BnC(=jRt59=_ASASNazHa7O8iOEGXv((hoOXlWj zX=&-{>6_i%Z(CYsWo6~%<=ye{C@n2*X=!O~ZJpfGGIQq4S+iz6udKY<(lU4M+yx63 zEMB~L$&w|@mMvSpeEG_iD_5;rwR-jH)AQ%ATeoig`t=(&Y}mMQTOXx^?UJ?b~_wix)3mzI^%W)vF&*p1gkj`t94d@7}%p@%r`q_wPS^ z`0(xByHB4!eg6FU>({T}zJ2@t{rk_KKY#uD_51hlKY#xG#|sqyi8>dhCYGe8D3oWG zWGIAWq$;?3`UWs4{$yd~VyI`(0YwogvKZLEG}JdWx3so$NXT_{%ZW0#HAy6AO_`bz z%{HN4&Q(*x!AH-}B!YdGT$pQ&cSx+cnHlSHN8J!(XH{{P-FsA&1e)Z03~fC1In&Ed zoh~buJ{aQ{9O=)OW?^8PZJ%rzr+CmxO~*llD=#27Jiah5zU;y5AX_ItYwi@QBq!h8 z6u%EFr583mIXP8@_uP*Ijcn`_&Fy9!nJw_-M2D!C#1zKMu6`0GrB~K;erI=J5D;SE zVEFj3MN-o3flH=SkN^jtm{J47!lvE{>V*?RR{l(1esON*o(T(upYdFDWN}DYA?Vr_ Zs_CYY@oVuz#)kC?`}1VI%d!<1tN~oHWLf|K diff --git a/xinha/plugins/Linker/dTree/img/musicfolder.gif b/xinha/plugins/Linker/dTree/img/musicfolder.gif index f620789feb3c4b1222909d255f51aeaa81faefb6..5761a406f0cd3f84428e0c2e2387ff352ab78709 100644 GIT binary patch literal 626 zcmZ?wbhEHb6k-r!c<0H$z`(F=+qPq~B>(@P^Z)PUtrTXDX)sZ7d<`s&) zxP9xyRD=KTJOBOrSDKsi=wQI203i?FbwoDP=&r#?Tw zWwS8b3RzieQF(VGPR*v}%q%R-%xvo7E*|_^TnvhA%#z1;FmtZ3v$AK9W8=9bAtoj- zc8S?ZhUxBIc2{;GA$BGMHw#9l?aZp&kJ!1njbAIh+RpRt3HwLS*UF3{YqA$EbmZre z5Hq=u(8SQmAaIShLttU!Q8tlEkQ*Bum^hrecsdWc@$xY!Sw-yp8q=`<>xo+u1K?DiJW3#)C#D)aIvB91 zfNOew_W$>t|Ni|e&CM||NI81&?f=`QuV26Z|9{T0S(4kfZTk-bGZ}^gQ2fcl$iU#q zpaXI&C{7sIuQhl!HMg)hmVUg|Ta9<%L zB*!hNW#eGnvfRbP!^OqjoL^Um#e}(8(%psk*bWzm73wnj%>wQWm-x821i3D`7>P8w z-n-|h>B!0H=xU{*=yrFzi#XF`MLGYlFIxARNO@hDtWaBUIiPTOMfV7_}lvsu=hh(Z;&NfL@qDJM29Jw4q( Jn2m+O8UP#&8=e3F diff --git a/xinha/plugins/Linker/dTree/img/nolines_plus.gif b/xinha/plugins/Linker/dTree/img/nolines_plus.gif index f258ce211a0a19c2ecbcb11170b9a8b35ae2436c..3e28a7a9c18482882500f74000f251aee382b8b3 100644 GIT binary patch literal 67 zcmZ?wbhEHb6k-r!n90n*z`)SZ&;X(s7!-f9FoIY*%nU3HoD7@{3``LGYlFIxARNO@hAj7*xx83m?l#Y_`t1M-o}8Rq zRaLcf=g#!>^obKEzAI09n;-k4u4wMuxt}VNX3v=Zu%_%qg!B7Qn>7VlufrW5gt)#A zG>v=G{Ns(tjp7^@XpT8t5>i7II;iBspH=dY(H`0 z#Oc$gf9~7zo;!PxMt0o1q&7| zS+ZosiWPhJ?mc?+==*IOe=M20Y15|7n>TOWy0xaJ=BzZ=Q3atBN+PEu`8LUkdwF@K zI#_4;cpTMLii(OlsjGNiL+rW=N3Ne|czF0GIWbL5O#=f16B83vRaI_oZYe1#br~sB z6B9Q#w{0?lo}QkruC5jq77kXH4h{}6QBgHHSvOtn3JVKwyI8-oQz|GZcI~<-HJ#H(ok#T~*3TOCR}I6y)b+BqyD>)R_|O{m5A8l#bdZZMmyPN*Aq7XT^lw zbhOUT&)*#Ay)f7STrX%&b6!i@yDYviAhGESt)AgC)YEwCRIuYRwybl ui!#b=&N#S9^}-xMt(+|kNs66}U3q3P9?VQlvXdF^Iaq#L(s`hP!5RSmITNe^ literal 1012 zcmZ?wbhEHb6lM@+c;3vw&CM+(C8aJSrK+l`si|pTU|?cmVrpVyVPWB5W$EDH;Ogq? z=H|9dM$psKbCaCdCOL60FRxSw>r;|^XQjE0DhQoW63OuKxURyH>*pCB9v%@9ab830 zsIF2}RMbgb#h9q5Q#xvwwB@cEDJ3T-KQb1|NKQI$sWTI7O-|NLSG&T(!uIU6x2`IsrKM%1rH_0p z-gxQE&P=`?Y*|%RbuYxCrl#g~pxJ{E*Bjx%Ps3c_huXY|aDE-`xTYZMWwh(NSeK^> zex042PqV^5Wdu&@>;04&IAOwsi4!Nj&5xZvefqodq}em3KddSHRGIXmu4wMuxeFF7 zSh8fv^5x4{tXQ#T&6=+h>esGayKddO_3PJf*sx*a#*LdcZQ8tf^VY3fckbNzW69LL zd-onadi4FajX$=oJaOX0>C>mro;~|>-|)iE9U^h{2Q_ zi5I%WbrO~t94t&Z-Jubg6{4V_=G({X^ zmg6z`Ea=d{$Q1UYqNu$`*4#^h=SiV~$3zw5B{7y0KiwDL6SFJH@ZG)bZ6hNigEauv Cf|k<& diff --git a/xinha/plugins/Linker/dTree/img/page.gif b/xinha/plugins/Linker/dTree/img/page.gif index 42d7318c5d928a2033cb42c72598a131ea6de64d..7c1cea690f593a90e765598c550a4956d1d21da4 100644 GIT binary patch literal 556 zcmZ?wbhEHb6k-r!c*g(&x8MFRtyui^T7A(rIT2oZB?)LNVQ}%y4cI?={fBy~~_+Qn$Ve+a=T`O+3 z%szGV;oH#VZyTo`{`vFgmoH!A5+|H{{y)29>64HDbIVuUc=~PE-T(D{d)gOXO3j*e z_Syg9x($=|yq~z^)r7^TzkmP!_1AxpH-;uw{K>)ya=8uz0}}%e13v=;duM|RcXJCj z4jH@9MA`ttRgp`e%`$DhA{e)7wRNO%+|EOKD51^}gx!M^|i literal 582 zcmZ?wbhEHb6k-r!c*el+`}gnn@8AFU{r~N^{|65qeDdVU-@kuvy#9aS{{Mgf|9}4Z z|M0{AU%q_(`SWMv)Wg{&OV2(3AD1{GbotxKt1eYFZ#Zz^|ILSQTV|i?T5|Ba{La?4kwX3c6}c&WZ`PygnpJ?rkDyZry# zum9<}^Zxw(U)#BD%KlHsjvf2=@89j`-!lsqyPfCRruZjrwgG3z?XhZEQ3} zWh~nybaw2tvA1V8+25+F#kJGU?zp+}sTT2bHW!YWD=1%W=G%44-rT~1|9+F&&5KW- zaT~pK)RlZ|{*;?T`;*8wfoB{}6DC|=yx?H7AcusOLqhxEc0NuK0~UpbzHSNqGN&UK I0~8pn0iK=J?*IS* diff --git a/xinha/plugins/Linker/dTree/img/plus.gif b/xinha/plugins/Linker/dTree/img/plus.gif index b2c997233b3f7b0fd56c4637c2c20aaf0d47bae7..f6c9a119373aa4bdfe324de3ce2ada9f71748d85 100644 GIT binary patch literal 86 zcmZ?wbhEHb6k-r!n90QO|NsAnh6V;OQ2fcl2x90kGcYjlGYB#;FsZi)EN00D<}v0StW;aIs8c?@XI1c|o29;1d%y2lug$<<4FG9D9r6GG diff --git a/xinha/plugins/Linker/dTree/img/plusbottom.gif b/xinha/plugins/Linker/dTree/img/plusbottom.gif index b5671d891a9e57ac2fd5551187b44684e45b48e6..c56ad936879a0c9f5193e5c897fb9d4cb684c7bf 100644 GIT binary patch literal 82 zcmZ?wbhEHb6k-r!n90QO|NsAnh6V;OQ2fcl2x90kGcYjlGw?DnFe$ePEN00D<}v0StW;aIs8c?@XI1c|o292><{9 diff --git a/xinha/plugins/Linker/dTree/img/question.gif b/xinha/plugins/Linker/dTree/img/question.gif index dd4e685078f221b1684ff7f050124a8bf663dda0..5536f004feb313702dd6cfea7414b07317ee76b8 100644 GIT binary patch literal 1034 zcmZ?wbhEHb6k-r!_`j5afq~)w|Np=K|3Ccv|Kl(J|NZ~}^Z);AZ~k9;^Z&>H|FPNa z*&WNTKL2s_@t;Tk|4-d?zGM3OEvFv&?f-lH9oE_{;w>1rs)IJ96#* z%g_J+Gcs13dip;$yYt?|7k5AWPb-@e+k02jZPuN4|MwohFl*_q^;?fVd-u)UHDlfW z^WT5`Jpb;$cSaAtX6XCR-}1^Q9>4u!=C(`z5q<5ePKg=B2NWJinfmhf{bvWRzuEuf z@5y_gwqN_*A09JFdQ6aq9W`SO0H*`hW7=^+h{QUwr?ckumN4 z-~Xa|G4KBUKX~xWqvvnl{{R2=%cnE1|G$6x)~|B)tgWZcJ^vq{)pqjv|IfewKY#O) zUB7?xwXa`({C@r8|JAqueN(&c-haC4;I(@Xo}D^(ul_SK7My?apOGWNs^w8~^WFb~ z`RAVg`v2$u|N9T0Pg#HV*0cBP_Fme%?_|^D%{g6bQ`^^H|M36*m;azBAH}c`Q2fcl z2x99nFfcL*FbFU(a6D&VHuqZ(7pNfKm)A?l_#a<6Gi(R_al_Tp!7#tZV zFOzNjB%$=cJ+Q$-MnbiKnZg;BJw@jY3%g25SI}BgP;A literal 1044 zcmZ?wbhEHb6k-r!_`a0k@t6Pq{{O%B=Ks(C|9|}df9cKt!_WW!`u~5`!E1N#KRtEs z#=Qs6d{eu={P?~3+SjXZ|G)n6|LM~w8?SwN{p~6(%)5X8-~Rvq==mE_y_k#d|1a8c`u*SkjEretzkE9R{C|8_+w(UcKmY!J z?)m@sZ{MDI{eRZhQ+}1J@4f$DF#p`mcmMzV|Nr#Ye=U!agE!u7zVmaC{=fh5 zd20LmoUXO^zx==c;eXTQ&9|PtpR)e!-hC(6?Y%U6@2%9%wMV}H|M>s^gZF=HmffGS z?fT+%hfcr!UtB-qhm9OzWu*;|K-MQM;I9^KL7t8Q!ruu zsVCQ7|3Cine{$oNyz+@Fwx4o!N@ip%egEtK<{d|uo%s3T|Nm#7{>$6-SVS&4|LXsW zQ_oMHyMFW2{~cG~PTq0j;_LqxfBa7?=t`OTGNAClf$MK>-+v}%5I=Lw68kl zAJMn}$=}0gZd`cz|NWQmN1lFHvF+J@?Z?S`pH5u4@02p-|Ns9CqX0Do6o0ZXGB7M< z&;bd9@&p6NM+R?B8IKJM4jM@un-Fy);j(x$Q{a?{6)(=uY-M~Q@n=Jl;!2-@brmYA zEemFHEa6+?VYz}?ldDl|m88b1%MF&yvwkovZed{16;9a_s9@mD#?k8b$H3)LFoS+o z(ix7UE(=WF8`l=^6%#R|JUC9ueeO{ z@87?#UcLJH^XKp1zXNv$UcP+!;lqcE7A-0*Eq(O$|D3gJH$VE>)zvj`-n_1vGmE#q zDc<(s^XJcpUj5JC`hMoo7fUa^J^beU_uv1%fB)Wd`0M_ce>)HVJoxO-otJMPKYo1q z`~SK#jk|a6-t+v=rAwC%zy0&+)2GHWjs3@d-}?D}`Nc2Wp8P5-EPV3h$&pw0Z~Xed z;`;ykj*k2P|8IHlf7A6J1qB5!e!gG7ckjJ>_m-afaqG|j;^N{{r%vsC^8fLN-?gV3 z%Uk-6J^%my{rlU`J}lh0aly57yC2_Qx^(HQKmT{!`Bz$7yZFlgsZ*z3e1C7@!i5(u zT{?gM{I_r44&C~2^yS|hH*RdW`+w`R{ii?ueemPoo?D+LPMp}X|I4+{|Fd&*U%q_V zwEz3swQH+(eO`C;=!Oj&E?&I&<;$1bfB&bar>|eXe($sYZ$5mOdH(0k-~Ts1{(0v4 z{{y#gfBg9I_Rn8W{{LTl;?jo?ANKCud-(PL2M-=pS69Dy@#4^%^L2Z^PCfN+!ik?f zm-^3r`M>As|Mt17Hr)F+dCi`NhK7r;{%+Z_W$KBaE&ct4#|m2x{s6__D5f9;6o0ZX zg0$-}FfcOkGYBv+aJ*z-Cc}(fB*g+xHGV6|M!efEF-`t=(&Y*=^n=$9{FE?&HN;nJmr3m1O-_U-)n^NX+iFRiV;`2OD1 zsZ&pX`n&bn{yn!oJ^1nO=*z!{ZhhEr_y3I>H{N{su;=Ojb6@^%xc9Gp?y9M${?+aI z+HdsK-;Wzxnac>gwtT4;~zPbN^6j4IfBKL8zV-9{@{3;@&oo}Tbm{QhKc7B*+W+!z@wPX`+dh2${JCr9%*~H} zc6D{ln>X*!tN-7B|NH*^d(Yvohu@sf-}-*$(HBcEysbUmSl-fi?D_x4AAT1X7oR$H zYVVW(@87>)x^(HQKmT{!`M3M={oBtzEZn$p!L@U@{`|l3>;H=D|LZ$Cj=Z|R?a8mg z!onv{p4|WcfBoLQ_wL21Z%2h7~!(ph3WGLsf8mN6?%@ z@|h*%q;0L znhHw~&thtJSkRH;sPD+3EXJ61p~1b)T4Ie#SHgr2PJS+rH-b&eJ0-8ME52Cxfu&L6 Mk-%nW9u5X;0L=`#*Z=?k diff --git a/xinha/plugins/Linker/dialog.html b/xinha/plugins/Linker/dialog.html index 9ca7d25..0e7dc83 100644 --- a/xinha/plugins/Linker/dialog.html +++ b/xinha/plugins/Linker/dialog.html @@ -1,107 +1,107 @@ -

    Insert/Modify Link

    -
    -
    (the dTree goes in here)
    -
    -
    - - - - - - - - - - -
    Target: -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Size:x (px)
    Name:
    Menu Bar:Toolbar:
    Location Bar:Status Bar:
    Scrollbars:Resizeable:
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - - -
    -
    - -
    - - - - - - -
    - -
    -
    - -
    - - - -
    -
    +

    Insert/Modify Link

    +
    +
    (the dTree goes in here)
    +
    +
    + + + + + + + + + + +
    Target: +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Size:x (px)
    Name:
    Menu Bar:Toolbar:
    Location Bar:Status Bar:
    Scrollbars:Resizeable:
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + +
    +
    + +
    + + + + + + +
    + +
    +
    + +
    + + + +
    +
    \ No newline at end of file diff --git a/xinha/plugins/Linker/lang/de.js b/xinha/plugins/Linker/lang/de.js index 427afb4..7d0619b 100644 --- a/xinha/plugins/Linker/lang/de.js +++ b/xinha/plugins/Linker/lang/de.js @@ -4,8 +4,7 @@ { "You must select some text before making a new link.": "Sie müssen einen Text markieren um einen Link zu erstellen", "Are you sure you wish to remove this link?": "Wollen Sie diesen Link wirklich entfernen?", - "REMOVE LINK": "LINK ENTFERNEN", - "CANCEL": "ABBRECHEN", + "Remove Link": "Link entfernen", "URL Link": "URL Adresse", "Ordinary Link": "Standard Link", "Same Window (jump out of frames)": "Selbes Fenster (ganzer Bereich)", diff --git a/xinha/plugins/Linker/lang/fr.js b/xinha/plugins/Linker/lang/fr.js index c6db013..6493e86 100644 --- a/xinha/plugins/Linker/lang/fr.js +++ b/xinha/plugins/Linker/lang/fr.js @@ -3,8 +3,7 @@ { "You must select some text before making a new link.": "Vous devez sélectionner un texte avant de créer un nouveau lien", "Are you sure you wish to remove this link?": "Confirmez-vous la suppression de ce lien ?", - "REMOVE LINK": "Supprimer", - "CANCEL": "Annuler", + "Remove Link": "Supprimer", "URL Link": "Lien URL", "Ordinary Link": "Lien standard", "Same Window (jump out of frames)": "Même fenêtre (sort des frames)", diff --git a/xinha/plugins/Linker/lang/ja.js b/xinha/plugins/Linker/lang/ja.js new file mode 100644 index 0000000..931d04e --- /dev/null +++ b/xinha/plugins/Linker/lang/ja.js @@ -0,0 +1,24 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "You must select some text before making a new link.": "リンクを作æˆã™ã‚‹ã«ã¯ãƒ†ã‚­ã‚¹ãƒˆã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™", + "Are you sure you wish to remove this link?": "本当ã«ã“ã®ãƒªãƒ³ã‚¯ã‚’削除ã—ã¾ã™ã‹?", + "Remove Link": "リンク削除", + "URL Link": "URLリンク", + "Ordinary Link": "標準リンク", + "Same Window (jump out of frames)": "åŒä¸€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ (フレーム最上ä½)", + "New Window": "æ–°ã—ã„ウィンドウ", + "Popup Window": "ãƒãƒƒãƒ—アップウィンドウ", + "Email Link": "Eメールリンク", + "Email Address:": "アドレス:", + "Subject:": "ä»¶å:", + "Message Template:": "本文雛形:", + "Size:": "サイズ:", + "Name:": "åå‰:", + "Menu Bar:": "メニュー", + "Toolbar:": "ツールãƒãƒ¼", + "Location Bar:": "アドレスãƒãƒ¼", + "Status Bar:": "ステータスãƒãƒ¼", + "Scrollbars:": "スクロール", + "Resizeable:": "リサイズ" +}; \ No newline at end of file diff --git a/xinha/plugins/Linker/lang/no.js b/xinha/plugins/Linker/lang/nb.js similarity index 90% rename from xinha/plugins/Linker/lang/no.js rename to xinha/plugins/Linker/lang/nb.js index f7888b7..0b5ba68 100644 --- a/xinha/plugins/Linker/lang/no.js +++ b/xinha/plugins/Linker/lang/nb.js @@ -1,5 +1,5 @@ // I18N constants -// LANG: "no", ENCODING: UTF-8 +// LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "You must select some text before making a new link.": "Du mÃ¥ markere tekst eller et bilde før du kan lage en lenke.", diff --git a/xinha/plugins/Linker/lang/pl.js b/xinha/plugins/Linker/lang/pl.js index e7c6da8..9e875b0 100644 --- a/xinha/plugins/Linker/lang/pl.js +++ b/xinha/plugins/Linker/lang/pl.js @@ -4,8 +4,7 @@ { "You must select some text before making a new link.": "Zaznacz tekst przed dodaniem odnoÅ›nika.", "Are you sure you wish to remove this link?": "Na pewno chcesz usunąć odnoÅ›nik?", - "REMOVE LINK": "USUŃ ODNOÅšNIK", - "CANCEL": "ANULUJ", + "Remove Link": "USUŃ ODNOÅšNIK", "URL Link": "Adres URL", "Ordinary Link": "ZwykÅ‚y odnoÅ›nik", "Same Window (jump out of frames)": "To samo okno (wyskocz z ramek)", diff --git a/xinha/plugins/Linker/linker.js b/xinha/plugins/Linker/linker.js index 1f52208..641d3e0 100644 --- a/xinha/plugins/Linker/linker.js +++ b/xinha/plugins/Linker/linker.js @@ -1,551 +1,385 @@ -/** 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/" +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":_editor_url+"plugins/Linker/scan.php","backend_data":null,"files":null}; +function Linker(_1,_2){ +this.editor=_1; +this.lConfig=_1.config.Linker; +var _3=this; +if(_1.config.btnList.createlink){ +_1.config.btnList.createlink[3]=function(e,_5,_6){ +_3._createLink(_3._getSelectedAnchor()); }; - -HTMLArea.loadStyle('dTree/dtree.css', 'Linker'); - -HTMLArea.Config.prototype.Linker = -{ - 'backend' : _editor_url + 'plugins/Linker/scan.php', - 'files' : null -}; - - -function Linker(editor, args) -{ - this.editor = editor; - this.lConfig = editor.config.Linker; - - var linker = this; - if(editor.config.btnList.createlink) - { - editor.config.btnList.createlink[3] - = function(e, objname, obj) { linker._createLink(linker._getSelectedAnchor()); }; - } - else - { - editor.config.registerButton( - 'createlink', 'Insert/Modify Hyperlink', [_editor_url + "images/ed_buttons_main.gif",6,1], false, - function(e, objname, obj) { linker._createLink(linker._getSelectedAnchor()); } - ); - } - - // See if we can find 'createlink' - editor.config.addToolbarElement("createlink", "createlink", 0); +}else{ +_1.config.registerButton("createlink","Insert/Modify Hyperlink",[_editor_url+"images/ed_buttons_main.gif",6,1],false,function(e,_8,_9){ +_3._createLink(_3._getSelectedAnchor()); +}); } - -Linker.prototype._lc = function(string) -{ - return HTMLArea._lc(string, 'Linker'); +_1.config.addToolbarElement("createlink","createlink",0); +} +Linker.prototype._lc=function(_a){ +return Xinha._lc(_a,"Linker"); }; - -Linker.prototype._createLink = function(a) -{ - 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/', - 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: '' - }; - - if(a && a.tagName.toLowerCase() == 'a') - { - var m = a.href.match(/^mailto:(.*@[^?&]*)(\?(.*))?$/); - var anchor = a.href.match(/^#(.*)$/); - if(m) - { - // Mailto - inputs.type = 'mailto'; - inputs.to = m[1]; - if(m[3]) - { - var args = m[3].split('&'); - for(var x = 0; x]*)(\?[^<]*)?$/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 = HTMLArea.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 a = anchors[i]; - if(a.href == tmp) - { - // Found one. - for(var i in atr) - { - a.setAttribute(i, atr[i]); - } - } - } - } - }; - - this._dialog.show(inputs, doOK); - +Linker.prototype._createLink=function(a){ +if(!a&&this.editor.selectionEmpty(this.editor.getSelection())){ +alert(this._lc("You must select some text before making a new link.")); +return false; +} +var _c={type:"url",href:"http://www.example.com/",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 _d=this.editor.fixRelativeLinks(a.getAttribute("href")); +var m=_d.match(/^mailto:(.*@[^?&]*)(\?(.*))?$/); +var _f=_d.match(/^#(.*)$/); +if(m){ +_c.type="mailto"; +_c.to=m[1]; +if(m[3]){ +var _10=m[3].split("&"); +for(var x=0;x<_10.length;x++){ +var j=_10[x].match(/(subject|body)=(.*)/); +if(j){ +_c[j[1]]=decodeURIComponent(j[2]); +} +} +} +}else{ +if(_f){ +_c.type="anchor"; +_c.anchor=_f[1]; +}else{ +if(a.getAttribute("onclick")){ +var m=a.getAttribute("onclick").match(/window\.open\(\s*this\.href\s*,\s*'([a-z0-9_]*)'\s*,\s*'([a-z0-9_=,]*)'\s*\)/i); +_c.href=_d?_d:""; +_c.target="popup"; +_c.p_name=m[1]; +_c.p_options=[]; +var _10=m[2].split(","); +for(var x=0;x<_10.length;x++){ +var i=_10[x].match(/(width|height)=([0-9]+)/); +if(i){ +_c["p_"+i[1]]=parseInt(i[2]); +}else{ +_c.p_options.push(_10[x]); +} +} +}else{ +_c.href=_d; +_c.target=a.target; +} +} +} +} +var _14=this; +this.a=a; +var _15=function(){ +var a=_14.a; +var _17=_14._dialog.hide(); +var atr={href:"",target:"",title:"",onclick:""}; +if(_17.type=="url"){ +if(_17.href){ +atr.href=_17.href; +atr.target=_17.target; +if(_17.target=="popup"){ +if(_17.p_width){ +_17.p_options.push("width="+_17.p_width); +} +if(_17.p_height){ +_17.p_options.push("height="+_17.p_height); +} +atr.onclick="if(window.top && window.top.Xinha){return false}window.open(this.href, '"+(_17.p_name.replace(/[^a-z0-9_]/i,"_"))+"', '"+_17.p_options.join(",")+"');return false;"; +} +} +}else{ +if(_17.type=="anchor"){ +if(_17.anchor){ +atr.href=_17.anchor.value; +} +}else{ +if(_17.to){ +atr.href="mailto:"+_17.to; +if(_17.subject){ +atr.href+="?subject="+encodeURIComponent(_17.subject); +} +if(_17.body){ +atr.href+=(_17.subject?"&":"?")+"body="+encodeURIComponent(_17.body); +} +} +} +} +if(a&&a.tagName.toLowerCase()=="a"){ +if(!atr.href){ +if(confirm(_14._dialog._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); +_14.editor.updateToolbar(); +return; +} +}else{ +for(var i in atr){ +a.setAttribute(i,atr[i]); +} +if(Xinha.is_ie){ +if(/mailto:([^?<>]*)(\?[^<]*)?$/i.test(a.innerHTML)){ +a.innerHTML=RegExp.$1; +} +} +} +}else{ +if(!atr.href){ +return true; +} +var tmp=Xinha.uniq("http://www.example.com/Link"); +_14.editor._doc.execCommand("createlink",false,tmp); +var _1c=_14.editor._doc.getElementsByTagName("a"); +for(var i=0;i<_1c.length;i++){ +var _1d=_1c[i]; +if(_1d.href==tmp){ +if(!a){ +a=_1d; +} +for(var j in atr){ +_1d.setAttribute(j,atr[j]); +} +} +} +} +_14.editor.selectNodeContents(a); +_14.editor.updateToolbar(); }; - -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; +this._dialog.show(_c,_15); }; - -Linker.prototype.onGenerate = function() -{ - this._dialog = new Linker.Dialog(this); +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; }; -// Inline Dialog for Linker - -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.files = false; - this.html = false; - this.dialog = false; - - // load the dTree script - this._prepareDialog(); - +Linker.prototype.onGenerateOnce=function(){ +this._dialog=new Linker.Dialog(this); }; - -Linker.Dialog.prototype._prepareDialog = function() -{ - var lDialog = this; - var linker = this.linker; - - // We load some stuff up int he background, recalling this function - // when they have loaded. This is to keep the editor responsive while - // we prepare the dialog. - if(typeof dTree == 'undefined') - { - HTMLArea._loadback(_editor_url + 'plugins/Linker/dTree/dtree.js', - function() {lDialog._prepareDialog(); } - ); - return; - } - - if(this.files == false) - { - if(linker.lConfig.backend) - { - //get files from backend - HTMLArea._getback(linker.lConfig.backend, - function(txt) { - try { - eval('lDialog.files = '+txt); - } catch(Error) { - lDialog.files = [ {url:'',title:Error.toString()} ]; - } - lDialog._prepareDialog(); }); - } - else if(linker.lConfig.files != null) - { - //get files from plugin-config - lDialog.files = linker.lConfig.files; - lDialog._prepareDialog(); - } - return; - } - var files = this.files; - - if(this.html == false) - { - HTMLArea._getback(_editor_url + 'plugins/Linker/dialog.html', function(txt) { lDialog.html = txt; lDialog._prepareDialog(); }); - return; - } - var html = this.html; - - // Now we have everything we need, so we can build the dialog. - var dialog = this.dialog = new HTMLArea.Dialog(linker.editor, this.html, 'Linker'); - var dTreeName = HTMLArea.uniq('dTree_'); - - this.dTree = new dTree(dTreeName, _editor_url + 'plugins/Linker/dTree/'); - eval(dTreeName + ' = this.dTree'); - - this.dTree.add(this.Dialog_nxtid++, -1, document.location.host, null, document.location.host); - 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'; - 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.onresize = function() - { - options.style.height = ddTree.style.height = (parseInt(dialog.height) - dialog.getElementById('h1').offsetHeight) + 'px'; - ddTree.style.width = (parseInt(dialog.width) - 322 ) + 'px'; - } - - this.ready = true; +Linker.Dialog_dTrees=[]; +Linker.Dialog=function(_22){ +var _23=this; +this.Dialog_nxtid=0; +this.linker=_22; +this.id={}; +this.ready=false; +this.files=false; +this.html=false; +this.dialog=false; +this._prepareDialog(); }; - -Linker.Dialog.prototype.makeNodes = function(files, parent) -{ - for(var i = 0; i < files.length; i++) - { - if(typeof files[i] == 'string') - { - this.dTree.add(Linker.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(files[i].length) - { - 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') - { - if(files[i].children) { - var id = this.Dialog_nxtid++; - } else { - var id = Linker.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._prepareDialog=function(){ +var _24=this; +var _25=this.linker; +if(typeof dTree=="undefined"){ +Xinha._loadback(_editor_url+"plugins/Linker/dTree/dtree.js",function(){ +_24._prepareDialog(); +}); +return; +} +if(this.files==false){ +if(_25.lConfig.backend){ +Xinha._postback(_25.lConfig.backend,_25.lConfig.backend_data,function(txt){ +try{ +_24.files=eval(txt); +} +catch(Error){ +_24.files=[{url:"",title:Error.toString()}]; +} +_24._prepareDialog(); +}); +}else{ +if(_25.lConfig.files!=null){ +_24.files=_25.lConfig.files; +_24._prepareDialog(); +} +} +return; +} +var _27=this.files; +if(this.html==false){ +Xinha._getback(_editor_url+"plugins/Linker/dialog.html",function(txt){ +_24.html=txt; +_24._prepareDialog(); +}); +return; +} +var _29=this.html; +var _2a=this.dialog=new Xinha.Dialog(_25.editor,this.html,"Linker"); +var _2b=Xinha.uniq("dTree_"); +this.dTree=new dTree(_2b,_editor_url+"plugins/Linker/dTree/"); +eval(_2b+" = this.dTree"); +this.dTree.add(this.Dialog_nxtid++,-1,_25.lConfig.treeCaption,null,_25.lConfig.treeCaption); +this.makeNodes(_27,0); +var _2c=this.dialog.getElementById("dTree"); +_2c.innerHTML=""; +_2c.style.position="absolute"; +_2c.style.left=1+"px"; +_2c.style.top=0+"px"; +_2c.style.overflow="auto"; +_2c.style.backgroundColor="white"; +this.ddTree=_2c; +this.dTree._linker_premade=this.dTree.toString(); +var _2d=this.dialog.getElementById("options"); +_2d.style.position="absolute"; +_2d.style.top=0+"px"; +_2d.style.right=0+"px"; +_2d.style.width=320+"px"; +_2d.style.overflow="auto"; +this.dialog.onresize=function(){ +var h=parseInt(_2a.height)-_2a.getElementById("h1").offsetHeight; +var w=parseInt(_2a.width)-322; +if(w<0){ +w=0; +} +if(h<0){ +h=0; +} +_2d.style.height=_2c.style.height=h+"px"; +_2c.style.width=w+"px"; }; - -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(inputs.type=='url') - { - this.dialog.getElementById('urltable').style.display = ''; - this.dialog.getElementById('mailtable').style.display = 'none'; - this.dialog.getElementById('anchortable').style.display = 'none'; - } - else if(inputs.type=='anchor') - { - this.dialog.getElementById('urltable').style.display = 'none'; - this.dialog.getElementById('mailtable').style.display = 'none'; - this.dialog.getElementById('anchortable').style.display = ''; - } - else - { - this.dialog.getElementById('urltable').style.display = 'none'; - this.dialog.getElementById('mailtable').style.display = ''; - this.dialog.getElementById('anchortable').style.display = 'none'; - } - - if(inputs.target=='popup') - { - this.dialog.getElementById('popuptable').style.display = ''; - } - else - { - this.dialog.getElementById('popuptable').style.display = 'none'; - } - - var anchor = this.dialog.getElementById('anchor'); - for(var i=0;i]+name="([^"]+)"/gi); - if(m) - { - for(i=0;i=0;i--){ +_3a[i]=null; +} +var _3c=this.linker.editor.getHTML(); +var _3d=new Array(); +var m=_3c.match(/]+name="([^"]+)"/gi); +if(m){ +for(i=0;i$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(is_array($a)) $a = $a[0]; - if(is_array($b)) $b = $b[0]; - return strcmp(strtolower($a), strtolower($b)); - } - - function to_js($var, $tabs = 0) - { - if(is_numeric($var)) - { - return $var; - } - - if(is_string($var)) - { - return "'" . js_encode($var) . "'"; - } - - if(is_array($var)) - { - $useObject = false; - foreach(array_keys($var) as $k) { - if(!is_numeric($k)) $useObject = true; - } - $js = array(); - foreach($var as $k => $v) - { - $i = ""; - if($useObject) { - if(preg_match('#[a-zA-Z]+[a-zA-Z0-9]*#', $k)) { - $i .= "$k: "; - } else { - $i .= "'$k': "; - } - } - $i .= to_js($v, $tabs + 1); - $js[] = $i; - } - if($useObject) { - $ret = "{\n" . tabify(implode(",\n", $js), $tabs) . "\n}"; - } else { - $ret = "[\n" . tabify(implode(",\n", $js), $tabs) . "\n]"; - } - return $ret; - } - - return 'null'; - } - - function tabify($text, $tabs) - { - if($text) - { - return str_repeat(" ", $tabs) . preg_replace('/\n(.)/', "\n" . str_repeat(" ", $tabs) . "\$1", $text); - } - } - - function js_encode($string) - { - static $strings = "\\,\",',%,&,<,>,{,},@,\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); - } - - - echo to_js(scan($dir)); -?> + + [ ]; + $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(is_array($a)) $a = array_shift($a); + if(is_array($b)) $b = array_shift($b); + return strcmp(strtolower($a), strtolower($b)); + } + + echo xinha_to_js(scan($dir)); +?> diff --git a/xinha/plugins/ListType/lang/de.js b/xinha/plugins/ListType/lang/de.js index a835f5a..86a1cd7 100644 --- a/xinha/plugins/ListType/lang/de.js +++ b/xinha/plugins/ListType/lang/de.js @@ -1,12 +1,12 @@ -// I18N constants -// LANG: "de", ENCODING: UTF-8 -// translated: Raimund Meyer xinha@ray-of-light.org -{ - "Decimal numbers": "Zahlen", - "Lower roman numbers": "Römisch klein", - "Upper roman numbers": "Römisch groß", - "Lower latin letters": "Zeichen klein", - "Upper latin letters": "Zeichen groß", - "Lower greek letters": "Griechisch", - "Choose list style type (for ordered lists)": "Wählen Sie einen Typ für die Nummerierung aus" -}; +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// translated: Raimund Meyer xinha@ray-of-light.org +{ + "Decimal numbers": "Zahlen", + "Lower roman numbers": "Römisch klein", + "Upper roman numbers": "Römisch groß", + "Lower latin letters": "Zeichen klein", + "Upper latin letters": "Zeichen groß", + "Lower greek letters": "Griechisch", + "Choose list style type (for ordered lists)": "Wählen Sie einen Typ für die Nummerierung aus" +}; diff --git a/xinha/plugins/ListType/lang/ja.js b/xinha/plugins/ListType/lang/ja.js new file mode 100644 index 0000000..3d96430 --- /dev/null +++ b/xinha/plugins/ListType/lang/ja.js @@ -0,0 +1,11 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Decimal numbers": "10進数", + "Lower roman numbers": "ローマ数字(å°æ–‡å­—)", + "Upper roman numbers": "ローマ数字(大文字)", + "Lower latin letters": "アルファベット(å°æ–‡å­—)", + "Upper latin letters": "アルファベット(大文字)", + "Lower greek letters": "ギリシャ文字(å°æ–‡å­—)", + "Choose list style type (for ordered lists)": "リスト形å¼ã®é¸æŠž(é †åºä»˜ã‘リスト用)" +}; \ No newline at end of file diff --git a/xinha/plugins/ListType/lang/no.js b/xinha/plugins/ListType/lang/nb.js similarity index 69% rename from xinha/plugins/ListType/lang/no.js rename to xinha/plugins/ListType/lang/nb.js index 4aaf794..3647ee6 100644 --- a/xinha/plugins/ListType/lang/no.js +++ b/xinha/plugins/ListType/lang/nb.js @@ -1,5 +1,5 @@ -// I18N constants -// LANG: "no", ENCODING: UTF-8 +// I18N constants +// LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Decimal numbers": "Desimaltall", @@ -8,5 +8,5 @@ "Lower latin letters": "Lower latin letters", "Upper latin letters": "Upper latin letters", "Lower greek letters": "Lower greek letters", - "Choose list style type (for ordered lists)": "Velg liste type (for nummererte lister)" + "Choose list style type (for ordered lists)": "Velg listetype (for nummererte lister)" }; diff --git a/xinha/plugins/ListType/lang/ru.js b/xinha/plugins/ListType/lang/ru.js new file mode 100644 index 0000000..337e096 --- /dev/null +++ b/xinha/plugins/ListType/lang/ru.js @@ -0,0 +1,12 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// Author: Andrei Blagorazumov, a@fnr.ru +{ + "Decimal numbers": "ДеÑÑтичные чиÑла", + "Lower roman numbers": "Строчные романÑкие чиÑла", + "Upper roman numbers": "Заглавные романÑкие чиÑла", + "Lower latin letters": "Строчные латинÑкие Ñимволы", + "Upper latin letters": "Заглавные латинÑкие Ñимволы", + "Lower greek letters": "Строчные гречеÑкие Ñимволы", + "Choose list style type (for ordered lists)": "Выберите Ñтиль ÑпиÑков (Ð´Ð»Ñ ÑƒÐ¿Ð¾Ñ€Ñдоченных ÑпиÑков)" +}; \ No newline at end of file diff --git a/xinha/plugins/ListType/lang/sv.js b/xinha/plugins/ListType/lang/sv.js new file mode 100644 index 0000000..111a573 --- /dev/null +++ b/xinha/plugins/ListType/lang/sv.js @@ -0,0 +1,12 @@ +// I18N constants +// LANG: "sv" (Swedish), ENCODING: UTF-8 +// translated: Erik Dalén, +{ + "Decimal numbers": "Desimaltal", + "Lower roman numbers": "SmÃ¥ romerska siffror", + "Upper roman numbers": "Stora romerska siffror", + "Lower latin letters": "SmÃ¥ latinska bokstäver", + "Upper latin letters": "Stora latinska bokstäver", + "Lower greek letters": "SmÃ¥ grekiska bokstäver", + "Choose list style type (for ordered lists)": "Välj listtyp (för numrerade listor)" +}; diff --git a/xinha/plugins/ListType/list-type.js b/xinha/plugins/ListType/list-type.js index b7c89f5..6a36daf 100644 --- a/xinha/plugins/ListType/list-type.js +++ b/xinha/plugins/ListType/list-type.js @@ -1,191 +1,137 @@ -// ListType Plugin for Xinha -// Toolbar Implementation by Mihai Bazon, http://dynarch.com/mishoo/ -HTMLArea.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[HTMLArea._lc( "Decimal numbers", "ListType" )] = "decimal"; - options[HTMLArea._lc( "Lower roman numbers", "ListType" )] = "lower-roman"; - options[HTMLArea._lc( "Upper roman numbers", "ListType" )] = "upper-roman"; - options[HTMLArea._lc( "Lower latin letters", "ListType" )] = "lower-alpha"; - options[HTMLArea._lc( "Upper latin letters", "ListType" )] = "upper-alpha"; - if (!HTMLArea.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[HTMLArea._lc( "Lower greek letters", "ListType" )] = "lower-greek"; - var obj = - { - id : "listtype", - tooltip : HTMLArea._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' ); - HTMLArea.freeLater( editor, '_ListType' ); - HTMLArea.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 ? - HTMLArea.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' ); - div.id = 'LTdivUL'; - div.style.display = 'none'; - for ( var i=0; i
    ","cl":"
    ', - 'cl': '
    - - - - - - - - - - - -
    -
    Dictionary - - -
    - Please wait. Calling spell checker. -
    -
    - -
    -
    Original word
    -
    pliz weit ;-)
    -
    - -
    -
    Replace with
    -
    -
    -
    -
    - -
    -
    -
    Suggestions
    -
    - -
    -
    - -
    -
    - - -
    -
    -
    - - - - + + + + + Spell Checker + + + + + + + + + +
    + + + + + + + + + + + + + +
    +
    Dictionary + + +
    + Please wait. Calling spell checker. +
    +
    + +
    +
    Original word
    +
    pliz weit ;-)
    +
    + +
    +
    Replace with
    +
    +
    +
    +
    + +
    +
    +
    Suggestions
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    + + + + diff --git a/xinha/plugins/SpellChecker/spell-check-ui.js b/xinha/plugins/SpellChecker/spell-check-ui.js index 68fb12e..0a6baff 100644 --- a/xinha/plugins/SpellChecker/spell-check-ui.js +++ b/xinha/plugins/SpellChecker/spell-check-ui.js @@ -1,445 +1,392 @@ -// 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$ - -// internationalization file was already loaded in parent ;-) -var SpellChecker = window.opener.SpellChecker; - -var HTMLArea = window.opener.HTMLArea; -var _editor_url = window.opener._editor_url; - -var is_ie = HTMLArea.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 HTMLArea._lc(string, 'SpellChecker'); +var SpellChecker=window.opener.SpellChecker; +var Xinha=window.opener.Xinha; +var HTMLArea=Xinha; +var _editor_url=window.opener._editor_url; +var is_ie=HTMLArea.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=[]; +var to_r_list=[]; +function _lc(_1){ +return HTMLArea._lc(_1,"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))) { - 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 window.opener.HTMLArea.getHTML(frame.contentWindow.document.body, false, editor); +function makeCleanDoc(_2){ +var _3=wrongWords.concat(fixedWords); +for(var i=_3.length;--i>=0;){ +var el=_3[i]; +if(!(_2&&/HA-spellcheck-fixed/.test(el.className))){ +if(el.firstChild){ +el.parentNode.insertBefore(el.firstChild,el); } - -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(); +el.parentNode.removeChild(el); +}else{ +el.className="HA-spellcheck-fixed"; } - -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.HTMLArea._postback(_editor_url + '/plugins/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; +return Xinha.getHTML(frame.contentWindow.document.body,true,editor); } - -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 recheckClicked(){ +document.getElementById("status").innerHTML=_lc("Please wait: changing dictionary to")+": \""+document.getElementById("f_dictionary").value+"\"."; +var _6=document.getElementById("f_content"); +_6.value=makeCleanDoc(true); +_6.form.submit(); } - -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 saveClicked(){ +if(modified){ +editor.setHTML(makeCleanDoc(false)); } - -function revertClicked() { - document.getElementById("v_replacement").value = currentElement.__msh_origWord; - replaceWord(currentElement); - currentElement.className = "HA-spellcheck-error HA-spellcheck-current"; - return false; +if(to_p_dict.length||to_r_list.length&&editor.config.SpellChecker.backend=="php"){ +var _7={}; +for(var i=0;i= 0;) { - var el = els[j]; - if (el.childNodes.length == 1 && /\S/.test(el.innerHTML)) { - var txt = el.innerHTML; - el.innerHTML = _lc(txt); - } - } - } +if(ok){ +window.close(); } - -function initDocument() { - internationalizeWindow(); - modified = false; - frame = document.getElementById("i_framecontent"); - var field = document.getElementById("f_content"); - field.value = HTMLArea.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 = _editor_url + '/plugins/SpellChecker/spell-check-logic.php'; - } - - 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; - }; +return false; } - -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 replaceWord(el){ +var _b=document.getElementById("v_replacement").value; +var _c=(el.innerHTML!=_b); +if(_c){ +modified=true; } - -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; +if(el){ +el.className=el.className.replace(/\s*HA-spellcheck-(hover|fixed)\s*/g," "); } - -function wordMouseOver() { - this.className += " HA-spellcheck-hover"; +el.className+=" HA-spellcheck-fixed"; +el.__msh_fixed=true; +if(!_c){ +return false; } - -function wordMouseOut() { - this.className = this.className.replace(/\s*HA-spellcheck-hover\s*/g, " "); +to_r_list.push([el.innerHTML,_b]); +el.innerHTML=_b; } - -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 replaceClicked(){ +replaceWord(currentElement); +var _d=currentElement.__msh_id; +var _e=_d; +do{ +++_e; +if(_e==wrongWords.length){ +_e=0; } - -function finishedSpellChecking() { - // initialization of global variables - currentElement = null; - wrongWords = null; - allWords = {}; - fixedWords = []; - suggested_words = frame.contentWindow.suggested_words; - - document.getElementById("status").innerHTML = "HTMLArea 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 && HTMLArea._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 +}while((_e!=_d)&&wrongWords[_e].__msh_fixed); +if(_e==_d){ +_e=0; +alert(_lc("Finished list of mispelled words")); +} +wrongWords[_e].__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 _f=document.getElementById("v_replacement").value; +var ok=true; +var _11=allWords[currentElement.__msh_origWord]; +if(_11.length==0){ +alert("An impossible condition just happened. Call FBI. ;-)"); +}else{ +if(_11.length==1){ +replaceClicked(); +return false; +} +} +if(ok){ +for(var i=0;i<_11.length;++i){ +if(_11[i]!=currentElement){ +replaceWord(_11[i]); +} +} +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 _13=["div","span","button"]; +for(var i=0;i<_13.length;++i){ +var tag=_13[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 _1a=document.getElementById("f_content"); +_1a.value=HTMLArea.getHTML(editor._doc.body,false,editor); +var _1b=document.getElementById("f_dictionary"); +if(typeof editor.config.SpellChecker.defaultDictionary!="undefined"&&editor.config.SpellChecker.defaultDictionary!=""){ +_1b.value=editor.config.SpellChecker.defaultDictionary; +}else{ +_1b.value="en_GB"; +} +if(editor.config.SpellChecker.backend=="php"){ +_1a.form.action=_editor_url+"/plugins/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; +} +_1a.form.submit(); +document.getElementById("f_init").value="0"; +var _1c=document.getElementById("v_suggestions"); +_1c.onchange=function(){ +document.getElementById("v_replacement").value=this.value; +}; +if(is_ie){ +_1c.attachEvent("ondblclick",replaceClicked); +}else{ +_1c.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; +_1c=document.getElementById("v_dictionaries"); +_1c.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(_20){ +var _21=this; +if(_20){ +(function(){ +var pos=getAbsolutePos(_21); +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"+currentElement.__msh_origWord+"\""; +for(var i=_2a.length;--i>=0;){ +_2a.remove(i); +} +for(var i=0;i<_29.length;++i){ +var txt=_29[i]; +var _2b=document.createElement("option"); +_2b.value=txt; +_2b.appendChild(document.createTextNode(txt)); +_2a.appendChild(_2b); +} +document.getElementById("v_currentWord").innerHTML=this.__msh_origWord; +if(_29.length>0){ +_2a.selectedIndex=0; +_2a.onchange(); +}else{ +document.getElementById("v_replacement").value=this.innerHTML; +} +_2a.style.display="none"; +_2a.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 _2c=frame.contentWindow.spellcheck_info; +if(!_2c){ +alert("No information available"); +}else{ +var txt="** Document information **"; +for(var i in _2c){ +txt+="\n"+i+" : "+_2c[i]; +} +alert(txt); +} +return false; +} +function finishedSpellChecking(){ +currentElement=null; +wrongWords=null; +allWords={}; +fixedWords=[]; +suggested_words=frame.contentWindow.suggested_words; +document.getElementById("status").innerHTML="HTMLArea Spell Checker (info)"; +var doc=frame.contentWindow.document; +var _30=doc.getElementsByTagName("span"); +var sps=[]; +var id=0; +for(var i=0;i<_30.length;++i){ +var el=_30[i]; +if(/HA-spellcheck-error/.test(el.className)){ +sps.push(el); +el.__msh_wordClicked=wordClicked; +el.onclick=function(ev){ +ev||(ev=window.event); +ev&&HTMLArea._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 _37=doc.getElementById("HA-spellcheck-dictionaries"); +if(_37){ +_37.parentNode.removeChild(_37); +_37=_37.innerHTML.split(/,/); +var _38=document.getElementById("v_dictionaries"); +for(var i=_38.length;--i>=0;){ +_38.remove(i); +} +var _39=document.getElementById("f_dictionary").value; +for(var i=0;i<_37.length;++i){ +var txt=_37[i]; +var _3a=document.createElement("option"); +if(txt==_39){ +_3a.selected=true; +} +_3a.value=txt; +_3a.appendChild(document.createTextNode(txt)); +_38.appendChild(_3a); +} +} +wrongWords=sps; +if(sps.length==0){ +if(!modified){ +alert(_lc("No mispelled words found with the selected dictionary.")); +}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; +}; +} +} + diff --git a/xinha/plugins/SpellChecker/spell-checker.js b/xinha/plugins/SpellChecker/spell-checker.js index 5b4a704..a3eab8a 100644 --- a/xinha/plugins/SpellChecker/spell-checker.js +++ b/xinha/plugins/SpellChecker/spell-checker.js @@ -1,73 +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$ - -HTMLArea.Config.prototype.SpellChecker = { 'backend': 'php', 'personalFilesDir' : '', 'defaultDictionary' : 'en_GB' }; - -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 HTMLArea._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 = _editor_url + "plugins/SpellChecker/spell-check-ui.html"; - var win; - if (HTMLArea.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 +// 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$ + +HTMLArea.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 HTMLArea._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 = _editor_url + "plugins/SpellChecker/spell-check-ui.html"; + var win; + if (HTMLArea.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/xinha/plugins/Stylist/lang/ja.js b/xinha/plugins/Stylist/lang/ja.js new file mode 100644 index 0000000..2e455d5 --- /dev/null +++ b/xinha/plugins/Stylist/lang/ja.js @@ -0,0 +1,5 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Styles": "スタイル" +}; \ No newline at end of file diff --git a/xinha/plugins/Stylist/lang/no.js b/xinha/plugins/Stylist/lang/nb.js similarity index 79% rename from xinha/plugins/Stylist/lang/no.js rename to xinha/plugins/Stylist/lang/nb.js index 9ef039f..a5b899b 100644 --- a/xinha/plugins/Stylist/lang/no.js +++ b/xinha/plugins/Stylist/lang/nb.js @@ -1,5 +1,5 @@ // I18N constants -// LANG: "no", ENCODING: UTF-8 +// LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Styles": "Stiler" diff --git a/xinha/plugins/Stylist/stylist.js b/xinha/plugins/Stylist/stylist.js index e8ccfc7..1b93027 100644 --- a/xinha/plugins/Stylist/stylist.js +++ b/xinha/plugins/Stylist/stylist.js @@ -1,542 +1,372 @@ -/** - * Add an empty css_style to Config object's prototype - * the format is { '.className' : 'Description' } - */ - -HTMLArea.Config.prototype.css_style = { }; - -/** - * This method loads an external stylesheet and uses it in the stylist - */ -HTMLArea.Config.prototype.stylistLoadStylesheet = function(url, altnames) -{ - if(!altnames) altnames = { }; - var newStyles = HTMLArea.ripStylesFromCSSFile(url); - for(var i in newStyles) - { - if(altnames[i]) - { - this.css_style[i] = altnames[i]; - } - else - { - this.css_style[i] = newStyles[i]; - } - } - this.pageStyleSheets[this.pageStyleSheets.length] = url; -}; - -/** - * This method takes raw style definitions and uses them in the stylist - */ -HTMLArea.Config.prototype.stylistLoadStyles = function(styles, altnames) -{ - if(!altnames) altnames = { }; - var newStyles = HTMLArea.ripStylesFromCSSString(styles); - 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 HTMLArea.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 - */ -HTMLArea.prototype._fillStylist = function() -{ - if(!this._stylist) return false; - this._stylist.innerHTML = '

    '+HTMLArea._lc('Styles', 'Stylist')+'

    '; - - 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; - } - } - } - } - - 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._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'; - } - - this._stylist.appendChild(anch); - } - } -}; - - -/** - * Add the given classes (space seperated list) to the currently selected element - * (will add a span if none selected) - */ -HTMLArea.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')}]; - } - - HTMLArea.addClasses(new_el, classes); - } - else - { - HTMLArea._addClasses(el, classes); - } - } - this.focusEditor(); - this.updateToolbar(); - }; - -/** - * Remove the given classes (space seperated list) from the given elements (array of elements) - */ -HTMLArea.prototype._stylistRemoveClasses = function(classes, from) - { - for(var x = 0; x < from.length; x++) - { - this._stylistRemoveClassesFull(from[x], classes); - } - this.focusEditor(); - this.updateToolbar(); - }; - -HTMLArea.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 = HTMLArea.arrayFilter(last_el.className.trim().split(' '), function(c) { if (c == null || c.trim() == '') { return false;} return true; }); - - if( - (new_thiers.length == 0) - || - ( - HTMLArea.arrayContainsArray(new_thiers, last_classes) - && HTMLArea.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 childs = el.childNodes; - for(var x = 0; x < childs.length; x++) - { - prnt.insertBefore(childs[x], el); - } - prnt.removeChild(el); - } - } -}; - -/** - * Change the tag of an element - */ -HTMLArea.prototype.switchElementTag = function(el, tag) -{ - var prnt = el.parentNode; - var new_el = this._doc.createElement(tag); - - if(HTMLArea.is_ie || el.hasAttribute('id')) new_el.setAttribute('id', el.getAttribute('id')); - if(HTMLArea.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; -}; - -HTMLArea.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 = (HTMLArea.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; -}; - -HTMLArea.prototype._ancestorsWithClasses = function(sel, tag, classes) -{ - var ancestors = [ ]; - var prnt = this._activeElement(sel); - if(prnt == null) - { - try - { - prnt = (HTMLArea.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) - { - 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; -}; - - -HTMLArea.ripStylesFromCSSFile = function(URL) -{ - var css = HTMLArea._geturlcontent(URL); - return HTMLArea.ripStylesFromCSSString(css); -}; - -HTMLArea.ripStylesFromCSSString = function(css) -{ - // We are only interested in the selectors, the rules are not important - // so we'll drop out all coments and rules - RE_comment = /\/\*(.|\r|\n)*?\*\//g; - RE_rule = /\{(.|\r|\n)*?\}/g; - css = css.replace(RE_comment, ''); - css = css.replace(RE_rule, ','); - - // And split on commas - css = css.split(','); - - // And add those into our structure - var selectors = { }; - for(var x = 0; x < css.length; x++) - { - if(css[x].trim()) - { - selectors[css[x].trim()] = css[x].trim(); - } - } - - - return selectors; -}; - -// Make our right side panel and insert appropriatly -function Stylist(editor, args) -{ - this.editor = editor; - editor._stylist = null; // This needs to be changes to be Stylist::_stylist sometime - editor._stylist = editor.addPanel('right'); - HTMLArea.addClass(editor._stylist, 'stylist'); - - var stylist = this; - editor.notifyOn('modechange', - function(e,args) - { - switch(args.mode) - { - case 'text': - { - editor.hidePanel(editor._stylist); - break; - } - case 'wysiwyg': - { - editor.showPanel(editor._stylist); - break; - } - } - } - ); +Xinha.Config.prototype.css_style={}; +Xinha.Config.prototype.stylistLoadStylesheet=function(_1,_2){ +if(!_2){ +_2={}; } - -Stylist._pluginInfo = -{ - name : "Stylist", - 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/" +var _3=Xinha.ripStylesFromCSSFile(_1); +for(var i in _3){ +if(_2[i]){ +this.css_style[i]=_2[i]; +}else{ +this.css_style[i]=_3[i]; +} +} +this.pageStyleSheets[this.pageStyleSheets.length]=_1; }; - -Stylist.prototype.onGenerate = function() -{ - var editor = this.editor; - if(typeof editor.config.css_style == 'undefined' || HTMLArea.objectProperties(editor.config.css_style).length == 0) - { - editor.removePanel(editor._stylist); - editor._stylist = null; - } +Xinha.Config.prototype.stylistLoadStyles=function(_5,_6){ +if(!_6){ +_6={}; +} +var _7=Xinha.ripStylesFromCSSString(_5); +for(var i in _7){ +if(_6[i]){ +this.css_style[i]=_6[i]; +}else{ +this.css_style[i]=_7[i]; +} +} +this.pageStyle+=_5; }; - -Stylist.prototype.onUpdateToolbar = function() -{ - if(this.editor._stylist) - { - if(this._timeoutID) - { - window.clearTimeout(this._timeoutID); - } - - var e = this.editor; - this._timeoutID = window.setTimeout(function() { e._fillStylist(); }, 250); - } -}; \ No newline at end of file +Xinha.prototype._fillStylist=function(){ +if(!this._stylist){ +return false; +} +this.plugins.Stylist.instance.main.innerHTML=""; +var _9=true; +var _a=this._getSelection(); +var _b=this._activeElement(_a); +for(var x in this.config.css_style){ +var _d=null; +var _e=x.trim(); +var _f=true; +var _10=_b; +if(_f&&/[^a-zA-Z0-9_.-]/.test(_e)){ +_f=false; +} +if(_e.indexOf(".")<0){ +_f=false; +} +if(_f&&(_e.indexOf(".")>0)){ +_d=_e.substring(0,_e.indexOf(".")).toLowerCase(); +_e=_e.substring(_e.indexOf("."),_e.length); +if(_b!=null&&_b.tagName.toLowerCase()==_d){ +_f=true; +_10=_b; +}else{ +if(this._getFirstAncestor(this._getSelection(),[_d])!=null){ +_f=true; +_10=this._getFirstAncestor(this._getSelection(),[_d]); +}else{ +if((_d=="div"||_d=="span"||_d=="p"||(_d.substr(0,1)=="h"&&_d.length==2&&_d!="hr"))){ +if(!this._selectionEmpty(this._getSelection())){ +_f=true; +_10="new"; +}else{ +_10=this._getFirstAncestor(_a,["p","h1","h2","h3","h4","h5","h6","h7"]); +if(_10!=null){ +_f=true; +} +} +}else{ +_f=false; +} +} +} +} +if(_f){ +_e=_e.substring(_e.indexOf("."),_e.length); +_e=_e.replace("."," "); +if(_10==null){ +if(this._selectionEmpty(this._getSelection())){ +_10=this._getFirstAncestor(this._getSelection(),null); +}else{ +_10="new"; +_d="span"; +} +} +} +var _11=(this._ancestorsWithClasses(_a,_d,_e).length>0?true:false); +var _12=this._ancestorsWithClasses(_a,_d,_e); +if(_f){ +var _13=document.createElement("a"); +_13._stylist_className=_e.trim(); +_13._stylist_applied=_11; +_13._stylist_appliedTo=_12; +_13._stylist_applyTo=_10; +_13._stylist_applyTag=_d; +_13.innerHTML=this.config.css_style[x]; +_13.href="javascript:void(0)"; +var _14=this; +_13.onclick=function(){ +if(this._stylist_applied==true){ +_14._stylistRemoveClasses(this._stylist_className,this._stylist_appliedTo); +}else{ +_14._stylistAddClasses(this._stylist_applyTo,this._stylist_applyTag,this._stylist_className); +} +return false; +}; +_13.style.display="block"; +_13.style.paddingLeft="3px"; +_13.style.paddingTop="1px"; +_13.style.paddingBottom="1px"; +_13.style.textDecoration="none"; +if(_11){ +_13.style.background="Highlight"; +_13.style.color="HighlightText"; +} +this.plugins.Stylist.instance.main.appendChild(_13); +} +} +}; +Xinha.prototype._stylistAddClasses=function(el,tag,_17){ +if(el=="new"){ +this.insertHTML("<"+tag+" class=\""+_17+"\">"+this.getSelectedHTML()+""); +}else{ +if(tag!=null&&el.tagName.toLowerCase()!=tag){ +var _18=this.switchElementTag(el,tag); +if(typeof el._stylist_usedToBe!="undefined"){ +_18._stylist_usedToBe=el._stylist_usedToBe; +_18._stylist_usedToBe[_18._stylist_usedToBe.length]={"tagName":el.tagName,"className":el.getAttribute("class")}; +}else{ +_18._stylist_usedToBe=[{"tagName":el.tagName,"className":el.getAttribute("class")}]; +} +Xinha.addClasses(_18,_17); +}else{ +Xinha._addClasses(el,_17); +} +} +this.focusEditor(); +this.updateToolbar(); +}; +Xinha.prototype._stylistRemoveClasses=function(_19,_1a){ +for(var x=0;x<_1a.length;x++){ +this._stylistRemoveClassesFull(_1a[x],_19); +} +this.focusEditor(); +this.updateToolbar(); +}; +Xinha.prototype._stylistRemoveClassesFull=function(el,_1d){ +if(el!=null){ +var _1e=el.className.trim().split(" "); +var _1f=[]; +var _20=_1d.split(" "); +for(var x=0;x<_1e.length;x++){ +var _22=false; +for(var i=0;_22==false&&i<_20.length;i++){ +if(_20[i]==_1e[x]){ +_22=true; +} +} +if(_22==false){ +_1f[_1f.length]=_1e[x]; +} +} +if(_1f.length==0&&el._stylist_usedToBe&&el._stylist_usedToBe.length>0&&el._stylist_usedToBe[el._stylist_usedToBe.length-1].className!=null){ +var _24=el._stylist_usedToBe[el._stylist_usedToBe.length-1]; +var _25=Xinha.arrayFilter(_24.className.trim().split(" "),function(c){ +if(c==null||c.trim()==""){ +return false; +} +return true; +}); +if((_1f.length==0)||(Xinha.arrayContainsArray(_1f,_25)&&Xinha.arrayContainsArray(_25,_1f))){ +el=this.switchElementTag(el,_24.tagName); +_1f=_25; +}else{ +el._stylist_usedToBe=[]; +} +} +if(_1f.length>0||el.tagName.toLowerCase()!="span"||(el.id&&el.id!="")){ +el.className=_1f.join(" ").trim(); +}else{ +var _27=el.parentNode; +var _28=el.childNodes; +for(var x=0;x<_28.length;x++){ +_27.insertBefore(_28[x],el); +} +_27.removeChild(el); +} +} +}; +Xinha.prototype.switchElementTag=function(el,tag){ +var _2b=el.parentNode; +var _2c=this._doc.createElement(tag); +if(Xinha.is_ie||el.hasAttribute("id")){ +_2c.setAttribute("id",el.getAttribute("id")); +} +if(Xinha.is_ie||el.hasAttribute("style")){ +_2c.setAttribute("style",el.getAttribute("style")); +} +var _2d=el.childNodes; +for(var x=0;x<_2d.length;x++){ +_2c.appendChild(_2d[x].cloneNode(true)); +} +_2b.insertBefore(_2c,el); +_2c._stylist_usedToBe=[el.tagName]; +_2b.removeChild(el); +this.selectNodeContents(_2c); +return _2c; +}; +Xinha.prototype._getAncestorsClassNames=function(sel){ +var _30=this._activeElement(sel); +if(_30==null){ +_30=(Xinha.is_ie?this._createRange(sel).parentElement():this._createRange(sel).commonAncestorContainer); +} +var _31=[]; +while(_30){ +if(_30.nodeType==1){ +var _32=_30.className.trim().split(" "); +for(var x=0;x<_32.length;x++){ +_31[_31.length]=_32[x]; +} +if(_30.tagName.toLowerCase()=="body"){ +break; +} +if(_30.tagName.toLowerCase()=="table"){ +break; +} +} +_30=_30.parentNode; +} +return _31; +}; +Xinha.prototype._ancestorsWithClasses=function(sel,tag,_36){ +var _37=[]; +var _38=this._activeElement(sel); +if(_38==null){ +try{ +_38=(Xinha.is_ie?this._createRange(sel).parentElement():this._createRange(sel).commonAncestorContainer); +} +catch(e){ +return _37; +} +} +var _39=_36.trim().split(" "); +while(_38){ +if(_38.nodeType==1&&_38.className){ +if(tag==null||_38.tagName.toLowerCase()==tag){ +var _36=_38.className.trim().split(" "); +var _3a=true; +for(var i=0;i<_39.length;i++){ +var _3c=false; +for(var x=0;x<_36.length;x++){ +if(_39[i]==_36[x]){ +_3c=true; +break; +} +} +if(!_3c){ +_3a=false; +break; +} +} +if(_3a){ +_37[_37.length]=_38; +} +} +if(_38.tagName.toLowerCase()=="body"){ +break; +} +if(_38.tagName.toLowerCase()=="table"){ +break; +} +} +_38=_38.parentNode; +} +return _37; +}; +Xinha.ripStylesFromCSSFile=function(URL){ +var css=Xinha._geturlcontent(URL); +return Xinha.ripStylesFromCSSString(css); +}; +Xinha.ripStylesFromCSSString=function(css){ +RE_comment=/\/\*(.|\r|\n)*?\*\//g; +RE_rule=/\{(.|\r|\n)*?\}/g; +css=css.replace(RE_comment,""); +css=css.replace(RE_rule,","); +css=css.split(","); +var _41={}; +for(var x=0;x0)?_47.main.offsetHeight-_4b.panel.offsetHeight:0)+"px"; +_46._stylist.style.height=_47.caption.offsetHeight+"px"; +_46.sizeEditor(); +break; +case "hide": +_47.resize(); +break; +} +}); +_46.notifyOn("before_resize",function(){ +_46._stylist.style.height=_47.caption.offsetHeight+"px"; +}); +_46.notifyOn("resize",function(){ +_47.resize(); +}); +} +}; +Stylist.prototype.resize=function(){ +var _4d=this.editor; +var _4e=_4d._stylist.parentNode; +var _4f=_4e.offsetHeight; +for(var i=0;i<_4e.childNodes.length;++i){ +if(_4e.childNodes[i]==_4d._stylist||!_4e.childNodes[i].offsetHeight){ +continue; +} +_4f-=_4e.childNodes[i].offsetHeight; +} +_4d._stylist.style.height=_4f+"px"; +this.main.style.height=_4f-this.caption.offsetHeight+"px"; +}; +Stylist.prototype.onUpdateToolbar=function(){ +if(this.editor._stylist){ +if(this._timeoutID){ +window.clearTimeout(this._timeoutID); +} +var e=this.editor; +this._timeoutID=window.setTimeout(function(){ +e._fillStylist(); +},250); +} +}; + diff --git a/xinha/plugins/SuperClean/dialog.html b/xinha/plugins/SuperClean/dialog.html index 837e931..abced76 100644 --- a/xinha/plugins/SuperClean/dialog.html +++ b/xinha/plugins/SuperClean/dialog.html @@ -4,6 +4,6 @@
    - +
    \ No newline at end of file diff --git a/xinha/plugins/SuperClean/filters/paragraph.js b/xinha/plugins/SuperClean/filters/paragraph.js new file mode 100644 index 0000000..041a575 --- /dev/null +++ b/xinha/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/xinha/plugins/SuperClean/filters/word.js b/xinha/plugins/SuperClean/filters/word.js new file mode 100644 index 0000000..495a719 --- /dev/null +++ b/xinha/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/xinha/plugins/SuperClean/img/ed_superclean.gif b/xinha/plugins/SuperClean/img/ed_superclean.gif index b8314be80ada5daff7612fc567a5c306a83bb6a1..53180a80ba24643381b413ca4dcfebfc52f50c6f 100644 GIT binary patch literal 334 zcmZ?wbhEHb6k-r!xXZxs|NsAEEfLqQ8NGl1{^d){x9^^R|NiyCef<~b_TAYr_3+WK zb5o+voSFIYqvhOo$17JBe)wj6<4*Ri+cTd&Gd+7&>-$H;hYv43cyMml@(H_lyPP{0 z{N;Jw79kF`X6 z`TC*0zTV#6{_xQ-V^y&o3)LT7Io{vje`m+k^XC`7efRw1N6Ry3W?sJ`{Qv)dd3pJ{ z?T*K17cHywK6B>G{rmU-|39;8RrLDx>(8H;-Lb>Z*x2~Z^Ptwo|L^}{#o?o?0CqA2%#Iz-lHYqa$>fLrByz#U>%)<3bjGD~BmpHY7L-wezRP ztYCCz6yOu%6B68XgtJqI)9Xo0<%A~QMNHNiDppC1ty8U?SRxlJPMO5yEWqR7l>Fi# mv&Moa0gF_ey4&@_Qhuy>bcmlvwV$JMffGZ_5>;j<25SJ&|I7dY diff --git a/xinha/plugins/SuperClean/lang/ja.js b/xinha/plugins/SuperClean/lang/ja.js new file mode 100644 index 0000000..ae8b797 --- /dev/null +++ b/xinha/plugins/SuperClean/lang/ja.js @@ -0,0 +1,18 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Clean up HTML": "HTMLã®ã‚¯ãƒªãƒ¼ãƒ³ãƒŠãƒƒãƒ—", + "Please select from the following cleaning options...": "以下ã®ã‚¯ãƒªãƒ¼ãƒ³ãƒŠãƒƒãƒ—ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã—ã¦ãã ã•ã„...", + "General tidy up and correction of some problems.": "一般的ãªé©æ­£åŒ–ã¨ã„ãã¤ã‹ã®å•題を修正ã—ã¾ã™ã€‚", + "Clean bad HTML from Microsoft Word": "Microsoft Wordã«ã‚ˆã‚‹ä¸æ­£ãªHTMLã®æ¸…潔化", + "Remove custom typefaces (font \"styles\").": "独自フォントå設定ã®é™¤åŽ» (font face)。", + "Remove custom font sizes.": "独自フォントサイズ設定ã®é™¤åŽ»ã€‚", + "Remove custom text colors.": "独自文字色設定ã®é™¤åŽ»ã€‚", + "Remove lang attributes.": "言語属性ã®é™¤åŽ»ã€‚", + "Go": "実行", + "Cancel": "中止", + "Tidy failed. Check your HTML for syntax errors.": "驿­£åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚HTMLã®æ–‡æ³•エラーを確èªã—ã¦ãã ã•ã„。", + "You don't have anything to tidy!": "驿­£åŒ–ã™ã‚‹ã‚‚ã®ã¯ä½•ã‚‚ã‚りã¾ã›ã‚“!", + "Replace directional quote marks with non-directional quote marks.": "æ–¹å‘ã¤ã引用符を方å‘ãªã—引用符ã«ç½®æ›ã€‚", + "CANCEL": "中止" +}; \ No newline at end of file diff --git a/xinha/plugins/SuperClean/lang/no.js b/xinha/plugins/SuperClean/lang/nb.js similarity index 92% rename from xinha/plugins/SuperClean/lang/no.js rename to xinha/plugins/SuperClean/lang/nb.js index 7642954..f8822d3 100644 --- a/xinha/plugins/SuperClean/lang/no.js +++ b/xinha/plugins/SuperClean/lang/nb.js @@ -1,5 +1,5 @@ // I18N constants -// LANG: "no", ENCODING: UTF-8 +// LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Clean up HTML": "Vask HTML kode", @@ -9,7 +9,7 @@ "Remove custom typefaces (font \"styles\").": "Fjerne egendefinerte skrifttyper (font face)", "Remove custom font sizes.": "Fjerne egendefinerte skriftstørrelser (font size)", "Remove custom text colors.": "Fjerne egendefinerte skriftfarger (font color)", - "Remove lang attributes.": "Fjerne lang attributter.", + "Remove lang attributes.": "Fjerne lang-attributter.", "Go": "Utfør", "Cancel": "Avbryt", "Tidy failed. Check your HTML for syntax errors.": "Tidy (Programmet som retter HTML koden) feilet. Vennligst se over HTML koden for feil.", diff --git a/xinha/plugins/SuperClean/super-clean.js b/xinha/plugins/SuperClean/super-clean.js index 1fd796a..a634984 100644 --- a/xinha/plugins/SuperClean/super-clean.js +++ b/xinha/plugins/SuperClean/super-clean.js @@ -1,285 +1,211 @@ -// Make our right side panel and insert appropriatly -function SuperClean(editor, args) -{ - this.editor = editor; - var superclean = this; - editor._superclean_on = false; - editor.config.registerButton('superclean', this._lc("Clean up HTML"), editor.imgURL('ed_superclean.gif', 'SuperClean'), 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); +function SuperClean(_1,_2){ +this.editor=_1; +var _3=this; +_1._superclean_on=false; +_1.config.registerButton("superclean",this._lc("Clean up HTML"),_1.imgURL("ed_superclean.gif","SuperClean"),true,function(e,_5,_6){ +_3._superClean(null,_6); +}); +_1.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._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(_7){ +return Xinha._lc(_7,"SuperClean"); }; - -SuperClean.prototype._lc = function(string) { - return HTMLArea._lc(string, 'SuperClean'); +SuperClean.prototype._superClean=function(_8,_9){ +var _a=this; +var _b=function(){ +var _c=_a._dialog.hide(); +var _d=_a.editor; +if(_c.word_clean){ +_d._wordClean(); +} +var D=_d.getInnerHTML(); +for(var _f in _d.config.SuperClean.filters){ +if(_f=="tidy"||_f=="word_clean"){ +continue; +} +if(_c[_f]){ +D=SuperClean.filterFunctions[_f](D,_d); +} +} +D=D.replace(/(style|class)="\s*"/gi,""); +D=D.replace(/<(font|span)\s*>/gi,""); +_d.setHTML(D); +if(_c.tidy){ +var _10=function(_11){ +eval("var response = "+_11); +switch(response.action){ +case "setHTML": +_d.setHTML(response.value); +break; +case "alert": +alert(_a._lc(response.value)); +break; +} }; - -/** superClean combines HTMLTidy, Word Cleaning and font stripping into a single function - * it works a bit differently in how it asks for parameters */ - -SuperClean.prototype._superClean = function(opts, obj) -{ - var superclean = this; - - // Do the clean if we got options - var doOK = function() - { - var opts = superclean._dialog.hide(); - var editor = superclean.editor; - - if(opts.word_clean) editor._wordClean(); - var D = editor.getInnerHTML(); - - for(var filter in editor.config.SuperClean.filters) - { - if(filter=='tidy' || filter=='word_clean') continue; - if(opts[filter]) - { - D = SuperClean.filterFunctions[filter](D); - } - } - - D = D.replace(/(style|class)="\s*"/gi, ''); - D = D.replace(/<(font|span)\s*>/gi, ''); - - editor.setHTML(D); - - if(opts.tidy) - { - HTMLArea._postback(editor.config.SuperClean.tidy_handler, {'content' : editor.getInnerHTML()}, - function(javascriptResponse) { eval(javascriptResponse) }); - } - return true; - } - - if(this.editor.config.SuperClean.show_dialog) - { - var inputs = {}; - this._dialog.show(inputs, doOK); - } - else - { - var editor = this.editor; - var html = editor.getInnerHTML(); - 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.setHTML(html); - - if(editor.config.SuperClean.filters.tidy) - { - SuperClean.filterFunctions.tidy(html, editor); - } - } +Xinha._postback(_d.config.SuperClean.tidy_handler,{"content":_d.getInnerHTML()},_10); +} +return true; }; - -HTMLArea.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': _editor_url + 'plugins/SuperClean/tidy.php', - - //avaliable filters (these are built-in filters) - 'filters': { 'tidy': HTMLArea._lc('General tidy up and correction of some problems.', 'SuperClean'), - 'word_clean': HTMLArea._lc('Clean bad HTML from Microsoft Word', 'SuperClean'), - 'remove_faces': HTMLArea._lc('Remove custom typefaces (font "styles").', 'SuperClean'), - 'remove_sizes': HTMLArea._lc('Remove custom font sizes.', 'SuperClean'), - 'remove_colors': HTMLArea._lc('Remove custom text colors.', 'SuperClean'), - 'remove_lang': HTMLArea._lc('Remove lang attributes.', 'SuperClean') - //additional custom filters (defined in plugins/SuperClean/filters/word.js) - //'paragraph': 'remove paragraphs'}, - //'word': 'exteded Word-Filter' }, - }, - //if false all filters are applied, if true a dialog asks what filters should be used - 'show_dialog': true +if(this.editor.config.SuperClean.show_dialog){ +var _12={}; +this._dialog.show(_12,_b); +}else{ +var _13=this.editor; +var _14=_13.getInnerHTML(); +for(var _15 in _13.config.SuperClean.filters){ +if(_15=="tidy"){ +continue; +} +_14=SuperClean.filterFunctions[_15](_14,_13); +} +_14=_14.replace(/(style|class)="\s*"/gi,""); +_14=_14.replace(/<(font|span)\s*>/gi,""); +_13.setHTML(_14); +if(_13.config.SuperClean.filters.tidy){ +SuperClean.filterFunctions.tidy(_14,_13); +} +} }; - -SuperClean.filterFunctions = { }; -SuperClean.filterFunctions.remove_colors = function(D) -{ - D = D.replace(/color="?[^" >]*"?/gi, ''); - // { (stops jedit's fold breaking) - D = D.replace(/([^-])color:[^;}"']+;?/gi, '$1'); - return(D); +Xinha.Config.prototype.SuperClean={"tidy_handler":_editor_url+"plugins/SuperClean/tidy.php","filters":{"tidy":Xinha._lc("General tidy up and correction of some problems.","SuperClean"),"word_clean":Xinha._lc("Clean bad HTML from Microsoft Word","SuperClean"),"remove_faces":Xinha._lc("Remove custom typefaces (font \"styles\").","SuperClean"),"remove_sizes":Xinha._lc("Remove custom font sizes.","SuperClean"),"remove_colors":Xinha._lc("Remove custom text colors.","SuperClean"),"remove_lang":Xinha._lc("Remove lang attributes.","SuperClean"),"remove_fancy_quotes":{label:Xinha._lc("Replace directional quote marks with non-directional quote marks.","SuperClean"),checked:false}},"show_dialog":true}; +SuperClean.filterFunctions={}; +SuperClean.filterFunctions.remove_colors=function(D){ +D=D.replace(/color="?[^" >]*"?/gi,""); +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_sizes=function(D){ +D=D.replace(/size="?[^" >]*"?/gi,""); +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_faces=function(D){ +D=D.replace(/face="?[^" >]*"?/gi,""); +D=D.replace(/font-family:[^;}"']+;?/gi,""); +return (D); }; -SuperClean.filterFunctions.remove_lang = function(D) -{ - D = D.replace(/lang="?[^" >]*"?/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.word_clean=function(_1a,_1b){ +_1b.setHTML(_1a); +_1b._wordClean(); +return _1b.getInnerHTML(); }; -SuperClean.filterFunctions.tidy = function(html, editor) -{ - HTMLArea._postback(editor.config.SuperClean.tidy_handler, {'content' : html}, - function(javascriptResponse) { eval(javascriptResponse) }); +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.prototype.onGenerate = function() -{ - if(this.editor.config.SuperClean.show_dialog && !this._dialog) - { - this._dialog = new SuperClean.Dialog(this); - } - 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; - } - - var sc = this; - //load the filter-functions - for(var filter in this.editor.config.SuperClean.filters) - { - if(!SuperClean.filterFunctions[filter]) - { - HTMLArea._getback(_editor_url + 'plugins/SuperClean/filters/'+filter+'.js', - function(func) { - eval('SuperClean.filterFunctions.'+filter+'='+func+';'); - sc.onGenerate(); - }); - return; - } - } +SuperClean.filterFunctions.tidy=function(_1d,_1e){ +Xinha._postback(_1e.config.SuperClean.tidy_handler,{"content":_1d},function(_1f){ +eval(_1f); +}); }; -// Inline Dialog for SuperClean - - -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.files = false; - this.html = false; - this.dialog = false; - - // load the dTree script - this._prepareDialog(); - +SuperClean.prototype.onGenerate=function(){ +if(this.editor.config.SuperClean.show_dialog&&!this._dialog){ +this._dialog=new SuperClean.Dialog(this); +} +if(this.editor.config.tidy_handler){ +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){ +this.editor.config.filters.tidy=null; +} +var sc=this; +for(var _21 in this.editor.config.SuperClean.filters){ +if(!SuperClean.filterFunctions[_21]){ +var _22=this.editor.config.SuperClean.filters[_21]; +if(typeof _22.filterFunction!="undefined"){ +SuperClean.filterFunctions[_21]=filterFunction; +}else{ +Xinha._getback(_editor_url+"plugins/SuperClean/filters/"+_21+".js",function(_23){ +eval("SuperClean.filterFunctions."+_21+"="+_23+";"); +sc.onGenerate(); +}); +} +return; +} +} }; - -SuperClean.Dialog.prototype._prepareDialog = function() -{ - var lDialog = this; - var SuperClean = this.SuperClean; - - if(this.html == false) - { - HTMLArea._getback(_editor_url + 'plugins/SuperClean/dialog.html', function(txt) { lDialog.html = txt; lDialog._prepareDialog(); }); - return; - } - - var htmlFilters = ""; - for(var filter in this.SuperClean.editor.config.SuperClean.filters) - { - htmlFilters += "
    \n"; - htmlFilters += " \n"; - htmlFilters += " \n"; - htmlFilters += "
    \n"; - } - this.html = this.html.replace('', htmlFilters); - - var html = this.html; - - // Now we have everything we need, so we can build the dialog. - var dialog = this.dialog = new HTMLArea.Dialog(SuperClean.editor, this.html, 'SuperClean'); - - this.ready = true; +SuperClean.Dialog=function(_24){ +var _25=this; +this.Dialog_nxtid=0; +this.SuperClean=_24; +this.id={}; +this.ready=false; +this.files=false; +this.html=false; +this.dialog=false; +this._prepareDialog(); }; - -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()}; - } - - // Show the dialog - this.SuperClean.editor.disableToolbar(['fullscreen','SuperClean']); - - this.dialog.show(inputs); - - // Init the sizes - this.dialog.onresize(); +SuperClean.Dialog.prototype._prepareDialog=function(){ +var _26=this; +var _27=this.SuperClean; +if(this.html==false){ +Xinha._getback(_editor_url+"plugins/SuperClean/dialog.html",function(txt){ +_26.html=txt; +_26._prepareDialog(); +}); +return; +} +var _29=""; +for(var _2a in this.SuperClean.editor.config.SuperClean.filters){ +_29+="
    \n"; +var _2b=this.SuperClean.editor.config.SuperClean.filters[_2a]; +if(typeof _2b.label=="undefined"){ +_29+=" \n"; +_29+=" \n"; +}else{ +_29+=" \n"; +_29+=" \n"; +} +_29+="
    \n"; +} +this.html=this.html.replace("",_29); +var _2c=this.html; +var _2d=this.dialog=new Xinha.Dialog(_27.editor,this.html,"SuperClean"); +this.ready=true; }; - -SuperClean.Dialog.prototype.hide = function() -{ - this.SuperClean.editor.enableToolbar(); - return this.dialog.hide(); -}; \ No newline at end of file +SuperClean.Dialog.prototype._lc=SuperClean.prototype._lc; +SuperClean.Dialog.prototype.show=function(_2e,ok,_30){ +if(!this.ready){ +var _31=this; +window.setTimeout(function(){ +_31.show(_2e,ok,_30); +},100); +return; +} +var _32=this.dialog; +var _31=this; +if(ok){ +this.dialog.getElementById("ok").onclick=ok; +}else{ +this.dialog.getElementById("ok").onclick=function(){ +_31.hide(); +}; +} +if(_30){ +this.dialog.getElementById("cancel").onclick=_30; +}else{ +this.dialog.getElementById("cancel").onclick=function(){ +_31.hide(); +}; +} +this.SuperClean.editor.disableToolbar(["fullscreen","SuperClean"]); +this.dialog.show(_2e); +this.dialog.onresize(); +}; +SuperClean.Dialog.prototype.hide=function(){ +this.SuperClean.editor.enableToolbar(); +return this.dialog.hide(); +}; + diff --git a/xinha/plugins/SuperClean/tidy.php b/xinha/plugins/SuperClean/tidy.php index 678fee2..84cc7e4 100644 --- a/xinha/plugins/SuperClean/tidy.php +++ b/xinha/plugins/SuperClean/tidy.php @@ -1,179 +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(E_NONE); - 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)) - { - // 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('/ +,{,},@,\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(E_NONE); + 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/xinha/plugins/TableOperations/img/cell-delete.gif b/xinha/plugins/TableOperations/img/cell-delete.gif index 40b2ab19d4185abd56b5c67779f5c78d37c2dbb0..2fd629b59d31692ea0b08cdc97d38ee99011aa1f 100644 GIT binary patch literal 207 zcmZ?wbhEHb6k-r!IK#m3|Nnmjj|2t=h7UjfUwH6;!G;45KK$RX}hX3pLTzK&R|Ns9B7Hqg*(Efk_x%Ue;E!c2i!+{G86BbNZuwmxR zng9R)2bl}Tia%LcMHpllbU-|ioeZo&3hI3+ne#GM6-5;2-r8K$SYjY(7+)U3W6axV zFhhd1=?q81tPlY)Rz`=V^H>Dfk1h~4bYB~uWFWIBYwxjj;V)L{rGDn>EnZ%+qs$<0 L{?Gr)iVW5OJv(3c diff --git a/xinha/plugins/TableOperations/img/cell-insert-after.gif b/xinha/plugins/TableOperations/img/cell-insert-after.gif index bea49e912e9c37123681b1d7f2ce9bc8fdfe39b4..ddea8a02451fa713a9b06e619b60fa673ed0091b 100644 GIT binary patch literal 323 zcmZ?wbhEHb6k-r!xXZxs|NnnO&!mYnH~#^QLS;D?3@3l7})KVim(tB*efc0Qc2<3nBFyr&=koWK9Cp`oE*=0^r90mYvztRf5y z3_6SqObh}Hd<+b12@Y(n1p*ulCzeby$OscUrSV`xM}`68N~2~C4JOvyNgFb4WCA{3 zd1H`zb^g2WxeOB4!X8#xFZxyFl+^QsN`+Nr#1&hj1Q`4Kom||q7<`zyRm7%-2ns21 OO=XH@?Vsw%U=09t$#mHO literal 330 zcmZ?wbhEHb6k-r!xXJ(m3sxK`teklD@dwAiLPO7_z|Mygc6?}-1z|oifGA+t)uM aL{(faA&OIqnI%CcS!G(n>NW0;4AubV%YPgI diff --git a/xinha/plugins/TableOperations/img/cell-insert-before.gif b/xinha/plugins/TableOperations/img/cell-insert-before.gif index 5822174975d67d572e272e0f84eb4a8cd6963f04..2e7b36b63dce617734e6fa43eacf6ab159b508e8 100644 GIT binary patch literal 325 zcmZ?wbhEHb6k-r!xXZxs|NnmjkAw*`HZ0h1;Q#;s4iN8y>v)U(hjO=FFKBIwpMh@ULOQf`W<(8+II+uwcW69T)CAcz3}7FH1k1_m8Q z1||jp20jJ`wj>Ac)Pxlr3@4TpIVh+Y$t)E~@Nkh*I2xkqAi~vnplpr}0}E4U@}?Vd z_a?bLR~FjM*mu!Qn2V#+%}Y43g;|1!Um!PytwTVrELkm%i;*>j!N*snJ2_NPReWM} MEbG+8!Hx{p01Sa}ssI20 literal 332 zcmZ?wbhEHb6k-r!xXJ(m3sxK`sF-l&(R+u00t1hPfQ|P%z`eh7}v0JbC~B|Nn%7hM6;GHgqhQIdkTN7ymCj_+QX5;q$le z2?Y}l>^QJs!-0kcA0~86aEK_FuwcWJ55GVB_`l%5hdU46&zw2)|Ns9WyD7$sKUr8s z7&I7kKqi6w#K4y6Fr~mlN2=fB%HoHd9TF!OrW+~tS_CFGOgX^A5h>y<$R)~^sN!(O zA%kU#Nogo0tN|Q+c((um diff --git a/xinha/plugins/TableOperations/img/cell-merge.gif b/xinha/plugins/TableOperations/img/cell-merge.gif index 4bb9bc3fe11cac64eb32a125bf9fd274026a14f8..2da38f3c14f363ea69e2ef964cac625ddc6a92b2 100644 GIT binary patch literal 360 zcmZ?wbhEHb6k-r!xXZxs9}EmU5*8fzKVirJ4JZC@xbT0%f(;8c9GI}-f5D6g4Koe| z6f9_1@StJE{{=fPG;H|4V8wxiiUkWcTv)K<|AZ9>3TAvrs5ns2upy!0Ktja^gNO+Q z6E+k~xDZgVVZwp~4ha(iG8Po~taZp(px`mVAz?v6!-j;83kCrb7^ndhf3mQOFfcIa zFfuSR2r%$6FtD{c97(otln|WgvGmhV8MVd(N?ua~7B{(N{Y)V&S5%n^3-WZ25SJlI(q#8 literal 377 zcmZ?wbhEHb6k-r!xXQp_;E_-;<3quO4gdfDcSu;UV8{Q02^SPRCL~lWSg_$j!;1eC zRvg%H;(tQJh6xKcOxW;0q2WM6#fF9j4;&IE1Y|4-DA>?2jGf)F4{$ybl zVbEaE0T~AJ69d~chbaXfI#T^7mINthshI?v&DatVqsNz+WU!%Ne}}%ff=J=sq)8PH zZmK$BjSZI_CTO&Dau#P~?@*O)YU1HhXqU@Xj*)3@ZBt;C6Y7c)Y?+`SC&w?D%N@hf z-#%#$7h5i$po+@O+5C!Ji~=iT)R(N^$S5hhm05V!9K~Id@}m3HCJPBkO0o&aii)gc QxO(mS4X<0bT^t##0jYk0b^rhX diff --git a/xinha/plugins/TableOperations/img/cell-prop.gif b/xinha/plugins/TableOperations/img/cell-prop.gif index d8bd26e1878d1a4bcfb84fe940047383f3728003..e9495aa8bba8dc6eddf3464ed15e39207fe016a4 100644 GIT binary patch literal 352 zcmZ?wbhEHb6k-r!xXZxs9}EmU5*BPYuwloA2@5t%Sn*-QfeQytTv)K;z|)%g2`dgb z6g+tF;s1dP4?cYO?@;mJ!;k+DUi@Eh;D12JgMVo#L2|n-pR$% zE7i}c%AwiN)WXck&BU6)UdqcXr693rNosd5=V~q1#nO$w{B%RaPZIpM+R#E D=2noC literal 377 zcmZ?wbhEHb6k-r!xXQp_;E{0P#Dxhf4j8AMxmQzv;lclg6(1%n*pM*c!T%rs7wouj z;KYM~jt3Jq{QvOb|Ah+=3T8ZTD0nbo#fJ?SJ`~LOuwcW14F@hfc=5ks!G{G0{$IH9 zp<%`UgpLObHeA@S42M<2{KXBne!GaG@YwCk~ z?oHV7|H6$2|NsAIAPXq|WMLIy&}Gm8=?3|UfoX$2lSQvD~EY*Nki;*sEDIhZ)b zOK_3O;n=lOvw68(C3&~_zL=8OyW_lbYewCyZl>Z%><({kye<~wRN)h?aTe84SLbGA z6cdw^6K!)*EMwH1CC8^GuGsFxG-H;g+&tC=F6{h_@)IUa5mjVbsLNg^)}kiLDy6V> lb=jPGiu;Axx3P0ioIGU<6Z^^43|FsRzvg}Gwv!`+H2|zQo+y4O+L_)GQ(3sc%sMBM;~>J8X1(lLIV~v zd6rbE#xOVWFexS(XmB~PKgw7U(Bv|uaD_5oGvmPo4Nj%vQg)t7HUR}z;rc+CV(Lk7>>)ZaFbAUL_$Wj`aeMpFDl$_2Q+ABZD;nQ6h+H diff --git a/xinha/plugins/TableOperations/img/col-delete.gif b/xinha/plugins/TableOperations/img/col-delete.gif index aacb0a41d65d38439b1861aa30cea571fd6e85d9..5202886e427b111f6c36931ce5b374f785e32794 100644 GIT binary patch literal 208 zcmZ?wbhEHb6k-r!IK#m3|Nnmjj|2uVqo85J|NTc33MRatu;l%Mwg2~@3&?1guwcW? znKS>d-*Z2q+99IgeZ!>p33c}kLK`|3ykD?s!GaC<1M(KEIB?$~>b`;R{e~&;C(QhR z=FEm22i_NSH*`!;{K>*9!oa|w!_2_Mz{|kLz`*L8V9w)kRMpjh>7XkUPuB{D-B$`O z<}k|Xw7Dl-T9CoS)+)gMLxHbPPT1YTLFbZY!-LL*O~FmhlNgOTPc~F)UC6qfr)I+^ NaO34xOFb3_YXJJ~TjBr! literal 218 zcmZ?wbhEHb6k-r!IKlt|_YHg#3MTwtzsJBM;eNxE|NsBboH_G;LbXFg!GaYB3K}N7 zU$FMRL)8EMN8eAF8IaNNzM#9IW5R?58~&d;vth@9`vH0H6YAbKO!~k7-1`Na7A)BC ze!`Ob2B8fd3;zHAulSRNRfIvFK?h_L$W8{<@CWLBDVg(LL`WXn9yrr^gM6UY+wvo4 zbZ#v<`Qm|uO~ckpE)x_g*k&;~GGs1O;o)PN`Af$_g4=v+M~qbR6{d@vOZ>UD9`-Vo W_YlZ91;fq_AXnSqgkmqCDmfi2acK|o-pfn3MJNg1CSm`*=@7}4a$xSU@r zrB_KqG_brg!og(q>w*Pgn{GEW%E62@c;k- literal 337 zcmZ?wbhEHb6k-r!xXJ(m4iyg)G8zt?IAGwB5YX|#!NFm}iVX!76EUYm~i32{{WAGnKNfjSh1mD z#fJquJ{-95-yxtNVZw)o2@7VYlZ91;fq_AXnSqgkmqCDmfi20QK|o-pfn3MJNg1CSm`*=@7}4a$xSU@r zrB_KqG_brg!og(q>w*Pgn{GEW%EPmX)(sQ;dO4I98{YRmG9P8UQuaa8CdL literal 336 zcmZ?wbhEHb6k-r!xXJ(m4iyg)G8zt?IAGwB5YX|#!NFm}iVX!76EUYm~i32{{WAGnKNfjSh1mD z#fJquJ{-95-yxtNVZw)o2@7V#6W2iZ$`ERk}JdSOWmkb9p)d diff --git a/xinha/plugins/TableOperations/img/col-split.gif b/xinha/plugins/TableOperations/img/col-split.gif index 3e4d59bc1c96477eda937e2bb71ab9a0b2523dbd..2fbe9497b444a048c179269e18710746ceac84ea 100644 GIT binary patch literal 377 zcmZ?wbhEHb6k-r!xXZxs9}EmU5*8fzKVirJ4JZC@xbT0$h64cw3nnbsP%z^`!-NA4 z2@@8qIFL}WV8MRKUr8s7#J9I7#Wxu1Q>W37}%yAIGkKzDZ$_Cwsg`-6}`p-N?xS_i<{g_s$653 zn@%S^{Fr0H*P?M~!IF?B=aQ5a`aG>nNd^iWQi0N?Y|53)g2F69^??edtWq`1JS+lS zOrn8&m8^WsogxAf@=Tlx92~4Q94u26C1ll>2CCNx3r-c&k>yg^%*a#A!XqXoq0OZs bvtOi3NRf+6UR6a#X(`jqTet5xGFSru4e)$& literal 394 zcmZ?wbhEHb6k-r!xXQpFV31HS<3m8fhX4QnD|k$puwcW21OE#qYzW9$(6Hdaf(-{I zZ1}I>P*5=AK|#ZY4JZCPBuq%CIAGwB(6HkFgaro*CR|9USg>Hj1%rTwgo+If6Al;z zOi1XsFk#344Hy0|SaHB1VS$22!-5_E7wotYP_Uq3!~f!*wG&nxNNCt#5HZ0aV?jd0 zf&c&iGmr}uf3mQOFz7JofD8cniGgjo!?Xeq9jX2kOM(ou;zRYH*=o z|1|w@C7Hs#Ns}rZ(qc_!9X{B&X@Y=)N0xJj_6{|J7r8UWKOgmnM_ diff --git a/xinha/plugins/TableOperations/img/row-delete.gif b/xinha/plugins/TableOperations/img/row-delete.gif index 9e88f6fd9f6e5da5335604d309b635a766899f2f..1fed389153245ad760e9e94890c769cd8c393923 100644 GIT binary patch literal 328 zcmZ?wbhEHb6k-r!xXZxs9}EmU5-&Vd{~zBsOxW;${hox12@Es7Q3axhak*IMHEiZN29-`CACam{3w1HTo6 zE=clm%CNMw@N>yF@X2%bN_bT=O`1GKFeoIH*&`_=wmd3^nLSQ9iDAklL8)bq4Auaa C&Tzc| literal 336 zcmZ?wbhEHb6k-r!xXJ(m?*obo8Wucw@!uh$;QfZZ1|A9TCoEa8;=up+U;mxI`M#ia z=FFJ^2@M}U{QrOd(f|EN6ABs{CM?*nfJ`@c;jRkj2!%ia%LcMHti> zbU=oI{KUYPdth>bhmKVLi6uowjFy5O{YEZpi%f!79}YfQw5_?(;iqQ3Rz_!3kxzmg zm*5futAHC$2L$w9^}G^MWfWv+ZFN#oR%uj~WbEg4u5x0VI&C_OduWJ^Opxd7c)1FX XIWlr`%+g-dr?RMdZQQiUk--`O8O?s- diff --git a/xinha/plugins/TableOperations/img/row-insert-above.gif b/xinha/plugins/TableOperations/img/row-insert-above.gif index fc2992cdd95422d820ae23c020ec1efed197a853..3cbeceb3961f68e926caa803c54c6a2322269d5c 100644 GIT binary patch literal 327 zcmZ?wbhEHb6k-r!xXZxs|NnmjkA#^sXEK1<6FMe*`0+oXprN6m;lYRh6J~7Kuwui4 z4F?{)_A3pq_uwcW10|x>E0vb9dEZFfO zVZsN8h=PU*3j#VmI5;>IR1|Eu@ZX{0K|n%5Lr24e4IdgNY;XujICJJqLPo=d2md#m z_^@Ebh5(O%f*BteNCb*MSy)9F7#MUI8JHOa7wbo>m)8v2KYZ(R-|lj=`rUXgN7-I?~YV$IQ@F z6ur+=OQE|#w5!dEF`YPuO<{MHhZqveEmhT!Ll+khQeII>w_H`tN}I2 Bh9>|3 diff --git a/xinha/plugins/TableOperations/img/row-insert-under.gif b/xinha/plugins/TableOperations/img/row-insert-under.gif index 60543ab2fafe52493fb014680136bfd7c3297120..89fc5889987e68cee54e4f882c0bfdcbff0ce86b 100644 GIT binary patch literal 327 zcmZ?wbhEHb6k-r!xXZxs|NnmjkA#^sXEK1<6FMe*`0+oXprN6m;lYRh6J~7Kuwui4 z4F?{)_A3pq_uwcW10|x>E0vb9dEZFfO zVZsN8h=PU*3j#VmI5;>IR1|Eu@ZX{0K|n%5Lr24e4IdgNY;XujICJJqLPo=d2md#m z_^@Ebh5(O%f*BteNCb*MSy)9F7#MUI8JHOa7^5XhT5jA~zW!aKYcE&D7 n4HrQkAt7<~XeU9I8EkA*8F*%jan8}5#mUJ#hpV&Ok--`Oq4<1* literal 333 zcmZ?wbhEHb6k-r!xXJ(m3pN~R=x7K?D0uMVzkx?W!-NeJHhfsH;($ZN0|y6(fQ}Cv zF8nX3C~yc!II!cuhadkJtk^Jf=F9+(fPxtx5;7VlbWAvN=FI;e|2LfYaN)uK4LdF* zL?kpcG&D?D@ZrP%w6wGdGd3JJaiC$vhXp%69Juj+!-@?F6FxXZ6f|^9m^pLigAe}` z3L5_Z|36{Dh64u3fuepWsgX+{nXJ+@$J-8ljR!Hjd|wSxucX=}3tEA~wYULWkpU=09p C#)n=2 diff --git a/xinha/plugins/TableOperations/img/row-prop.gif b/xinha/plugins/TableOperations/img/row-prop.gif index 5f3dc93348088110fe1148f8bfcf3c0bdb9b26da..7a900115f535713318fccba2d326ebbeb5c75736 100644 GIT binary patch literal 354 zcmZ?wbhEHb6k-r!xXZxs|NnmjkA(mK|39s%U$Ei8h8-6sEZ8t%#fJ?CE-YAa;J}Fs z6IL8>D0pz-!h>rS^$8Om6fF3#;J|-}iU%J){QvOdf5VFZ2X1@_Xn1ho#DfVt{u`&A zxp3pdgAe~3R(xn!@S$MFg9|qv+^eZyu;app3m^Xf`2XO=|8oWP3pQK`=y*^(<$c18 z4;LQ%zi{EffddyNZ1~SWI#B${!YabRz@Wp#z|6qMz{|kER)3)R!-bDa?D~(pDkaJ& zUGO;;y3%2t*4YgmF1nHly&evE6Ii*7mI_$RJ)6SPX{5-)vA~Uaae#sVD=SMGCvzKD z8#AjSA0HP{H%>eA;luxe1s@h1_`hJog@BF+7jAqw zaN@y)6(1(7IN(t5V8ewE|9|{1nDOAji~mn+>JJ>aFk!?0h6Nu28XhdzaNxp)2MH4% zY}j$3Va5Mz74^ka-Y3lXaN)uK12;Y_SaIP0|NjmZ4?g_(f8fG{h7}*~)zlw2ap77? z{eutxC+zs2Jmubk9TzU#c<}%Ke+E*3;!hS<5e5SW9grrFpBUI?ILs*U(2?ptu|()t zhLN9`zsusC6Fm5o9v?{Es3p^v_(w5g_JzztuQF!0ubX&BMSkg%rMwLtD=t4}6i{WA zsCJgnS5xEG)MR9omX>IBQ4*f6IbB#0M(NotDpPn;~F#JkXd xsg$u0}2iW1_2EV zcKi>>STJG1fr1Ga0tz-1%=nN{v7unX1_h4^0vZ7h84DCV8Vmv^By?O*uqa5VIKV(I zQ2fclD#F0Ppu@<(%pkzP%fP_aalkpb!%~8O;)$o9eySKWHYjK)Ud>>$+;wP#dXe>#(fGMXWmv+GRv~^*9Iylr)TB}$VfAZ2l6ylwXjNx zC@^s<`Sg_(i!;Aw40TU8B zE)>jou;If02|NB91T;7#ELgDNz=9nY7VP*RP_Uq3!~cYa4aGfcC#*PN5HZ0aV?jd0 z0R@MG|Ns9pkOdTfvapIU=rZVlbc6iFz&7*1v;q$uss0m7j8w9$oGu8kH9NT~u`WzD zI8m^Fntr&FNa5b3Nfi!xmPRv~n-e!p5K!>&a?WVq!6Vz$#Lv&xE|)9O(A?U_rYy(V z6(e3yQdX%cuam10Bi7eGQI1=LH diff --git a/xinha/plugins/TableOperations/img/table-prop.gif b/xinha/plugins/TableOperations/img/table-prop.gif index fbc4d2a52b933cce8561ed59340b11b3c0622849..10ec55349f91459e0e20d7fc3b832fa9e8ebca43 100644 GIT binary patch literal 338 zcmZ?wbhEHb6k-r!xU0fWV8ej}CoW7_uwlZA4;v0#n6To& zf)xiG3LYd(c;Ha+;9Nm{K*xgx2marysXuVx!GRMGChYiMu;4?(f)52VJ{YH+DVXt~ zVa5N36(25KcyQsyg9RHdB+U45;J}3iJ1$Jv@SlMOK=CIFqX+{7gANk|GXoz3F9QQx zzC(+^!JP>vy=+GwCMYOf@JiisGeSoqAT7ehXO@#r z&!;#UN(gZ>GqaX+7iMJTa5HhW7ngRk%d#mpG_|mDb1|{^WoEO?o}1QD%05S=vAJay R7yI(%Oq(`u+2qJz4FEPhbt(V= literal 375 zcmZ?wbhEHb6k-r!xXQp_;E{0P!h;1X4mcD%n6O~Og$Mr=W_(z%;ev76ng2ijFF5eO zVa11p2@eh&xbWe_{{tr;G_3f4;lhJ}jt3J~9N4hqLc@X&4_^G=aN)y*4gV*s_)sw8 z!G#+i3TAxx|NsAn0~Z!-IB?*`hYvsgJ5)S)@Zo>Kf)58yTnOs9mptX(gdP7E?6`2@ z#)JR=|1(ek6o0a?iZEz1=zz=s`H6vT%7Li`9y(I}CzcdV%}f&$?Q1(Yp~Hna$?c%) zLIVMg&Lf5jTYO)HB+2eLe>fyvZbrG+X8~3Rn;Wl- -{ - "Align": "Zarovnání", - "All four sides": "VÅ¡echny ÄtyÅ™i strany", - "Background": "Pozadí", - "Baseline": "Základní linka", - "Border": "Obrys", - "Borders": "Obrysy", - "Bottom": "Dolů", - "Style [CSS]": "Kaskádové styly (CSS)", - "Caption": "Titulek", - "Cell Properties": "Vlastnosti buňky", - "Center": "Na stÅ™ed", - "Char": "Znak", - "Collapsed borders": "StlaÄené okraje", - "Color": "Barva", - "Description": "Popis", - "FG Color": "Barva popÅ™edí", - "Float": "Obtékání", - "Frames": "RámeÄky", - "Height": "Výška", - "How many columns would you like to merge?": "Kolik sloupců si pÅ™ejete spojit?", - "How many rows would you like to merge?": "Kolik řádků si pÅ™ejete spojit?", - "Image URL": "Adresa obrázku", - "Justify": "Do stran", - "Layout": "Rozložení", - "Left": "Vlevo", - "Margin": "Okraj", - "Middle": "Na stÅ™ed", - "No rules": "Žádné Äáry", - "No sides": "Žádné strany", - "None": "Žádné", - "Padding": "Odsazování", - "Please click into some cell": "Prosím kliknÄ›te do nÄ›které buňky", - "Right": "Vpravo", - "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", - "Rules": "Čáry", - "Spacing and padding": "Mezery a odsazování", - "Spacing": "Mezery", - "Summary": "Shrnutí", - "Delete cell": "Smazat buňku", - "Insert cell after": "Vložit buňku za", - "Insert cell before": "Vložit buňku pÅ™ed", - "Merge cells": "Spojit buňky", - "Cell properties": "Vlastnosti buňky", - "Split cell": "RozdÄ›lit buňku", - "Delete column": "Smazat sloupec", - "Insert column after": "Vložit sloupec za", - "Insert column before": "Vložit sloupec pÅ™ed", - "Split column": "RozdÄ›lit sloupec", - "Delete row": "Smazat řádek", - "Insert row before": "Smazat řádek nad", - "Insert row after": "Smazat řádek pod", - "Row properties": "Vlastnosti řádku", - "Split row": "RozdÄ›lit řádek", - "Table properties": "Vlastnosti tabulky", - "Table Properties": "Vlastnosti tabulky", - "Text align": "Zarovnání textu", - "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", - "Top": "Nahoru", - "Unset color": "ZruÅ¡it barvu", - "Vertical align": "Svislé zarovnání", - "Width": "Šířka", - "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea zbabÄ›le odmítá smazat poslední buňku v řádku.", - "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea zbabÄ›le odmítá smazat poslední sloupec v tabulce.", - "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea zbabÄ›le odmítá smazat poslední řádek v tabulce.", - "percent": "procent", - "pixels": "pixelů" -}; +// I18N constants +// LANG: "cz", ENCODING: UTF-8 +// Author: Jiri Löw, +{ + "Align": "Zarovnání", + "All four sides": "VÅ¡echny ÄtyÅ™i strany", + "Background": "Pozadí", + "Baseline": "Základní linka", + "Border": "Obrys", + "Borders": "Obrysy", + "Bottom": "Dolů", + "Style [CSS]": "Kaskádové styly (CSS)", + "Caption": "Titulek", + "Cell Properties": "Vlastnosti buňky", + "Center": "Na stÅ™ed", + "Char": "Znak", + "Collapsed borders": "StlaÄené okraje", + "Color": "Barva", + "Description": "Popis", + "FG Color": "Barva popÅ™edí", + "Float": "Obtékání", + "Frames": "RámeÄky", + "Height": "Výška", + "How many columns would you like to merge?": "Kolik sloupců si pÅ™ejete spojit?", + "How many rows would you like to merge?": "Kolik řádků si pÅ™ejete spojit?", + "Image URL": "Adresa obrázku", + "Justify": "Do stran", + "Layout": "Rozložení", + "Left": "Vlevo", + "Margin": "Okraj", + "Middle": "Na stÅ™ed", + "No rules": "Žádné Äáry", + "No sides": "Žádné strany", + "None": "Žádné", + "Padding": "Odsazování", + "Please click into some cell": "Prosím kliknÄ›te do nÄ›které buňky", + "Right": "Vpravo", + "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", + "Rules": "Čáry", + "Spacing and padding": "Mezery a odsazování", + "Spacing": "Mezery", + "Summary": "Shrnutí", + "Delete cell": "Smazat buňku", + "Insert cell after": "Vložit buňku za", + "Insert cell before": "Vložit buňku pÅ™ed", + "Merge cells": "Spojit buňky", + "Cell properties": "Vlastnosti buňky", + "Split cell": "RozdÄ›lit buňku", + "Delete column": "Smazat sloupec", + "Insert column after": "Vložit sloupec za", + "Insert column before": "Vložit sloupec pÅ™ed", + "Split column": "RozdÄ›lit sloupec", + "Delete row": "Smazat řádek", + "Insert row before": "Smazat řádek nad", + "Insert row after": "Smazat řádek pod", + "Row properties": "Vlastnosti řádku", + "Split row": "RozdÄ›lit řádek", + "Table properties": "Vlastnosti tabulky", + "Table Properties": "Vlastnosti tabulky", + "Text align": "Zarovnání textu", + "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", + "Top": "Nahoru", + "Unset color": "ZruÅ¡it barvu", + "Vertical align": "Svislé zarovnání", + "Width": "Šířka", + "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea zbabÄ›le odmítá smazat poslední buňku v řádku.", + "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea zbabÄ›le odmítá smazat poslední sloupec v tabulce.", + "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea zbabÄ›le odmítá smazat poslední řádek v tabulce.", + "percent": "procent", + "pixels": "pixelů" +}; diff --git a/xinha/plugins/TableOperations/lang/da.js b/xinha/plugins/TableOperations/lang/da.js index 60c1472..b15072b 100644 --- a/xinha/plugins/TableOperations/lang/da.js +++ b/xinha/plugins/TableOperations/lang/da.js @@ -1,79 +1,79 @@ -// I18N constants -// LANG: "da", ENCODING: UTF-8 -// Author: Steen Sønderup, -{ - "Align": "Placer", - "All four sides": "Alle fire sider", - "Background": "Baggrund", - "Baseline": "Bundlinie", - "Border": "Kant", - "Borders": "Kanter", - "Bottom": "Bund", - "Style [CSS]": "Stil [CSS]", - "Caption": "Titel", - "Cell Properties": "Celle egenskaber", - "Center": "Centrer", - "Char": "Plads", - "Collapsed borders": "Sammensmelt rammer", - "Color": "Farve", - "Description": "Beskrivelse", - "FG Color": "Font farve", - "Float": "Justering", - "Frames": "Udvendig", - "Height": "Højde", - "How many columns would you like to merge?": "Hvor mange kollonner vil du samle?", - "How many rows would you like to merge?": "Hvor mange rækker vil du samle?", - "Image URL": "Billede URL", - "Justify": "Lige margener", - "Layout": "Opsætning", - "Left": "Venstre", - "Margin": "Margen", - "Middle": "Centrer", - "No rules": "Ingen rammer", - "No sides": "Ingen sider", - "None": "Ingen", - "Padding": "Margen", - "Please click into some cell": "Klik pÃ¥ en celle", - "Right": "Højre", - "Row Properties": "Række egenskaber", - "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", - "Rules": "Invendig", - "Spacing and padding": "Afstand og margen", - "Spacing": "Afstand", - "Summary": "Beskrivelse", - "Delete cell": "Slet celle", - "Insert cell after": "Indsæt celle efter", - "Insert cell before": "Indsæt celle før", - "Merge cells": "Sammensæt celler", - "Cell properties": "Celle egenskaber", - "Split cell": "Opdel celle", - "Delete column": "Slet kollonne", - "Insert column after": "Indsæt kolonne efter", - "Insert column before": "Indsæt kolonne før", - "Split column": "Opdel kolonne", - "Delete row": "Slet række", - "Insert row before": "Indsæt række før", - "Insert row after": "Indsæt række efter", - "Row properties": "Række egenskaber", - "Split row": "Opdel række", - "Table properties": "Tabel egenskaber", - "Table Properties": "Tabel egenskaber", - "Text align": "Tekst", - "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", - "Top": "Top", - "Unset color": "Farve ikke valgt", - "Vertical align": "Vertikal placering", - "Width": "Bredde", - "HTMLArea cowardly refuses to delete the last cell in row.": "Du kan ikke slette den sidste celle i en række.", - "HTMLArea cowardly refuses to delete the last column in table.": "Du kan ikke slette den sidste kolonne i en tabel.", - "HTMLArea cowardly refuses to delete the last row in table.": "Du kan ikke slette den sidste række i en tabel.", - "percent": "procent", - "pixels": "pixel" -}; +// I18N constants +// LANG: "da", ENCODING: UTF-8 +// Author: Steen Sønderup, +{ + "Align": "Placer", + "All four sides": "Alle fire sider", + "Background": "Baggrund", + "Baseline": "Bundlinie", + "Border": "Kant", + "Borders": "Kanter", + "Bottom": "Bund", + "Style [CSS]": "Stil [CSS]", + "Caption": "Titel", + "Cell Properties": "Celle egenskaber", + "Center": "Centrer", + "Char": "Plads", + "Collapsed borders": "Sammensmelt rammer", + "Color": "Farve", + "Description": "Beskrivelse", + "FG Color": "Font farve", + "Float": "Justering", + "Frames": "Udvendig", + "Height": "Højde", + "How many columns would you like to merge?": "Hvor mange kollonner vil du samle?", + "How many rows would you like to merge?": "Hvor mange rækker vil du samle?", + "Image URL": "Billede URL", + "Justify": "Lige margener", + "Layout": "Opsætning", + "Left": "Venstre", + "Margin": "Margen", + "Middle": "Centrer", + "No rules": "Ingen rammer", + "No sides": "Ingen sider", + "None": "Ingen", + "Padding": "Margen", + "Please click into some cell": "Klik pÃ¥ en celle", + "Right": "Højre", + "Row Properties": "Række egenskaber", + "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", + "Rules": "Invendig", + "Spacing and padding": "Afstand og margen", + "Spacing": "Afstand", + "Summary": "Beskrivelse", + "Delete cell": "Slet celle", + "Insert cell after": "Indsæt celle efter", + "Insert cell before": "Indsæt celle før", + "Merge cells": "Sammensæt celler", + "Cell properties": "Celle egenskaber", + "Split cell": "Opdel celle", + "Delete column": "Slet kollonne", + "Insert column after": "Indsæt kolonne efter", + "Insert column before": "Indsæt kolonne før", + "Split column": "Opdel kolonne", + "Delete row": "Slet række", + "Insert row before": "Indsæt række før", + "Insert row after": "Indsæt række efter", + "Row properties": "Række egenskaber", + "Split row": "Opdel række", + "Table properties": "Tabel egenskaber", + "Table Properties": "Tabel egenskaber", + "Text align": "Tekst", + "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", + "Top": "Top", + "Unset color": "Farve ikke valgt", + "Vertical align": "Vertikal placering", + "Width": "Bredde", + "HTMLArea cowardly refuses to delete the last cell in row.": "Du kan ikke slette den sidste celle i en række.", + "HTMLArea cowardly refuses to delete the last column in table.": "Du kan ikke slette den sidste kolonne i en tabel.", + "HTMLArea cowardly refuses to delete the last row in table.": "Du kan ikke slette den sidste række i en tabel.", + "percent": "procent", + "pixels": "pixel" +}; diff --git a/xinha/plugins/TableOperations/lang/de.js b/xinha/plugins/TableOperations/lang/de.js index 67c85dc..2088b20 100644 --- a/xinha/plugins/TableOperations/lang/de.js +++ b/xinha/plugins/TableOperations/lang/de.js @@ -1,81 +1,81 @@ -// I18N constants -// LANG: "de", ENCODING: UTF-8 -// translated: Raimund Meyer xinha@ray-of-light.org -{ - "Align": "Ausrichtung", - "All four sides": "Alle 4 Seiten", - "Background": "Hintergrund", - "Baseline": "Grundlinie", - "Border": "Rahmen", - "Borders": "Rahmen", - "Bottom": "Unten", - "Style [CSS]": "Style [CSS]", - "Caption": "Überschrift", - "Cell Properties": "Zellenoptionen", - "Center": "Zentriert", - "Char": "Zeichen", - "Collapsed borders": "Rahmen fallen zusammen", - "Color": "Farbe", - "Description": "Beschreibung", - "FG Color": "Vordergrundfarbe", - "Float": "Float", - "Frames": "Rahmen", - "Height": "Höhe", - "How many columns would you like to merge?": "Wieviele Spalten wollen Sie verbinden?", - "How many rows would you like to merge?": "Wieviele Zeilen wollen Sie verbinden?", - "Image URL": "Bild-URL", - "Justify": "Blocksatz", - "Layout": "Layout", - "Left": "Links", - "Margin": "Rand", - "Middle": "Mitte", - "No rules": "Keine Gitterlinien", - "No sides": "Keine Ränder", - "None": "Keine", - "Padding": "Innenabstand", - "Please click into some cell": "Bitte eine Zelle auswählen", - "Right": "Rechts", - "Row Properties": "Zeilenoptionen", - "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", - "Rules": "Linien", - "Spacing and padding": "Abstände", - "Spacing": "Abstand", - "Summary": "Zusammenfassung", - "Delete cell": "Zelle löschen", - "Insert cell after": "Zelle einfügen nach", - "Insert cell before": "Zelle einfügen vor", - "Merge cells": "Zellen zusammenfügen", - "Cell properties": "Zellenoptionen", - "Split cell": "Zellen teilen", - "Delete column": "Spalte löschen", - "Insert column after": "Spalte einfügen nach", - "Insert column before": "Spalte einfügen vor", - "Split column": "Spalte teilen", - "Delete row": "Reihe loeschen", - "Insert row before": "Reihe einfügen vor", - "Insert row after": "Reihe einfügen nach", - "Row properties": "Reiheneinstellungen", - "Split row": "Reihen aufteilen", - "Table properties": "Tabellenoptionen", - "Table Properties": "Tabellenoptionen", - "Text align": "Textausrichtung", - "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", - "Top": "Oben", - "Unset color": "Farbe entfernen", - "Vertical align": "Vertikale Ausrichtung", - "Width": "Breite", - "HTMLArea cowardly refuses to delete the last cell in row.": "Letzte Zelle in dieser Zeile kann nicht gelöscht werden", - "HTMLArea cowardly refuses to delete the last column in table.": "Letzte Spalte in dieser Tabelle kann nicht gelöscht werden", - "HTMLArea cowardly refuses to delete the last row in table.": "Letzte Reihe in dieser Tabelle kann nicht gelöscht werden", - "percent": "%", - "pixels": "Pixel", - "OK": "OK", - "Cancel": "Abbrechen" -}; +// I18N constants +// LANG: "de", ENCODING: UTF-8 +// translated: Raimund Meyer xinha@ray-of-light.org +{ + "Align": "Ausrichtung", + "All four sides": "Alle 4 Seiten", + "Background": "Hintergrund", + "Baseline": "Grundlinie", + "Border": "Rahmen", + "Borders": "Rahmen", + "Bottom": "Unten", + "Style [CSS]": "Style [CSS]", + "Caption": "Überschrift", + "Cell Properties": "Zellenoptionen", + "Center": "Zentriert", + "Char": "Zeichen", + "Collapsed borders": "Rahmen fallen zusammen", + "Color": "Farbe", + "Description": "Beschreibung", + "FG Color": "Vordergrundfarbe", + "Float": "Float", + "Frames": "Rahmen", + "Height": "Höhe", + "How many columns would you like to merge?": "Wieviele Spalten wollen Sie verbinden?", + "How many rows would you like to merge?": "Wieviele Zeilen wollen Sie verbinden?", + "Image URL": "Bild-URL", + "Justify": "Blocksatz", + "Layout": "Layout", + "Left": "Links", + "Margin": "Rand", + "Middle": "Mitte", + "No rules": "Keine Gitterlinien", + "No sides": "Keine Ränder", + "None": "Keine", + "Padding": "Innenabstand", + "Please click into some cell": "Bitte eine Zelle auswählen", + "Right": "Rechts", + "Row Properties": "Zeilenoptionen", + "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", + "Rules": "Linien", + "Spacing and padding": "Abstände", + "Spacing": "Abstand", + "Summary": "Zusammenfassung", + "Delete cell": "Zelle löschen", + "Insert cell after": "Zelle einfügen nach", + "Insert cell before": "Zelle einfügen vor", + "Merge cells": "Zellen zusammenfügen", + "Cell properties": "Zellenoptionen", + "Split cell": "Zellen teilen", + "Delete column": "Spalte löschen", + "Insert column after": "Spalte einfügen nach", + "Insert column before": "Spalte einfügen vor", + "Split column": "Spalte teilen", + "Delete row": "Reihe loeschen", + "Insert row before": "Reihe einfügen vor", + "Insert row after": "Reihe einfügen nach", + "Row properties": "Reiheneinstellungen", + "Split row": "Reihen aufteilen", + "Table properties": "Tabellenoptionen", + "Table Properties": "Tabellenoptionen", + "Text align": "Textausrichtung", + "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", + "Top": "Oben", + "Unset color": "Farbe entfernen", + "Vertical align": "Vertikale Ausrichtung", + "Width": "Breite", + "HTMLArea cowardly refuses to delete the last cell in row.": "Letzte Zelle in dieser Zeile kann nicht gelöscht werden", + "HTMLArea cowardly refuses to delete the last column in table.": "Letzte Spalte in dieser Tabelle kann nicht gelöscht werden", + "HTMLArea cowardly refuses to delete the last row in table.": "Letzte Reihe in dieser Tabelle kann nicht gelöscht werden", + "percent": "%", + "pixels": "Pixel", + "OK": "OK", + "Cancel": "Abbrechen" +}; diff --git a/xinha/plugins/TableOperations/lang/el.js b/xinha/plugins/TableOperations/lang/el.js index 085ac98..9df38bf 100644 --- a/xinha/plugins/TableOperations/lang/el.js +++ b/xinha/plugins/TableOperations/lang/el.js @@ -1,79 +1,79 @@ -// I18N constants -// LANG: "el", ENCODING: UTF-8 -// Author: Dimitris Glezos, dimitris@glezos.com -{ - "Align": "Στοίχηση", - "All four sides": "Και οι 4 πλευÏές", - "Background": "Φόντο", - "Baseline": "Baseline", - "Border": "ΠεÏίγÏαμμα", - "Borders": "ΠεÏιγÏάμματα", - "Bottom": "Κάτω μέÏος", - "Style [CSS]": "Στυλ [CSS]", - "Caption": "Λεζάντα", - "Cell Properties": "Ιδιότητες ΚελιοÏ", - "Center": "ΚέντÏο", - "Char": "ΧαÏακτήÏας", - "Collapsed borders": "Συμπτυγμένα πεÏιγÏάμματα", - "Color": "ΧÏώμα", - "Description": "ΠεÏιγÏαφή", - "FG Color": "ΧÏώμα αντικειμένων", - "Float": "Float", - "Frames": "Frames", - "Height": "Ύψος", - "How many columns would you like to merge?": "Πόσες στήλες θέλετε να ενώσετε;", - "How many rows would you like to merge?": "Πόσες γÏαμμές θέλετε να ενώσετε;", - "Image URL": "URL εικόνας", - "Justify": "ΠλήÏης στοίχηση", - "Layout": "Διάταξη", - "Left": "ΑÏιστεÏά", - "Margin": "ΠεÏιθώÏιο", - "Middle": "ΚέντÏο", - "No rules": "ΧωÏίς ΓÏαμμές", - "No sides": "No sides", - "None": "Τίποτα", - "Padding": "Εσοχή", - "Please click into some cell": "Κάντε κλικ μέσα σε κάποιο κελί", - "Right": "Δεξιά", - "Row Properties": "Ιδιότητες ΓÏαμμής", - "Rules will appear between all rows and columns": "ΓÏαμμές θα εμφανίζονται Î¼ÎµÏ„Î±Î¾Ï ÏŒÎ»Ï‰Î½ των γÏαμμών και στηλών", - "Rules will appear between columns only": "ΓÏαμμές θα εμφανίζονται μόνο Î¼ÎµÏ„Î±Î¾Ï ÏƒÏ„Î·Î»ÏŽÎ½", - "Rules will appear between rows only": "ΓÏαμμές θα εμφανίζονται μόνο Î¼ÎµÏ„Î±Î¾Ï Î³Ïαμμών", - "Rules": "ΓÏαμμές", - "Spacing and padding": "Αποστάσεις και εσοχές", - "Spacing": "Αποστάσεις", - "Summary": "ΣÏνοψη", - "Delete cell": "ΔιαγÏαφή κελιοÏ", - "Insert cell after": "Εισαγωγή ÎºÎµÎ»Î¹Î¿Ï Î¼ÎµÏ„Î¬", - "Insert cell before": "Εισαγωγή ÎºÎµÎ»Î¹Î¿Ï Ï€Ïιν", - "Merge cells": "Συγχώνευση κελιών", - "Cell properties": "Ιδιότητες κελιοÏ", - "Split cell": "ΔιαίÏεση κελιοÏ", - "Delete column": "ΔιαγÏαφή στήλης", - "Insert column after": "Εισαγωγή στήλης μετά", - "Insert column before": "Εισαγωγή στήλης Ï€Ïιν", - "Split column": "ΔιαίÏεση στήλης", - "Delete row": "ΔιαγÏαφή γÏαμμής", - "Insert row before": "Εισαγωγή γÏαμμής μετά", - "Insert row after": "Εισαγωγή γÏαμμής Ï€Ïιν", - "Row properties": "Ιδιότητες γÏαμμής", - "Split row": "ΔιαίÏεση γÏαμμής", - "Table properties": "Ιδιότητες πίνακα", - "Table Properties": "Ιδιότητες πίνακα", - "Text align": "Στοίχηση κειμένου", - "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": "Η πάνω πλευÏά μόνο", - "Top": "Πάνω", - "Unset color": "ΑναίÏεση χÏώματος", - "Vertical align": "ΚατακόÏυφη στοίχηση", - "Width": "Πλάτος", - "HTMLArea cowardly refuses to delete the last cell in row.": "Δεν μποÏεί να διαγÏαφεί το τελευταίο κελί σε μια γÏαμμή.", - "HTMLArea cowardly refuses to delete the last column in table.": "Δεν μποÏεί να διαγÏαφεί η τελευταία στήλη σε ένα πίνακα.", - "HTMLArea cowardly refuses to delete the last row in table.": "Δεν μποÏεί να διαγÏαφεί η τελευταία γÏαμμή σε ένα πίνακα.", - "percent": "τοις εκατόν", - "pixels": "pixels" -}; +// I18N constants +// LANG: "el", ENCODING: UTF-8 +// Author: Dimitris Glezos, dimitris@glezos.com +{ + "Align": "Στοίχηση", + "All four sides": "Και οι 4 πλευÏές", + "Background": "Φόντο", + "Baseline": "Baseline", + "Border": "ΠεÏίγÏαμμα", + "Borders": "ΠεÏιγÏάμματα", + "Bottom": "Κάτω μέÏος", + "Style [CSS]": "Στυλ [CSS]", + "Caption": "Λεζάντα", + "Cell Properties": "Ιδιότητες ΚελιοÏ", + "Center": "ΚέντÏο", + "Char": "ΧαÏακτήÏας", + "Collapsed borders": "Συμπτυγμένα πεÏιγÏάμματα", + "Color": "ΧÏώμα", + "Description": "ΠεÏιγÏαφή", + "FG Color": "ΧÏώμα αντικειμένων", + "Float": "Float", + "Frames": "Frames", + "Height": "Ύψος", + "How many columns would you like to merge?": "Πόσες στήλες θέλετε να ενώσετε;", + "How many rows would you like to merge?": "Πόσες γÏαμμές θέλετε να ενώσετε;", + "Image URL": "URL εικόνας", + "Justify": "ΠλήÏης στοίχηση", + "Layout": "Διάταξη", + "Left": "ΑÏιστεÏά", + "Margin": "ΠεÏιθώÏιο", + "Middle": "ΚέντÏο", + "No rules": "ΧωÏίς ΓÏαμμές", + "No sides": "No sides", + "None": "Τίποτα", + "Padding": "Εσοχή", + "Please click into some cell": "Κάντε κλικ μέσα σε κάποιο κελί", + "Right": "Δεξιά", + "Row Properties": "Ιδιότητες ΓÏαμμής", + "Rules will appear between all rows and columns": "ΓÏαμμές θα εμφανίζονται Î¼ÎµÏ„Î±Î¾Ï ÏŒÎ»Ï‰Î½ των γÏαμμών και στηλών", + "Rules will appear between columns only": "ΓÏαμμές θα εμφανίζονται μόνο Î¼ÎµÏ„Î±Î¾Ï ÏƒÏ„Î·Î»ÏŽÎ½", + "Rules will appear between rows only": "ΓÏαμμές θα εμφανίζονται μόνο Î¼ÎµÏ„Î±Î¾Ï Î³Ïαμμών", + "Rules": "ΓÏαμμές", + "Spacing and padding": "Αποστάσεις και εσοχές", + "Spacing": "Αποστάσεις", + "Summary": "ΣÏνοψη", + "Delete cell": "ΔιαγÏαφή κελιοÏ", + "Insert cell after": "Εισαγωγή ÎºÎµÎ»Î¹Î¿Ï Î¼ÎµÏ„Î¬", + "Insert cell before": "Εισαγωγή ÎºÎµÎ»Î¹Î¿Ï Ï€Ïιν", + "Merge cells": "Συγχώνευση κελιών", + "Cell properties": "Ιδιότητες κελιοÏ", + "Split cell": "ΔιαίÏεση κελιοÏ", + "Delete column": "ΔιαγÏαφή στήλης", + "Insert column after": "Εισαγωγή στήλης μετά", + "Insert column before": "Εισαγωγή στήλης Ï€Ïιν", + "Split column": "ΔιαίÏεση στήλης", + "Delete row": "ΔιαγÏαφή γÏαμμής", + "Insert row before": "Εισαγωγή γÏαμμής μετά", + "Insert row after": "Εισαγωγή γÏαμμής Ï€Ïιν", + "Row properties": "Ιδιότητες γÏαμμής", + "Split row": "ΔιαίÏεση γÏαμμής", + "Table properties": "Ιδιότητες πίνακα", + "Table Properties": "Ιδιότητες πίνακα", + "Text align": "Στοίχηση κειμένου", + "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": "Η πάνω πλευÏά μόνο", + "Top": "Πάνω", + "Unset color": "ΑναίÏεση χÏώματος", + "Vertical align": "ΚατακόÏυφη στοίχηση", + "Width": "Πλάτος", + "HTMLArea cowardly refuses to delete the last cell in row.": "Δεν μποÏεί να διαγÏαφεί το τελευταίο κελί σε μια γÏαμμή.", + "HTMLArea cowardly refuses to delete the last column in table.": "Δεν μποÏεί να διαγÏαφεί η τελευταία στήλη σε ένα πίνακα.", + "HTMLArea cowardly refuses to delete the last row in table.": "Δεν μποÏεί να διαγÏαφεί η τελευταία γÏαμμή σε ένα πίνακα.", + "percent": "τοις εκατόν", + "pixels": "pixels" +}; diff --git a/xinha/plugins/TableOperations/lang/fi.js b/xinha/plugins/TableOperations/lang/fi.js index f26336f..f7a946a 100644 --- a/xinha/plugins/TableOperations/lang/fi.js +++ b/xinha/plugins/TableOperations/lang/fi.js @@ -1,68 +1,68 @@ -// I18N constants -// LANG: "fi", ENCODING: UTF-8 -{ - "Align": "Kohdistus", - "All four sides": "Kaikki neljä sivua", - "Background": "Tausta", - "Baseline": "Takaraja", - "Border": "Reuna", - "Borders": "Reunat", - "Bottom": "Alle", - "Style [CSS]": "Tyyli [CSS]", - "Caption": "Otsikko", - "Cell Properties": "Solun asetukset", - "Center": "Keskelle", - "Char": "Merkki", - "Collapsed borders": "Luhistetut reunat", - "Color": "Väri", - "Description": "Kuvaus", - "FG Color": "FG Väri", - "Frames": "Kehykset", - "Image URL": "Kuvan osoite", - "Layout": "Sommittelu", - "Left": "Vasen", - "Margin": "Marginaali", - "Middle": "Keskelle", - "No rules": "Ei viivoja", - "No sides": "Ei sivuja", - "Padding": "Palstantäyte", - "Right": "Oikea", - "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ä", - "Rules": "Viivat", - "Spacing": "Palstatila", - "Summary": "Yhteenveto", - "Delete cell": "Poista solu", - "Insert cell after": "Lisää solu perään", - "Insert cell before": "Lisää solu ennen", - "Merge cells": "Yhdistä solut", - "Cell properties": "Solun asetukset", - "Split cell": "Jaa solu", - "Delete column": "Poista sarake", - "Insert column after": "Lisää sarake perään", - "Insert column before": "Lisää sarake ennen", - "Split column": "Jaa sarake", - "Delete row": "Poista rivi", - "Insert row before": "Lisää rivi yläpuolelle", - "Insert row after": "Lisää rivi alapuolelle", - "Row properties": "Rivin asetukset", - "Split row": "Jaa rivi", - "Table properties": "Taulukon asetukset", - "Top": "Ylös", - "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", - "Vertical align": "Vertikaali kohdistus", - "Width": "Leveys", - "HTMLArea cowardly refuses to delete the last cell in row.": "Ei voida poistaa viimeistä solua rivistä.", - "HTMLArea cowardly refuses to delete the last column in table.": "Ei voida poistaa viimeistä saraketta taulusta.", - "HTMLArea cowardly refuses to delete the last row in table.": "Ei voida poistaa viimeistä riviä taulusta.", - "percent": "prosenttia", - "pixels": "pikseliä" -}; +// I18N constants +// LANG: "fi", ENCODING: UTF-8 +{ + "Align": "Kohdistus", + "All four sides": "Kaikki neljä sivua", + "Background": "Tausta", + "Baseline": "Takaraja", + "Border": "Reuna", + "Borders": "Reunat", + "Bottom": "Alle", + "Style [CSS]": "Tyyli [CSS]", + "Caption": "Otsikko", + "Cell Properties": "Solun asetukset", + "Center": "Keskelle", + "Char": "Merkki", + "Collapsed borders": "Luhistetut reunat", + "Color": "Väri", + "Description": "Kuvaus", + "FG Color": "FG Väri", + "Frames": "Kehykset", + "Image URL": "Kuvan osoite", + "Layout": "Sommittelu", + "Left": "Vasen", + "Margin": "Marginaali", + "Middle": "Keskelle", + "No rules": "Ei viivoja", + "No sides": "Ei sivuja", + "Padding": "Palstantäyte", + "Right": "Oikea", + "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ä", + "Rules": "Viivat", + "Spacing": "Palstatila", + "Summary": "Yhteenveto", + "Delete cell": "Poista solu", + "Insert cell after": "Lisää solu perään", + "Insert cell before": "Lisää solu ennen", + "Merge cells": "Yhdistä solut", + "Cell properties": "Solun asetukset", + "Split cell": "Jaa solu", + "Delete column": "Poista sarake", + "Insert column after": "Lisää sarake perään", + "Insert column before": "Lisää sarake ennen", + "Split column": "Jaa sarake", + "Delete row": "Poista rivi", + "Insert row before": "Lisää rivi yläpuolelle", + "Insert row after": "Lisää rivi alapuolelle", + "Row properties": "Rivin asetukset", + "Split row": "Jaa rivi", + "Table properties": "Taulukon asetukset", + "Top": "Ylös", + "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", + "Vertical align": "Vertikaali kohdistus", + "Width": "Leveys", + "HTMLArea cowardly refuses to delete the last cell in row.": "Ei voida poistaa viimeistä solua rivistä.", + "HTMLArea cowardly refuses to delete the last column in table.": "Ei voida poistaa viimeistä saraketta taulusta.", + "HTMLArea cowardly refuses to delete the last row in table.": "Ei voida poistaa viimeistä riviä taulusta.", + "percent": "prosenttia", + "pixels": "pikseliä" +}; diff --git a/xinha/plugins/TableOperations/lang/fr.js b/xinha/plugins/TableOperations/lang/fr.js index 1d9b93b..edf9b22 100644 --- a/xinha/plugins/TableOperations/lang/fr.js +++ b/xinha/plugins/TableOperations/lang/fr.js @@ -1,78 +1,78 @@ -// I18N constants -// LANG: "fr", ENCODING: UTF-8 -{ - "Align": "Aligner", - "All four sides": "Quatre cotés", - "Background": "Arrière plan", - "Baseline": "Ligne de base", - "Border": "Bordure", - "Borders": "Bordures", - "Bottom": "Bas", - "Style [CSS]": "Style [CSS]", - "Caption": "Étiquette", - "Cell Properties": "Propriétés de cellule", - "Center": "Centre", - "Char": "Charactère", - "Collapsed borders": "Bordure effondrés", - "Color": "Couleur", - "Description": "Description", - "FG Color": "Couleur de face", - "Float": "Flotteur", - "Frames": "Vues", - "Height": "Largeur", - "How many columns would you like to merge?": "Combien de colonnes voulez-vous fusionner?", - "How many rows would you like to merge?": "Combien de rangées voulez-vous fusionner?", - "Image URL": "URL pour l'image", - "Justify": "Justifié", - "Layout": "Arrangement", - "Left": "Gauche", - "Margin": "Marge", - "Middle": "Milieu", - "No rules": "Aucun règlement", - "No sides": "Aucun côtés", - "None": "Aucun", - "Padding": "Remplissage", - "Please click into some cell": "Cliquer sur une cellule", - "Right": "Droit", - "Row Properties": "Propriétés de rangée", - "Rules will appear between all rows and columns": "Les règles vont apparaître entre les rangées et les cellules", - "Rules will appear between columns only": "Les règles vont apparaître entre les colonnes seulement", - "Rules will appear between rows only": "Les règles vont apparaître entre les rangées seulement", - "Rules": "Les règles", - "Spacing and padding": "Espacement et remplissage", - "Spacing": "Espacement", - "Summary": "Sommaire", - "Delete cell": "Supprimer une cellule", - "Insert cell after": "Insérer une cellule après", - "Insert cell before": "Insérer une cellule avant", - "Merge cells": "Fusionner les cellules", - "Cell properties": "Cell properties", - "Split cell": "Diviser la cellule", - "Delete column": "Supprimer la colonne", - "Insert column after": "Insérer une colonne après", - "Insert column before": "Insérer une colonne avant", - "Split column": "Diviser une colonne", - "Delete row": "Supprimer une rangée", - "Insert row before": "Insérer une rangée avant", - "Insert row after": "Insérer une rangée après", - "Row properties": "Propriétés de rangée", - "Split row": "Diviser la rangée", - "Table properties": "Propriétés de table", - "Table Properties": "Propriétés de table", - "Text align": "Aligner le texte", - "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", - "Top": "Haut", - "Unset color": "Enlever la couleur", - "Vertical align": "Alignement vertical", - "Width": "Longeur", - "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea refuse de supprimer la dernière cellule de la rangée.", - "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea refuse de supprimer la dernière colonne de la table.", - "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea refuse de supprimer la dernière rangée de la table", - "percent": "pourcentage", - "pixels": "pixels" +// I18N constants +// LANG: "fr", ENCODING: UTF-8 +{ + "Align": "Aligner", + "All four sides": "Quatre cotés", + "Background": "Arrière plan", + "Baseline": "Ligne de base", + "Border": "Bordure", + "Borders": "Bordures", + "Bottom": "Bas", + "Style [CSS]": "Style [CSS]", + "Caption": "Étiquette", + "Cell Properties": "Propriétés de cellule", + "Center": "Centre", + "Char": "Charactère", + "Collapsed borders": "Bordure effondrés", + "Color": "Couleur", + "Description": "Description", + "FG Color": "Couleur de face", + "Float": "Flotteur", + "Frames": "Vues", + "Height": "Largeur", + "How many columns would you like to merge?": "Combien de colonnes voulez-vous fusionner?", + "How many rows would you like to merge?": "Combien de rangées voulez-vous fusionner?", + "Image URL": "URL pour l'image", + "Justify": "Justifié", + "Layout": "Arrangement", + "Left": "Gauche", + "Margin": "Marge", + "Middle": "Milieu", + "No rules": "Aucune règle", + "No sides": "Aucun côté", + "None": "Aucun", + "Padding": "Remplissage", + "Please click into some cell": "Cliquer sur une cellule", + "Right": "Droit", + "Row Properties": "Propriétés de rangée", + "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", + "Rules": "Les règles", + "Spacing and padding": "Espacement et remplissage", + "Spacing": "Espacement", + "Summary": "Sommaire", + "Delete cell": "Supprimer une cellule", + "Insert cell after": "Insérer une cellule après", + "Insert cell before": "Insérer une cellule avant", + "Merge cells": "Fusionner les cellules", + "Cell properties": "Cell properties", + "Split cell": "Diviser la cellule", + "Delete column": "Supprimer la colonne", + "Insert column after": "Insérer une colonne après", + "Insert column before": "Insérer une colonne avant", + "Split column": "Diviser une colonne", + "Delete row": "Supprimer une rangée", + "Insert row before": "Insérer une rangée avant", + "Insert row after": "Insérer une rangée après", + "Row properties": "Propriétés de rangée", + "Split row": "Diviser la rangée", + "Table properties": "Propriétés de table", + "Table Properties": "Propriétés de table", + "Text align": "Alignement", + "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", + "Top": "Haut", + "Unset color": "Enlever la couleur", + "Vertical align": "Vertical", + "Width": "Longeur", + "HTMLArea cowardly refuses to delete the last cell in row.": "Il est impossible de supprimer la dernière cellule de la rangée.", + "HTMLArea cowardly refuses to delete the last column in table.": "Il est impossible de supprimer la dernière colonne de la table.", + "HTMLArea cowardly refuses to delete the last row in table.": "Il est impossible de supprimer la dernière rangée de la table", + "percent": "%", + "pixels": "pixels" }; \ No newline at end of file diff --git a/xinha/plugins/TableOperations/lang/he.js b/xinha/plugins/TableOperations/lang/he.js index 97585cd..06d8d18 100644 --- a/xinha/plugins/TableOperations/lang/he.js +++ b/xinha/plugins/TableOperations/lang/he.js @@ -1,79 +1,79 @@ -// I18N constants -// LANG: "he", ENCODING: UTF-8 -// Author: Liron Newman, http://www.eesh.net, -{ - "Align": "ישור", - "All four sides": "כל ×רבעת הצדדי×", - "Background": "רקע", - "Baseline": "קו בסיס", - "Border": "גבול", - "Borders": "גבולות", - "Bottom": "תחתון", - "Style [CSS]": "סגנון [CSS]", - "Caption": "כותרת", - "Cell Properties": "מ×פייני ת×", - "Center": "מרכז", - "Char": "תו", - "Collapsed borders": "גבולות קורסי×", - "Color": "צבע", - "Description": "תי×ור", - "FG Color": "צבע קידמה", - "Float": "מרחף", - "Frames": "מסגרות", - "Height": "גובה", - "How many columns would you like to merge?": "כמה ×˜×•×¨×™× ×‘×¨×¦×•× ×š למזג?", - "How many rows would you like to merge?": "כמה שורות ברצונך למזג?", - "Image URL": "URL התמונה", - "Justify": "ישור", - "Layout": "פריסה", - "Left": "שמ×ל", - "Margin": "שוליי×", - "Middle": "×מצע", - "No rules": "×œ×œ× ×§×•×•×™×", - "No sides": "×œ×œ× ×¦×“×“×™×", - "None": "×ין", - "Padding": "ריווח בשוליי×", - "Please click into some cell": "×× × ×œ×—×¥ על ×ª× ×›×œ×©×”×•", - "Right": "ימין", - "Row Properties": "מ×פייני שורה", - "Rules will appear between all rows and columns": "×§×•×•×™× ×™×•×¤×™×¢×• בין כל השורות והטורי×", - "Rules will appear between columns only": "×§×•×•×™× ×™×•×¤×™×¢×• בין ×˜×•×¨×™× ×‘×œ×‘×“", - "Rules will appear between rows only": "×§×•×•×™× ×™×•×¤×™×¢×• בין שורות בלבד", - "Rules": "קווי×", - "Spacing and padding": "ריווח ושוליי×", - "Spacing": "ריווח", - "Summary": "סיכו×", - "Delete cell": "מחק ת×", - "Insert cell after": "הכנס ×ª× ×חרי", - "Insert cell before": "הכנס ×ª× ×œ×¤× ×™", - "Merge cells": "מזג ת××™×", - "Cell properties": "מ×פייני ת×", - "Split cell": "פצל ת×", - "Delete column": "מחק טור", - "Insert column after": "הכנס טור ×חרי", - "Insert column before": "הכנס טור לפני", - "Split column": "פצל טור", - "Delete row": "מחק שורה", - "Insert row before": "הכנס שורה לפני", - "Insert row after": "הכנס שורה ×חרי", - "Row properties": "מ×פייני שורה", - "Split row": "פצל שורה", - "Table properties": "מ×פייני טבלה", - "Table Properties": "מ×פייני טבלה", - "Text align": "ישור טקסט", - "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": "הצד העליון בלבד", - "Top": "עליון", - "Unset color": "צבע ×œ× × ×‘×—×¨", - "Vertical align": "יישור ×× ×›×™", - "Width": "רוחב", - "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea מסרב בפחדנות למחוק ×ת ×”×ª× ×”×חרון בשורה.", - "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea מסרב בפחדנות למחוק ×ת הטור ×”×חרון בטבלה.", - "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea מסרב בפחדנות למחוק ×ת השורה ×”×חרונה בטבלה.", - "percent": "×חוז", - "pixels": "פיקסלי×" -}; +// I18N constants +// LANG: "he", ENCODING: UTF-8 +// Author: Liron Newman, http://www.eesh.net, +{ + "Align": "ישור", + "All four sides": "כל ×רבעת הצדדי×", + "Background": "רקע", + "Baseline": "קו בסיס", + "Border": "גבול", + "Borders": "גבולות", + "Bottom": "תחתון", + "Style [CSS]": "סגנון [CSS]", + "Caption": "כותרת", + "Cell Properties": "מ×פייני ת×", + "Center": "מרכז", + "Char": "תו", + "Collapsed borders": "גבולות קורסי×", + "Color": "צבע", + "Description": "תי×ור", + "FG Color": "צבע קידמה", + "Float": "מרחף", + "Frames": "מסגרות", + "Height": "גובה", + "How many columns would you like to merge?": "כמה ×˜×•×¨×™× ×‘×¨×¦×•× ×š למזג?", + "How many rows would you like to merge?": "כמה שורות ברצונך למזג?", + "Image URL": "URL התמונה", + "Justify": "ישור", + "Layout": "פריסה", + "Left": "שמ×ל", + "Margin": "שוליי×", + "Middle": "×מצע", + "No rules": "×œ×œ× ×§×•×•×™×", + "No sides": "×œ×œ× ×¦×“×“×™×", + "None": "×ין", + "Padding": "ריווח בשוליי×", + "Please click into some cell": "×× × ×œ×—×¥ על ×ª× ×›×œ×©×”×•", + "Right": "ימין", + "Row Properties": "מ×פייני שורה", + "Rules will appear between all rows and columns": "×§×•×•×™× ×™×•×¤×™×¢×• בין כל השורות והטורי×", + "Rules will appear between columns only": "×§×•×•×™× ×™×•×¤×™×¢×• בין ×˜×•×¨×™× ×‘×œ×‘×“", + "Rules will appear between rows only": "×§×•×•×™× ×™×•×¤×™×¢×• בין שורות בלבד", + "Rules": "קווי×", + "Spacing and padding": "ריווח ושוליי×", + "Spacing": "ריווח", + "Summary": "סיכו×", + "Delete cell": "מחק ת×", + "Insert cell after": "הכנס ×ª× ×חרי", + "Insert cell before": "הכנס ×ª× ×œ×¤× ×™", + "Merge cells": "מזג ת××™×", + "Cell properties": "מ×פייני ת×", + "Split cell": "פצל ת×", + "Delete column": "מחק טור", + "Insert column after": "הכנס טור ×חרי", + "Insert column before": "הכנס טור לפני", + "Split column": "פצל טור", + "Delete row": "מחק שורה", + "Insert row before": "הכנס שורה לפני", + "Insert row after": "הכנס שורה ×חרי", + "Row properties": "מ×פייני שורה", + "Split row": "פצל שורה", + "Table properties": "מ×פייני טבלה", + "Table Properties": "מ×פייני טבלה", + "Text align": "ישור טקסט", + "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": "הצד העליון בלבד", + "Top": "עליון", + "Unset color": "צבע ×œ× × ×‘×—×¨", + "Vertical align": "יישור ×× ×›×™", + "Width": "רוחב", + "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea מסרב בפחדנות למחוק ×ת ×”×ª× ×”×חרון בשורה.", + "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea מסרב בפחדנות למחוק ×ת הטור ×”×חרון בטבלה.", + "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea מסרב בפחדנות למחוק ×ת השורה ×”×חרונה בטבלה.", + "percent": "×חוז", + "pixels": "פיקסלי×" +}; diff --git a/xinha/plugins/TableOperations/lang/it.js b/xinha/plugins/TableOperations/lang/it.js index 3e7cf74..14f747b 100644 --- a/xinha/plugins/TableOperations/lang/it.js +++ b/xinha/plugins/TableOperations/lang/it.js @@ -1,79 +1,79 @@ -// I18N constants -// LANG: "it", ENCODING: UTF-8 -// Author: Fabio Rotondo -{ - "Align": "Allinea", - "All four sides": "Tutti e quattro i lati", - "Background": "Sfondo", - "Baseline": "Allineamento", - "Border": "Bordo", - "Borders": "Bordi", - "Bottom": "Basso", - "Style [CSS]": "Stile [CSS]", - "Caption": "Titolo", - "Cell Properties": "Proprietà della Cella", - "Center": "Centra", - "Char": "Carattere", - "Collapsed borders": "Bordi chiusi", - "Color": "Colore", - "Description": "Descrizione", - "FG Color": "Colore Principale", - "Float": "Fluttuante", - "Frames": "Frames", - "Height": "Altezza", - "How many columns would you like to merge?": "Quante colonne vuoi unire?", - "How many rows would you like to merge?": "Quante righe vuoi unire?", - "Image URL": "URL dell'Immagine", - "Justify": "Justifica", - "Layout": "Layout", - "Left": "Sinistra", - "Margin": "Margine", - "Middle": "Centrale", - "No rules": "Nessun righello", - "No sides": "Nessun lato", - "None": "Nulla", - "Padding": "Padding", - "Please click into some cell": "Per favore, clicca in una cella", - "Right": "Destra", - "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", - "Rules": "Linee", - "Spacing and padding": "Spaziatura e Padding", - "Spacing": "Spaziatura", - "Summary": "Sommario", - "Delete cell": "Cancella cella", - "Insert cell after": "Inserisci cella dopo", - "Insert cell before": "Inserisci cella prima", - "Merge cells": "Unisci celle", - "Cell properties": "Proprietà della cella", - "Split cell": "Dividi cella", - "Delete column": "Cancella colonna", - "Insert column after": "Inserisci colonna dopo", - "Insert column before": "Inserisci colonna prima", - "Split column": "Dividi colonna", - "Delete row": "Cancella riga", - "Insert row before": "Inserisci riga prima", - "Insert row after": "Inserisci riga dopo", - "Row properties": "Proprietà della riga", - "Split row": "Dividi riga", - "Table properties": "Proprietà della Tabella", - "Table Properties": "Proprietà della Tabella", - "Text align": "Allineamento del Testo", - "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", - "Top": "Alto", - "Unset color": "Rimuovi colore", - "Vertical align": "Allineamento verticale", - "Width": "Larghezza", - "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea si rifiuta codardamente di cancellare l'ultima cella nella riga.", - "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea si rifiuta codardamente di cancellare l'ultima colonna nella tabella.", - "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea si rifiuta codardamente di cancellare l'ultima riga nella tabella.", - "percent": "percento", - "pixels": "pixels" -}; +// I18N constants +// LANG: "it", ENCODING: UTF-8 +// Author: Fabio Rotondo +{ + "Align": "Allinea", + "All four sides": "Tutti e quattro i lati", + "Background": "Sfondo", + "Baseline": "Allineamento", + "Border": "Bordo", + "Borders": "Bordi", + "Bottom": "Basso", + "Style [CSS]": "Stile [CSS]", + "Caption": "Titolo", + "Cell Properties": "Proprietà della Cella", + "Center": "Centra", + "Char": "Carattere", + "Collapsed borders": "Bordi chiusi", + "Color": "Colore", + "Description": "Descrizione", + "FG Color": "Colore Principale", + "Float": "Fluttuante", + "Frames": "Frames", + "Height": "Altezza", + "How many columns would you like to merge?": "Quante colonne vuoi unire?", + "How many rows would you like to merge?": "Quante righe vuoi unire?", + "Image URL": "URL dell'Immagine", + "Justify": "Justifica", + "Layout": "Layout", + "Left": "Sinistra", + "Margin": "Margine", + "Middle": "Centrale", + "No rules": "Nessun righello", + "No sides": "Nessun lato", + "None": "Nulla", + "Padding": "Padding", + "Please click into some cell": "Per favore, clicca in una cella", + "Right": "Destra", + "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", + "Rules": "Linee", + "Spacing and padding": "Spaziatura e Padding", + "Spacing": "Spaziatura", + "Summary": "Sommario", + "Delete cell": "Cancella cella", + "Insert cell after": "Inserisci cella dopo", + "Insert cell before": "Inserisci cella prima", + "Merge cells": "Unisci celle", + "Cell properties": "Proprietà della cella", + "Split cell": "Dividi cella", + "Delete column": "Cancella colonna", + "Insert column after": "Inserisci colonna dopo", + "Insert column before": "Inserisci colonna prima", + "Split column": "Dividi colonna", + "Delete row": "Cancella riga", + "Insert row before": "Inserisci riga prima", + "Insert row after": "Inserisci riga dopo", + "Row properties": "Proprietà della riga", + "Split row": "Dividi riga", + "Table properties": "Proprietà della Tabella", + "Table Properties": "Proprietà della Tabella", + "Text align": "Allineamento del Testo", + "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", + "Top": "Alto", + "Unset color": "Rimuovi colore", + "Vertical align": "Allineamento verticale", + "Width": "Larghezza", + "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea si rifiuta codardamente di cancellare l'ultima cella nella riga.", + "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea si rifiuta codardamente di cancellare l'ultima colonna nella tabella.", + "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea si rifiuta codardamente di cancellare l'ultima riga nella tabella.", + "percent": "percento", + "pixels": "pixels" +}; diff --git a/xinha/plugins/TableOperations/lang/ja.js b/xinha/plugins/TableOperations/lang/ja.js new file mode 100644 index 0000000..5d24ab3 --- /dev/null +++ b/xinha/plugins/TableOperations/lang/ja.js @@ -0,0 +1,83 @@ +// I18N constants +// LANG: "ja", ENCODING: UTF-8 +{ + "Align": "行æƒãˆ", + "All four sides": "四辺ã™ã¹ã¦", + "Background": "背景", + "Baseline": "ベースライン", + "Border": "境界線", + "Borders": "境界線", + "Bottom": "下", + "Style [CSS]": "スタイル [CSS]", + "Caption": "キャプション", + "Cell Properties": "セルプロパティ", + "Center": "中央", + "Char": "文字", + "Collapsed borders": "隣接境界線をé‡ã­ã‚‹", + "Color": "色", + "Description": "説明", + "FG Color": "剿™¯è‰²", + "Float": "フロート", + "Frames": "外枠", + "Height": "高ã•", + "How many columns would you like to merge?": "何列çµåˆã—ã¾ã™ã‹?", + "How many rows would you like to merge?": "何行çµåˆã—ã¾ã™ã‹?", + "Image URL": "ç”»åƒURL", + "Justify": "両端æƒãˆ", + "Layout": "レイアウト", + "Left": "å·¦", + "Margin": "é–“éš”", + "Middle": "中", + "No rules": "区切りãªã—", + "No sides": "外枠ãªã—", + "None": "ãªã—", + "Padding": "余白", + "Please click into some cell": "ã„ãšã‚Œã‹ã®ã‚»ãƒ«å†…をクリックã—ã¦ãã ã•ã„", + "Please select the cells you want to merge.": "çµåˆã—ãŸã„ã‚»ãƒ«ã‚’è¤‡æ•°é¸æŠžã—ã¦ãã ã•ã„。", + "Right": "å³", + "Row Properties": "行プロパティ", + "Rules will appear between all rows and columns": "ã™ã¹ã¦ã®è¡Œé–“ã¨åˆ—é–“ã«ç·šã‚’引ã", + "Rules will appear between columns only": "列ã®é–“ã«ã®ã¿ç·šã‚’引ã", + "Rules will appear between rows only": "行ã®é–“ã«ã®ã¿ç·šã‚’引ã", + "Rules": "区切り", + "Spacing and padding": "é–“éš”ã¨ä½™ç™½", + "Spacing": "é–“éš”", + "Summary": "è¦ç´„", + "Delete cell": "セルã®å‰Šé™¤", + "Insert cell after": "次ã«ã‚»ãƒ«ã‚’挿入", + "Insert cell before": "å‰ã«ã‚»ãƒ«ã‚’挿入", + "Merge cells": "セルã®çµåˆ", + "Cell properties": "セルã®ãƒ—ロパティ", + "Split cell": "セルã®åˆ†å‰²", + "Delete column": "列ã®å‰Šé™¤", + "Insert column after": "å³ã«åˆ—を挿入", + "Insert column before": "å·¦ã«åˆ—を挿入", + "Split column": "列ã®åˆ†å‰²", + "Delete row": "行ã®å‰Šé™¤", + "Insert row before": "上ã«è¡Œã‚’挿入", + "Insert row after": "下ã«è¡Œã‚’挿入", + "Row properties": "行ã®ãƒ—ロパティ", + "Split row": "行ã®åˆ†å‰²", + "Table properties": "テーブルã®ãƒ—ロパティ", + "Table Properties": "テーブルã®ãƒ—ロパティ", + "Text align": "æ°´å¹³ä½ç½®", + "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": "上辺ã®ã¿", + "Top": "上", + "Unset color": "色指定解除", + "Vertical align": "垂直ä½ç½®", + "Width": "å¹…", + "HTMLArea cowardly refuses to delete the last cell in row.": "安全ã®ãŸã‚ã«ã€è¡Œã«ã²ã¨ã¤ã ã‘残ã£ã¦ã„る列ã®å‰Šé™¤ã¯æ‹’å¦ã•れã¾ã™ã€‚", + "HTMLArea cowardly refuses to delete the last column in table.": "安全ã®ãŸã‚ã«ã€ãƒ†ãƒ¼ãƒ–ルã«ã²ã¨ã¤ã ã‘残ã£ã¦ã„る列ã®å‰Šé™¤ã¯æ‹’å¦ã•れã¾ã™ã€‚", + "HTMLArea cowardly refuses to delete the last row in table.": "安全ã®ãŸã‚ã«ã€ãƒ†ãƒ¼ãƒ–ルã«ã²ã¨ã¤ã ã‘残ã£ã¦ã„る行ã®å‰Šé™¤ã¯æ‹’å¦ã•れã¾ã™ã€‚", + "percent": "パーセント", + "pixels": "ピクセル", + "OK": "OK", + "Cancel": "中止", + "CSS Style": "CSSスタイル", + "Frame and borders": "外枠ã¨å¢ƒç•Œç·š" +}; \ No newline at end of file diff --git a/xinha/plugins/TableOperations/lang/no.js b/xinha/plugins/TableOperations/lang/nb.js similarity index 96% rename from xinha/plugins/TableOperations/lang/no.js rename to xinha/plugins/TableOperations/lang/nb.js index 1d05b09..5c973cb 100644 --- a/xinha/plugins/TableOperations/lang/no.js +++ b/xinha/plugins/TableOperations/lang/nb.js @@ -1,80 +1,80 @@ -// I18N constants -// LANG: "no", ENCODING: UTF-8 -// Author: Mihai Bazon, -// translated into Norwegian: ses@online.no 11.11.03 -{ - "Align": "Juster", - "All four sides": "Alle fire sider", - "Background": "Bakgrund", - "Baseline": "Grunnlinje", - "Border": "Kantlinje", - "Borders": "Kantlinjer", - "Bottom": "Bunn", - "Style [CSS]": "Stil [CSS]", - "Caption": "Overskrift", - "Cell Properties": "Celleegenskaper", - "Center": "Sentrer", - "Char": "Tegn", - "Collapsed borders": "Fjern kantlinjer", - "Color": "Farge", - "Description": "Beskrivelse", - "FG Color": "FG farge", - "Float": "Flytende", - "Frames": "rammer", - "Height": "Høyde", - "How many columns would you like to merge?": "Hvor mange kolonner vil du slÃ¥ sammen?", - "How many rows would you like to merge?": "Hvor mange rader vil du slÃ¥ sammen?", - "Image URL": "Bildets URL", - "Justify": "Juster", - "Layout": "Layout", - "Left": "Venstre", - "Margin": "Marg", - "Middle": "Midten", - "No rules": "Ingen linjal", - "No sides": "Ingen sider", - "None": "Ingen", - "Padding": "Luft", - "Please click into some cell": "Klikk i en eller annen celle", - "Right": "Høyre", - "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", - "Rules": "Linjer", - "Spacing and padding": "Luft", - "Spacing": "Luft", - "Summary": "Sammendrag", - "Delete cell": "Slett celle", - "Insert cell after": "Sett inn celle etter", - "Insert cell before": "Sett inn celle foran", - "Merge cells": "SlÃ¥ sammen celler", - "Cell properties": "Egenskaper for celle", - "Split cell": "Del celle", - "Delete column": "Slett kolonne", - "Insert column after": "Skyt inn kolonne etter", - "Insert column before": "Skyt inn kolonne før", - "Split column": "Del kolonne", - "Delete row": "Slett rad", - "Insert row before": "Skyt inn rad foran", - "Insert row after": "Skyt inn rad etter", - "Row properties": "Egenskaper for rad", - "Split row": "Del rad", - "Table properties": "Tabellegenskaper", - "Table Properties": "Tabellegenskaper", - "Text align": "Juster tekst", - "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", - "Top": "Overkant", - "Unset color": "Ikke-bestemt farge", - "Vertical align": "Vertikal justering", - "Width": "Bredde", - "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea nekter Ã¥ slette siste cellen i tabellen.", - "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea nekter Ã¥ slette siste kolonnen i tabellen.", - "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea nekter Ã¥ slette siste raden i tabellen.", - "percent": "prosent", - "pixels": "billedpunkter" +// I18N constants +// LANG: "nb", ENCODING: UTF-8 +// Author: Mihai Bazon, +// translated into Norwegian: ses@online.no 11.11.03 +{ + "Align": "Juster", + "All four sides": "Alle fire sider", + "Background": "Bakgrund", + "Baseline": "Grunnlinje", + "Border": "Kantlinje", + "Borders": "Kantlinjer", + "Bottom": "Bunn", + "Style [CSS]": "Stil [CSS]", + "Caption": "Overskrift", + "Cell Properties": "Celleegenskaper", + "Center": "Sentrer", + "Char": "Tegn", + "Collapsed borders": "Fjern kantlinjer", + "Color": "Farge", + "Description": "Beskrivelse", + "FG Color": "FG farge", + "Float": "Flytende", + "Frames": "rammer", + "Height": "Høyde", + "How many columns would you like to merge?": "Hvor mange kolonner vil du slÃ¥ sammen?", + "How many rows would you like to merge?": "Hvor mange rader vil du slÃ¥ sammen?", + "Image URL": "Bildets URL", + "Justify": "Juster", + "Layout": "Layout", + "Left": "Venstre", + "Margin": "Marg", + "Middle": "Midten", + "No rules": "Ingen linjal", + "No sides": "Ingen sider", + "None": "Ingen", + "Padding": "Luft", + "Please click into some cell": "Klikk i en eller annen celle", + "Right": "Høyre", + "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", + "Rules": "Linjer", + "Spacing and padding": "Luft", + "Spacing": "Luft", + "Summary": "Sammendrag", + "Delete cell": "Slett celle", + "Insert cell after": "Sett inn celle etter", + "Insert cell before": "Sett inn celle foran", + "Merge cells": "SlÃ¥ sammen celler", + "Cell properties": "Egenskaper for celle", + "Split cell": "Del celle", + "Delete column": "Slett kolonne", + "Insert column after": "Skyt inn kolonne etter", + "Insert column before": "Skyt inn kolonne før", + "Split column": "Del kolonne", + "Delete row": "Slett rad", + "Insert row before": "Skyt inn rad foran", + "Insert row after": "Skyt inn rad etter", + "Row properties": "Egenskaper for rad", + "Split row": "Del rad", + "Table properties": "Tabellegenskaper", + "Table Properties": "Tabellegenskaper", + "Text align": "Juster tekst", + "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", + "Top": "Overkant", + "Unset color": "Ikke-bestemt farge", + "Vertical align": "Vertikal justering", + "Width": "Bredde", + "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea nekter Ã¥ slette siste cellen i tabellen.", + "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea nekter Ã¥ slette siste kolonnen i tabellen.", + "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea nekter Ã¥ slette siste raden i tabellen.", + "percent": "prosent", + "pixels": "billedpunkter" }; \ No newline at end of file diff --git a/xinha/plugins/TableOperations/lang/nl.js b/xinha/plugins/TableOperations/lang/nl.js index f622d11..b14d9fa 100644 --- a/xinha/plugins/TableOperations/lang/nl.js +++ b/xinha/plugins/TableOperations/lang/nl.js @@ -1,79 +1,79 @@ -// I18N constants -// LANG: "nl", ENCODING: UTF-8 -// Author: Michel Weegeerink (info@mmc-shop.nl), http://mmc-shop.nl -{ - "Align": "Uitlijning", - "All four sides": "Alle 4 zijden", - "Background": "Achtergrond", - "Baseline": "Basis", - "Border": "Rand", - "Borders": "Randen", - "Bottom": "Onder", - "Style [CSS]": "CSS Style", - "Caption": "Opmerking", - "Cell Properties": "Celeigenschappen", - "Center": "Centreren", - "Char": "Karakter", - "Collapsed borders": "Geen randen", - "Color": "Kleur", - "Description": "Omschrijving", - "FG Color": "Voorgrond", - "Float": "Zwevend", - "Frames": "Frames", - "Height": "Hoogte", - "How many columns would you like to merge?": "Hoeveel kolommen wilt u samenvoegen?", - "How many rows would you like to merge?": "Hoeveel rijen wilt u samenvoegen?", - "Image URL": "Afbeelding URL", - "Justify": "Uitvullen", - "Layout": "Opmaak", - "Left": "Links", - "Margin": "Marge", - "Middle": "Midden", - "No rules": "Geen regels", - "No sides": "Geen zijlijnen", - "None": "Geen", - "Padding": "Celmarge", - "Please click into some cell": "Klik in een cel a.u.b.", - "Right": "Rechts", - "Row Properties": "Rijeigenschappen", - "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", - "Rules": "Regels", - "Spacing and padding": "Celmarge en afstand tussen cellen", - "Spacing": "marge", - "Summary": "Overzicht", - "Delete cell": "Cel verwijderen", - "Insert cell after": "Voeg cel toe achter", - "Insert cell before": "Voeg cel toe voor", - "Merge cells": "Cellen samenvoegen", - "Cell properties": "Celeigenschappen", - "Split cell": "Cel splitsen", - "Delete column": "Kolom verwijderen", - "Insert column after": "Kolom invoegen achter", - "Insert column before": "Kolom invoegen voor", - "Split column": "Kolom splitsen", - "Delete row": "Rij verwijderen", - "Insert row before": "Rij invoegen boven", - "Insert row after": "Rij invoegen onder", - "Row properties": "Rij eigenschappen", - "Split row": "Rij splitsen", - "Table properties": "Tabel eigenschappen", - "Table Properties": "Tabel eigenschappen", - "Text align": "Text uitlijning", - "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", - "Top": "Boven", - "Unset color": "Wis kleur", - "Vertical align": "Vertikale uitlijning", - "Width": "Breedte", - "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea kan de laatste cel in deze tabel niet verwijderen.", - "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea kan de laatste kolom in deze tabel niet verwijderen.", - "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea kan de laatste rij in deze tabel niet verwijderen.", - "percent": "procent", - "pixels": "pixels" -}; +// I18N constants +// LANG: "nl", ENCODING: UTF-8 +// Author: Michel Weegeerink (info@mmc-shop.nl), http://mmc-shop.nl +{ + "Align": "Uitlijning", + "All four sides": "Alle 4 zijden", + "Background": "Achtergrond", + "Baseline": "Basis", + "Border": "Rand", + "Borders": "Randen", + "Bottom": "Onder", + "Style [CSS]": "CSS Style", + "Caption": "Opmerking", + "Cell Properties": "Celeigenschappen", + "Center": "Centreren", + "Char": "Karakter", + "Collapsed borders": "Geen randen", + "Color": "Kleur", + "Description": "Omschrijving", + "FG Color": "Voorgrond", + "Float": "Zwevend", + "Frames": "Frames", + "Height": "Hoogte", + "How many columns would you like to merge?": "Hoeveel kolommen wilt u samenvoegen?", + "How many rows would you like to merge?": "Hoeveel rijen wilt u samenvoegen?", + "Image URL": "Afbeelding URL", + "Justify": "Uitvullen", + "Layout": "Opmaak", + "Left": "Links", + "Margin": "Marge", + "Middle": "Midden", + "No rules": "Geen regels", + "No sides": "Geen zijlijnen", + "None": "Geen", + "Padding": "Celmarge", + "Please click into some cell": "Klik in een cel a.u.b.", + "Right": "Rechts", + "Row Properties": "Rijeigenschappen", + "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", + "Rules": "Regels", + "Spacing and padding": "Celmarge en afstand tussen cellen", + "Spacing": "marge", + "Summary": "Overzicht", + "Delete cell": "Cel verwijderen", + "Insert cell after": "Voeg cel toe achter", + "Insert cell before": "Voeg cel toe voor", + "Merge cells": "Cellen samenvoegen", + "Cell properties": "Celeigenschappen", + "Split cell": "Cel splitsen", + "Delete column": "Kolom verwijderen", + "Insert column after": "Kolom invoegen achter", + "Insert column before": "Kolom invoegen voor", + "Split column": "Kolom splitsen", + "Delete row": "Rij verwijderen", + "Insert row before": "Rij invoegen boven", + "Insert row after": "Rij invoegen onder", + "Row properties": "Rij eigenschappen", + "Split row": "Rij splitsen", + "Table properties": "Tabel eigenschappen", + "Table Properties": "Tabel eigenschappen", + "Text align": "Text uitlijning", + "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", + "Top": "Boven", + "Unset color": "Wis kleur", + "Vertical align": "Vertikale uitlijning", + "Width": "Breedte", + "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea kan de laatste cel in deze tabel niet verwijderen.", + "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea kan de laatste kolom in deze tabel niet verwijderen.", + "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea kan de laatste rij in deze tabel niet verwijderen.", + "percent": "procent", + "pixels": "pixels" +}; diff --git a/xinha/plugins/TableOperations/lang/ro.js b/xinha/plugins/TableOperations/lang/ro.js index 0630c9e..f896967 100644 --- a/xinha/plugins/TableOperations/lang/ro.js +++ b/xinha/plugins/TableOperations/lang/ro.js @@ -1,79 +1,79 @@ -// I18N constants -// LANG: "ro", ENCODING: UTF-8 -// Author: Mihai Bazon, http://dynarch.com/mishoo -{ - "Align": "Aliniere", - "All four sides": "Toate părÅ£ile", - "Background": "Fundal", - "Baseline": "Baseline", - "Border": "Chenar", - "Borders": "Chenare", - "Bottom": "Jos", - "Style [CSS]": "Stil [CSS]", - "Caption": "Titlu de tabel", - "Cell Properties": "Proprietăţile celulei", - "Center": "Centru", - "Char": "Caracter", - "Collapsed borders": "Chenare asimilate", - "Color": "Culoare", - "Description": "Descriere", - "FG Color": "Culoare text", - "Float": "PoziÅ£ie", - "Frames": "Chenare", - "Height": "ÃŽnălÅ£imea", - "How many columns would you like to merge?": "Câte coloane vrei să uneÅŸti?", - "How many rows would you like to merge?": "Câte linii vrei să uneÅŸti?", - "Image URL": "URL-ul imaginii", - "Justify": "Justify", - "Layout": "Aranjament", - "Left": "Stânga", - "Margin": "Margine", - "Middle": "Mijloc", - "No rules": "Fără linii", - "No sides": "Fără părÅ£i", - "None": "Nimic", - "Padding": "SpaÅ£iere", - "Please click into some cell": "Vă rog să daÅ£i click într-o celulă", - "Right": "Dreapta", - "Row Properties": "Proprietăţile liniei", - "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", - "Rules": "Linii", - "Spacing and padding": "SpaÅ£ierea", - "Spacing": "ÃŽntre celule", - "Summary": "Sumar", - "Delete cell": "Åžterge celula", - "Insert cell after": "Inserează o celulă la dreapta", - "Insert cell before": "Inserează o celulă la stânga", - "Merge cells": "UneÅŸte celulele", - "Cell properties": "Proprietăţile celulei", - "Split cell": "ÃŽmparte celula", - "Delete column": "Åžterge coloana", - "Insert column after": "Inserează o coloană la dreapta", - "Insert column before": "Inserează o coloană la stânga", - "Split column": "ÃŽmparte coloana", - "Delete row": "Åžterge rândul", - "Insert row before": "Inserează un rând înainte", - "Insert row after": "Inserează un rând după", - "Row properties": "Proprietăţile rândului", - "Split row": "ÃŽmparte rândul", - "Table properties": "Proprietăţile tabelei", - "Table Properties": "Proprietăţile tabelei", - "Text align": "Aliniere", - "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", - "Top": "Sus", - "Unset color": "Dezactivează culoarea", - "Vertical align": "Aliniere pe verticală", - "Width": "Lăţime", - "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea refuză cu laÅŸitate să ÅŸteargă ultima celulă din rând.", - "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea refuză cu laÅŸitate să ÅŸteargă ultima coloamă din tabela.", - "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea refuză cu laÅŸitate să ÅŸteargă ultimul rând din tabela.", - "percent": "procente", - "pixels": "pixeli" -}; +// I18N constants +// LANG: "ro", ENCODING: UTF-8 +// Author: Mihai Bazon, http://dynarch.com/mishoo +{ + "Align": "Aliniere", + "All four sides": "Toate părÅ£ile", + "Background": "Fundal", + "Baseline": "Baseline", + "Border": "Chenar", + "Borders": "Chenare", + "Bottom": "Jos", + "Style [CSS]": "Stil [CSS]", + "Caption": "Titlu de tabel", + "Cell Properties": "Proprietăţile celulei", + "Center": "Centru", + "Char": "Caracter", + "Collapsed borders": "Chenare asimilate", + "Color": "Culoare", + "Description": "Descriere", + "FG Color": "Culoare text", + "Float": "PoziÅ£ie", + "Frames": "Chenare", + "Height": "ÃŽnălÅ£imea", + "How many columns would you like to merge?": "Câte coloane vrei să uneÅŸti?", + "How many rows would you like to merge?": "Câte linii vrei să uneÅŸti?", + "Image URL": "URL-ul imaginii", + "Justify": "Justify", + "Layout": "Aranjament", + "Left": "Stânga", + "Margin": "Margine", + "Middle": "Mijloc", + "No rules": "Fără linii", + "No sides": "Fără părÅ£i", + "None": "Nimic", + "Padding": "SpaÅ£iere", + "Please click into some cell": "Vă rog să daÅ£i click într-o celulă", + "Right": "Dreapta", + "Row Properties": "Proprietăţile liniei", + "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", + "Rules": "Linii", + "Spacing and padding": "SpaÅ£ierea", + "Spacing": "ÃŽntre celule", + "Summary": "Sumar", + "Delete cell": "Åžterge celula", + "Insert cell after": "Inserează o celulă la dreapta", + "Insert cell before": "Inserează o celulă la stânga", + "Merge cells": "UneÅŸte celulele", + "Cell properties": "Proprietăţile celulei", + "Split cell": "ÃŽmparte celula", + "Delete column": "Åžterge coloana", + "Insert column after": "Inserează o coloană la dreapta", + "Insert column before": "Inserează o coloană la stânga", + "Split column": "ÃŽmparte coloana", + "Delete row": "Åžterge rândul", + "Insert row before": "Inserează un rând înainte", + "Insert row after": "Inserează un rând după", + "Row properties": "Proprietăţile rândului", + "Split row": "ÃŽmparte rândul", + "Table properties": "Proprietăţile tabelei", + "Table Properties": "Proprietăţile tabelei", + "Text align": "Aliniere", + "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", + "Top": "Sus", + "Unset color": "Dezactivează culoarea", + "Vertical align": "Aliniere pe verticală", + "Width": "Lăţime", + "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea refuză cu laÅŸitate să ÅŸteargă ultima celulă din rând.", + "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea refuză cu laÅŸitate să ÅŸteargă ultima coloamă din tabela.", + "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea refuză cu laÅŸitate să ÅŸteargă ultimul rând din tabela.", + "percent": "procente", + "pixels": "pixeli" +}; diff --git a/xinha/plugins/TableOperations/lang/ru.js b/xinha/plugins/TableOperations/lang/ru.js new file mode 100644 index 0000000..790aa2a --- /dev/null +++ b/xinha/plugins/TableOperations/lang/ru.js @@ -0,0 +1,79 @@ +// I18N constants +// LANG: "ru", ENCODING: UTF-8 +// Author: Andrei Blagorazumov, a@fnr.ru +{ + "Align": "Выравнивание", + "All four sides": "Ð’Ñе 4 Ñтороны", + "Background": "Фон", + "Baseline": "Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ", + "Border": "Рамка", + "Borders": "Рамки", + "Bottom": "Ðиз", + "Style [CSS]": "Стиль [CSS]", + "Caption": "Заголовок", + "Cell Properties": "СвойÑтва Ñчеек", + "Center": "Центр", + "Char": "Символ", + "Collapsed borders": "ÐакладывающиеÑÑ Ñ€Ð°Ð¼ÐºÐ¸", + "Color": "Цвет", + "Description": "ОпиÑание", + "FG Color": "Цвет переднего плана", + "Float": "Обтекание", + "Frames": "Фреймы", + "Height": "Ð’Ñ‹Ñота", + "How many columns would you like to merge?": "Сколько Ñтолбцов вы хотите объединить?", + "How many rows would you like to merge?": "Сколько Ñтрок вы хотите объединить?", + "Image URL": "URL картинки", + "Justify": "По правому краю", + "Layout": "РаÑкладка", + "Left": "Лево", + "Margin": "ОтÑтуп", + "Middle": "Середина", + "No rules": "Ðет линейки", + "No sides": "Ðет Ñторон", + "None": "Ðичего", + "Padding": "ПолÑ", + "Please click into some cell": "ПожалуйÑта щелкните в некоторые Ñчейки", + "Right": "Право", + "Row Properties": "СвойÑтва Ñтрок", + "Rules will appear between all rows and columns": "Линейки поÑвÑÑ‚ÑÑ Ð¼ÐµÐ¶Ð´Ñƒ вÑеми Ñтроками и Ñтолбцами", + "Rules will appear between columns only": "Линейки поÑвÑÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ между Ñтолбцами", + "Rules will appear between rows only": "Линейки поÑвÑÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ между Ñтроками", + "Rules": "Линейки", + "Spacing and padding": "ÐŸÐ¾Ð»Ñ Ð¸ отÑтупы", + "Spacing": "ОтÑтупы", + "Summary": "Сводка", + "Delete cell": "Удалить Ñчейку", + "Insert cell after": "Ð’Ñтавить Ñчейку поÑле", + "Insert cell before": "Ð’Ñтавить Ñчейку до", + "Merge cells": "Объединить Ñчейки", + "Cell properties": "СвойÑтва Ñчеек", + "Split cell": "Разделить Ñчейку", + "Delete column": "Удалить Ñтолбец", + "Insert column after": "Ð’Ñтавить Ñтолбец поÑле", + "Insert column before": "Ð’Ñтавить Ñтолбец до", + "Split column": "Разделить Ñтолбец", + "Delete row": "Удалить Ñтроку", + "Insert row before": "Ð’Ñтавить Ñтроку до", + "Insert row after": "Ð’Ñтавить Ñтроку поÑле", + "Row properties": "СвойÑтва Ñтроки", + "Split row": "Разделить Ñтроку", + "Table properties": "СвойÑтва таблиц", + "Table Properties": "СвойÑтва таблиц", + "Text align": "Выравнивание теÑта", + "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": "Только верхний край", + "Top": "Верх", + "Unset color": "Отменить цвет", + "Vertical align": "Вертикальное выравнивание", + "Width": "Ширина", + "HTMLArea cowardly refuses to delete the last cell in row.": "HTMLArea отказалаÑÑŒ удалÑть поÑледнюю Ñчейку в Ñтроке.", + "HTMLArea cowardly refuses to delete the last column in table.": "HTMLArea отказалаÑÑŒ удалÑть поÑледний Ñтолбец в таблице.", + "HTMLArea cowardly refuses to delete the last row in table.": "HTMLArea отказалаÑÑŒ удалÑть поÑледнюю Ñтроку в таблице.", + "percent": "процентов", + "pixels": "пикÑелей" +}; \ No newline at end of file diff --git a/xinha/plugins/TableOperations/lang/sv.js b/xinha/plugins/TableOperations/lang/sv.js new file mode 100644 index 0000000..f3e1189 --- /dev/null +++ b/xinha/plugins/TableOperations/lang/sv.js @@ -0,0 +1,79 @@ +// I18N constants +// LANG: "sv" (Swedish), ENCODING: UTF-8 +// translated into Swedish: Erik Dalén, +{ + "Align": "Justera", + "All four sides": "Alla fyra sidor", + "Background": "Bakgrund", + "Baseline": "Baslinje", + "Border": "Kantlinje", + "Borders": "Kantlinjer", + "Bottom": "Botten", + "Style [CSS]": "Stil [CSS]", + "Caption": "Överskrift", + "Cell Properties": "Cellegenskaper", + "Center": "Centrera", + "Char": "Tecken", + "Collapsed borders": "Osynliga kantlinjer", + "Color": "Färg", + "Description": "Beskrivning", + "FG Color": "Förgrundsfärg", + "Float": "Flytande", + "Frames": "ramar", + "Height": "Höjd", + "How many columns would you like to merge?": "Hur mÃ¥nga kolumner vill du slÃ¥ samman?", + "How many rows would you like to merge?": "Hur mÃ¥nga rader vill du slÃ¥ samman?", + "Image URL": "Bildens URL", + "Justify": "Justera", + "Layout": "Layout", + "Left": "Venster", + "Margin": "Marginal", + "Middle": "Mitten", + "No rules": "Ingen linjal", + "No sides": "Inga sidor", + "None": "Ingen", + "Padding": "Luft", + "Please click into some cell": "Klicka i valfri cell", + "Right": "Höger", + "Row Properties": "Egenskaper for rad", + "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", + "Rules": "Linjaler", + "Spacing and padding": "Mellanrum och luft", + "Spacing": "Mellanrum", + "Summary": "Sammandrag", + "Delete cell": "Radera cell", + "Insert cell after": "Infoga cell efter", + "Insert cell before": "Infoga cell före", + "Merge cells": "SlÃ¥ samman celler", + "Cell properties": "Egenskaper for cell", + "Split cell": "Dela cell", + "Delete column": "Radera kolumn", + "Insert column after": "Infoga kolumn efter", + "Insert column before": "Infoga kolumn före", + "Split column": "Dela kolumn", + "Delete row": "Radera rad", + "Insert row before": "Infoga rad före", + "Insert row after": "Infoga rad efter", + "Row properties": "Egenskaper för rad", + "Split row": "Dela rad", + "Table properties": "Tabellegenskaper", + "Table Properties": "Tabellegenskaper", + "Text align": "Justera text", + "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", + "Top": "Överkant", + "Unset color": "Obestämd färg", + "Vertical align": "Vertikal justering", + "Width": "Bredd", + "HTMLArea cowardly refuses to delete the last cell in row.": "Xinha nekar att radera sista cellen i tabellen.", + "HTMLArea cowardly refuses to delete the last column in table.": "Xinha nekar att radera sista kolumnen i tabellen.", + "HTMLArea cowardly refuses to delete the last row in table.": "Xinha nekar att radera sista raden i tabellen.", + "percent": "procent", + "pixels": "bildpunkter" +}; diff --git a/xinha/plugins/TableOperations/popups/merge_cells.html b/xinha/plugins/TableOperations/popups/merge_cells.html new file mode 100644 index 0000000..03bb2a8 --- /dev/null +++ b/xinha/plugins/TableOperations/popups/merge_cells.html @@ -0,0 +1,65 @@ + + + + + Merge Cells + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    +
    Merge Cells
    +
    + Merge current cell with: +
    Cells to the right, and
    Cells down
    +
    + + +
    +
    + + + diff --git a/xinha/plugins/TableOperations/table-operations.js b/xinha/plugins/TableOperations/table-operations.js index 0cb4693..aa7738c 100644 --- a/xinha/plugins/TableOperations/table-operations.js +++ b/xinha/plugins/TableOperations/table-operations.js @@ -1,1180 +1,893 @@ -// 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